• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

C++ erstes "Programm"

Hallo erstmal ;)

Also ich hab vor 2 Tagen mit C++ begonnen, hab nun ein bisschen was an Wissen gesammelt, und wollt mich mal daran machen ein klitzekleines Programm zu schreiben.
Ich hab fürs erste mal nen "Taschenrechner" mit den 4 Grundrechnungsarten zusammengestöpselt und wollte das mal "bewerten" und vor allem kritisiern lassn, ausserdem wollte ich fragen mit welchem Befehl ich eine Schleife einbaun kann? (also so das sich die Konsole nach Fertigstellung der Rechnung nicht schließt sondern wieder von vorn beginnt)..

Hier also der Sourcecode:

{
int a,b,c,d,e,f,g,h,i;
e=1;
f=2;
g=3;
h=4;
i=0;

cout << "Taschenrechner by *****!" << endl;
cout << "Bitte geben sie die Art der Rechnung an." << endl;
cout << "Addition=1 , Subtraktion=2 , Multiplikation=3 , Division=4." << endl;
cin >> d;

if(d==e)
{
cout << "Additionsrechner aktiviert" << endl;
cout << "Geben sie den Summanden(1) ein." << endl;
cin >> a;
cout << "Geben sie den Summanden(2) ein." << endl;
cin >> b;
if(b>i)
{
c= (a) + (b);
cout << "Das Ergebnis lautet " << (c) << ".\a" << endl;
}
else
{ cout << "Warum denn mit 0 addieren?" << endl; }
}

if(d==f)
{
cout << "Subtraktionsrechner aktiviert" << endl;
cout << "Geben sie den Minuenden ein." << endl;
cin >> a;
cout << "Geben sie den Subtrahenden ein." << endl;
cin >> b;
if(b>i)
{ c= (a) - (b);
cout << "Das Ergebnis lautet " << (c) << ".\a" << endl;
}
else
{ cout << "Warum denn mit 0 subtrahieren?" << endl;
}
}

if(d==g)
{
cout << "Multiplikationsrechner aktiviert" << endl;
cout << "Geben sie den Faktor(1) ein." << endl;
cin >> a;
cout << "Geben sie den Faktor(2) ein." << endl;
cin >> b;
if(b>i)
{ c= (a) * (b);
cout << "Das Ergebnis lautet " << (c) << ".\a" << endl;
}
else
{ cout << "Warum denn mit 0 multiplizieren?" << endl; }
}


if(d==h)
{

cout << "Divionsrechner aktiviert" << endl;
cout << "Geben sie den Dividenden ein." << endl;
cin >> a;
cout << "Geben sie den Divisor ein." << endl;
cin >> b;
if(b>i)
{ c= (a) / (b);
cout << "Das Ergebnis lautet " << (c) << ".\a" << endl;
}
else
{ cout << "Warum denn mit 0 dividieren?" << endl; }
}
if (d>h)
{ cout << "Rechnungsart nicht erkannt" << endl;
}


cout << "Vielen Dank für die Benutzung!" << endl;

}
 
Moin Mindbreak,

ich hab es jetzt nur mal ganz kurz angeschaut und finde das für zwei Tage sehr beachtlich wenn Du vorher noch nie Programmiert hast. Erstens Du verwendest I/O Streams bindest aber die Bibliothek nicht ein: #include <iostream> gehört in den Deklarationsteil.
Zweitens verwendest Du cin und cout ohne Angabe des Namensraumes: std::cin std::cout wäre richtig. Dein Weg mag in den meisten Fällen funktionieren, ist aber nicht eindeutig.
Drittens hast Du deinen Hauptfunktion nicht mit main angegeben.
Das nächste ist mehr persönlicher Geschmack: Verwende einen Editor der automatisch einrückt und als nächstes setze die öffnende geschweifte Klammer nach einer Fallentscheidung (if else etc.) auf die gleiche Zeile und die Anweisung ein darunter oder die Klammer auf eine eigene Zeile ohne die Anweisung dahinter.

Deine Schleife baust Du über ein do/while Konstrukt.
Code:
#include <iostream>
char Start;

main() {
do {
    das was Wiederholt werden soll;

    std::cout<<"nochmal? bitte j drücken\n";
    std::cin>>Start;
  }
  while(Start=='j');
  exit(0);
  return(0);
}

Das ist jetzt nur ein grober Überblick wie man es machen kann. Selbstverständlich hab ich einige Sachen weggelassen.
 
Danke für die Antwort, werd ich gleich auch mal alles ausprobiern ;)
Das mitn Editor, kannst du mir da nen bestimmten anraten?
und wegen "std", das hab ich nicht mit reinkopiert, ich verwende "using namespace std" , wodurch das ganze dann unnötig wird ;).
 
Moin Mindbreak,

das mit 'using...' konnte ich nicht riechen. OK, der Weg geht auch wunderbar.
Als zusätzlicher Tip: Verwende die code- statt der quotefunktion hier im Forum, dann bleiben auch Leerzeichen erhalten (z.B: die von Einrückungen).

Nun zum Thema Editor: Das ist immer ein gewisser Glaubenskrieg, einige mögen vi andere den emacs und wieder andere nehmen kwrite oder kedit. Ich persönlich arbeite am liebsten mit emacs. Der ist aber am Anfang ein bißchen gewöhnungsbedürftig, hat aber unheimlich viele mächtige Funktionen, weswegen ich ihn auch für viele andere Dinge hernehme.
 
Ok THX ;)
also 1.) falls es sich so gelesen hat, das mit using namespace std, sollte nicht anstoßend klingen ^^.
2.) Irgendwie ist mir emacs doch ein bisschen zu kompliziert, ausserdem hab ich da kein compiler gefunden, hat der einen integriert?
3.) Also ich lern ja C++ mit nem Ebook (eig. logisch, kann mir die befhle ja net aus den fingern saugen ^^), und bis zu einem gewissen Punkt war das Buch auch sehr gut bis ich hängen geblieben bin weil da alles total scheiße beschrieben war, und so wies aussieht kann ich dieses "kapitel" nich einfach auslassen weil ich es offenbar für alles spätere im buch brauche (der "do" befehl z.B. is dadrin total kacke bschrieben) und nun wollt ich fragen ob du mir in der Richtung auch weiterhelfen kannst, kennst du vl. ein gutes buch für c++ anfänger?
Brauch nur den Titel und dann guck ich ob ichs mir organisieren kann.

Thx Mindbreak
 
naja im Prinzip gibts nur ein Buch das Du brauchst :) Stroustrup, Bjarne "Die C++ programmiersprace" ..... das ist die Bibel :) und wenn man dann noch exegese Betreiben will, kommen die Effective C++ und more effective C++ von Scott Meyer in betracht :)

ein guter Onlinekurs: http://www.volkard.de/vcppkold/inhalt.html


jetzt zu dem Programm: ich find das erst mal nicht schlecht! ein logischer Fehler ist mir schon aufgefallen, Du vergleichst immer mit if(b>i) wobei I==0 ist, d.h. 1. Operationen mit negativen Operanden sind nicht zugelassen und 2. eine Operation mit 0 funktioniert dennoch ;) insbesondere bei der Division ist das ungut. Hier solltest Du Dich noch mal mehr mit den Vergleichen beschäftigen, ein <= wäre das mindeste.

und dann, gewöhn Dir richtige Variablenbezeichner an, also operand1 und operand2 oder so, a,b,c,d,... ist äußerst unglücklich ;) hier mal ein Alternativbeispiel:

Code:
#include <iostream>

using namespace std;

int main() {
	int operand1, operand2;
	char operation;
	double result;
	
	cout << "Operation: OPERAND1 OPERATION OPERAND2" << endl;
	cout << "--> ";
	cin >> operand1 >> operation >> operand2;
	
	if ('+' == operation) {
		cout << "Addition" << endl;
		result = operand1 + operand2;
	} else if ('-' == operation) {
		cout << "Subtraktion" << endl;
		result = operand1 - operand2;
	} else if ('*' == operation) {
		cout << "Multiplikation" << endl;
		result = operand1 * operand2;
	} else if ('/' == operation) {
		cout << "Division" << endl;
		result = (double)(operand1) / (double)(operand2);
	} else {
		cout << "keine passende Operation" << endl;
		return 1;
	}

	cout << operand1 << " " << operation << " " << operand2 << " = " << result << endl; 
	return 0;
}
 
Eine sehr gute Seite zum Thema C++ ist http://www.c-plusplus.de/cms/ vor allen Dingen das Forum ist eine unerschöpfliche Quelle des Wissens, Du solltest dich in erster Linie in deren FAQs umschauen. Einige von den Tutorials sind auch nett gemacht, vor allen Dingen sind die von verschiiedenen Leuten geschrieben. Bedeutet für dich das Du etwas in einem Anderen nachlesen kannst wenn Du es beim Ersten nicht verstanden hast.
Als Buch nicht zu teuer und ein schönes Nachschlagewerk ist 'C++ Ent-Packt', man sollte aber am Anfang ziemlich aufpassen, da dort mehr C als C++ gemacht wird, man merkt sehr deutlich wie der Author an C++ gekommen ist.
 
Hi Mindbreak,

also ich würde dir kate als editor empfehlen und dann in der eingebauten konsole von kate (unten) mit dem gcc kompilieren
 
mahlzeit mindbreak,
mahlzeit teXpert, interessante variante deine lösung.
eine selection würde das alles aber was einfacher machen...
also:
#include <whatever>
char cOperatorin //'operator' als bezeichnung funzt nich, gibbet schon in c++...
int iWert, iErgebnis //der zu berechnende wert

int main(int argc, int...whatever) {
hier sollte die iErgebnis-Schleife anfangen
blablabla, halt abfrage vom operator und dem wert...
switch(cOperatorin) {
case '+':
iErgebnis+=iWert;
break;
case '-':
iErgebnis-=iWert;
break;
...
default:
cout << "ich kann mit deinem befehl nix anfangen..." << '\n';
irgendeinmoduldasssdeinefehlererklaert();
bei division sollteste aufpassen, dass iWert !0 ist. haha.
aso: }; // schleife aus.

was noch...

probiers aus. und wenne das ding durch hast, programmiers mit römischen zahlen. macht keinen spaß, du lernst aber echt ne menge dazu.

und reis.
 
Oben