C Programm Größte negative Zahl ausgeben



  • Hallo Zusammen (=

    es werden 10 Zahlen eingelesen und im Anschluss soll int max ausgegeben werden.
    meine Frage, wie die negativen Zahlen unterbringen.
    Brauche das ganze für die Schule habe schon viel Zeit davor verbracht 😃
    würde mich über Eure Hilfe sehr freuen.

    das Ganze sieht im moment so aus.

    Achja.. in der Vorgabe steht "ohne Array"…

    [code="c"]

    #include <stdio.h>

    int main(void) {
    int i;
    int value;
    int max = 0;

    for (i = 0; i < 10; i++) {
    scanf("%d", &value);
    if (value < 0)
    // <-------------------hier mein großes Fragezeichen 😃

    if (value >= max)
    max = value;

    }

    printf("max: %d\n", max);
    return 0;
    }



  • Setze 'max' einfach zu Beginn auf die kleinste Zahl (INT_MIN), s.a. C Library - <limits.h>
    So benötigst du keine weitere explizite Abfrage auf negative Zahlen!


  • Mod

    Setze 'max' einfach zu Beginn auf die erste eingegebene Zahl.
    So benötigst du keine weitere explizite Abfrage auf egal was.



  • Vielen Dank für die schnellen Antworten.. hat super funktioniert (=

    Dann wünsch ich euch mal auch noch einen schönen Sonntag..bis dann.



  • Hallo SeppJ,

    ich bin zu doof, deinen Beitrag zu verstehen - bitte erklären.


  • Mod

    Th69 schrieb:

    Hallo SeppJ,

    ich bin zu doof, deinen Beitrag zu verstehen - bitte erklären.

    Bei der Suche nach Extremwerten ist der optimale Startwert für die Variable zum Zwischenspeichern des Ergebnisses ist der erste (oder ein beliebiger, aber der erste bietet sich an) aus der Suchmenge. Dass es damit immer noch funktioniert, sollte klar sein, denn entweder ist dieser Startwert bereits das gesuchte Extremum oder man findet das tatsächliche Extremum durch spätere Vergleiche.

    Warum ist das aber besser als INT_MIN? Im konkreten Fall überhaupt nicht. Aber der große Vorteil ist, dass der Algorithmus auch dann noch funktioniert, wenn man mal etwas anderes sucht, als das Maximum einer Menge von Integern. Ich habe oben bewusst "Extremwert" geschrieben, denn diese Methode funktioniert eben auch in allen anderen Fällen, außer der Maximumssuche in einer Menge von Integern:

    • Suche Minimum? Der erste Wert als Startwert funktioniert immer noch, bei dir müsste man nun auf INT_MAX umschreiben.
    • Suche Maximum von long int? Der erste Wert als Startwert funktioniert immer noch, bei dir müsste man nun auf LONG_MIN umschreiben.
    • Suche lexikographisches Maximum einer Zeichenkette? Der erste Wert als Startwert funktioniert immer noch, bei dir müsste man nun auf "" umschreiben.
    • Suche lexikographisches Minimum einer Zeichenkette? Der erste Wert als Startwert funktioniert immer noch, bei dir müsste man? Was ist die letzte Zeichenkette im Alphabet? Deines geht in diesem Fall überhaupt gar nicht mehr.
    • Und viele andere mehr.


  • Das habe ich wohl verstanden (bei einer Iteration über ein Array ist das ja auch die beste Vorgehensweise, aber Arrays sollen hier ja nicht benutzt werden), aber bezogen auf den oberen Codeschnipsel müßtest du dann ja den ersten Wert außerhalb der Schleife einlesen und dann die restlichen 9 in einer Schleife (also doppelter Code für 'scanf'). Und beim Ändern des Datentyps müßte ja auch hier (in C) das scanf-Format angepaßt werden (in C++ mit den Templates und <limits> ginge auch mein Code!).

    Meine Nachfrage bezog sich aber vor allem auf "auf egal was" - im Gegensatz zu meinem "auf negative Zahlen!", denn die Abfrage auf Maximum muß ja drin bleiben (nur eben die Abfrage nach den negativen Werten "if (value < 0)" ist überflüssig).

    Ich mag es einfach nicht, wenn man mich "korrigieren" will, aber mir keine weitere Erklärung dafür gibt...



  • Ein

    if(i == 0) max = value;
    

    in der Schleife tut es auch.

    ^(Es ist scanf im Spiel, da macht diese Zeile keine Laufzeitprobleme).^


  • Mod

    Th69 schrieb:

    Ich mag es einfach nicht, wenn man mich "korrigieren" will, aber mir keine weitere Erklärung dafür gibt...

    Es war eine Verbesserung. Ich dachte eigentlich, dass "egal was" als Erklärung reichen würde, denn es war schließlich gerade der Kern der Verbesserung, dass diese für beliebige Fälle funktioniert.



  • Dirk, genau das habe ich auch mir überlegt, aber das genau widerspricht

    SeppJ schrieb:

    So benötigst du keine weitere explizite Abfrage auf egal was.

    Und daher warte ich immer noch auf eine Lösung von SeppJ, wie sein konkreter Code jetzt dafür aussieht 😉


  • Mod

    Wie, du willst Code, wie man eine Variable auf einen Startwert setzt?



  • Ich will wissen, wie du den obigen Code abändern würdest (wie schon geschrieben "ohne Arrays").
    Hast du eine 3. Lösung (außer meinem beschriebenen [mit doppeltem scanf] oder dem von DirkB mit zusätzlicher Abfrage innerhalb der Schleife)?

    PS: Könntest du als Moderator den Originalcode korrekt formatieren (also [/code] hinzufügen)?


  • Mod

    Wenn man, wie hier, anstatt einer allgemeinen Funktion zur Extremumsberechnung auf einem ganz abstrakt gehaltenen Intervall, stattdessen konkrete scanf-Aufrufe in eine solche Funktion schreibt, dann hat man natürlich entweder zwei scanf-Aufrufe oder eine Zusatzabfrage wie von DirkB.

    PS: Könntest du als Moderator den Originalcode korrekt formatieren (also [/code] hinzufügen)?

    Ja, aber ich habe besseres zu tun, als jedes Formatierungsproblem im Forum zu korrigieren.


Anmelden zum Antworten