Zugriff auf bereits bestehende Felder



  • Hallo,

    ich habe ein kleines Problem und wissen nicht weiter.

    Ich habe ein Structure so:

    struct erstellen{

    Byte id;

    }

    ich möchte 5 ID's eingeben und gleichzeitig verhindern dass die gleiche ID zweimals eingeben werden.

    Hier ein grobe Beispiel.

    int main (...){

    erstellen data[5];

    //initialisiere ID
    for(Int32 i = 0; i < 5; i++){

    data[i].id = 0;

    }

    for (Int32 i = 0; i < 5; i++){

    Console::Write("Bitte geben Sie einen ID ein");
    data[i].id = Convert::ToByte(Console::ReadLine());

    }

    könnte jemand mir bitte einen hinweis wie ich folgendes vorgehen kann bzw. die vorherige felder prüfen (leider ohne pointer, weil dass im nächsten Studienheft vorkommt) z.B.

    data[0].id = 1
    data[1}.id = 3
    data[2].id = 2
    data[3].id = 1
    data[4].id = 4

    hier sehen wir dass die Zahl 1 zweimal auftritt und die möchte ich abfragen ob die Wert den ich eingebe bereits verwendet ist, in irgendein Feld. D.h. wenn ich an der 5te stelle bin muss alle felder vorher abfragen, geht das?

    Das Program kann vielleicht Syntaktisch nicht ganz korrekt sein, es ist nur eine grobe beispiel.

    Vielen Dank. 🙂



  • Du musst einfach den eingelesenen Wert in einer temporären Variable speichern (anstatt ihn direkt ins Array zu schreiben) und dann mit allen Elementen des Arrays vergleichen, und nur wenn der Wert nicht bereits vorkommt (kannst du dir z.B. mit einer boolschen Variable merken), speicherst du ihn im Array. Dazu brauchst du eigentlich nur den Vergleichsoperator ("==") und eine for-Schleife (kennst du ja schon).



  • Hallo,

    Danke für den Tipp. Ich habe jetzt ein paar versuche aber komme nicht auf der lösung, anbei ist meinem Code:

    struct kiste{

    Byte id;
    };

    int main(array<System::String ^> ^args)
    {
    kiste daten[KISTENTOTAL];
    Byte id_wert;

    for (Int32 i = 0; i < KISTENTOTAL; i++){

    daten[i].id = 0;
    }

    for (Int32 i = 0; i < KISTENTOTAL; i++){

    Console::Write("Bitte geben Sie ein ID ein ");
    id_wert = Convert::ToByte(Console::ReadLine());

    if (id_wert == 0 || id_wert > KISTENTOTAL){

    Console::Write("Ungültige Wert");
    }
    else {

    //Hier versuche ich zu prüfen ob Wert bereits vergeben ist.
    for (Int32 x = 0; x < KISTENTOTAL; x++){

    if (id_wert != daten[i].id){

    daten[i].id = id_wert;
    }
    else {

    Console::WriteLine("ID ist schon vergeben");
    break;
    }
    }
    }

    Console::Write("ich bin jetzt hier");
    }

    return 0;
    }

    an der Stelle wo ich prüfe ob die wert bereits vergeben ist komme ich nicht weiter. Kann jemand dort helfen?

    Danke.



  • Das hier wäre eine Möglichkeit.
    Ich weiß das der Code nicht ganz in Dein Projekt passt, aber diesen Code nun an Dein Projekt anzupassen wollte ich für Dich übrig lassen.

    Benutze doch bitte auch das nächste mal Code Tags.

    int _wert[5] = {-1,-1,-1,-1,-1};//Array vereinbaren und initialisieren:
    int _vergleich = 0;//Varaible für den Vergleich vereinbaren und initialisieren:
    bool _wertOkay = false;//Variable für Erfolgreichen oder Erfolglosen Vergleich:
    String^ _ergaenzung = String::Empty;//Text ergänzen:
    
    for(int x=0; x<=4;x++)
    {
    	Console::Write("Bitte geben Sie die ID {0} ein: ",_ergaenzung);
    	_vergleich = Convert::ToInt32(Console::ReadLine());//Eingabe in die Variable schreiben:
    
    	for(int z=0; z<=4; z++)
    	{
    		if(_wert[z] == _vergleich)//Vergleichen ob der Wert schon existiert:
    		{
    			_wertOkay = false;//Wert nicht übernehmen:
    			_ergaenzung = "nochmals";//Ergänzung des Textes vornehmen:
    			x--;//Schleifenzähler um 1 dekrementieren:
    			break;//Schleife verlassen:
    		}
    		else
    		{
    			_wertOkay = true;//Wert übernehmen:
    			_ergaenzung = String::Empty;//Ergänzung des Textes vornehmen:
    		}
    	}
    
    		if(_wertOkay == true)//Wenn Wert noch nicht vorhanden ist:
    		{
    			_wert[x] = _vergleich;//Wert in das Array schreiben:
    		}
    }
    
    for(int y=0; y<=4;y++)
    {
    	Console::WriteLine("{0}",_wert[y].ToString());//Array ausgeben:
    }
    

    Gruß

    Doug_HH



  • Vielen Herzlichen Dank für die Beispiel. Wirklich professionell gemacht. Ich werde dass mit dem Code Tags nachschauen.

    nochmals Vielen Dank. 🙂


Anmelden zum Antworten