lotto
-
Es reicht nicht, den Randomgenerator im Bereich 1 bis 49 sechs mal aufzurufen, denn es könnten Zahlen mehrfach vorkommen.
Ja das ist korrekt, dafuer gibt es eine Loesung:
1. Erzeuge ein Array mit den Zahlen 1 bis 49.
Erster Durchlauf:
2. Wuerfel eine Zahl zwischen 0 und 48 (Index im Array)
3. Vertausche Inhalt an Position 0 mit dem Inhalt des gerade gewuerfelten IndexesZweiter Durchlauf:
4. Wuerfel eine Zahl zwischen 1 und 48 (Index im Array)
5. Vertausche Inhalt an Position 1 mit dem Inhalt des gerade gewuerfelten Indexes
...Abschliessend: gebe die ersten fuenf Elemente aus.
Ich hoffe es wird prinzipiell klar, alternativ kannst du auch nach random shuffle suchen.
edit: ich war wohl zu langsam ...
-
Hulio19 schrieb:
Könntest Du mir bitte sageb, wie ich diese Schleife in C schreibe.
ich würde 'ne while-schleife nehmen, geht aber im prinzip mit jeder anderen auch.
hier (ab der mitte etwa), schleifen in C: http://info.baeumle.com/c06.html
-
Gebe es auf. Bringt nichts. Trotzdem danke!
-
Hulio19 schrieb:
Gebe es auf. Bringt nichts.
du gibst auf?! mit den infos hier sollte man's doch hinbekommen. zeig doch mal dein programm und wo's zickt.
-
+fricky schrieb:
Hulio19 schrieb:
Komme mit diesem Vektor/array nicht klar. Initialisiert habe ich den Vektor ja, nur weiß ich nicht, wie ich ihn in die Randomschleife reinbekomme?
die aufgabe in anderen worten: du sollst für jede gezogene zahl ein array-element auf 1 setzen. ist es schon 1, dann wiederholst du die ziehung, bis du 6 einsen setzen konntest. hört sich doch einfach an, oder?
lösche array setzte zähler auf 0 schleife: solange der zähler ungleich 6 ist ziehe zufallszahl wenn array[zufallszahl] 0 ist dann setze array[zufallszahl] auf 1 und zähle zähler hoch schleife ende gib den index aller array-elemente aus die 1 sind fertig.
1. lösche array (zahl[0]=0?)
2. setze zähler auf 0 (i=0)?
3.schleife:
while (i!=7)
...und danach geht nix mehr.
PS: Ich hatte bis jetzt 3 h C-Kurs. Und vorher noch nie programmiert!
-
Lösche Array:
/* Du musst zu jedem Element gehen und es auf 0 setzen */ for (i = 0; i < 50; i++) array[i] = 0;
Setze Zähler auf:
i = 0;
Schleife:
for (i = 0; i < 6; i++) { ... }
oder
while (i != 6) { ... i++; }
-
Hulio19 schrieb:
1. lösche array (zahl[0]=0?)
`int array[50];
memset (array, 0, sizeof(array));
`
Hulio19 schrieb:
2. setze zähler auf 0 (i=0)?
so ähnlich:
int z = 0;
Hulio19 schrieb:
3.schleife:
while (i!=7)`while (z != 6)
{
... // hier zufallszahl ziehen, array-element setzen (oder nicht) und zähler hochzählen (oder nicht)
}
`
Hulio19 schrieb:
Ich hatte bis jetzt 3 h C-Kurs. Und vorher noch nie programmiert!
dann musste noch üben. kopf hoch, das klappt schon.
-
int array[50];
memset (array, 0, sizeof(array));Geht das auch anders. So was haben wir ja nicht gelernt und wenn ich dann mit so ner Lösung komme wundert sich der Typ bestimmt.
So sieht es bis jetzt aus:
#include <stdio.h> #include <stdlib.h> #include <unistd.h> main() { int zahl[50]; int i; srand(getpid()); for (i = 0; i < 50; i++) zahl[i] = 0; i=0; for (i = 0; i < 6; i++) { printf("%2d ", 1+rand()%49); } }
-
^^das ist doch schon mal was. der schleifenzähler sollte aber nicht automatisch weiterzählen, sondern nur, wenn du ein array-element auf 1 setzen konntest d.h. schleifenkopf abändern zu: for (i = 0; i < 6;). ach ja, und statt des printf("%2d ", 1+rand()%49); in der schleife setzt du nun die array-elemente:
if (!array[zufall]) { array[zufall] = 1; i++; }
-
@+fricky
Wenn ich jezt die .exe Datei ausführe, passiert gar nichts mehr.
Kannst Du mir bitte nicht die Lösung hier reinstellen???
Ich weiß, anders ist der Lerneffekt größer, jedoch schmeiß ich meinen
Laptop gleich aus dem 16. Stock. Kann nicht mehr! Kopf platzt gleich und ich muss noch eine andere Aufgabe machen. Und das bei dem Wetter ... kopfschmerz...
-
Vielleicht siehst du dir mein Post nochmal an, Schleifen sind ueberfluessig ...
-
Also eigentlich suchst Du nach:
int main(int argc, char *argv[]) { int i, j; int zahl[50]; for (i = 0; i < 50; i++) zahl[i] = 0; for (i = 0; i < 7; i++) { do { j = wurf(); } while (zahl[j]); zahl[j]++; } for (i = 0; i < 50; i++) if (zahl[i]) printf("%d\n", i + 1); return 0; }
Eigentlich bin ich gegen Schlüsselfertiges, aber ich hab' grad den Horror vorm Löten ... meinst Du, Du kriegst die wurf() so hin, daß Papa auf Dich stolz sein kann?
-
Hulio19 schrieb:
Ich weiß, anders ist der Lerneffekt größer, jedoch schmeiß ich meinen
Laptop gleich aus dem 16. Stock. Kann nicht mehr! Kopf platzt gleich und ich muss noch eine andere Aufgabe machen. Und das bei dem Wetter ... kopfschmerz...dann mach schluss für heute und geniesse die letzten sonnenstrahlen. morgen biste wieder fit und dann geht's wie von selbst.
knivil schrieb:
Vielleicht siehst du dir mein Post nochmal an, Schleifen sind ueberfluessig ...
dein trick ist besser, aber so soll er's ja nicht machen. wahrscheinlich soll er erstmal lernen, wie arrays und schleifen funktionieren.
-
dein trick ist besser, aber so soll er's ja nicht machen. wahrscheinlich soll er erstmal lernen, wie arrays und schleifen funktionieren.
Nach 3 Stunden? Nein!
-
knivil schrieb:
dein trick ist besser, aber so soll er's ja nicht machen. wahrscheinlich soll er erstmal lernen, wie arrays und schleifen funktionieren.
Nach 3 Stunden? Nein!
zu früh oder zu spät?
-
+fricky schrieb:
zu früh oder zu spät?
Der Trick ist vermutlich einfach nur zu falsch.
-
pointercrash() schrieb:
+fricky schrieb:
zu früh oder zu spät?
Der Trick ist vermutlich einfach nur zu falsch.
ne, das geht: http://www.maths.abdn.ac.uk/~igc/tch/mx4002/notes/node83.html
-
+fricky schrieb:
ne, das geht: http://www.maths.abdn.ac.uk/~igc/tch/mx4002/notes/node83.html
Ei der Daus, stimmt ... wird tatsächlich eine 1/n- Verteilung draus. Vermeidet Fehlwürfe, super Sache, muß ich mir merken