Drei eingegebene Zahlen sortieren



  • rustyoldguy schrieb:

    [blablabla]

    Früher war ich auch ein Facharbeiter,
    aber dann habe ich einen Pfeil ins Knie bekommen...



  • Wieso einfach wenn es schwieriger geht?

    int main(void)
    {
        int zahlen[3];
    
        printf("Geben Sie drei Zahlen an. Diese werden dann sortiert wieder ausgegben.\n"); 
    
        printf ("Zahl 1:");
        scanf ("%d", zahlen);
    
        printf ("Zahl 2:");
        scanf ("%d", zahlen + 1); 
    
        printf ("Zahl 3:");
        scanf ("%d", zahlen + 2); 
    
        int comp(const void *a, const void *b) 
        {   
            int ia = *((int*) a); 
            int ib = *((int*) b); 
    
            if(ia < ib) 
                return -1; 
    
            if(ia == ib) 
                return 0;
    
            return 1;
        }   
    
        qsort(&zahlen, sizeof zahlen / sizeof *zahlen, sizeof *zahlen, comp);
        printf ("Die groesste Zahl ist die %d, die zweitgroesste ist die %d und die kleinste Zahl ist die %d.\n",
                zahlen[0], zahlen[1], zahlen[2]);
    
        return 0;
    }
    


  • supertux schrieb:

    Wieso einfach wenn es schwieriger geht?

    Weil "beliebig viele Zahlen sortieren" ein komplizierteres Problem als "genau 3 Zahlen sortieren" ist.
    Weil der Aufruf von qsort() auf dem Wissensstand des OPs vermutlich eben NICHT einfacher ist.



  • Zeile 30 ist UB,
    in Zeile 18+19 wird const weggecastet -> Schrott



  • Die Compare-Funktion lässt sich noch dramatisch verkürzen:

    int comp(const void *a, const void *b)
        {
            return *(int*)b - *(int*)a;
        }
    

    😉



  • Aber nur, wenn man noch Zusatzinformationen über die zu sortierenden Zahlen hat - ansonsten kann das potentiell underflowen.



  • SG1 schrieb:

    Aber nur, wenn man noch Zusatzinformationen über die zu sortierenden Zahlen hat - ansonsten kann das potentiell underflowen.

    Das kapiere ich nicht. Bei welchen Zahlen passiert ein Underflow?



  • z.B. b = INT_MIN, a = INT_MAX



  • SG1 schrieb:

    z.B. b = INT_MIN, a = INT_MAX

    Alles klar, wenn das Ergebnis der Subtraktion kleiner wird als INT_MIN. 😞



  • supertux schrieb:

    Wieso einfach wenn es schwieriger geht?

    Weil einfach weniger schwer ist?



  • puhhh...
    erstens ist der Thread ziemlich alt und zweitens steht eine nette Lösung genau dazu im (ziemlich guten) C-Einsteiger-Buch von Helmut Erlenkötter.
    (Zur Erläuterung der Logik-Fähigkeiten von printf)



  • nachtfeuer schrieb:

    puhhh...
    erstens ist der Thread ziemlich alt und zweitens steht eine nette Lösung genau dazu im (ziemlich guten) C-Einsteiger-Buch von Helmut Erlenkötter.
    (Zur Erläuterung der Logik-Fähigkeiten von printf)

    Könntest du bitte hier im Forum erläutern, was es mit der Logik-Fähigkeit von printf auf sich hat?



  • Lit schrieb:

    nachtfeuer schrieb:

    puhhh...
    erstens ist der Thread ziemlich alt und zweitens steht eine nette Lösung genau dazu im (ziemlich guten) C-Einsteiger-Buch von Helmut Erlenkötter.
    (Zur Erläuterung der Logik-Fähigkeiten von printf)

    Könntest du bitte hier im Forum erläutern, was es mit der Logik-Fähigkeit von printf auf sich hat?

    Das wollte ich auch schon fragen. 🙂


Anmelden zum Antworten