lotto
-
Erstes Random- Gebot:
DU SOLLST NICHT RANDOM DURCH MODULO ERZEUGEN!Das Vektor/Komponentengefasel ist jetzt einfach etwas überkanditelte Bezeichnung, aber gemeint ist, daß Du so lange würfelst, bis Du eine Zahl "erwischt" hast, deren "Fach" in Array noch nicht belegt ist. Das ganze, bis sieben "Fächer" gefüllt sind.
Sortierte Ausgabe ist dann simpel, Du gibst einfach die Indices der belegten Fächer aus.
Eigentlich ist das eh' schon eine step-by-step Implementationsanleitung ...Genug Hinweise?
-
_matze schrieb:
Zu STL-Containern wie std::vector gibts z.B. hier was zu lesen:
mit 'vektor' ist hier einfach nur 'array' gemeint.
-
+fricky schrieb:
_matze schrieb:
Zu STL-Containern wie std::vector gibts z.B. hier was zu lesen:
mit 'vektor' ist hier einfach nur 'array' gemeint.
Jaaam habs eben auch gerafft...
-
_matze schrieb:
+fricky schrieb:
_matze schrieb:
Zu STL-Containern wie std::vector gibts z.B. hier was zu lesen:
mit 'vektor' ist hier einfach nur 'array' gemeint.
Jaaam habs eben auch gerafft...
Wirklich? Im ANSI-C- Forum mit STL- Kram loszulegen ist schon ein starker Einstieg
... Werden wohl die ungewöhnlich hohen Temperaturen sein: Das Hirn fängt an zu kochen und rinnt zu den Ohren raus ...
-
pointercrash() schrieb:
Werden wohl die ungewöhnlich hohen Temperaturen sein: Das Hirn fängt an zu kochen und rinnt zu den Ohren raus ...
Das isses. Ich sitz auch direkt am Fenster, und links und rechts von mir bilden sich schon seltsam dickflüssige Pfützen...
-
Man merkt wohl sehr schnell wie wenig Ahnung ich von C bis jetzt habe.
Mache einen "freiwilligen" C-Kurs für Anfänger, jedoch sitzen dort nur Freaks drin, die bei der Vorlesung die Aufgaben innerhalb von Sekunden lösen.Nun zu meinem Problem: Ich versteh nicht, wie ich die Randomzahlen erzeugen soll, ohne das sie doppelt vorkommen. Komme mit diesem Vektor/array nicht klar. Initialisiert habe ich den Vektor ja, nur weiß ich nicht, wie ich ihn in die Randomschleife reinbekomme?
Oder besser gesagt:
Das Vektor/Komponentengefasel ist jetzt einfach etwas überkanditelte Bezeichnung, aber gemeint ist, daß Du so lange würfelst, bis Du eine Zahl "erwischt" hast, deren "Fach" in Array noch nicht belegt ist. Das ganze, bis sieben "Fächer" gefüllt sind.
=> Wie geht das hier???
-
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.
-
Theoretisch ist es einfach.
Ich weiß trotzdem nicht wie man es in C schreibt.
Bekomme immer nur diverse Fehlermeldungen.Könntest Du mir bitte sageb, wie ich diese Schleife in C schreibe. Versuche den Rest dann alleine zu packen. Und danach muss ich noch eine pi-Aufgabe lösen.
Das alles bei dem Wetter!!!PS: Das hier ist alles was mir zu Vektoren erklärt wurde:
2.12 Vektoren
Ein Vektor ist eine Folge von Objekten desselben Typs, die im Speicher unmittelbar hintereinander liegen.
Ein Vektor wird dadurch definiert, daß in der Variablendefinition hinter den Namen in eckigen Klammern eine Längenangabe geschrieben wird.
Z.B. definiert die Anweisung:
int vek[3];
einen Vektor mit 3 Komponenten.
Die einzelnen Komponenten werden wie Variablen benutzt, indem der Komponentenindex in eckigen Klammern dahinter geschrieben wird.
Dabei ist zu beachten:
* In C beginnen Vektoren immer mit dem Index 0.
Also können folgende Komponenten angesprochen werden:
vek[0] = 1;
vek[1] = 3;
vek[2] = 5;Will man einen Vektor mit 1 beginnen lassen, so muß man ihn um 1 größer machen und die Komponente 0 unbenutzt lassen.
Im folgenden Programm wird auf diese Art ein Vektor mit Quadratzahlen besetzt:
/*vektor.c*/
main() {
int i, v[11]; /*höchster Index: 10*/for (i = 1; i <= 10; ++i)
v[i] = i*i;
}Vektoren können auch mit Anfangswerten versehen werden. Dazu schreibt man die Werte als Liste in geschweifte Klammern. Enthält die Liste weniger Elemente als der Vektor, so werden die restlichen Vektorelemente auf 0 gesetzt:
int v[3] = {1, 2, 3}; /*v[0] = 1, v[1] = 2, v[2] = 3*/
int w[3] = {1}; /*w[0] = 1, w[1] = 0, w[2] = 0*/
-
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?