Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
--- Switch case C++ (http://www.informatikerboard.de/board/thread.php?threadid=1461)


Geschrieben von profi am 13.04.2013 um 20:56:

 

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?



Geschrieben von eulerscheZahl am 13.04.2013 um 21:01:

 

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 Wink



Geschrieben von profi am 13.04.2013 um 21:16:

 

Aber mit while true macht er das zahlen einlesen ja auch irgendwie unendlich
mal , da stimmt doch was nicht oder?



Geschrieben von Airblader am 13.04.2013 um 21:31:

 

Es beendet sich eben dann, wenn man 'f' bzw. 'F' eingibt, da die return-Anweisung die Schleife dann einfach abbricht.



Geschrieben von profi am 13.04.2013 um 22:33:

 

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?



Geschrieben von Airblader am 13.04.2013 um 23:14:

 

code:
1:
2:
3:
4:
int a = x_sort; 
if( a > y_sort && y_sort < z_sort && z_sort > a ){
    a = y_sort; 
}


Erwartest du wirklich, dass eine Logik, welche die eingegebenen Zahlen nichtmal verwendet, funktioniert?

Da du C++-Methoden zum sortieren wohl nicht verwenden darfst/kannst, solltest du dir erstmal überlegen: Wie kannst du drei Zahlen algorithmisch sortieren?

Übrigens: Offenbar ist "case('d')" zwar gültige Syntax, aber untypisch. Man schreibt für die Fälle eigentlich nur "case 'd'", also ohne Klammern.



Geschrieben von profi am 14.04.2013 um 01:19:

 

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?



Geschrieben von Airblader am 14.04.2013 um 01:23:

 

Zitat:
Original von profi
Was mache ich nun?


Code-Tags verwenden. Augenzwinkern



Geschrieben von Airblader am 14.04.2013 um 02:44:

 

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? Augenzwinkern

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. Augenzwinkern


Forensoftware: Burning Board, entwickelt von WoltLab GmbH