Zum Inhalt springen

Noch mal Erst Klasse. Wie kann ich Problem mit Schleife korrigieren?


lempy

Empfohlene Beiträge

Hallo

Noch mal meine Klasse und die Bildschirmausgabe mit Anmerkungen dazu. Wir funktioniert mein Gedanke richtig?


#include "stdafx.h"


using namespace System;


ref class TV_Klasse			// Klasendefinition

{

	Int32 an_aus;			// Klassenelemente

	Int32 Programm;

	Int32 Ton;


public:


	Void init(Int32 zustand);		// Methoden der Klasse (Bekanntmachung)

	Void setprogramm(Int32 kanal);

	Void setton(Int32 aendern);

	Void ausgabe();

};


Void TV_Klasse::init(Int32 zustand)         //Methode zur Initialisierung

{

	if (zustand != 0)


		an_aus = 1;

	else

		an_aus = 0;

		Programm = 1;

		Ton = 5;

}


Void TV_Klasse::setprogramm(Int32 kanal)    // Methode zum Programm ändern

{

	Programm = kanal;

}


Void TV_Klasse::setton(Int32 aendern)	     // Methode um Ton zu ändern

{

	Ton = aendern;

}


Void TV_Klasse::ausgabe()			    //Methode für die Ausgabe der Veränderung

{

	Console::WriteLine("\n\nDas Gerät hat den Zustand {0} ",an_aus);

	Console::WriteLine("Aktives Programm {0}",Programm);

	Console::WriteLine("Die Lautsärke ist auf {0} \n\n\n",Ton);

}



int main(array<System::String ^> ^args)

{

   TV_Klasse^ tivi;


	tivi = gcnew TV_Klasse;


	Int32 auswahl, x, z;

	Int32 y = 0;


	Console::WriteLine("Vor dem Einschalten.\n\n");		// Erster Aufruf der Methode Ausgabe

	tivi -> ausgabe();					// um an zu zeigen das Gerät aus ist.


	Console::WriteLine("Gerät einschalten:	1");		// Einschalten des Gerätes

	Console::WriteLine("Gerät ausschalten:	0\n");		// Ausschalten des Gerätes


	auswahl = Console::Read();

	Console::ReadLine();


	switch (auswahl)

	{

	case '1':					// Case-Zweig zum 1 Einschalten, da nur dann Änderungen möglich


		x = 1;

		tivi -> init(x);		// Veränderung bei an_aus


		Console::WriteLine("Nach dem Einschalten \n");


		tivi ->ausgabe();		// Ausgabe zeigt Änderungsstatus auf Eingeschaltet


		 while (y != 3)	// Beginn der Schleife für die Auswahl zum Ton oder 

                                        // Programm ändern

		{						

			Console::WriteLine("Was möchten Sie tun?\n");

			Console::WriteLine("Programm ändern:	1");	

			Console::WriteLine("Ton andern:		2");

			Console::WriteLine("Gerät ausschalten:	0\n\n");	//Hier soll das            Programm anders Funktionieren

			y = Convert::ToInt32(Console::Read());	// Erläuterung bei Bildschirmausgabe


			Console::ReadLine();


			switch (y)					// Programm ändern 

			{

			case '1':


				Int32  kanal, i;


				Console::WriteLine("ARD:	1");	// Auswahl der Kanäle

				Console::WriteLine("ZDF:	2");

				Console::WriteLine("NDR:	3");

				Console::WriteLine("RTL:	4\n");

				kanal = Convert::ToInt32(Console::Read());


				Console::ReadLine();


				switch (kanal)		// Die Auswertungen der Kanalauswahl

				{					// damit Methode setprogramm auch

				case '1':		// nach dem eingegebenen Kanal umschaltet


					i = 1;

					tivi -> setprogramm(i);

					break;


				case '2':


					i = 2;

					tivi -> setprogramm(i);

					break;


				case '3':


					i = 3;

					tivi -> setprogramm(i);

					break;


				case '4':


					i = 4;

					tivi -> setprogramm(i);

					break;


				}				// Kanal Auswahl ende


				break;			// stop von Kanal Auswahl


			case '2':	// Hir beginnt Zweit Ton ändern im Auswahlmenü nach Wihle


				z = 0;

				Console::WriteLine("Um die Lautstärke zu änder eine Zahl eingeben.\n");

				z = Convert::ToInt32(Console::ReadLine());


				tivi -> setton(z);		// damit Methode setton geändert wird

				break;


			case '0':				// Hier wird ein_aus zwar auf Null gesetzt

									// aber Programm nicht beendet

				z = 0;

				tivi -> init(z);

				break;


			default:


				Console::WriteLine("Falsche Auswahl.");

			}

			tivi -> ausgabe();		// Ausgabe nach Änderungen oder Änderung


		}


	}	

	Console::ReadKey();

    return 0;

}

Bildschirmausgabe:

Vor dem Einschalten.

Das Gerät hat den Zustand 0 ( Ausgabe OK )

Aktives Programm 0

Die Lautsärke ist auf 0

Gerät einschalten: 1 (Auswahlmenü OK)

Gerät ausschalten: 0

1

Nach dem Einschalten ( Ausgabe OK)

Das Gerät hat den Zustand 1

Aktives Programm 1

Die Lautsärke ist auf 5

Was möchten Sie tun?

Programm ändern: 1 ( Menüausgabe OK)

Ton andern: 2

Gerät ausschalten: 0

1

ARD: 1 (Menüausgabe OK)

ZDF: 2

NDR: 3

RTL: 4

2

Das Gerät hat den Zustand 1 ( Ausgabe OK)

Aktives Programm 2

Die Lautsärke ist auf 5

Was möchten Sie tun? ( Nochmalige Frage OK)

Programm ändern: 1 ( Menü OK)

Ton andern: 2

Gerät ausschalten: 0

2

Um die Lautstärke zu änder eine Zahl eingeben. (Aufforderung OK)

3

Das Gerät hat den Zustand 1 (Ausgabe OK)

Aktives Programm 2

Die Lautsärke ist auf 3

Was möchten Sie tun? (Menüabfrage OK)

Programm ändern: 1

Ton andern: 2

Gerät ausschalten: 0

0

Das Gerät hat den Zustand 0 (Kontrollausgabe ob Gerät aus OK)

Aktives Programm 1

Die Lautsärke ist auf 5

Was möchten Sie tun? :confused: ( Nicht mehr OK)

Programm ändern: 1 (Hier möchte einen Programmende. Entweder schließen des

Ton andern: 2 (Programm oder die Abfrage Gerät einschalten bzw.

Gerät ausschalten: 0 ( ausschalten

Wie kann ich das Programm ansonsten so behalten, aber ohne die jetzige letzte Auswahl?

Für Eure Hilfe lieben Dank

lempy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Klotzlkopp

Wegen dieser Ausgabe.

Vor dem Einschalten.

Das Gerät hat den Zustand 0

Aktives Programm 0

Die Lautsärke ist auf 0

Gerät einschalten: 1

Gerät ausschalten: 0

1

Nach dem Einschalten

Das Gerät hat den Zustand 1

Aktives Programm 1

Die Lautsärke ist auf 5

Weiter läuft es nicht

Gruß

lempy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Weiter läuft es nicht
Du solltest an deiner Problembeschreibung arbeiten. Was heißt "läuft nicht"? Bleibt das Programm an dieser Stelle stehen? Stürzt es ab? Hat es das vorher auch schon gemacht (deine erste Beschreibung sah anders aus)? Hast du etwas am Programm geändert?

Und meine Frage, warum an der oben genannten Stelle in deinem Code eine 3 steht, hast du auch nicht beantwortet.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sorry

Läuft nicht: Heist, wenn ich aus der 3 eine 0 mache, dann läuft das Programm nur bis zu der Ausgabe "Nach dem Einschalten". Das ist die Kopie der Bildschirmausgabe.

Habe das Problem jetzt mit "Label und goto" gelöst, möchte aber ungern GOTO verwenden. Hier noch mal das überarbeitete Programm.


#include "stdafx.h"


using namespace System;


ref class TV_Klasse			// Klasendefinition

{

	Int32 an_aus;			// Klassenelemente

	Int32 Programm;

	Int32 Ton;


public:


	Void init(Int32 zustand);	// Methoden der Klasse (Bekanntmachung)

	Void setprogramm(Int32 kanal);

	Void setton(Int32 aendern);

	Void ausgabe();

};


Void TV_Klasse::init(Int32 zustand) //Methode zur Initialisierung

{

	if (zustand != 0)


		an_aus = 1;

	else

		an_aus = 0;

		Programm = 1;

		Ton = 5;

}


Void TV_Klasse::setprogramm(Int32 kanal) // Methode zum Programm ändern

{

	Programm = kanal;

}


Void TV_Klasse::setton(Int32 aendern)	// Methode um Ton zu ändern

{

	Ton = aendern;

}


Void TV_Klasse::ausgabe()			//Methode für die Ausgabe der Veränderung

{

	Console::WriteLine("\n\nDas Gerät hat den Zustand {0} ",an_aus);

	Console::WriteLine("Aktives Programm {0}",Programm);

	Console::WriteLine("Die Lautsärke ist auf {0} \n\n\n",Ton);

}



int main(array<System::String ^> ^args)

{

   TV_Klasse^ tivi;


	tivi = gcnew TV_Klasse;


	Int32 auswahl, x, z;

	Int32 y = 0;



	Console::WriteLine("Vor dem Einschalten.\n\n");		// Erster Aufruf der Methode Ausgabe

	[COLOR="red"]Label:[/COLOR]tivi -> ausgabe();				// um an zu zeigen das Gerät aus ist.


	Console::WriteLine("Gerät einschalten:	1");		// Einschalten des Gerätes

	Console::WriteLine("Gerät ausschalten:	0\n");		// Ausschalten des Gerätes


	auswahl = Console::Read();

	Console::ReadLine();


	switch (auswahl)

	{

	case '1':					// Case-Zweig zum 1 Einschalten, da nur dann Änderungen möglich


		x = 1;

		tivi -> init(x);		// Veränderung bei an_aus


		Console::WriteLine("Nach dem Einschalten \n");


		tivi ->ausgabe();		// Ausgabe zeigt Änderungsstatus auf Eingeschaltet


		 while (y != 3)			// Beginn der Schleife für die Auswahl zum Ton oder Programm ändern

		{						

			Console::WriteLine("Was möchten Sie tun?\n");

			Console::WriteLine("Programm ändern:	1");	

			Console::WriteLine("Ton andern:		2");

			Console::WriteLine("Gerät ausschalten:	0\n\n");	//Hier soll das Programm anders Funktionieren

			y = Convert::ToInt32(Console::Read());	// Erläuterung bei Bildschirm-ausgbe


			Console::ReadLine();


			switch (y)					// Programm ändern 

			{

			case '1':


				Int32  kanal, i;


				Console::WriteLine("ARD:	1");	// Auswahl der Kanäle

				Console::WriteLine("ZDF:	2");

				Console::WriteLine("NDR:	3");

				Console::WriteLine("RTL:	4\n");

				kanal = Convert::ToInt32(Console::Read());


				Console::ReadLine();


				switch (kanal)			// Die Auswertungen der Kanalauswahl

				{					// damit Methode setprogramm auch

				case '1':				// nach dem eingegebenen Kanal umschaltet


					i = 1;

					tivi -> setprogramm(i);

					break;


				case '2':


					i = 2;

					tivi -> setprogramm(i);

					break;


				case '3':


					i = 3;

					tivi -> setprogramm(i);

					break;


				case '4':


					i = 4;

					tivi -> setprogramm(i);

					break;


				}						// Kanal Auswahl ende


				break;					// stop von Kanal Auswahl


			case '2':						// Hir beginnt Zweit Ton ändern im Auswahlmenü nach Wihle


				z = 0;

				Console::WriteLine("Um die Lautstärke zu änder eine Zahl eingeben.\n");

				z = Convert::ToInt32(Console::ReadLine());


				tivi -> setton(z);			// damit Methode setton geändert wird

				break;


			case '0':				// Hier wird ein_aus zwar auf Null gesetzt	

								// aber Programm nicht beendet

				z = 0;

				tivi -> init(z);

				[COLOR="red"]goto Label;[/COLOR]

				break;


			default:


				Console::WriteLine("Falsche Auswahl.");

			}

			tivi -> ausgabe();		// Ausgabe nach Änderungen oder Änderung


		}


	}	

	Console::ReadKey();

    return 0;

}


Hier noch mal die Bildschirmausgabe dazu:

Vor dem Einschalten.

Das Gerät hat den Zustand 0

Aktives Programm 0

Die Lautsärke ist auf 0

Gerät einschalten: 1

Gerät ausschalten: 0

1

Nach dem Einschalten

Das Gerät hat den Zustand 1

Aktives Programm 1

Die Lautsärke ist auf 5

Was möchten Sie tun?

Programm ändern: 1

Ton andern: 2

Gerät ausschalten: 0

2

Um die Lautstärke zu änder eine Zahl eingeben.

9

Das Gerät hat den Zustand 1

Aktives Programm 1

Die Lautsärke ist auf 9

Was möchten Sie tun?

Programm ändern: 1

Ton andern: 2

Gerät ausschalten: 0

1

ARD: 1

ZDF: 2

NDR: 3

RTL: 4

3

Das Gerät hat den Zustand 1

Aktives Programm 3

Die Lautsärke ist auf 9

Was möchten Sie tun?

Programm ändern: 1

Ton andern: 2

Gerät ausschalten: 0

0

Das Gerät hat den Zustand 0 // Kontrollausgabe

Aktives Programm 1

Die Lautsärke ist auf 5

Gerät einschalten: 1

Gerät ausschalten: 0

// Jetzt erscheint Abfrage ein_aus wieder, also der Anfang zum erneuten Einschalten. Genauso möchte ich es haben. Wenn möglich ohne GOTO.

Gruß

lempy

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...