Arrays mit Überprüfung - Codeproblem



  • Guten Tag zusammen,
    ich hab ein ganz kleines Problem bezüglich einer Funktion mit 2 int Arrays.
    Aber hier ertstmal der Code:

    const int size = 10;
    int arrayXWert[size];
    int arrayYWert[size];
    int x_Wert;
    int y_Wert;
    int arrayspeicherstelle;
    int startwert;
    bool suchergebnis;
    
    // prüft ob die Werte schon in den Arrays sind
    int suchen()
    {
    for(int i = 0; i < size; i++)
    {
    	if(arrayXWert[i] ==x_Wert)
    	{
    		cout <<"Hier steht der x_Wert: "<< i<< endl;
    
    		//teste ob der y-Wert auf dem 2.ten Array auch an der gleichen Position wie i ist
    		if(arrayYWert[i] == y_Wert)
    			{
    				cout << "und der y-Wert stimmt auch ";
    				cout <<"Hier steht der y-Wert: "<< i<< endl;
    				cout <<endl;
    				suchergebnis=true;
    			}
    		else
    			{
    				cout<<"y_Wert noch nicht enthalten"<< endl;
    				cout << "somit angriff mit den Koordinaten "<<x_Wert <<" " << y_Wert<< endl;
    				cout <<endl;
    				suchergebnis =false;
    			}	
    	}
    	else
    		{
    			suchergebnis = false;
    		}
    
      }
    return suchergebnis;
    }
    
    // packt die Werte in die Arrays
    void zahleninArrays()
    {
           suchen();
    	if(startwert==0)
    	{
    		if (arrayspeicherstelle < size) 
    		{
    			arrayXWert[arrayspeicherstelle] = x_Wert;
    			arrayYWert[arrayspeicherstelle] = y_Wert;
    			arrayspeicherstelle++;
    			cout << "Startwert erfolgt und Angriff mit den Werten "<< x_Wert<< " " << y_Wert<< endl;
    			cout <<endl;
    		}
    		startwert++;
    
    	}
    
    	else//(startwert > 0)
    	{ 
                   suchen();
    		if(!suchergebnis)//1 somit noch nicht im Array
    		{
    			// dann eintragen und die Speicherstelle erhöhen
    			arrayXWert[arrayspeicherstelle] = x_Wert;
    			arrayYWert[arrayspeicherstelle] = y_Wert;
    			arrayspeicherstelle++;	
    			cout << "Naechster Wert drin"<< endl;
    			cout << endl;
    		}
    		else// also suchenergebnis== true, somit gefunden im Array
    		{
    			// dann neue Zahlen generieren und test erneut durchführen
    			cout << "Muss neu gemacht werden"<< endl;
    			cout <<endl;
    			//neugenerieren();
    		}
    	}
    
    }
    
    int main ()
    {
    // eingabe einiger werte und funktionsaufruf
    x_Wert=1;
    y_Wert=3;
    suchen();
    zahleninArrays();
    
    x_Wert= 2;
    y_Wert=5;
    suchen();
    zahleninArrays();
    
    x_Wert= 2;
    y_Wert=5;
    suchen();
    zahleninArrays();
    
    // Ausgabe der Arrays zum prüfen
    cout << arrayXWert[0]<< " "<< arrayXWert[1]<< " "<<arrayXWert[2]<<" " <<arrayXWert[3]<<endl;
    cout << arrayYWert[0]<< " "<< arrayYWert[1]<< " "<<arrayYWert[2]<<" " <<arrayYWert[3]<<endl;
    

    Das Programm kann man Compilieren, es läuft, also schaut es euch an. Kurze Beschreibung des Codes. Also ich habe 2 Arrays, die parallel laufen und schreibe in jedes eine Zahl an die gleiche Position. Falls die Zahlenkombination noch nicht in den Arrays an der gleichen Position enthalten ist, kommen sie hinzu, also werden sie in die Arrays eingefügt. Sind die Zahlen jedoch enthalten, sollen sie nicht mehr eingefügt werden und stattdessen neue Zahlen generiert werden und dieser Test erneut ablaufen.
    Das eigentliche Problem scheint meiner Ansicht daran zu liegen, dass ich den boolwert suchergebnis nicht in der Funktion zahleninArrays abfragen kann. Aber wie gesagt, das ist nur ne Vermutung. Ich hab jetzt schon alles, was mir so einfiel probiert und komm da einfach nicht weiter. Kann mir da jemand mal bitte helfen? Ist echt richtig wichtig!Danke



  • if( !suchen()) {
      zahleninArrays();
    }
    

    Ein paar weitere Bemerkungen:
    Deine Suchschleifen sind falsch. Wenn Du den Wert gefunden hast, dann musst Du die Schleife abbrechen. Ansonsten wird das Sucherergebnis ja wieder überschrieben.
    Wenn das Array an einer Position nicht übereinstimmt, dann solltest Du keine Ausgabe machen, denn das bedeutet ja nicht, das der Wert nicht noch in dem Array ist.
    Beispiel: 1, 2, 3, 4, 5
    Du suchst 3: Also 1 != 3 -> keine Ausgabe, 2 != 3 keine Ausgabe 3 == 3 prima, Abbruch und zurückgeben Wert gefunden.

    Die Suchroutine sollte ein bool zurückgeben und die gesuchten Werte besser übergeben bekommen. Analog das Einfügen:

    bool suchen( const int x, const int y)
    {
      //... hier Dein Code
    }
    
    void zahleninArrays( const int x, const int y)
    {
     // ... hier Dein Code
    }
    

    Die globalen Variablen wie suchergebnis sind dann überflüssig.



  • globale Variablen sin prinzipiell Schrott



  • Vorden schrieb:

    globale Variablen sin prinzipiell Schrott

    Alles was man aus Prinzip macht ist aber noch größerer Schrott. (imho).

    Caipi



  • Habt vielen Dank für die Lösung des Problems, ich hab es jetzt so abgeändert. Danke besonders an "niemand". 🙂


Anmelden zum Antworten