Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » Switch case C++ » Antwort erstellen » Hallo Gast [Anmelden|Registrieren]

Antwort erstellen
Benutzername: (du bist nicht eingeloggt!)
Thema:
Nachricht:

HTML ist nicht erlaubt
BBCode ist erlaubt
Smilies sind erlaubt
Bilder sind erlaubt

Smilies: 21 von 33
smileWinkDaumen hoch
verwirrtAugenzwinkerngeschockt
Mit ZungeGottunglücklich
Forum Kloppebösegroßes Grinsen
TanzentraurigProst
TeufelSpamWillkommen
LehrerLOL HammerZunge raus
Hilfe 
aktuellen Tag schließen
alle Tags schließen
fettgedruckter Textkursiver Textunterstrichener Text zentrierter Text Hyperlink einfügenE-Mail-Adresse einfügenBild einfügen Zitat einfügenListe erstellen CODE einfügenPHP CODE farbig hervorheben
Spamschutz:
Text aus Bild eingeben
Spamschutz

Die letzten 10 Beiträge
Airblader

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
Airblader

Zitat:
Original von profi
Was mache ich nun?


Code-Tags verwenden. Augenzwinkern
profi

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

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

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

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

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

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
profi

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

Der Fehler ist schon bei case C, wie schon beschrieben
Zitat:
In case C willst du ein a benutzen, das du nirgendwo definiert hast.


Die Frage ist erstmal, was du machen kannst, damit die eingelesenen Zahlen überhaupt verwendet werden, bisher beendet das Programm nach einmaligem Einlesen der Zahlen.

Und wie gesagt, die Variablen haben wir alle schon definiert, bitte lösche die Zeilen 33-37 sowie 67 aus deinem Code. Und die Leerzeilen könntest du auch entfernen, dann passt das Programm auch ohne Scrollen auf den Monitor.
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen.