Suche nach bestimmten Wert in mehrdimensionalen Feldern



  • Hallo zusammen,

    ich hoffe mal ich bin hier richtig. Habe es ja eigentlich garnicht mit dem Programmieren, und vor allem nicht in C++. Muss aber fürs Studium ein Programm schreiben. Es soll eine Art Lagersoftware werden. Man hat ein Regal mit 5 Fächern und jedes Fach hat 3 Plätze (Mehrdimensionales Feld, integer). Jetzt kann ich z.b. jedem Fach und Platz eine Zahl zuweisen (in meinem Fall eine Seriennummer unter der ein Artikel geführt wird).

    Das Einbuchen der Artikel und das Anzeigen in einer Matrix, welcher Artikel sich wo befindet ist alles kein Problem für mich. Es soll jedoch auch die Funktion geben, dass ich zum Ausbuchen eines Artikels aus dem Lager die Seriennummer des Artikels eingebe und das Programm dann das Fach findet.

    Ich hatte die Idee, da es sich um ein zweidimensionales Feld handelt, dass ich einfach zwei ineinerander verschachtelte FORs nehme die die Felder durchzählen und ich dann mit einem IF vergleichen kann.

    Das sieht dann bei mir so aus:

    for(x=1;x<6;x++){
    for(y=1;y<4;y++){

    if(regal[x][y] == turbsuche) {
    cout << endl;
    cout << "Turbine " << turbsuche << " befindet sich in Fach " << i << " auf Platz " << k << " ";
    cout << endl;
    regal[x][y] = 0;
    cout << "Turbine wurde erfolgreich ausgebucht" <<endl; }}}

    Wieso kann ich so nicht nach einem Eintrag in meinem Mehrdimensionalen Feld suchen? Die Variable turbsuche entspricht der Seriennummer, nach der ich suchen will. Durch regal[x][y] = 0 setze ich meinen Lagerplatz sozusagen leer.

    Um Hilfe wäre ich echt dankbar. Hab mir schon ewig den Kopf drüber zerbrochen an was es liegen könnte, komm aber nicht wirklich drauf.



  • Hallo,

    Was genau ist denn nun dein Problem? Mal abgesehen davon, dass i und k hier unbekannt sind, sieht dein Code OK aus (Bis auf die Einrückungen).
    Bitte verwende die CodeTags. So sieht alles gleich besser aus.
    Außerdem, nutze den Debugger.



  • Bedenke dass das erste Element in einem Feld mit dem Indize Null angesprochen wird, und nicht Eins.
    Mit deinen for-Schleifen testest du nur zwischen [1][1] und [5][3].



  • Also das mit dem I und K ist ganz einfach das soll eigtl. X und Y sein 🙂

    Er findet aber immer nur eine Seriennummer wenn sie in regal[1][1] eingetragen wird. Das C++ bei den Feldern bei 0 das Zählen anfängt ist mir bewusst, ich gebe aber beim Einbuchen einer Seriennummer ein, dass sie sich im 1. Fach auf Platz 3 befindet. Und so kann ich dann doch das Feld direkt ansprechen und muss nicht immer noch die variable - 1 machen ... das 0. element in meinem Feld wird sozusagen nie belegt und bei der eingabe wird abgesichert, dass keine Null eingegeben wird.
    Ja aber so geht es nicht..... er findet nur Nummern in Fach 1 Platz 1.... sobald ich ein anderes Feld anspreche findet er es nicht mehr...
    Das kann doch echt nicht sein... aber Danke schonmal für die schnelle Antwort.



  • Öhhhm...
    also es müsste eigentlich funktionieren.
    ich hab dir einfach das ganze nochmal in Code runtergeschrieben
    (diesmal sucht er aber nicht nach einer bestimmten Turbine, sondern nur danach ob was drin ist, das Prinzip ist dennoch dasselbe):

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	/* Was gibts in unserem Fach?
    	in diesem Fall nur ne Turbine oder nichts */ 
    	enum platz{LEER,TURB};
    	platz regal[5][3];
    
    	// Array mit Zufallswert füllen
    	for(int i = 0; i < 5; i++)
    		for(int k = 0; k < 3; k++)
    		{
    			int inhalt = (rand()%2);
    			if(inhalt==0)
    				regal[i][k]=LEER;
    			else
    				regal[i][k]=TURB;
    		}
    
    	// Array einfach mal ausgeben:
    	for(int i = 0; i < 5; i++)
    		for(int k = 0; k < 3; k++)
    			cout << "Im Fach " << i << " auf Platz " << k << " befindet sich " << regal[i][k] << endl;
    
    	for(int i = 0; i < 5; i++)
    	{
    		for(int k = 0; k < 3; k++)
    		{
    			if(regal[i][k]==TURB) // Turbine gefunden?
    			{
    				cout << "Es befindet sich eine Turbine im Fach " << (i+1) << " auf Platz " << (k+1) << endl;
    				regal[i][k]=LEER;
    				cout << "Turbine wurde entfernt." << endl;
    			}
    		}
    	}
    
    	// Array nochmal ausgeben:
    	for(int i = 0; i < 5; i++)
    		for(int k = 0; k < 3; k++)
    			cout << "Im Fach " << i << " auf Platz " << k << " befindet sich " << regal[i][k] << endl;
    
    	return 0;
    }
    

Anmelden zum Antworten