array groesste Zahl raus filtern?



  • 1.hallo kann mir jemanden einen kurzen code uebermitteln - mit dem ich aus einem
    einem eindimionsonalen array in borland c/c++ die hoechste zahl rausfiltern kann?
    2.wie erreicht man das man - wiederum ein array - das lottozahlen ausgibt-
    mit randomize - keine zahl doppelt bekommt?
    und kann man eine funktion in eine funktion einbauen?
    danke. 🙂



  • beispielsweise so:

    int zahlen[100]; //hier stehen die zahlen dirn
    int biggest = zahlen[0];
    for(int i=0;i<sizeof(zahlen/sizeof(int));i++)if(biggest<zahlen[i])biggest=zahlen[i];
    

    Das andre geht prinzipiell so das du die bisher eingetragenen Werte durchsuchst ob da schon der Wert x drin vorkommt.
    Wenn ja generierst du eine andere Zufallszahl, ersetzt damit die ja doppelte Zahl und wiederholst das Spiel bis die Zahl noch nicht vorkam.
    Wenn das der Fall ist fügst du sie zu den bisher eingetragenen Werten hinzu.

    Aber da das ganze irgendwie nach Hausaufgabe riecht kansu dir da auch mal den Kopf drüber zerbrechen 🙂

    Und was meinst ud mit funktion in funktion, warum sollte das nicht gehen...

    *edit*
    so nu aba 😛



  • zu 1)
    Es wäre vielleicht wünschenswert, wenn Du in Deiner Nachricht zeigen könntest, was Du bisher schon gemacht bzw. versucht hast. Wenn Du ein Programm fertig hast, möchtest Du doch sagen können, daß es von Dir ist und nicht von 1000 Leuten aus dem Internet immer ein bißchen programmiert wurde.
    Zum Thema: Im Prinzip kommt es darauf an, ob es sich um einen sortierten Array handelt oder nicht. Wenn Du einen sortierten Array hast, ist es natürlich einfach (->das erste bzw. letzte Feld abrufen). Wenn nicht, könntest Du z.B. jedes Feld durchlaufen und in einer seperatern Variablen immer die bis dahin höchste Zahl speichern und diese am Ende ausgeben.

    zu 2)
    Du könntest einen Abgleich machen. Da die zufallsgenerierten Zahlen von Dir in einem Array gespeichert werden, könntest Du bevor eine neue Zahl hinzufügst, diese erst in dem Array suchen. Falls sie nicht gefunden wird, kann sie hinzugefügt werden.

    zu 2,5)
    ich weiß ehrlich gesagt nicht genau, was Du mit eine Funktion in eine Funktion einbauen meinst. Du kannst aus jeder Funktion wieder eine Funktion aufrufen, solange diese in Deinem Zugriffsbereich liegt. Du kannst z.B. nicht von außerhalb einer Klasse auf private-deklarierte Funktionen dieser Klasse zu weisen, aber folgendes ist möglich:

    void foo1()
    {
    //do something
    };
    
    void foo2()
    {
    //do something
    foo1();
    //do someting
    };
    

    Ich hoffe, ich konnte Dir weiterhelfen...



  • @dreaddy
    Sorry, habe Deiner Nachricht leider erst gelesen, nachdem ich meine abgeschickt habe. Ich habe also nicht einfach Deine Antworten noch einmal runtergetippt. 😃



  • @dreaddy: i läuft bei deiner Schleife deutlich weiter als bis zum Ende des Arrays,weil sizeof(int) normalerweise mehr als 1 ist. Und fütter deiner Schleife mal ein array, in dem nur negative Werte drinstehen.



  • jojo ^^ war bissl abgelenkt undso... *ausredesuch*.
    Ist hoffentlich jetzt behoben 😛
    Und das mit den negativen Zahlen... naja ich ging mal vom Lottoprogramm aus, da gibts so wenig davon 😛



  • Sollte mich wundern, wenn das so kompiliert. Du meinst sizeof(zahlen)/sizeof(int).



  • Noch ne verrückte Idee um doppelte zu vermeiden.

    1 Erzeuge einen Vektor mit 50 Elementen, setzte alle Werte auf Null, benutze den Index 0 nicht.
    2 Erzeuge eine Zählvariable unt setze sie auf 0;
    3 Erzeuge Zufallszahlen aus dem Bereich 1..49.
    4 Wenn das entsprechende Element im Vektor 0 ist setze den vektor auf 1 und erhöhe die Zählvariable um 1
    5 Wenn das entsprechende Element im Vektor 1 fange wieder bei 2 an
    6 Wenn die Zählvariable 6 ist bist du fertig
    7 Gib die Indices des Vektors für die der Inhalt 1 aus
    

    Somit ist die Hausaufgabe erledigt und du hast 6 Lottozahlen aufsteigende sortiert ausgegeben.

    Nachteil: Array mit 50 Elementen wovon das Element 0 nicht genutzt ist.
    Vorteil: keine ''umständlichen'' Suchaktionen ob die Zahl schon existiert.



  • Oder aber:

    Liste mit 49 Werten füllen, zufällig einen Eintrag auswählen, speichern und aus der Liste löschen, nächsten Eintrag zufällig auswählen etc.
    Am besten die ausgewählten Zahlen in nen Vector rein und dann mit sort sortieren... fertig.



  • #include <algorithm>
    //...
    int *max = std::max_element(array, &array[array_size]);
    


  • #include <algorithm>
    
    int zahlen[49];
    for (unsigned i = 0; i < 49; ++i)
        zahlen[i] = i;
    std::random_shuffle(zahlen, zahlen + 49);
    int auswahl[6];
    std::copy(zahlen, zahlen + 6, auswahl);
    

    Solche Hausaufgaben macht man gerne :p



  • hey, fast hätte ich dasselbe gepostet 😉



  • std::set<int> lottozahlen;
    
    while (lottozahlen.size() < 6) {
       lottozahlen.insert(std::rand());
    }
    

    Nur um mal ne Alternative zu posten.



  • Da fehlt allermindestens noch ein "% 49 + 1" :p
    Aber interessanter Ansatz 🙂



  • Ups. Ja, das kann sich jeder selbst dazu denken 😉


Anmelden zum Antworten