int Array Codefehler? Aber wo...

a400

Mitglied
Guten Tag zusammen,
ich hab ein ganz kleines Problem bezüglich einer Funktion mit 2 int Arrays.
Aber hier ertstmal der Code:
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
 
Hi.

Das Problem ist, das die Funktion suchen nicht richtig programmiert ist.

Du durchsuchst immer das ganze Array und da das Array normalerweise erstmal mit Nullen gefüllt ist, ist das Ergebnis der Suche immer "false".

Was du machen solltest, ist das wenn du die Zahlen in den beiden Arrays gefunden hast, dann die Schleife sofort zu beenden und als Ergebnis "true" zurückzuliefern. Wenn die Schleife allerdings vollständig durchlaufen wurde lieferst du "false" zurück.

Dann solltest du versuchen möglichst keine globalen Variablen zu definieren. Da siehst du und andere irgendwann überhaupt nicht mehr durch. Verwende doch Parameter bei den Funktionen und auch die Rückgabewerte anstatt diese nochmal extra in eine Variable (suchergebnis) zu speichern.

Die Arrays sind erstmal OK da du vermutlich noch nicht so vertraut mit Pointern bist.
Code:
const int size = 10; 
int arrayXWert[size]; 
int arrayYWert[size]; 

int arrayspeicherstelle; 

/* mehr globale Variablen solltes es wirklich nicht sein. */

bool suche_werte (int x_wert, int y_wert) {
  /* die Suche muß nur bis "arrayspeicherstelle" erfolgen, da
     alle anderen Werte der Arrays noch 0 sind. */
  for (int i = 0; i < arrayspeicherstelle; ++i) {
    if (arrayXWert[i] == x_wert && arrayYWert[i] == y_wert) 
      /* Werte in den Arrays an Position i gefunden. */
      return true;
  }
  /* die Schleife wurde vollständig bis zur aktuellen "Fühllhöhe"
     durchlaufen, und die Werte wurden nicht gefunden. */
  return false;
}

Die Variable suchergebnis brauchst du jetzt nicht mehr.

Du brauchst nur die Funktion suche_werte mit den zu suchenden Werten aufrufen und das Ergebnis in einer if-Abfrage testen:
Code:
if (!suche_werte (1, 5)) {
  /* werte wurden nicht gefunden, also hinzufügen. */
  werte_einfuegen (1, 5);
}
 
Super vielen Dank für die Mühe, die du dir gemacht hast, ich werd mir das gleich nochmal anschauen, und meld mich ggf. nochmal, falls es noch nicht so klappen sollte. Danke
 
Zurück