Aus einer Folge von Zahlen die größte Zahl bestimmen (ohne if, min-max Funktion)



  • hallo,
    ich soll ein programm schreiben das den anwender auffordert mehrere nicht-negativen zahlen einzugeben und dann soll halt die größte der eingegebenen zahlen ausgegeben werden. das ende der zahlenfolge wird durch eine negative zahl signalisiert (also der anwender gibt am ende eine negative zahl ein).

    wir dürfen kein if, ?-operator oder min oder max funktion verwenden.

    Ja ich hab keine ahnung wie das geht, aber zumindest der anfang müsste so aussehen:

    #include<stdio.h>
    int main(){
    
    printf("Gebe eine Folge von Zahlen ein.\n");
    int zahl = 0;
    
    while (zahl>0){
    scanf("%d", &zahl);
    
    }
    
    return 0;
    }
    

    ich denke soweit müsste das ja stimmen. es werden solange zahlen eingelesen, wie die zahlen die eingegeben werden größer als 0 sind. nur weiß ich jetzt nicht wie ich bestimmen kann was die größte zahl ist.



  • schreibs mit if und ändere danach jedes if(foo){bar;} in while(foo){bar;break;}



  • kapier ich nich. bin noch ein anfänger was das betriff mit dem programmieren.



  • Schreib das Programm ganz normal mit if (aber ohne else).
    Danach ändere jedes

    if(irgendeineBedingung)
    {
       irgendeineAnweisung;
    }
    

    in

    while(irgendeineBedingung)
    {
       irgendeineAnweisung;
       break;
    }
    


  • Oder auch:

    #include <stdbool.h>
    
    #define IF(x) for(bool once=true;once && x; once=false)
    


  • Wie kommt man auf so eine schwachsinnige Aufgabe? 😕



  • ja ähm ich weiß nicht. ich programmier erst seit dieser woche, ich weiß nicht was ich da mit if machen soll.

    ich weiß auch nicht vom prinzip her wie ich das alles anstellen soll. mein ansatz von oben ist denke ich schonmal komplett falsch oder? weil wenn der benutzer zahlen eingibt, wie soll ich denn diese zahlen die er eingibt speichern? in int zahl kann ich ja denke ich nur eine einzige zahl einspeichern.

    ich weiß nur das die while schleife so lange laufen soll wie positive ganze zahlen eingegeben werden. und selbst das kommt irgendwie nicht so ganz hin mit meinem ansatz von oben. wenn ich "int zahl" mit 0 initialisiere, und dann kommt die while schleife mit zahl>0, ist die bedingung ja sofort nicht erfüllt und es werden erst gar keine zahlen eingelesen. also muss ich ja irgendwie int zahl mit dem wert 1 initialisieren, aber irgendwo hab ich mal gehört man initialisiert immer mit dem wert 0.



  • Volkards Vorschlag verstehst Du aber?

    Initialisieren immer mit sinnvollen Werten! 🙂

    Negative Zahlen haben die Eigenschaft <0 zu sein. Also könnte die Laufbedingung sein while(!(zahl<0)) (Lies: solange zahl nicht kleiner null).

    Noch schöner wäre eine erfolgreiche eingabe zu prüfen. Dazu kannst Du den Rückgabewert von scanf() prüfen. Näheres findest Du in der Dokumentation von scanf() , aber jetzt reicht die Definition "Der Rückgabewert eines erfolgreichen scanf() entspricht der Anzahl der %-Zeichen im Formatstring."

    int main(void) {
      int zahl;
      while(scanf("%d", &zahl)==1 && !(zahl<0))
        // ...
    }
    

    Jetzt kannst Du Dir sogar die initialisierung sparen, weil Du zahl ja erst auswertest, nachdem Du es erfolgreich mit scanf() eingelesen hast.


Log in to reply