Switch case C++ |
profi unregistriert
|
|
code: |
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:
83:
84:
85:
86:
87:
88:
89:
90:
|
#include <iostream>
using namespace std;
int main()
{
char Auswahl;
cout<< "Startmenue" << endl;
cout<< "(A)Es sollen 3 Zahlen eingelesen werden" <<endl;
cout<< "(B)Zuletzt eingelesene Zahl ausgeben" <<endl;
cout << "(C) Absteigend sortiert" << endl;
cout << "(D) Mittelwert" << endl;
cout << "(E) Beenden" << endl;
cin >> Auswahl;
int x=0,y=0,z=0, x_sort=0, y_sort=0,z_sort=0;
switch(Auswahl){
case('A'):
case('a'):
cout << "1 Zahl" << endl;
cin >> x;
cout << "2 Zahl" << endl;
cin >> y;
cout << "3 Zahl" << endl;
cin >> z;
break;
case('B'):
case('b'):
cout << x << " " << y << " " << z << endl;
break;
case('C'):
case('c'):
int a;
a = x_sort;
if( a > y_sort && y_sort < z_sort && z_sort > a ){
a =y_sort;
}
cout << y_sort << " " << a << " " << z_sort;
break;
case('D'):
case('d'):
cout << " Mittelwert" << " " << (x_sort+y_sort+z_sort)/3 <<endl;
break;
}
} |
|
Jetzt stimmte es soweit denke ich.
Die Frage ist erstmal, was du machen kannst, damit die eingelesenen Zahlen überhaupt verwendet werden, bisher beendet das Programm nach einmaligem Einlesen der Zahlen.
DA habe ich im moment keine idee was ich machen kann.
Hast du irgendwie tipps für mich?
|
|
13.04.2013 20:56 |
|
|
|
Eine Endlosschleife:
code: |
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:
|
#include <iostream>
using namespace std;
int main()
{
char Auswahl = 'A';
int x=0,y=0,z=0, x_sort=0,y_sort=0,z_sort=0;
while(true)
{
switch(Auswahl)
{
case 'A':
case 'a':
cout << "1. Zahl: ";
cin >> x;
cout << "2. Zahl: ";
cin >> y;
cout << "3. Zahl: ";
cin >> z;
break;
//...
case 'F':
case 'f':
return 0;
//evtl noch dafault
}
cout << "Startmenue" << endl;
cout << "(A) Es sollen 3 Zahlen eingelesen werden" <<endl;
cout << "(B) Zuletzt eingelesene Zahl ausgeben" <<endl;
cout << "(C) Absteigend sortiert" << endl;
cout << "(D) Mittelwert" << endl;
cout << "(E) Median" << endl;
cout << "(F) Beenden" << endl;
cin >> Auswahl;
}
} |
|
Für heute bin ich dann mal weg
__________________ Syntax Highlighting fürs Board (Link)
|
|
13.04.2013 21:01 |
|
|
profi unregistriert
|
|
Aber mit while true macht er das zahlen einlesen ja auch irgendwie unendlich
mal , da stimmt doch was nicht oder?
|
|
13.04.2013 21:16 |
|
|
Airblader
Doppel-As
Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München
|
|
Es beendet sich eben dann, wenn man 'f' bzw. 'F' eingibt, da die return-Anweisung die Schleife dann einfach abbricht.
__________________ The best thing about a boolean is that even if you're wrong, you're only off by a bit.
|
|
13.04.2013 21:31 |
|
|
profi unregistriert
|
|
code: |
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:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
|
#include <iostream>
using namespace std;
int main()
{
char Auswahl = 'A';
Auswahl = 'B';
Auswahl = 'C';
Auswahl = 'D';
Auswahl = 'E';
int x=0,y=0,z=0, x_sort=0, y_sort=0,z_sort=0;
while(true){
switch(Auswahl){
case('A'):
case('a'):
cout << "1 Zahl" << endl;
cin >> x;
cout << "2 Zahl" << endl;
cin >> y;
cout << "3 Zahl" << endl;
cin >> z;
break;
case('B'):
case('b'):
cout << x << " " << y << " " << z << endl;
break;
case('C'):
case('c'):
int a;
a = x_sort;
if( a > y_sort && y_sort < z_sort && z_sort > a ){
a =y_sort;
}
cout << y_sort << " " << a << " " << z_sort;
break;
case('D'):
case('d'):
cout << " Mittelwert" << " " << (x_sort+y_sort+z_sort)/3 <<endl;
break;
}
cout<< "Startmenue" << endl;
cout<< "(A)Es sollen 3 Zahlen eingelesen werden" <<endl;
cout<< "(B)Zuletzt eingelesene Zahl ausgeben" <<endl;
cout << "(C) Absteigend sortiert" << endl;
cout << "(D) Mittelwert" << endl;
cout << "(E) Beenden" << endl;
cin >> Auswahl;
}
} |
|
Mein Programm sieht so aus .
Aber wenn ich c drücke sortiert er leider die Zahlen nicht.
Warum passiert das?
|
|
13.04.2013 22:33 |
|
|
profi unregistriert
|
|
IcH HABS mal versucht so zu sortieren , aber es funktioniert immer nochnicht:
#include <iostream>
using namespace std;
int main()
{
char Auswahl = 'A';
Auswahl = 'B';
Auswahl = 'C';
Auswahl = 'D';
Auswahl = 'E';
int x=0,y=0,z=0, x_sort=0, y_sort=0,z_sort=0;
while(true){
switch(Auswahl){
case('A'):
case('a'):
cout << "1 Zahl" << endl;
cin >> x;
cout << "2 Zahl" << endl;
cin >> y;
cout << "3 Zahl" << endl;
cin >> z;
break;
case('B'):
case('b'):
cout << x << " " << y << " " << z << endl;
break;
case('C'):
case('c'):
cout << "1 Zahl" << endl;
cin >> x_sort;
cout << "2 Zahl" << endl;
cin >> y_sort;
cout << "3 Zahl" << endl;
cin >> z_sort;
if( x_sort > y_sort ){
x_sort =y_sort;
}
if(y_sort > z_sort && x_sort > z_sort){
y_sort = z_sort;
}
cout << z_sort << endl;
break;
case('D'):
case('d'):
cout << " Mittelwert" << " " << (x_sort+y_sort+z_sort)/3 <<endl;
break;
}
cout<< "Startmenue" << endl;
cout<< "(A)Es sollen 3 Zahlen eingelesen werden" <<endl;
cout<< "(B)Zuletzt eingelesene Zahl ausgeben" <<endl;
cout << "(C) Absteigend sortiert" << endl;
cout << "(D) Mittelwert" << endl;
cout << "(E) Beenden" << endl;
cin >> Auswahl;
}
}
Was mache ich nun?
|
|
14.04.2013 01:19 |
|
|
Airblader
Doppel-As
Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München
|
|
Zitat: |
Original von profi
Was mache ich nun? |
Code-Tags verwenden.
__________________ The best thing about a boolean is that even if you're wrong, you're only off by a bit.
|
|
14.04.2013 01:23 |
|
|
Airblader
Doppel-As
Dabei seit: 03.03.2013
Beiträge: 138
Herkunft: München
|
|
Da der Tag sich dem Ende zuneight, möchte ich (ausnahmsweise*) mal nicht so sein. Das ist also deine Logik:
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
|
cout << "1 Zahl" << endl;
cin >> x_sort;
cout << "2 Zahl" << endl;
cin >> y_sort;
cout << "3 Zahl" << endl;
cin >> z_sort;
if( x_sort > y_sort ) {
x_sort =y_sort;
}
if( y_sort > z_sort && x_sort > z_sort ) {
y_sort = z_sort;
}
cout << z_sort << endl; |
|
Der erste Block widerspricht gleich mal der Aufgabenstellung. Du sollst nicht Zahlen sortieren, die neu eingegeben werden, sondern die Zahlen, die zuvor eingegeben wurden (namentlich x, y und z).
Die Logik danach ist auch eher krumm. Ein Tipp: Wenn du dir einen Algorithmus überlegst, dann überprüfe ihn mit Zahlbeispielen. Auch nochmal gründlich über das Geschriebene nachdenken hilft oft – in deiner Logik wird der Wert von x_sort zum Beispiel ersatzlos überschrieben. Wenn man drei Zahlen sortieren will und eine unwiderruflich überschreibt, riecht das nicht nach einem Fehler?
Gehen wir also mal davon aus, dass der Benutzer x, y und z eingegeben hat und wir diese Zahlen aufsteigend sortieren wollen. Gehen wir auch mal davon aus, dass wir eine Funktion min(a, b, c) und max(a, b, c) haben (was sie jeweils tun sollte klar sein). Dann können wir wie folgt sortieren:
code: |
1:
2:
3:
|
x_sort = min(x, y, z);
z_sort = max(x, y, z);
y_sort = x + y + z - x_sort - z_sort; |
|
An der Stelle ist es essentiell, dass du dir die Zeit nimmst zu verstehen, wieso das klappt.
Supi – die Zahlen sind sortiert! Jetzt haben wir nur noch das Problem, dass wir diese min- und max-Funktion brauchen. Da ich davon ausgehe, dass ihr die vordefinierten Funktionen nicht nutzen dürft, müssen wir uns sowas eben selber basteln. Sagen wir mal, wir wollen min(x,y) bestimmen und in x_sort speichern. Das könnte so gehen:
code: |
1:
2:
3:
4:
5:
|
if( x < y ) {
x_sort = x;
} else {
x_sort = y;
} |
|
Ich überlasse es dir, dies auf drei Zahlen (für min(x, y, z)) auszuweiten, denn das brauchen wir schließlich. Natürlich gibt es auch andere Wege, die Zahlen zu sortieren.
*) In Zukunft bitte auf die korrekte Darstellung achten. Wer will, dass andere sich Zeit nehmen, zu helfen, sollte sich die Zeit nehmen, die Frage vernünftig zu stellen.
__________________ The best thing about a boolean is that even if you're wrong, you're only off by a bit.
|
|
14.04.2013 02:44 |
|
|
|