Rekursive Suche nach dem kleinsten Element in einer Zahlenreihe



  • Hallo
    ich habe ein Problem ...
    dieses Programm funktioniert nicht,wenn das erste Element in der
    Zahlenreihe bereits das kleinste von allen ist..
    Hat jemand einen Tipp ? Benutze Dev-C++ 🙂

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>

    void Zahlen(int *array,int Menge )
    {
    int zahlen[11];
    int index;

    srand((unsigned)time(NULL));

    for (index = 0; index <=Menge; index++)
    {

    array[index] = rand() % 49 + 1; //Zufallszahl generieren

    }

    }

    int Suche_kleinste_Zahl (int array[],int n,int max)
    {

    printf("-%d",array[n-1]);

    // wenn die erste Zahl,die grösste Zahl von allen ist
    //funktioniert die Suche nicht

    if(max>array[n])
    {
    max=array[n]; }

    if(n==10)
    { printf("\n kleinste Zahl %d\n", max);

    return 0;}

    return Suche_kleinste_Zahl(array,n=n+1,max);
    }

    int main()
    {
    int array[100];
    int Menge;
    int p;

    int n,min,max;
    n=1;

    max=array[0];
    for(p=1;p<=100;p++)
    {

    Zahlen(array,9);

    Suche_kleinste_Zahl(array,1,max);

    system("PAUSE");
    }
    return 0;
    }



  • Ja, ich habe ein paar Tips, die du ernst nehmen solltest, ohne beleidigt zu sein.

    1.) Schreibe was das Programm genau tun soll, und was es an welcher Stelle nicht tut wie gewünscht.
    2.) lerne mit GDB (Gnu Debugger, ist bei Dev-Cpp mit dabei, unten auf "Debug" klicken, dann kannst du durchsteppen) umzugehen. Irgendwann werden die Programme so groß, dass du sie hier nicht mehr komplett posten kannst, dann solltest du in der Lage sein dir selbst zu helfen.
    3.) for (index = 0; index <=Menge; index++) geht zu weit wenn Menge die Anzahl von Zufallszahlen sein soll. index<Menge wäre hier richtig.
    4.) Formatiere deinen Sourcecode und benutze selbstsprechende Variablen. Weil du das und das obige nicht gemacht hast, hatte ich nach 2min keinen Bock mehr deinen Source zu lesen und das geht anderen hier bestimmt genauso.

    Ich hoffe meine ernstgemeinten Vorschläge finden bei dir Gehör. Und denk dran, hier antworten dir Leute freiwillig ohne Bezahlung, also gib dir mit deiner Frage mühe und kopiere nicht einfach deinen Source hier rein und schreib "geht nicht" dazu.

    Gruß Andy



  • hi,
    rekursiv nach dem kleinsten element suchen ist keine gute idee. du hast dann so viele rekursionen wie du elemente hast. mach es lieber in einer schleife...
    :xmas2:



  • Hallo,
    Lösung mit Schleife ist sicherlich einfacher;bei der Rekursion ging es nur
    um den Lösungsweg;

    inzwischen ist das Problem so gelöst

    int Suche_kleinste_Zahl (int array[],int Index,int max,int Menge)
    {
    printf(" [%d]",array[Index+1]);

    if(array[Index+1]>array[0])
    {max=array[Index+1];}

    if(max>array[Index+1])

    { max=array[Index+1];}

    if(Index+1==Menge)
    { printf("\n kleinste Zahl %d.\n", max);
    return 0;}

    return Suche_kleinste_Zahl(array,Index=Index+1,max,Menge);
    }

    max: gesuchte Zahl;
    Menge:Anzahl der Zufallszahlen ;
    Rest sollte verständlich sein ;

    das Problem war: ohne die erste If-Anweisung fing das Programm
    erst bei der zweiten Zahl mit der Suche an,wenn die erste Zahl
    kleiner war (array[index+1]>array[index]
    zb. in solch einer Reihe 7-15-8-10-13-12
    und gab dann die 8 als kleinste Zahl aus ;
    🙂
    danke für die Antworten



  • Klabri schrieb:

    das Problem war: ohne die erste If-Anweisung fing das Programm
    erst bei der zweiten Zahl mit der Suche an,wenn die erste Zahl
    kleiner war (array[index+1]>array[index]

    Das Problem ist, daß du ständig mit "array[Index+1]" arbeitest - dadurch wird das Anfangselement "array[Index]" unter den Tisch fallen lassen.

    PS: 'max' ist eine etwas unpassende Bezeichnung für das kleinste Element 😉


Anmelden zum Antworten