Array



  • Hi Leute,
    habe ein kleines Problem, ich weiß nicht mehr weiter und vielleicht könnt mir helfen.

    hier ist erstmal mein code:

    int feld[10][10];// Tabelle Kinderkino 
    int feld1[10];//Tabelle Kinderkino// Darstellung letzte Spalte 10
    
    	for(int spalten=0;spalten<10;spalten++)
    	{
    		for(int zeilen=0;zeilen<9;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<9;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);
    
    	do
    	{
    		cout<<"Bitte w\x84hlen Sie die Sitzreihe";
    		textcolor(RED);
    		cout<<"  (A-J)";
    		textcolor(LIGHTGRAY);
    		cout<<"   => ";
    		cin>>sitzreihe;
    	}
    	while(sitzreihe<'A' || sitzreihe>'J');
    
    	do
    	{
    		cout<<"Bitte w\x84hlen Sie den Sitzplatz";
    		textcolor(RED);
    		cout<<"  (1-10)";
    		textcolor(LIGHTGRAY);
    		cout<<"  => ";
    		cin>>sitzplatz;
    	}
    	while(sitzplatz<1 || sitzplatz>10);
    

    ich stelle die zahlen 1-10 dar als array.
    die ersten zwei for schleifen gelten nur für die zahlen 1-9 die 10 musste ich extra nochmal 10 mal in der 10nten spalte darstellen.

    So nachdem ich aber die Reihe eingegeben habe und den sitzplatz möchte ich das er mir die sitzplätze in der tabelle markiert.

    soll möglichst mit arrays gemacht werden.
    danke im vorraus und ein schönes we 🙂



  • Hallo C_Style,

    eigentlich hast du schon alles realisiert um dein Problem zu lösen. Du willst also, dass das Programm, nachdem der Benutzer die Sitzreihe und den Sitzplatz eingegeben hat, den entsprechenden Platz in der Tabelle markiert. Dazu machst du nichts weiter als nach der letzten Eingabe den Bildschirminhalt zu löschen und die kompletten Tabellen mit dem markierten Eintrag auszugeben. Es wäre wahrscheinlich sinnvoll, die Ausgaben in einer Funktionen zu realisieren, da du jede ja zweimal benötigst. Hänge dieses Code-Stück einfach an deinen ran, dann müsste es funktionieren.

    // [...]
    
    system("CLS") ; // Bildschirminhalt löschen
    
    for(int spalten=0;spalten<10;spalten++)
    {
         for(int zeilen=0;zeilen<9;zeilen++)
         {
              feld[zeilen][spalten]=0;    
              feld[zeilen][spalten]=zeilen+1;
              gotoxy(22+zeilen*4,5+spalten*2);
              //=================================================
              // Wenn es sich um den reservierten Platz handelt,
              // wird er in Rot ausgegeben.
              if((zeilen == sitzreihe) && (spalten == sitzplatz))
              {
                   textcolor(RED) ; // Markierungsfarbe Rot
                   cout<<feld[zeilen][spalten];
                   textcolor(LIGHTGRAY) ; // Zurücksetzung auf 
                                          //Standardfarbe
              }
              // Ist es ein anderer Platz, wird dieser in 
              // Grau ausgegeben.
              else
                cout<<feld[zeilen][spalten];
              //=================================================
         }
    }
    
    for(int spalten=0;spalten<10;spalten++)
    {
         for(int zeilen=0;zeilen<9;zeilen++)
         {
              feld[zeilen][spalten]=10;    
              gotoxy(58,5+spalten*2); 
              //=================================================
              if((zeilen == sitzreihe) && (spalten == sitzplatz))
              {
                   textcolor(RED) ; 
                   cout<<feld[zeilen][spalten];
                   textcolor(LIGHTGRAY) ;
              }
              else
                cout<<feld[zeilen][spalten];
              //=================================================     
         }
    }
    


  • danke aber ich habe glaube was vergessen

    der sitzplatz wird in zahlen von 1-10 und die sitzreihe von A-J eingeben.
    außerdem kann ich wählen wie viel kinokarten ich haben will.
    ich kann bis zu 4 kinokarten bestellen wenn ich möchte die er mir auch möglichs markiert.



  • Ich versuche mal zu erzählen wie das ablaufen soll.

    also ich habe ein Menü
    in diesem menü kann ich wählen wo hin ich möchte.
    sag wir mal eins.
    so dann kommt die tabelle. die sitzreihen werden abgefragt als zeichen (a-j) der sitzplatz zahl 1-10 und wiviel karetn ich haben möchte(1-4).

    wenn ich die sachen eingegeben habe. soll er mir die stelle in der tabelle markieren .
    wenn ich dann wieder zum menü zurückkehre und wieder den menüpunkt wähle möchte ich das die stelle immer noch markiert ist die ich vorhin eingegeben habe.
    falls ich den selben platz erneut eingebe der schon besetzt ist erschein ne feehlermelddung und ich wähle erneut.



  • 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