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 19:17:

  Switch case C++

Meine Frage:
Hallo leute ich stecke gerade bei einer Aufgabe fest:

Es ist ein Programm für ein Menue zu erstellen, wo ein Anwender wiederholt aus einer Reihe von Aktionen auswählen kann. In dem Programm soll - ein Menue zur Auswahl der Aktionen angezeigt werden - der Anwender per geeigneter Eingabe eine der Aktionen auswählen - diese gewählte Aktion durchgeführt werden. Dies wird solange wiederholt, bis der Anwender per geeigneter Eingabe entscheidet, dass das Programm beendet werden soll.
Folgende Aktionen sollen zur Auswahl stehen und mittels switch realisiert werden: I. 3 neue Zahlen einlesen. II. Die zuletzt mit I) eingelesenen Zahlen ausgeben (Reihenfolge wie bei der Eingabe). III. Die zuletzt mit I) eingelesenen Zahlen absteigend sortiert ausgeben. IV. Den Mittelwert der 3 zuletzt mit I) eingelesenen Zahlen ausgeben. V. Den Median der 3 zuletzt mit I) eingelesenen Zahlen ausgeben. Hinweis: der Median ist hier der mittlere Wert der Zahlen in sortierter Reihenfolge VI. Das Programm beenden.

Mein programm sieht im moment so aus:

#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;

switch(Auswahl){

case('A');

case('a');

int a = x;

int b = y;

int c = z;

cout << "1 Zahl" << endl;

cin >> x;

cout << "2 Zahl" << endl;

cin >> y;

cout << "3 Zahl" << endl;

cin >> z;

case('B');

case('b');

cout << x << " " << y << " " << z << endl;





}
}

Mein compiler zeigt mir den fehler an :

x is not declared in this scope.

Kann mir jemand helfen?

Meine Ideen:
gepostet



Geschrieben von eulerscheZahl am 13.04.2013 um 19:25:

 

Deine Fehlermeldung besagt, dass du schreibst int a = x;
was ist überhaupt x, das hast du vorher noch nie verwendet, noch nichtmal gesagt, dass das auch ein int ist.

Außerdem:
-Du fragst Auswahl ab, ohne es eingelesen zu haben
-case 'A': //da muss ein Doppelpunkt hin, kein Semikolon



Geschrieben von profi am 13.04.2013 um 19:30:

 

Oh man jetzt funktioniert es:

#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;

switch(Auswahl){

case('A'):

case('a'):

int x;

int y;

int z;

cout << "1 Zahl" << endl;

cin >> x;

cout << "2 Zahl" << endl;

cin >> y;

cout << "3 Zahl" << endl;

cin >> z;

case('B'):

case('b'):

cout << x << " " << y << " " << z << endl;





}
}


Stimmt es so?



Geschrieben von eulerscheZahl am 13.04.2013 um 19:36:

 

Sieht zumindest schon besser aus, beim Ausführen kiriege ich aber immer noch eine Fehlermeldung:
Zitat:
Run-Time Check Failure #3 - The variable 'Auswahl' is being used without being initialized.

Schreibe mal vor das switch: cin >> Auswahl;

Weitere Punkte:
-int x, y, z; sollten oberhalb des switch definiert werden
- am Ende eines Blocks bei switch kommt das Wort break



Geschrieben von profi am 13.04.2013 um 19:48:

 

#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;

switch(Auswahl){

case('A'):

case('a'):

int x;

int y;

int z;

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 x;
int y;
int z;

int x = a;

if( a > y && y < z && z > a ){

a =y;
}

cout << y << " " << x << " " << z;

break;





}
}


Ist mein sortieren bei case c richtig?



Geschrieben von eulerscheZahl am 13.04.2013 um 19:57:

 

code:
1:
2:
3:
4:
5:
int x;
int y;
int z;

int x = a;

sollte wohl heißen int a = x;

Du schreibst bei case A und bei case C:
int x; int y; int z;
Du kannst du Variablen nur einmal verwenden, und selbst wenn es ginge, würdest du in C nicht mehr mit den Werten aus A arbeiten.

Versuche mal deinen Codeanfang (Variablen brauchst du danach keine mehr zu definieren)
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
#include <iostream>

using namespace std;

int main()
{
	char Auswahl;
	int x=0,y=0,z=0, x_sort=0, y_sort=0,z_sort=0;

	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;

	switch(Auswahl)
//...



Geschrieben von profi am 13.04.2013 um 20:04:

 

int x=0,y=0,z=0, x_sort=0, y_sort=0,z_sort=0;

Soll ich das jetzt am Anfang einbauen oder wie?

Aber warum setze ich die int = 0 ?

Das verstehe ich nicht.

Und was bewirkt das y_sort usw?



Geschrieben von eulerscheZahl am 13.04.2013 um 20:09:

 

Ja, das soll an den Anfang.
Man kann nicht sicher sein, dass der Nutzer zuerst Zahlen einliest, bevor er sie wieder ausgeben lässt(können wir später noch ändern), deshalb bringe ich sie erst mal auf einen definierten Startwert.

Das y_sort habe ich gemacht, weil du die Zahlen später noch sortieren sollst, da kommt dann der mittlere Wert rein, in x_sort der größte, in z_sort der kleinste.



Geschrieben von profi am 13.04.2013 um 20:18:

 

Ich habs jetzt umgekehrt gemacht .

Ich hab jetzt versucht in y den kleinsten wert zu stellen .

Würde das so gehen ?

#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'):

int x;

int y;

int z;

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 x_sort = a;

if( a > y_sort && y_sort < z_sort && z_sort > a ){

a =y_sort;
}

cout << y_sort << " " << x_sort << " " << z_sort;

break;





}
}

Aber mir wird hier ein Fehler angezeigt:

int x_sort = a;

Warum das verstehe ich immer noch nicht?



Geschrieben von Airblader am 13.04.2013 um 20:23:

 

Ganz am Rande: Setze deine Code-Snippets bitte in entspr. code-Tags, damit man sie auch bequem lesen kann und die (hoffentlich vorhandene) Formatierung erhalten bleibt.



Geschrieben von eulerscheZahl am 13.04.2013 um 20:24:

 

In case A sollst du doch keine Variablen mehr definieren, das ist doch schon davor passiert.

In case C willst du ein a benutzen, das du nirgendwo definiert hast.
Gleichzeitig gibt es aber schon ein y_sort.
Der Aufbau ist immer so:
Datentyp NeuerName = EtwasBekanntes;
also z.B. int a = y_sort;
oder char Auswahl = 'A';



Geschrieben von profi am 13.04.2013 um 20:24:

 

Wie mache ich das in code tags?



Geschrieben von eulerscheZahl am 13.04.2013 um 20:28:

 

Code einschließen mit [_code] ... [_/code] (der Unterstrich muss raus)

code:
1:
2:
Zeile 1
Zeile 2


Klicke bei meinem Beitrag auf zitieren, dann siehst du, wie ich es gemacht habe.



Geschrieben von profi am 13.04.2013 um 20:38:

 

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:
#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'):

        int  x;

        int  y;

        int z;

        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 = 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;







    }
}


SO sieht mein code jetzt aus .

Leider wird mir bei case d wieder ein fehler am anfang angezeigt.

Aber ich habe noch eine frage was kann ich denn jetzt machen das wenn ich z.B c eingebe , das dann die eingelesenen zahlen sortiert angezeigt werden ?



Geschrieben von eulerscheZahl am 13.04.2013 um 20:45:

 

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.


Forensoftware: Burning Board, entwickelt von WoltLab GmbH