PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mein erstes C++ Programm (Taschenrechner)



V4|n4r
15.08.2007, 19:25
Hallo liebe F-H Community,
habe Heute mein erstes Programm mit C++ geschrieben.
Möchte eure Beurteilung / Meinung hören.
Konstruktive Kritik ist sicherlich erlaubt ^^...
Den Quellcode habe ich mit DEV C++ compiled

Zu erst der Quellcode (GNU GPL Lizenz ;) )


/****************************
* Copyright by V4|n4r *
* Lizenz : GNU GPL *
****************************/

#include <iostream>

using namespace std;

int rechnung();

int main(void)
{
Anfang:
cout<< "Willkommen beim Testtaschenrechner,\n";
rechnung();
goto Anfang;
return 0;
}

int rechnung()
{

int Zahl1;
int Zahl2;
char Operator;
int Tun;
cout<< "bitte tippen Sie Ihre erste Zahl ein ... \n";
cin>> Zahl1;
cout<< "Nun die zweite Zahl ...\n";
cin>> Zahl2;
cout<< "Wähle jetzt bitte die Rechenoperation aus:\n";
cout<< " +\n -\n *\n :\n";
cin>> Operator;

switch(Operator)
{
case '+':
cout<< "\nDas Ergebnis der Plusrechnung: ";
cout<< Zahl1 <<" + "<< Zahl2 <<" = "<< Zahl1 + Zahl2<<"\n";
cout<< "Was möchten Sie jetzt tun?\n 1 = Weiter...\n 2, 3, 4, ect = Beenden\n";
cin>> Tun;
break;
case '-':
cout<< "\nDas Ergebnis der Minusrechnung: ";
cout<< Zahl1 <<" - "<< Zahl2 <<" = "<< Zahl1 - Zahl2<<"\n";
cout<< "Was möchten Sie jetzt tun?\n 1 = Weiter...\n 2, 3, 4, ect = Beenden\n";
cin>> Tun;
break;
case '*':
cout<< "\nDas Ergebnis der Malrechnung: ";
cout<< Zahl1 <<" * "<< Zahl2 <<" = "<< Zahl1 * Zahl2<<"\n";
cout<< "Was möchten Sie jetzt tun?\n 1 = Weiter...\n 2, 3, 4, ect = Beenden\n";
cin>> Tun;
break;
case ':':
cout<< "\nDas Ergebnis der Geteiltrechnung: ";
cout<< Zahl1 <<" : "<< Zahl2 <<" = "<< Zahl1 / Zahl2<<"\n";
cout<< "Was möchten Sie jetzt tun?\n 1 = Weiter...\n 2, 3, 4, ect = Beenden\n";
cin>> Tun;
break;
case '/':
cout<< "\nDas Ergebnis der Geteiltrechnung: ";
cout<< Zahl1 <<" / "<< Zahl2 <<" = "<< Zahl1 / Zahl2<<"\n";
cout<< "Was möchten Sie jetzt tun?\n 1 = Weiter...\n 2, 3, 4, ect = Beenden\n";
cin>> Tun;
break;
default:
cout<<"\nBerechnung nicht möglich.\nGeben sie bitte eine gültige Operation ein\n";
Tun = 1;
break;
};

if (Tun != 1)
{
exit(0);
}

return 0;
}


und das Compilerte Programm :
http://rapidshare.com/files/49187071/Taschenrechner.exe
(nicht gepackt, wie man an der Addy sieht)

Freue mich über jeden Beitrag :)

MfG
V4|n4r

P.S.: Ich hafte ausdrücklich nicht für Rechtschreibfehler ;D

Siken
15.08.2007, 19:30
fürs erste programm schön^^
und vorallem objekt orientiert :P

V4|n4r
15.08.2007, 19:34
Danke, hatte kein anderer Weg vorbeigeführt, da der Quellcode sonst zu groß wär ;D

Ne Frage : sind die Header überflüssig, bzw ein Teil der Header ...
Kommt mir nämlich so vor :?

zao
15.08.2007, 19:40
hi
1.du brauchst nur iostream
2. könntest du eine char anlegen für die operatoren also

char operator;

ein char kann nämlich auch ein + fassen das heisst man muss nicht mehr 1 für + schreiben oder 2 für -
ansonsten ganz gut für erste

mfg

zao

V4|n4r
15.08.2007, 20:40
hi
1.du brauchst nur iostream
2. könntest du eine char anlegen für die operatoren also

char operator;

ein char kann nämlich auch ein + fassen das heisst man muss nicht mehr 1 für + schreiben oder 2 für -
ansonsten ganz gut für erste

mfg

zao

Werd ich machen ^^
Das mit dem char wird wohl nichts, der Compiler spukt fehler meldungen beim vergleich ob "+" eingetippt wurde...

Nemo.A
15.08.2007, 21:40
Obwohl ich von C++ wenig halte, ist es schön für das erste Programm.

Auch wenn das mit der GPL Lizenz nur ein Witz war, solltest du wissen dass es in diesem Fall ungültig wäre. Da fehlt mindestens die Lizenz im Header Bereich des Sources :P

Außerdem könntest du noch kurz was einbauen, so als Programmierübung gedacht:
Man soll per Argument (also, dass was man dem Programm aufruf hinten dranhängen kann, in der cmd z.B.) etwas berechnen lassen können. Das ist besser als später im Programm alles tippen zu müssen.
Dann wäre ein Aufruf des Programmes z.B. so:
"programm.exe argument1 argument2 argument3"
ein Beispiel Aufruf wäre so:
"programm.exe plus 1 2" und es würde dann sowas ausgeben "Das Ergebnis ist: 3"

Ein paar Tipps wie du es realisieren könntest: argc, argv :)
Dein Programm kann aber so noch bleiben, man könnte diese Ursprungsform dann z.B. mit
"programm.exe" starten ... nur wenn ein Argument hinten drangehängt wird, dann wird mein oben erwähntes gestartet.

Kp, ob du Lust drauf hast. Aber wenn ja, dann mal ran an den Speck :P

V4|n4r
15.08.2007, 22:04
Obwohl ich von C++ wenig halte, ist es schön für das erste Programm.

Auch wenn das mit der GPL Lizenz nur ein Witz war, solltest du wissen dass es in diesem Fall ungültig wäre. Da fehlt mindestens die Lizenz im Header Bereich des Sources :P

Außerdem könntest du noch kurz was einbauen, so als Programmierübung gedacht:
Man soll per Argument (also, dass was man dem Programm aufruf hinten dranhängen kann, in der cmd z.B.) etwas berechnen lassen können. Das ist besser als später im Programm alles tippen zu müssen.
Dann wäre ein Aufruf des Programmes z.B. so:
"programm.exe argument1 argument2 argument3"
ein Beispiel Aufruf wäre so:
"programm.exe plus 1 2" und es würde dann sowas ausgeben "Das Ergebnis ist: 3"

Ein paar Tipps wie du es realisieren könntest: argc, argv :)
Dein Programm kann aber so noch bleiben, man könnte diese Ursprungsform dann z.B. mit
"programm.exe" starten ... nur wenn ein Argument hinten drangehängt wird, dann wird mein oben erwähntes gestartet.

Kp, ob du Lust drauf hast. Aber wenn ja, dann mal ran an den Speck :P

Wenn ich soweit bin, werde ich mich da rann machen ^^.

P.S.: Das mit der Lizenz war kein Witz ^^

-[RiDER]-
15.08.2007, 22:49
@V4|n4r: Niemals den gesamten post von deinem vorposter quoten!!! NEVER!!! :evil: :evil: :evil:

Das mit dem char als operator klappt schon. du musst statt
switch(operator)
{
case "+":
...
}einfache anführungszeichen verwenden:
switch(operator)
{
case '+':
...
}Und eigentlich sollte man wegen evtl. Stacküberlauf rekursive Funktionen vermeiden ;) (Funktionen, die sich selbst bzw. gegenseitig aufrufen. verwende in dem fall lieber das allseits verpönte "goto")

Is das echt dein allerersten Programm?

MfG RiDER

V4|n4r
16.08.2007, 11:58
@V4|n4r: Niemals den gesamten post von deinem vorposter quoten!!! NEVER!!! Böse Böse Böse Sry :twisted:

Joa werd ich versuchen, und ja das ist mein erstes Programm mit C++.
Habe aber auch PHP gelernt von daher kenne ich mich "etwas" aus ^^


Updated :P

-[RiDER]-
16.08.2007, 13:00
joa. bei dem goto würde ich die funktion rechnung() garnicht erst wieder verlassen.
int rechnung(void)
{
Anfang:
...
if(tun)
goto Anfang;
else
return 0;
}Auch intressant fände ich eine binäre verschiebung bei multiplikationen mit einer potenz von zwei. geht ca. 300% schneller als eine normale muiltiplikation.

MfG RiDER

V4|n4r
16.08.2007, 13:09
-]Auch intressant fände ich eine binäre verschiebung bei multiplikationen mit einer potenz von zwei. geht ca. 300% schneller als eine normale muiltiplikation.

Ähh, was ? :?

Nemo.A
16.08.2007, 13:10
Hehe,
dafür würde ich noch extra Inline-ASM verwenden. Ist einfacher, und nochmals schneller :P

-[RiDER]-
16.08.2007, 13:29
-]Auch intressant fände ich eine binäre verschiebung bei multiplikationen mit einer potenz von zwei. geht ca. 300% schneller als eine normale muiltiplikation.

Ähh, was ? :?
Hähä!!

int zahl = 5;
zahl = zahl << 2; //Zahl wird mit 4 (2² = 4) multipliziert, ergebnis is 20 So siehts in c++ aus
und so funktionierts:
v v
00000101b = 5 dezimal
00010100b = 20 dezimal
^ ^die binären werte des bytes werden um zwei bits nach links verschoben (betrachte die mit pfeilchen versehenen einsen). die werte, die "rausgeschoben" werden sind halt wech, die stellen, die rechts hinzukommen werden mit nullen gefüllt.
so kann man extrem schnell multiplizieren. mit inline asm gehts dann sogar noch mal schneller ;)

du müsstest übrigens mal noch nen "division by zero"-Schutz enbauen ;)

MfG RiDER

zao
16.08.2007, 13:36
ohje wo das wohl endet, hast du das mit dem char schon hinbekommen?

@-[rider]- du hast post

V4|n4r
16.08.2007, 13:45
ohje wo das wohl endet, hast du das mit dem char schon hinbekommen?


Joa, aber -[RiDER]-'s Theorie oder auch Praxis versteh ich net ;D

zao
16.08.2007, 13:49
mach dir nichts draus, das ist dein erstes prog, das kommt alles mit der zeit, wenn du dahinter bleibst.

mfg

zao