You are not logged in.

  • Login

1

Friday, June 3rd 2011, 8:22pm

C++/Kleiner Taschenrechner in der Konsole

Hii Leute,

ich habe mich dran gegeben einen kleinen Taschenrechner zu coden in C++ 2008
Hier der entsprechende Code meiner Headerdatei
#include<iostream>

using namespace std;


void addieren(){
cout << " Sie haben sich zum addieren entschieden." << endl;

cout << " Zahl 1:" << endl;
double zahl1;
cin >> zahl1;

cout << " Zahl 2:" << endl;
double zahl2;
cin >> zahl2;

double Summe = zahl1+zahl2;
cout << " Ergebniss : " << Summe << endl;

}

void subtrahieren(){
cout << " Sie haben sich zum subtrahieren entschieden." << endl;

cout << " Zahl 1 : "
<< endl;
double subtrahierenzahl1;
cin >> subtrahierenzahl1;

cout << " Zahl 2 : "
<< endl;
double subtrahierenzahl2;
cin >> subtrahierenzahl2;

double Lösung = subtrahierenzahl1+subtrahierenzahl2;
cout << " Ergebniss : "
<< Lösung << endl;
}

int main (){
cout << " Herzlich Willkommen zum Taschenrechner." << endl;
cout << " 1. Addieren " << endl;
cout << " 2. Subtrahieren. " << endl;
cout << " 3. Multiplizieren." << endl;
cout << " 4. Diffidieren." << endl;

int zahlenaddieren;
cin >> zahlenaddieren;

if (zahlenaddieren==1){

addieren();
}

int zahlensubtrahieren;
cin >> zahlensubtrahieren;

if (zahlensubtrahieren==2){
subtrahieren();
}
}

Wie ihr seht bin ich noch nicht ganz fertig, aber es funktioniert soweit auch schon alles, aber wenn wenn ich jetzt zum subtrahieren die Zahl 2 eingeben will muss ich dies 2mal machen ???


Warum ist das so ??
Wie ändere ich den Code das ich nur noch einmal die 2 eingeben muss

mfg
sky-guy

This post has been edited 1 times, last edit by "sky-guy" (Jun 3rd 2011, 8:29pm)


2

Friday, June 3rd 2011, 9:06pm

Also erstmal:
Es ist keine Header-Datei!
Bitte benutze Codetags!

Zu der Lösung:
Vergleiche folgenden Code mit deinem Code:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include<iostream>
 
 using namespace std;
 
 
 void addieren(){
 cout << " Sie haben sich zum Addieren entschieden." << endl;
 
 cout << " Zahl 1: ";
 double summand1;
 cin >> summand1;
 
 cout << endl << " Zahl 2: ";
 double summand2;
 cin >> summand2;
 
 double Summe = summand1+summand2;
 cout << endl << " Ergebnis: " << Summe << endl;
 
 }
 
 void subtrahieren(){
 cout << " Sie haben sich zum Subtrahieren entschieden." << endl;
 
 cout << " Zahl 1 : ";
 double minuend;
 cin >> minuend;
 
 cout << endl << " Zahl 2 : " ;
 double subtrahend;
 cin >> subtrahend;
 
 double Differenz = minuend-subtrahend;
 cout << endl << " Ergebnis : " << Differenz << endl;
 }
 
 int main (){
 cout << " Herzlich Willkommen zum Taschenrechner." << endl;
 cout << " 1. Addieren " << endl;
 cout << " 2. Subtrahieren. " << endl;
 cout << " 3. Multiplizieren." << endl;
 cout << " 4. Diffidieren." << endl;
 
 int Eingabe=0;
 cin >> Eingabe;
 
 if (Eingabe==1){
 
 addieren();
 }
 
 else if (Eingabe==2){
 subtrahieren();
 }
 else
 {
	 cout << endl << "FALSCHE EINGABE" << endl;
 }
 }


Zum Einen ist dein Schreibstil echt schlimm, zum anderen ist dieser "Taschenrechner" viel einfacher zu programmieren.
Das wesentliche:
-Wenn man subtrahiert wird auch subtrahiert, nicht addiert!
-Du darfst nur einmal cin benutzen, mit einer Variablen die die Auswahl bestimmt.
-Nutze nicht nur If, else if sowie else ist auch noch da. Das ganze lässt sich auch mit swithc & case realisieren.

MfG
Check

3

Friday, June 3rd 2011, 10:11pm

Quoted

Zum Einen ist dein Schreibstil echt schlimm, zum anderen ist dieser "Taschenrechner" viel einfacher zu programmieren.
Das wesentliche:


Zum Thema Schreibweise habe ich es bis jetzt soweit gelernt (Buch)
Einfacher zu programmieren?? Da würde ich gern dein Beispiel sehen DANKE

mfg

4

Friday, June 3rd 2011, 10:18pm

Naja, gewöhne dir mal Kommentare sowie Space-Sequenzen an.
Zum Beispiel:
Es gibt mehrere Möglichkeiten das einfacher zu programmieren. Soll das Ganze auch in Extra-Funktionen geschehen oder darf das auch in einer Bedingung z.B. innerhalb einer Schleife sein?

MfG
Check

5

Friday, June 3rd 2011, 10:22pm

Mit Schleifen und Bedingungen wäre nicht schlecht.
Ich schau mal wie weit ich es verstehe, obwohl ich alles schon so weit gelernt habe. :)

6

Friday, June 3rd 2011, 10:59pm

Das simpelste was man ohne Funktionen machen kann:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <iostream> //iostream einbinden
#include <Windows.h> //Windows.h einbinden
 
using namespace std;
 
int main() //Hauptthread
{
	int auswahl=0; //Auswahl
	float zahl1=0.f; //zahl1 einer Aufgabe            /* Ob 0.f oder
	float zahl2=0.0f; //zahl2 einer Aufgabe               0.0f ist egal */
	bool schleife=true; //Schleife noch am laufen oder nicht?
 
	while(schleife) //Schleife
	{
		system("cls"); //Bildschirm leeren
		cout << "     Rechner" << endl;
		cout << "1 - Addition" << endl;
		cout << "2 - Subtraktion" << endl;
		cout << "3 - Multiplikation" << endl;
		cout << "4 - Division" << endl;
		cout << "5 - Beenden" << endl;
		cout << "Auswahl: ";
		cin >> auswahl; //Auswahl eingeben
		switch(auswahl) //Fokus auf Auswahl
		{
		case(1): //Wenn Auswahl == 1 dann
			{
				cout << endl << "Summand 1: ";
				cin >> zahl1; //Summand 1 eingeben
				cout << endl << "Summand 2: ";
				cin >> zahl2; //Summand 2 eingeben
				cout << endl << "Aufgabe: " << zahl1 << "+" << zahl2 << "=" << (zahl1+zahl2) << endl; // Aufgabe und dann Ergebnis ausgeben
				zahl1=0; //Beide Zahlen
				zahl2=0; //zuruecksetzen
				Sleep(1500); //Pausieren fuer 1,5sek
			}break;
		case(2): //Wenn Auswahl == 2 dann
			{
				cout << endl << "Minuend: ";
				cin >> zahl1; //Minuend eingeben
				cout << endl << "Subtrahend: ";
				cin >> zahl2; //Subtrahend eingeben
				cout << endl << "Aufgabe: " << zahl1 << "-" << zahl2 << "=" << (zahl1-zahl2) << endl; //Aufgabe ausgeben und dann das Ergebnis
				zahl1=0; //Beide Zahlen
				zahl2=0; //zuruecksetzen
				Sleep(1500); //Pausieren fuer 1,5sek
			}break;
		case(3): //Wenn Auswahl == 3 dann
			{
				cout << endl << "Faktor 1: ";
				cin >> zahl1; //Faktor 1 eingeben
				cout << endl << "Faktor 2: ";
				cin >> zahl2; //Faktor 2 eingeben
				cout << endl << "Aufgabe: " << zahl1 << "*" << zahl2 << "=" << (zahl1*zahl2) << endl; //Aufgabe ausgeben und dann das Ergebnis
				zahl1=0; //Beide Zahlen
				zahl2=0; //zuruecksetzen
				Sleep(1500); //Programm fuer 1,5sek einfrieren
			}break;
		case(4): //Wenn Auswahl == 5 dann
			{
				cout << endl << "Dividend: ";
				cin >> zahl1; //Dividend eingeben
				cout << endl << "Divisor: ";
				cin >> zahl2; //Divisor eingeben
				cout << endl << "Aufgabe: " << zahl1 << ":" << zahl2 << "=" << (zahl1/zahl2) << endl; //Aufgabe ausgeben und dann das Ergebnis
				zahl1=0; //Beide Zahlen
				zahl2=0; //zuruecksetzen
				Sleep(1500); //Pausieren fuer 1,5sek
			}break;
		case(5): //Wenn Auswahl == 5 dann
			{
				schleife=false; //Aus Schleife raus gehen
			}break;
		default: //Wenn Auswahl == Irgendwas Anderes dann
			{
				cout << "FALSCHE EINGABE" << endl; //Fehlermeldung
			}
		}
	}
 
	return (0); //0 als Rueckgabewert senden um Programm zu schließen
}


Das wäre sehr simpel, wie erwähnt. Mit Funktionen würden sich Rückgabewerte lohnen.
Also mal als Pseudocode:

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
...
//Parameter
double addieren(double summand1, double summand2);
double subtrahieren(double minuend, double subtrahend);
double multiplizieren(double faktor1, double faktor2);
double dividieren(double dividend, double divisor);
...
...
cout << endl << "Aufgabe: " << zahl1 << "+" << zahl2 << "=" << addieren(zahl1, zahl2) << endl;
...
cout << endl << "Aufgabe: " << zahl1 << "-" << zahl2 << "=" << subtrahieren(zahl1, zahl2) << endl;
...
cout << endl << "Aufgabe: " << zahl1 << "*" << zahl2 << "=" << multiplizieren(zahl1, zahl2) << endl;
...
cout << endl << "Aufgabe: " << zahl1 << "/" << zahl2 << "=" << dividieren(zahl1, zahl2) << endl;
...
...
double addieren(double summand1, double summand2)
{
	return (summand1+summand2);
}
double subtrahieren(double minuend, double subtrahend)
{
	return (minuend-subtrahend);
}
double multiplizieren(double faktor1, double faktor2)
{
	return (faktor1*faktor2);
}
double dividieren(double dividend, double divisor)
{
	return (dividend/divisor);
}


MfG
Check

7

Friday, June 3rd 2011, 11:14pm

Fettes Dankeschön an dich hast mir super geholfen !!!!

Ich werde mir das morgen mal einschauen wie du das gemacht hast.
Ich habe das auf meine Weise auch jetzt hinbekommen.

mfg

8

Friday, June 3rd 2011, 11:51pm

Klar. ;)
Bei weiteren Fragen einfach hier im Forum nachfragen oder, wenn du möchtest das ich dir helfe, mir eine PN schicken.
Empfehlen würde ich ersteres, denn dann finden mehr Google-User zu uns und ansonsten sehen auch andere Leute die Lösung, und es kann ja mal sein das ich was nicht weiß. ;D

MfG
Check

9

Saturday, June 4th 2011, 9:25pm

Gib mal in die Suche hier im Forum "Taschenrechner C" ein.

Da sollten viele Lösungen angezeigt werden. Teilweise elegant, teilweise auch weniger gut, aber auf jeden Fall viel Anschauungsmaterial. Wenn das nicht reicht, kannst du ja noch im Netz suchen :D

Quelltext formatieren bitte -> C oder C++ Quelltext mit Maus markieren und anschliessend unten den 2. Button C&C++ drücken.

MfG bcc-fan

10

Wednesday, June 22nd 2011, 9:05pm

hmm also rein theoretisch, wenn es nicht sein muss mit der Auswahl, lang auch folgendes..

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**************************************
* kleiner Taschenrechner
*
*/
 
#include <iostream>
using namespace std;
 
int main()
{
	double zahl1, zahl2;
	char rechenzeichen;
 
	cout << "Bitte geben Sie ein: Zahl Rechenzeichen Zahl" << endl;
	cin >> zahl1 >> rechenzeichen >> zahl2;
 
	switch(rechenzeichen)
	{
	case '+':
		cout << "=" << (zahl1 + zahl2) << endl;
		break;
	case '-':
		cout << "=" << (zahl1 - zahl2) << endl;
		break;
	case 'x':
	case 'X':
	case '*':
		cout << "=" << (zahl1 * zahl2) << endl;
		break;
	case ':':
	case '/':
		cout << "=" << (zahl1 / zahl2) << endl;
		break;
	default:
		cout << "Tut mir leid, dieses Zeichen kenne ich nicht." << endl;
	}
 
	cin.ignore();
	cin.get();
}
.

oder was sagt Ihr dazu?

11

Wednesday, June 22nd 2011, 9:19pm

So beim darüber schauen sieht das gut aus.

Hab das nicht getestet -> Wenn du nur den gezeigten Quelltext nutzt, sollte es auch ohne Zeile 38 und ohne Zeile 39 funktionieren, oder?

Damit du den Rechner nicht für jede Rechnung neu starten musst, kannst du vielleicht ja noch etwas ergänzen.

MfG bcc-fan

12

Wednesday, June 22nd 2011, 10:12pm

ja ich habe das prinzip noch nicht so richtig verstanden von den schleifen...könnte man dafür jede nehmen? egal ob for oder while usw?

13

Wednesday, June 22nd 2011, 10:24pm

Einfach eine Endlosschleife.
Also entweder:

C/C++ Quellcode

1
2
3
4
for(int i=0; i<10)
{
  //rechne....
}

oder:

C/C++ Quellcode

1
2
3
4
while(1)
{
  //rechne....
}

oder:

C/C++ Quellcode

1
2
3
do {
  //rechne....
}while(1);


Das Ganze würde man normal per Kreuz schließen können.

MfG
Check

14

Thursday, June 23rd 2011, 8:02am

Ein for-Endlos sieht so aus:

C/C++ Quellcode

1
for( ; ; )


:thumbup:

Aber für ein Taschenrechner ist eine Endlosschleife meiner Meinung nach nicht eine vernünftige Lösung. Denn beschreibt mal wie ihr euer Taschenrechnerprogramm beenden wollt? Wollt ihr die Spannungsversorgung zu eurem Rechner kappen? Oder fällt euch noch etwas besseres ein?

Ja mir sind einige Lösungen bekannt 8)

MfG bcc-fan

This post has been edited 1 times, last edit by "bcc-fan" (Jun 23rd 2011, 8:08am)


15

Thursday, June 23rd 2011, 10:22am

oki habe jetzt eine for schleife eingebaut.

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/**************************************
* kleiner Taschenrechner
*
*/
 
#include <iostream>
using namespace std;
 
int main()
{
	double zahl1, zahl2;
	char rechenzeichen;
 
	for(int i=0; i<10;)			// Schleife, damit man erneut gefragt wird.
	{
 
	cout << "Bitte geben Sie ein: Zahl Rechenzeichen Zahl" << endl;
	cin >> zahl1 >> rechenzeichen >> zahl2;
 
	switch(rechenzeichen)
		{
	case '+':
		cout << "=" << (zahl1 + zahl2) << endl;
		break;
	case '-':
		cout << "=" << (zahl1 - zahl2) << endl;
		break;
	case 'x':
	case 'X':
	case '*':
		cout << "=" << (zahl1 * zahl2) << endl;
		break;
	case ':':
	case '/':
		cout << "=" << (zahl1 / zahl2) << endl;
		break;
	default:
		cout << "Tut mir leid, dieses Zeichen kenne ich nicht." << endl;
		}
	}
	cin.ignore();
	cin.get();
}


Als nächstes versuche ich eine Abfrage mit einzubauen am Ende.

So wie, "Wollen Sie den Taschenrechner beenden: Ja/Nein"
Bei nein erfolgt halt die schleife und bei ja soll er sich schließen.

Weiß nur noch nicht so recht wie :D Ich teste mal ein wenig :)

Edit: ich habe gerade ein Problem festgestellt. Die schleife scheint wohl einen fehler zu haben.
Wenn ich z.B zahlen eingebe mit , also 3,6 + 3,5
dann gibt er mir endlos aus :
"Tut mir leid, dieses Zeichen kenne ich nicht"

jemand eine idee wo der fehler ist?

Edit2:
liegt daran das man einen punkt machen muss. Dann klappts auch.
Aber wie kann ich dafür sorgen das er bei falscher eingabe mit dem , nur 1x ausgibt "Tut mir leid, dieses Zeichen kenne ich nicht"
Bei anderen zeichen z.B 6 ü 6 zeigt er es nur 1x an wie es auch soll.

This post has been edited 3 times, last edit by "Pl0x" (Jun 23rd 2011, 10:44am)


16

Thursday, June 23rd 2011, 8:10pm

C/C++ Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
/**************************************
* kleiner Taschenrechner
*
*/
 
#include <iostream>
using namespace std;
 
void trechner()
{
	double zahl1, zahl2;
	char rechenzeichen;
 
	{
 
	cout << endl << "Bitte geben Sie ein: Zahl Rechenzeichen Zahl" << endl;
	cin >> zahl1 >> rechenzeichen >> zahl2;
 
	switch(rechenzeichen)
		{
	case '+':
		cout << "=" << (zahl1 + zahl2) ;
		break;
	case '-':
		cout << "=" << (zahl1 - zahl2);
		break;
	case 'x':
	case 'X':
	case '*':
		cout << "=" << (zahl1 * zahl2);
		break;
	case ':':
	case '/':
		cout << "=" << (zahl1 / zahl2);
		break;
	default:
		cout << "Tut mir leid, dieses Zeichen kenne ich nicht.";
		}
	cout << endl;
	}
//	cin.ignore();
//	cin.get();
}
 
int main()
{
	char menu;
	do
	{
		cout << "Sie haben die Wahl: " << endl;
		cout << "e -> Ende" << endl;
		cout << "t -> Taschenrechner" << endl;
		cin >> menu;
		switch(menu)
		{
			case 'e':
				cout << endl;
				break;
			case 't':
				trechner();
				break;
			default:
				cout << "Nicht implementiert" << endl;
		}
	}while( menu != 'e');
}


:sleeping:

17

Thursday, June 23rd 2011, 10:07pm

kleiner tipp am rande, dein Taschenrechner überprüft nicht ob durch Null geteilt wird

18

Thursday, June 23rd 2011, 10:15pm

Ja und ein Satz geschweifte Klammern sollte auch noch über sein ;)

MfG bcc-fan

19

Monday, June 27th 2011, 10:49am

Hallöchen ich wollte nocheinmal zur for schleife zurück kommen..

C/C++ Quellcode

1
2
for(int i = 0;i < 10;i++)
			{


beim taschenrechner, funktioniert diese schleife auch. Warum nimmt man dafür

C/C++ Quellcode

1
i < 10
ist klar es soll an dieser stelle eine Bedingung rein.
Aber das gleich funktioniert auch mit

C/C++ Quellcode

1
for(int i = 0;i < 5;i++)
oder jeder anderen zahl die ich genommen habe außer 0.

Ist es in diesem falle egal ob dort eine 10, 5 oder 8 drinne steht`Ich habe bisher den sinn dieser Zahl leider nicht verstanden.

20

Monday, June 27th 2011, 10:56am

Das Bestimmt wie oft deine Schleife wiederholt wird....
Wenn du jetzt die Schleife hast:

C/C++ Quellcode

1
for(int i=0; i<7; i++)

Dann wäre das in Zahlen jetzt so:
0<7; 0++;
1<7; 1++;
2<7; 2++;
3<7; 3++;
4<7; 4++;
5<7; 5++;
6<7; 6++;
7=7 <-was nicht die Bedingung war, also hört Schleife auf

Das Ganze geht natürlich auch rückwärts:

C/C++ Quellcode

1
for(int i=10; i>0; i--)

Dann das Ganze wieder in Zahlenform:
10>0; 10--;
9>0; 9--;
....; ....;
2>0; 2--;
1>0; 1--;
0=0 <- Was nicht die Bedingung war, also hört Schleife auf

MfG
Check

Social bookmarks