for-Schleife in der direkten Auswahl übersprungen?



  • Hi Leute, ich hab ein Problem.

    Ich soll ein dynamisches Array mit Strings nach der Größe sortieren lassen.
    Vorraussetzung: Es soll die Direkte Auswahlmethode genutzt werden.

    Ich hab mich im Internet schon umgeguckt und einige Beispiele zu dieser Methode gefunden. Wenn ich es aber umsetze wird mir ein unsortiertes Array ausgegeben.

    Hier ist der Code
    //-----------------------------------------------------------------------------------------------------------------------

    randomize();
    AnsiString Buchstaben[26]={"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"};
    AnsiString *Array = 0;
    int i;
    int j;
    //-----------------------------------------------------------------------------------------------------------------------
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
    i=EingabeDaten->Text.ToInt();
    j=EingabeLaenge->Text.ToInt();
    Button2->Enabled=true;
    Button3->Enabled=true;
    Button4->Enabled=true;
    Memo1->Clear();
    }
    //-----------------------------------------------------------------------------------------------------------------------
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    AnsiString a;
    Array = new AnsiString [i];
    for(int c=0;c<i;c++){
      for(int b=0;b<j;b++){
          a = a + Buchstaben[random(26)];
      }
    Array[c]=a;
    a = "";
    }
        for (int y=0; y < EingabeLaenge->Text.ToInt(); y++) {
           int min = y;
           for (int Y= y+1; Y < EingabeLaenge->Text.ToInt();  Y++)  {
           if ( Array[Y] < Array[min] ){
           min=Y;
           AnsiString x = Array[min];
           Array[min] = Array[y];
           Array[y] = x;
           }
        }
        }
    for(int z = 0;z<=EingabeDaten->Text.ToInt()-1;z++){
    Memo1->Lines->Add(Array[z]);
    }
    delete[] Array;
    Array=0;
    Button2->Enabled=false;
    Button3->Enabled=false;
    Button4->Enabled=false;
    }
    

    Danke schonmal im Voraus



  • Geh doch mit dem Debugger durch, dann siehst du sofort, wo nicht das gemacht wird, was du willst.

    Wieso benutzt du eigentlich nicht die STL? Also std::vector und die Sortierfunktion std::sort() ?



  • Nexus schrieb:

    Wieso benutzt du eigentlich nicht die STL? Also std::vector und die Sortierfunktion std::sort() ?

    Er benutzt den Borland Builder. 😉

    @smoose

    Ich hab mich im Internet schon umgeguckt und einige Beispiele zu dieser Methode gefunden. Wenn ich es aber umsetze wird mir ein unsortiertes Array ausgegeben.

    Das ist das Problem. Nicht einfach kopieren und hoffen, dass es funktioniert. Du musst den Code verstehen und dann schaffst du das auch alleine.

    Wenn du eine eigene Sortiermethode haben willst, dann kannst du dir mal Bubblesort anschauen. Das ist zwar ziemlich ineffizient, aber sehr einfach zu implementieren.



  • drakon schrieb:

    Er benutzt den Borland Builder. 😉

    Hat man da keine STL zur Verfügung? Sorry, ich kenn mich mit dem C++-Builder nicht aus...

    (Das VCL-Forum würde wohl besser passen...)



  • Ich hab den Fehler gefunden.
    Das Problem war die übergabe des Längenparameters.

    Aber trotzdem Danke für eure Hilfe



  • Nexus schrieb:

    drakon schrieb:

    Er benutzt den Borland Builder. 😉

    Hat man da keine STL zur Verfügung? Sorry, ich kenn mich mit dem C++-Builder nicht aus...

    (Das VCL-Forum würde wohl besser passen...)

    Doch, die STL steht dort ebenso zur Verfügung, von dem unsauberen Programmierstil (schlechte Einrückungen, globale Variablen...) ganz abgesehen.



  • Naja, Builder ist sowieso nicht unbedingt die richtige Wahl, um C++ zu lernen... 😉



  • Wieso nicht?
    Man kann damit auch einfache Konsolenprogramme schreiben. Der Debugger z.Bsp. ist allemal einfacher zu bedienen als der gdb. 🙂
    Der BCB verleitet natürlich eher zu GUI-Spielereien, was dann eher das Problem ist.



  • Ich finde es ehrlich gesagt nicht gut, wenn man von Anfang an mit void main() und <iostream.h> konfrontiert wird. Dazu kommt AnsiString statt std::string , und so weiter... Man kann es schon lernen, aber Standard-C++ eignet man sich meines Erachtens besser mit anderen IDEs an.



  • Was hat denn jetzt void main und iostream.h mit dem BCB zu tun? Auch dort ist Standard-C++ durchaus möglich. 🙂
    Ein void main wirst du dort bei einem Konsolenprojekt standardmäßig auch nicht finden. Das der BCB die Standardheader nicht kennt ist ebenfalls nur eine Legende.



  • Braunstein schrieb:

    Was hat denn jetzt void main und iostream.h mit dem BCB zu tun? Auch dort ist Standard-C++ durchaus möglich. 🙂

    Mit kleineren Einschränkungen (Die Einschränkungen bemerkt man aber in der Regel erst bei Fremdbibliothekten, wobei hier der 2009 wohl deutliche Verbesserungen bringen soll [zum Teil geht auch schon der 2007]).

    cu André



  • Die Einschränkungen dürften einem Anfänger, der Konsolenprojekte schreibt, kaum auffallen. Sie betreffen ja auch in der Hauptsache Templates.
    Der 2009er berherrscht ja schon Teile des neuen Standards.



  • Braunstein schrieb:

    Die Einschränkungen dürften einem Anfänger, der Konsolenprojekte schreibt, kaum auffallen. Sie betreffen ja auch in der Hauptsache Templates.
    Der 2009er berherrscht ja schon Teile des neuen Standards.

    Und boost unterstützt er auch. 🙂


Anmelden zum Antworten