Bubblesort



  • oh sorry ja, also das Problem ist einfach nur, dass anscheinend die ganze Bubblesort Funktion völlig ignoriert wird oder nicht mit dem Programm von mir richtig verknüpft wurde, weil er die Zahlen so ausgibt, wie sie eingegebn wurden



  • Dunno schrieb:

    also das Problem ist einfach nur, dass anscheinend die ganze Bubblesort Funktion völlig ignoriert wird

    Ja, so ist das mit Funktionen, die nicht aufgerufen werden.



  • ja nur hätte ich gerne hilfe



  • So müsste es ungefähr aussehn..

    #include <stdio.h>
    #define ZAHL 10
    
    //Prototyp der Funktion 
    void bubble (int Feld [ZAHL], int laenge);
    
    int main (void) {
    float Feld[ZAHL];
    int i;
    int temp;
    int laenge;
    
    printf("Geben Sie hier ihre Zahlen ein:\n");
    for ( i = 0; i < ZAHL; i++ )
    { printf("Zahl Nr.%d:",i+1);
    scanf ("%f", &Feld[i]);
    
    }
    
    //bubblesort funktion aufrufen
    bubble (int Feld,ZAHL);
    
    for ( i = 0; i < ZAHL; i++ )
    {
    printf("Ihre Zahlen Nr.%d: %.0f\n", i+1, Feld[i]);
    }
    
    system ("Pause");
    return 0;
    
    }
    
    void bubble (int Feld [ZAHL], int laenge) {
    int i, j;
    
    for (i = 1; i < laenge; i++)
    /* größte Element nach oben bring0rn */
    for (j = laenge-1; j >= i; j--)
    if (Feld[j] < Feld[j-1]) {
    int temp = Feld[j];
    Feld[j] = Feld[j-1];
    Feld[j-1] = temp;
    }
    }
    


  • hm thx=)

    hab grad gesehen das Feld Float ist und in der bubble funktion int hab da rum probiert aber jetzt gibt er 000000000000 raus Oo



  • ja dann mach überals wo "int" steht "float" draus...



  • yo hab ich ka hab jetzt noch was anderes probiert

    void bubblesort( int Feld[ZAHL]){
    int i, fertig = 0;
    int h;
    int len;
    len = strlen(Feld);
    while (!fertig){ /* Durchgang beginnen*/
    fertig = 1;
    for (i=0; i < len-1; i++)
    if (Feld[i] > Feld[i+1]){ /* Vertauschen nötig /
    fertig =0; /
    Weiterer Durchgang nötig /
    h = Feld[i]; /
    Austauschen /
    Feld[i] = Feld[i+1];
    Feld[i+1] = h;
    }
    }
    }
    ich denke der Fehler liegt darin, das irgendwo der "missing link" zwischen meinem Programm /
    Enlesen + Ausgeben */ und dem Bubblesort liegt, also der Bubblesort mit dem vorhergehenden Code nichts anfangen kann



  • en = strlen(Feld); ????
    

    strlen erwartet die länge eines strings (char feld) nicht einen Int felds. Du musst definitf die größe des feldes mit in die funktion übergeben.



  • bin zwar auch ein noob in c, aber ich glaube nicht, dass man ein int array mit strlen behandeln kann.

    size_t strlen ( const [b]char[/b] * str );
    


  • Dunno schrieb:

    void bubblesort( int Feld[ZAHL]){ 
     ...
     int len; 
     len = strlen(Feld); 
     ...
    }
    

    "len" ist schon bekannt.



  • hallo ihr lieben leute, so hab mich jetzt nochmal mit dem ganzen auseinander gesetzt und mir noch was dazu geschrieben:
    einziges Problem, er sagt in der Zeile vom Bubblesort: syntax error before numeric constant, hab jetzt mehrmals rumgegoogelt und scheint ein Problem mit dem define zu sein, weiß jemand rat?

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define ZAHL 10
    int main () {
    float Feld [ZAHL];
    int i;
    /* Eingabe , das erste printf bezieht sich auf das scanf, dass 2 printf auf das for,
    dann sollte es so aussehen: Geben sie ihre Zahlen ein:
    Ihre ZahlNr.1.: ...
    Ihre ZahlNr.2.: ... etc. */

    printf("Geben sie ihre Zahlen ein:\n");
    for (i = 0; i < ZAHL; i++ )
    { printf("Ihre Zahl Nr. %d:", i+1 );
    scanf ("%f", &Feld[i]);
    }
    /Ausgabe , wieder for, printf in Klammern einmal mit den int Zahlen für i und
    einmal mit dem Feld für die eingegebenen Werte

    Ausgabe wie oben, nur mit dem eingegebenem Wert */

    for ( i = 0; i < ZAHL; i++ )
    { printf("Ihre Zahl Nr. %d: %.0f\n", i+1, Feld[i]);
    }

    void bubblesort (int Feld [i]; ZAHL ) {
    int i,j;
    for ( j = 0; j < ZAHL; j++)
    for ( i = ZAHL - 1; i >= i; i-- )
    if (Feld[i] < Feld[i-1])
    { int temp = Feld[i];
    Feld[i] = Feld[i-1];
    Feld[i-1] = temp;
    }
    }

    system ("Pause");
    return 0;

    }



  • du brauchst ZAHL nicht übergeben, das du dies global definiert hast. und bei dem Array das "i" weg.

    //Aufruf
    bubblesort(Feld);
    
    //funktion
    void bubblesort (int Feld[]) {
    int i,j;
    for ( j = 0; j < ZAHL; j++)
    for ( i = ZAHL - 1; i >= i; i-- )
    if (Feld[i] < Feld[i-1])
    { int temp = Feld[i];
    Feld[i] = Feld[i-1];
    Feld[i-1] = temp;
    }
    }
    
    system ("Pause");
    return 0;
    
    }
    


  • Bitte auch man: indent lesen.



  • bgdnoy schrieb:

    Bitte auch man: indent lesen.

    du meinst wohl 'anwenden'.
    🙂



  • fricky schrieb:

    du meinst wohl 'anwenden'.

    Das wäre dann der zweite Schritt.
    Zuerst den ersten Schritt, hab ich gedacht, damit sie nicht hinfallen...
    🙂


Log in to reply