Neuling



  • SeppJ schrieb:

    Ausgezeichnet, das sollte die Referenzlösung sein, wenn in ein paar Tagen der nächste diese Frage stellt. 👍

    jopp - aber wie gesagt: das wäre nur die lösung, wenn es copy_n geben würde - wie in der original SGI STL library...
    für die lösung, die auch funktioniert habe ich ja set genommen^^

    bb



  • danke für eure antworten. bin sehr überrascht, wieviele sich in dieses thema eingeklingt haben. aber leider dürfen wir das nur mit schleifen lösen,


  • Mod

    Der Grund das sich so viele beteiligt haben ist der, dass hier im Forum normalerweise keine Hausaufgaben gemacht werden. Da eine ungelöste Aufgabe aber trotzdem in den Fingern juckt gibt es dann immer einen inoffiziellen Wettbewerb um die eleganteste Lösung. Diese sind dann ganz bewusst mit dermaßen fortgeschrittenen Sprachmitteln geschrieben, dass man sie nicht als Lösung für Hausaufgaben verwenden kann.

    Die gezeigten Lösungen enthalten übrigens alle Schleifen. Diese sind nur sehr gut versteckt - wegen der Eleganz.



  • andy135 schrieb:

    danke für eure antworten. bin sehr überrascht, wieviele sich in dieses thema eingeklingt haben. aber leider dürfen wir das nur mit schleifen lösen,

    na dann bist du ja jetzt fast fertig:

    #include <algorithm>
    #include <iostream>
    
    int main()
    {
      int min, max;
      int tmp;
      std::cin >> tmp;
      min = max = tmp;
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
      std::cin >> tmp;
      min = std::min(min, tmp);
      max = std::max(min, tmp);
    
      std::cout << "min: " << min << "; max: " << max << std::endl;
    }
    

    bb



  • unskilled schrieb:

    na dann bist du ja jetzt fast fertig:

    #include <algorithm>
    #include <iostream>
    
    int main()
    {
      //...
      max = std::max(min, tmp);  :warning:  :warning: 
      //...
    }
    

    Aber auch nur fast :p

    Felix



  • Hallo nochmals zusammen,

    ich bin immer noch nicht weiter gekommen. Wie schaut denn diese Befehlsfolge in reinem C-Code aus ???????Also kein c++ oder sonstiges, sondern reiner C-Code........... Habe mal folgendermassen angefangen:

    int zahl=0,zahl1=0;
    int zahlmax=0,zahlmin=0;
    int count;

    for (count=1; count<=9; count++)//Schleife leuft 9 mal + 1 die Erste Auffeorderung
    {
    printf("\n\tBitte geben Sie eine Zahl ein\t");
    scanf ("%d",&zahl);
    fflush(stdin);
    if (zahlmin>=zahl);//zahlmin wird ausgeweartet
    zahlmin=zahl;
    else if (zahlmax<=zahl);//zahlmax wird ausgeweartet
    zahlmax=zahl;

    } //Ausgabe min und max Werte

    printf("\n\n");
    printf ("\tSie haben die kleinste Zahl: %.0lf \n\n" ,zahlmin);
    printf ("\tund die groeste Zahl: %.0lf eingetippt\n" ,zahlmax);

    Irgendwas ist da noch falsch, nur weiß ich nicht was......



  • Ja, da fehlen noch C++ Tags (unter den Smilies)
    Außerdem sollte nach nem if kein Semikolon kommen
    fflush(stdin); ist glaube ich nicht so ne dolle Idee...
    Und dann solltest du es vermeiden, min/max mit "eigenen" Werten zu initialisieren(erst mal hast du ja max nur deklariert und min 0 zugewiesen - max kann also auch 9999 sein - und dein Ergebnis ist falsch. und/oder du gibst nur zahlen > 0 ein und das Minimum ist trotzdem 0)
    deshalb nehm doch die erste eingabe für das initialisieren der werte

    ich hab kein plan von dem ganzen scanf/printf zeugs und falls du die HA wirklich in C machen willst, bist du hier eindeutig im falschen Forum, deshalb hab ich mal die C++ Varianten genommen
    Falls du was nicht verstehst, kannste ja nachfragen:

    #include <iostream>
    
    int main()
    {
      int wert;
      int max, min;
    
      std::cout << "Bitte geben Sei eine Zahl ein!\t";
      std::cin >> wert;
      max = min = wert;
    
      for(int count=1; count < 9; count++)
      { 
        std::cout << "Bitte geben Sei eine Zahl ein!\t";
        std::cin >> wert;
        if(wert < min)
          min = wert;
        if(wert > max)
          max = wert; 
      }
    
      std::cout << std::endl;
    
      std::cout << "Min.: " << min << std::endl
        << "Max.: " << max << std::endl;
    
      //ggf. Konsole offen halten
    }
    

    bb

    PS: Schleife leuft 9 mal (ich will nen Smilie, was sich die Augen zu hält :D)



  • Nö,

    dieser Code soll rein in C sein.



  • andy135 schrieb:

    Irgendwas ist da noch falsch, nur weiß ich nicht was......

    Hm, hast du eine Fehlermeldung oder was Ähnliches? Oder woher weisst du, dass etwas falsch ist?

    Edit: %.0lf - bist du da sicher bei int ?



  • Weil er bei min-Wert immer nur 0 ausgibt. Die Ausgabe des Maxwertes stimmt.



  • andy135 schrieb:

    Weil er bei min-Wert immer nur 0 ausgibt. Die Ausgabe des Maxwertes stimmt.

    lies meinen post



  • Wenn ich aber zahlmin mit int ohne =0 initialisiere, dann kommt die Fehlermeldung, oder Warnung, dass eine nicht initialisierte lokale Variable verwendet wurde. Das gleiche gilt auch für zahlmax.....



  • ich geh mal davon aus, dass du lesen kannst und versuch es noch mal:

    myself schrieb:

    Und dann solltest du es vermeiden, min/max mit "eigenen" Werten zu initialisieren(erst mal hast du ja max nur deklariert und min 0 zugewiesen - max kann also auch 9999 sein - und dein Ergebnis ist falsch. und/oder du gibst nur zahlen > 0 ein und das Minimum ist trotzdem 0)
    deshalb nimm doch die erste eingabe für das initialisieren der werte

    bb



  • unskilled schrieb:

    Also mit 10 Werten hab ichs auch nicht kürzer hinbekommen...
    Hier braucht man halt STRG+Z um das eof anzugeben... (kA, was man in der Unix-Welt drücken müsste^^)

    #include <algorithm>
    #include <iostream>
    #include <iterator>
    #include <set>
    
    int main()
    {
    	std::set<int> values;
    	values.insert(std::istream_iterator<int>(std::cin), std::istream_iterator<int>());
    	std::cout << "min: " << *values.begin() << "; max: " << *values.rbegin() << std::endl;
    }
    

    Es wäre einfach, wenn es copy_n gäbe - aber aus irgend nem Grund gibts das nicht... Aber hauptsache es gibt 20Milliarden replaces bei string...

    #include <algorithm>
    #include <iostream>
    #include <iterator>
    #include <vector>
    
    int main()
    {
    	std::vector<int> values;
    	std::copy_n(std::istream_iterator<int>(std::cin), std::back_inserter(values), 10); //(src, dest, count)
    	std::sort(values.begin(), values.end());
    	std::cout << "min: " << *values.begin() << "; max: " << *values.rbegin() << std::endl;
    }
    

    PS:
    ist hieran irgendwas falsch?

    #include <iostream>
    #include <iterator>
    #include <set>
    
    int main()
    {
    	std::set<int> values(std::istream_iterator<int>(std::cin), std::istream_iterator<int>());
    }
    

    MSVC 9 schrieb:

    error C2751: 'std::cin' : the name of a function parameter cannot be qualified

    hoffe du hast dein basecap schief auf!? 😃



  • poser schrieb:

    hoffe du hast dein basecap schief auf!? 😃

    sieht man doch am Code 😃



  • It0101 schrieb:

    poser schrieb:

    hoffe du hast dein basecap schief auf!? 😃

    sieht man doch am Code 😃

    Ich habs leider verlegt - und deshalb versuch ich meine Coolness so zum Ausdruck zu bringen - keine gute Idee? ^^
    btw: Ich hab doch so gar mehrere anfänger-freundliche Lösungen gepostet...

    bb


Anmelden zum Antworten