Array



  • Um eine Doppel-Reservierung zu vermeiden, musst du auf jeden Fall die reservierten Plätze zwischenspeichern. Man könnte zu diesem Zweck ein Struktur-Array verwenden.

    struct reserviert
    {
         int iSitzreihe ; 
         int iSitzplatz ;
    };
    

    Jetzt deklariert man ein Struktur-Array vom Typ "reserviert" mit genug Elementen für alle Sitzplätze (Dies wäre mit dynamischen Datenstrukturen effektiver!). Die einzelnen Array-Elemente(/Strukturen) können nun in einer For-Schleife durchlaufen werden und die eben eingegebene Sitzreihe und den Sitzplatz mit den schon reservierten vergleichen. Außerdem kannst du dieses Array in der Ausgabe durchlaufen und so die Markierung der reservierten Plätze realisieren.



  • aha , ich habe keine ahnung wie ich das nutzen soll.
    was ich kann sind nach, vorprüfende schleifen, if-else-anweisungen,arry1-2 dimensional,bubblesort
    kann mir einer was auf dieser basis helfen??

    ist nett gemeint aber ich komm damit noch nicht klar



  • for(int spalten=0;spalten<10;spalten++)
    	{
    		for(int zeilen=0;zeilen<10;zeilen++)
    		{
    			feld[zeilen][spalten]=0;	
    			feld[zeilen][spalten]=zeilen+1;
    			gotoxy(22+zeilen*4,5+spalten*2);	
    			cout<<feld[zeilen][spalten];
    		}
    	}
    
    	for(int spalten=0;spalten<10;spalten++)
    	{
    		for(int zeilen=0;zeilen<10;zeilen++)
    		{
    			feld[zeilen][spalten]=10;	
    			gotoxy(58,5+spalten*2);	
    			cout<<feld[zeilen][spalten];
    		}
    	}
    
    	do
    	{
    		cout<<endl<<endl<<endl;
    		cout<<"Wieviel Kinokarten wollen Sie?";
    		textcolor(RED);
    		cout<<"  (max.4)";
    		textcolor(LIGHTGRAY);
    		cout<<" => ";
    		cin>>kinokarten;
    	}
    	while(kinokarten<1 || kinokarten>4);
    
    	do
    	{
    		cout<<"Bitte w\x84hlen Sie das Kino";
    		textcolor(RED);
    		cout<<"       (4)";
    		textcolor(LIGHTGRAY);
    		cout<<"     => ";
    		cin>>kino;	
    	}
    	while(kino>4 || kino<4);
    
    		cout<<"Bitte w\x84hlen Sie die Sitzreihe";
    		textcolor(RED);
    		cout<<"  (A-J)";
    		textcolor(LIGHTGRAY);
    		cout<<"   => ";
    		cin>>sitzreihe;
    
    	do
    	{
    		cout<<"Bitte w\x84hlen Sie den Sitzplatz";
    		textcolor(RED);
    		cout<<"  (1-10)";
    		textcolor(LIGHTGRAY);
    		cout<<"  => ";
    		cin>>sitzplatz;
    	}
    	while(sitzplatz<1 || sitzplatz>10);	
    
    	cout<<"Kinotag?";	
    	textcolor(RED);
    	cout<<"                        (j/n)";
    	textcolor(LIGHTGRAY);
    	cout<<"   => ";
    	cin>>kinotag;
    
    	for(int spalten=0;spalten<10;spalten++)
    	{
    		 for(int zeilen=0;zeilen<10;zeilen++)
    		 {
    			 feld[zeilen][spalten]=0;    
    			 feld[zeilen][spalten]=zeilen+1;
    			 gotoxy(22+zeilen*4,5+spalten*2);
    
    			  if((spalten == sitzplatz-1) && (zeilen == sitzreihe-1))
    			  {
    				   textcolor(LIGHTRED); 
    				   cout<<feld[zeilen][spalten];  
    				   textcolor(LIGHTGRAY);
    			  }
    			  else
    			  {
    				   textcolor(LIGHTGRAY); 
    				   cout<<feld[zeilen][spalten];
    			  }
    		}
    	}
    
    	for(int spalten=0;spalten<10;spalten++)
    	{
    		 for(int zeilen=0;zeilen<10;zeilen++)
    		 {
    		      feld[zeilen][spalten]=10;    
    		      gotoxy(58,5+spalten*2);
    
    			if((spalten == sitzplatz-1) && (zeilen == sitzreihe-1))
    			{
    			     textcolor(LIGHTRED);
    				 cout<<feld[zeilen][spalten];	
    				 textcolor(LIGHTGRAY);
    			}
    			else
    			{  
    				textcolor(LIGHTGRAY); 
    				cout<<feld[zeilen][spalten];
    			}
    		}
    	}
    


  • Das ist vielleicht nicht allzu effektiv, aber du kannst ja auch zwei weitere Arrays deklarieren (eins für die Sitzreihe und eines für den Sitzplatz). Beide Arrays haben dann die Anzahl von Elementen, die der Gesamtanzahl von Sitzen entspricht.

    #define ANZAHL_SITZPLAETZE ((10 + 1) * (10 + 1) + (10 + 1))
    
    // [...]
    
    int iRSitzreihen  [ANZAHL_SITZPLAETZE] ; // R für reserviert
    int iRSitzplaetze [ANZAHL_SITZPLAETZE] ; 
    
    // [...]
    

    Eine Schleife in der die schon reservierten Plätze markiert werden, würde dann so aussehen.

    // [...]
    
    for(i = 0 ;  i <= (kinokarten - 1) ; i++)
    {
         if((spalten == iRSitzplaetze[i]) && (zeilen == iRSitzreihen[i]))
         {
              textcolor(LIGHTRED);
              cout<<feld[zeilen][spalten];    
              textcolor(LIGHTGRAY);
         }
    else
         cout<<feld[zeilen][spalten];
    }
    
    // [...]
    


  • danke für den beitrag aber ich glaube wir verstehen uns immer noch nicht.
    die sitzreihe wird als buchstaben(a-j) und der sitzplatz von 1-10 eingebgeben.



  • WilMen schrieb:

    Hallo C_Style,

    // [...]
    
    system("CLS") ; // Bildschirminhalt löschen
    

    system (""); ist böse. Wenn ihr eine saubere Funktion braucht, die den Bildschirminhalt löscht, dann inkludiert conio.h und die Funktion zum löschen lautet ' clrscr (); ' oder ihr könnt euch eine eigene Funktion erstellen mit diesem Code:

    void clear(void)
    {
      COORD coordScreen = { 0, 0 };
      DWORD cCharsWritten;
      DWORD dwConSize;
      HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
      CONSOLE_SCREEN_BUFFER_INFO  csbi;
      GetConsoleScreenBufferInfo(hCon, &csbi);
      dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
      FillConsoleOutputCharacter(hCon, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
      GetConsoleScreenBufferInfo(hCon, &csbi);
      FillConsoleOutputAttribute(hCon, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
      SetConsoleCursorPosition(hCon, coordScreen);
    }
    

    So wird die Löschfunktion clear(); nachher heißen.

    Ist alles ein einfach Tipp von mir. 😉



  • Wenn ihr eine saubere Funktion braucht, die den Bildschirminhalt löscht, dann inkludiert conio.h und die Funktion zum löschen lautet ' clrscr (); '

    ...das würde ich generell nicht empfehlen. Denn mit den meisten Compilerauslieferungen ist 'clrscr ()' in der conio.h nicht mehr deklariert. Zu empfehlen wären sonst Escapesequenzen oder, wenn die Plattformunabhängigkeit keine Rolle spielt, die obige Lösung mit der API.

    Mfg mikey.



  • Wenn du dich nicht darum kümmern willst, sondern einfach schnell und einfach die Farbe wechseln möchtest: http://ic.c-plusplus.net

    @mikey: Escapesequenzen sind genausowenig plattformunabhängig.

    MfG SideWinder



  • @C_Style

    Das schriebst, dass man die Sitzplaetze in Zahlen von 1-10 und die Sitzreihe von A-J eingeben soll. Du hast aber "Feld" eindeutig als Integer-Array deklariert. Du weißt doch sicherlich, dass man Integer-Variablen nicht mit Buchstaben initialisieren kann? Oder habe ich dort etwas falsch verstanden?



  • WilMen schrieb:

    Du weißt doch sicherlich, dass man Integer-Variablen nicht mit Buchstaben initialisieren kann? Oder habe ich dort etwas falsch verstanden?

    Klar kann man das. Nur wird vermutlich nicht das herauskommen, was du erwartest 😉 (char ist ein ganz gewöhnlicher Ganzzahltyp, der nur von deiner Programmlogik als ASCII-Zeichen interpretiert wird)



  • SideWinder schrieb:

    @mikey: Escapesequenzen sind genausowenig plattformunabhängig.

    Das heist, Escapesequenzen sind platformabhängig ? Auch Zeilenumbrüche, Tabs, etc. ?!

    @ WilMen: GB @ cpp-world.de thx 🙂

    MfG mikey.



  • mikey schrieb:

    SideWinder schrieb:

    @mikey: Escapesequenzen sind genausowenig plattformunabhängig.

    Das heist, Escapesequenzen sind platformabhängig ? Auch Zeilenumbrüche, Tabs, etc. ?!

    Die nicht, aber diese ESC[... Codes zur ansteuerung der Konsole, die du oben vorgeschlagen hast.



  • Okay danke, wieder was dazugelernt.



  • Ich glaube ich versteh endlich was ihr mir sagen wolltet, ich habe nicht besonders nachgedacht als ihr mir die vielen infos geschrieben habt.
    Aber jetzt weiß ich wie ich das mache.

    Bedank mich herlich bei euch 😃 😃 😃 🙂 🙂 🙂 😉 😉


Anmelden zum Antworten