Funktion für Maximum



  • Hallo!

    Ich bräuchte von euch einen kleinen Denkanstoß 🙂

    Ich möchte eine Funktion erstellen, die das Maximum aus 6 Zahlen bestimmt.

    double maximum (int u,v,w,x,y,z)

    Nach welchem Schema muss ich mich dabei richten und was für Anweisungen brauche ich für so eine Funktion?



  • stopopvic schrieb:

    double maximum (int u,v,w,x,y,z)
    

    ... ist keine gültige C Syntax für eine Funktion; und ansonsten? die Vergleichoperatoren < oder >



  • Danke dir! Ich hab hier jetzt bisschen gebastelt. Es würde so glaube ich funktionieren, aber aus professioneller Sicht ist das wohl nicht so schön oder?

    double maximum (int u,v,w,x,y,z) {
    
        int max;
    
        if (u>v) {
            max=u;
        }
        else 
            max=v;
    
        if (max>w) {
    
            max=max;
        }
        else
            max=w;
    
        if (max>x) {
            max=max;
        }
        else
            max=x;
    
        if (max>y) {
            max=max;
        }
        else
            max=y;
    
        if (max>z) {
            max=max;
        }
        else
            max=z;
    
        return max;
    }
    

    Kann man das besser machen oder passt das so?

    Und ist jetzt mit der Syntax alles in Ordnung?


  • Mod

    stopopvic schrieb:

    Danke dir! Ich hab hier jetzt bisschen gebastelt. Es würde so glaube ich funktionieren, aber aus professioneller Sicht ist das wohl nicht so schön oder?

    Beschreib mal mit Worten, was max=max machen soll

    Und ist jetzt mit der Syntax alles in Ordnung?

    Das sagt dir ein Compiler. Und ich denke, er hat dir da ziemlich viel zu sagen.



  • int max = u;
    
        if (v>max) 
            max=v;
    
        if (w>max) 
            max=w;
    ...
    

    Besser aber mit einem Array.

    Warum hast du als Parameter int und als Rückgabewert ein double 😕



  • int maximum(int values[5])
    {
        int max = 0;
    
        for (int i = 0; i < sizeof(values) / sizeof(int); i++) {
            if (values[i] > max)
                max = values[i];        
        }
    
        return max;
    }
    


  • int maximum(int values[], int elemCount) 
    { 
        int max = 0; 
    
        for (int i = 0; i < elemCount; i++) { 
            if (values[i] > max) 
                max = values[i];         
        } 
    
        return max; 
    }
    
    int myarr[5] = {5, 3, 9, 2, 10};
    printf("%d\n", maximum(myarr, (int)(sizeof(myarr) / sizeof(int))));
    

    Wegen Fehler neugeposted



  • int myarr[] = {-5, -3, -9, -2, -10};
    

    Was kommt denn da raus?

    0 ist falsch. Und nun?



  • DirkB schrieb:

    0 ist falsch. Und nun?

    int max = INT_MIN;
    


  • max = values[0];
    

    und du musst dir um den Wertebereich keine Gedanken mehr machen.



  • habe in der eile den negativbereich nicht berücksichtigt, muss natürlich und logischerweise berücksichtigt werden



  • @DirkB:

    palm->hit( face );
    

    Danke!



  • DirkB schrieb:

    max = values[0];
    

    und du musst dir um den Wertebereich keine Gedanken mehr machen.

    Allerdings ist die Funktion dann nicht mehr so "großzügig", falls man auf die Idee
    kommen sollte, für die Parameter values/elemCount auch NULL/0 zuzulassen.


  • Mod

    elemCount schrieb:

    DirkB schrieb:

    max = values[0];
    

    und du musst dir um den Wertebereich keine Gedanken mehr machen.

    Allerdings ist die Funktion dann nicht mehr so "großzügig", falls man auf die Idee
    kommen sollte, für die Parameter values/elemCount auch NULL/0 zuzulassen.

    Dann ist das Maximum/Minimum sowieso undefiniert. Was ist das größte Element einer leeren Menge? Abstürzen sollte das Programm dadurch natürlich nicht, also sollte man das schon prüfen.



  • Danke für die tolle Hilfe! Da ist aber noch etwas was ich nicht verstehe.
    Die Funktion gibt ja das Maximum an und eigentlich müsste dann ja bei der if-Anweisung durch vertauschen des von > in < das Minimum bestimmt werden. Dabei kommt aber 0 raus. Was habe ich beim Prinzip der Funktion falsch verstanden?

    int maximum(int values[], int elemCount) 
    { 
        int max = 0; 
    
        for (int i = 0; i < elemCount; i++) { 
            if (values[i] > max) /*Vertauschen von > in < gleich Minimum?*/
                max = values[i];         
        } 
    
        return max; 
    }
    
    int myarr[5] = {5, 3, 9, 2, 10};
    printf("%d\n", maximum(myarr, (int)(sizeof(myarr) / sizeof(int))));
    


  • stopopvic schrieb:

    Was habe ich beim Prinzip der Funktion falsch verstanden?

    int max = values[0]
    


  • stopopvic schrieb:

    Was habe ich beim Prinzip der Funktion falsch verstanden?

    Wer lesen kann und dies auch tut, ist klar im Vorteil.
    Auch wenn es sowas altes ist wie Beiträge von Gestern. 🙄



  • Ich wollte das ganze jetzt mal ein wenig erweitern.

    Ich habe da jetzt eine Endlosschleife eingefügt und das Programm soll nach jeder eingabe das gesamtmaximum ausgeben. Hier ein Beispiel:

    Zahleneingabe: 123456
    Max:6 Gesamtmax: 6
    Zahleneingabe: 789012
    Max:6(vorheriges Maximum) Gesamtmax: 9
    .
    .
    usw.

    #include <stdio.h>
    
    int maximum(int values[], int elemCount) 
    { 
        int max = values[0]; 
    
        for (int i = 0; i < elemCount; i++) { 
            if (values[i] > max) 
                max = values[i];         
        } 
    
        return max; 
    } 
    
    int main () {
        int myarr[6]; 
        int i;
        while (1){
        for (i = 0; i <= 5; ++i) {
            printf("Zahl eingeben:");
            scanf("%i",&myarr[i]);
        }
    
        printf("Maximum: %d\n", maximum(myarr, (int)(sizeof(myarr) / sizeof(int))));
        printf("Minimum: %d\n", minimum(myarr, (int)(sizeof(myarr) / sizeof(int))));
        }
        return 0;
    }
    

    Muss da nur noch simpel umgestellt werden oder muss ich bei den arrays und der funktion noch etwas beachten?



  • EDIT: Das sollte aktuelles Maximum heißen im Beispiel und 9 statt 6 stehen.



  • Da du das Gesamtmaximum in main feststellst, brauchst du an der Funktion nichts ändern.


Anmelden zum Antworten