Veröffentlicht 7. April 200421 j hi, hab mich schon im forum umgeguckt, aber nicht das finden können wie ichs brauch. da ich grad erst mit c++ angefangen hab, kenn ich noch nicht alle funktionen und befehle. hab aber schon mit TP programmiert (teilweise hardcore ) als einstiegs program, wollt ich lottoziehungen simulieren. das problem mit den verschiedenen zufallszahlen hab ich schon hinbekommen, leider krieg ich bei jeder ziehung die identischen zahlen, kann mir da jemand helfen. lauffähiger code: #include <iostream.h> #include <stdlib.h> #include <time.h> #include <set> #include <iostream> int zahlen[49]; int favoriten[6][2]; void initialisieren() {int n; for (n=0;n<49;n=n+1) zahlen[n]=0; } void ziehung() { set<int> zufall; srand((unsigned)time(0)); while(zufall.size()< 6) zufall.insert(rand()%49+1); copy(zufall.begin(),zufall.end(),ostream_iterator<int>(cout," ")); cout<<endl; int suchzahl; for (suchzahl=0;suchzahl<49;suchzahl=suchzahl+1) if(zufall.find(suchzahl)!=zufall.end()) zahlen[suchzahl]++; } void ausgabe() {int index; cout<<endl; for (index=0;index<6;index=index+1) cout<<index+1<<". Platz: "<<favoriten[index][0] <<" H\x84ufigkeit: "<<favoriten[index][1]<<endl; for (index=0;index<49;index=index+1) cout<<index+1<<" : "<<zahlen[index]<<endl; } void sortieren() {int index,merke,max,zaehl; for (zaehl=0;zaehl<6;zaehl=zaehl+1) {max=0; merke=0; for (index=0;index<49;index=index+1) if (zahlen[index]>max) merke=index; favoriten[zaehl][0]=merke; favoriten[zaehl][1]=zahlen[merke]; zahlen[merke]=0; } } int main() { initialisieren(); int anzahl,index; cout<<"Wieviel Ziehungen sollen durchgegangen werden?"<<endl; cin>>anzahl; for (index=0;index<anzahl;index=index+1) ziehung(); sortieren(); ausgabe(); system("PAUSE"); return 0; } danke PS: wo find ich anleitungen zu grafiken in c++?
7. April 200421 j Hi ! Dein problem ist, dass du die interne Zeit des Computers mit einbeziehen musst! Ich kann dir nur erklaeren wie das in C geht! In C wuerde das dann so aussehen! time_t sek; time(&sek); srand(sek); Hab dein prog nur mal ueberfloen! Arbeitest du mit der rand() funktion?
7. April 200421 j srand((unsigned)time(0)); while(zufall.size()< 6) zufall.insert(rand()%49+1); also das srand bezieht sich ja eigentlich auf die systemzeit und wie man sieht, benutz ich rand, leider halt jedes mal die gleichen zahlen
7. April 200421 j das ist schon korrekt!Du brauchst aber auch noch das srand(), dem du auch die Zeit zuweisen musst wie in meinem Beispiel!rand() arbeitet naehmlich mit der srand() Funktion!Ich schaetze mal das deine Zuweisung falsch ist* srand((unsigned)time(0));*
7. April 200421 j Hab mal fuer dich den Lottogenerator in C geschrieben! -------------------------------------------------------------------------------------------------------- Die main!!!! int lotto[6]; int pruef[50]={0}; #include <stdio.h> #include <stdlib.h> #include "ausgabe2.h" #include "initarray.h" int main(void) { printf("*****************************************************\n"); printf("* *\n"); printf("* Lottozahlengenerator *\n"); printf("* *\n"); printf("*****************************************************\n\n\n"); printf("Das sind ihre Lottozahlen!\n\n"); init_array(); ausgabe(); getchar(); } --------------------------------------------------------------------------------------------------------- int zufall(int min ,int max) { int x; x=rand()%(max-min+1)+min; return x; } ---------------------------------------------------------------------------------------------------------- #include<time.h> #include "zufall.h" void init_array(void) { int i,j,a; time_t sek; time(&sek); srand(sek); for(i=0;i<6;i++) { lotto = zufall (1,49); j=0; while(j<i) { if(lotto == lotto[j] ) { lotto[j] = zufall(1,49); j=0; } else { j++; } } } for(a=0;a<6;a++) { pruef[lotto[a]]=1; } } ---------------------------------------------------------------------------------------------------------- void ausgabe (void) { int a; for(a=0;a<50;a++) { if (pruef[a] == 1) printf("%i\t ",a+1); } }
7. April 200421 j krieg dein prog nicht zum laufen, da mir ein paar deiner *.h dateien fehlen aber ich glaube dein prog liefert nur 6 verschiede zufallszahlen, aber man kann das nicht wiederholen der sinn soll sein, dass das prog x beliebig viele ziehungen simuliert und eine toplist der meisten zahlen ausgeben kann
7. April 200421 j Um das zu realisieren muesste man einfach noch ne schleife rum bauen bei der der Benutzer am ende gefragt wird wieder neue Zufallszahlen erzeugt werden!Das mit der Toplist kann man bestimmt auch machen!Hast du einen C Compiler wo du das prog ausprobieren kannst PS du musst du .h dateien unter dem Namen abspeichern wie du sie aufrufst! Bsp #include "ausgabe2.h" muss auch unter ausgabe2.h abgespeichert werden!
7. April 200421 j Hallo, Zum Thema Zufallszahlen in C (und warum diese ohne ein "srand(time(NULL))" nicht wirklich zufällig sind gabs schon diverse Threads, die sich über die Suchfunktion finden lassen: http://forum.fachinformatiker.de/showthread.php?s=&threadid=59059&highlight=srand http://forum.fachinformatiker.de/showthread.php?s=&threadid=59059&highlight=srand Nic
7. April 200421 j man muss nicht zweimal auf den gleichen thread verweisen ich hab diesen thread auch schon gelesen und daher auch schon diese fast zufallszahl, so das ich zumindest nach jedem programstart andere zahlen hatte ich will aber im programm mehrere male die zufallszahlen bekommen, leider funzt das nicht so ordentlich und dazu hatte ich kein thread gefunden
7. April 200421 j Hallo, Original geschrieben von Varrius man muss nicht zweimal auf den gleichen thread verweisen hatte ich auch nicht vor, war wohl ein Cut&Paste Fehler . Wichtig ist, dass Du den Pseudozufallszahlengenerator mit einem passenden Wert initialisierst ("seed"), da ansonsten identische Werte zurückgeliefert werden. Wie Du den Seed-Wert ermittelst ist prinzipiell egal (sofern er sich ändert). Nic
8. April 200421 j Original geschrieben von Varrius man muss nicht zweimal auf den gleichen thread verweisen ich hab diesen thread auch schon gelesen und daher auch schon diese fast zufallszahl, so das ich zumindest nach jedem programstart andere zahlen hatte ich will aber im programm mehrere male die zufallszahlen bekommen, leider funzt das nicht so ordentlich und dazu hatte ich kein thread gefunden Du hast gesagt, dass du bei jedem Programmstart neue zahlen bekommst!Warum baust du nicht eine schleife um dein Programm, wo der Benutzer gefragt wird ob neue zufallszahlen erzeugt werden sollen?Vorher musst du natürlich den Bildschirm leeren!
8. April 200421 j Original geschrieben von Master Z Du hast gesagt, dass du bei jedem Programmstart neue zahlen bekommst!Warum baust du nicht eine schleife um dein Programm, wo der Benutzer gefragt wird ob neue zufallszahlen erzeugt werden sollen?Vorher musst du natürlich den Bildschirm leeren! wie soll ich ein schleife um das programm machen? wenn ich die aufrufe der funktionen in eine schleife mache, kommt immer das gleiche raus was bewirkt "seed" und wie muss man es aufrufen bzw. was muss man includen?
8. April 200421 j Ich könnte dir ja mal ein komplettes Programm schicken wenn du wills, wo am schluss der Benutzer gefragt wird ob neue zahlen erzeugt werden sollen!Hast du einen C-Compiler?
8. April 200421 j Hallo, die "seed" initialisiert den Pseudozufallszahlengenerator der von rand() verwendet wird. Dabei wird pro seed eine Reihe von Zufallszahlen erzeugt. Verwendest Du die gleiche seed mehrmals werden auch identische Zufallszahlenreihen generiert (was unter Umständen gewünscht sein kann). Du solltest 1x am Anfang deines Programmes die seed über srand(time(NULL)) setzen. @Master Z: Poste doch das Programm im Forum. Allzulang kann es ja nicht sein und dann haben auch alle was davon Nic
8. April 200421 j Also denn!! #include <stdio.h> #include <stdlib.h> #include <time.h> #include "bubblesort1.h" #include "ausgabe5.h" #include "zufall5.h" int main (void) { time_t sek; time(&sek); srand(sek); int laenge=10; int a_zahlen[10]; int *p_int1=&a_zahlen[0]; char weiter; do{ system("cls"); zufall5(laenge,p_int1); bubblesort(p_int1,laenge); ausgabe(laenge,p_int1); printf("\n\n\n"); printf("Nochmal? ja(j) nein(n)\n"); scanf("%c",&weiter); fflush(stdin); }while (weiter == 'J' || weiter == 'j'); } --------------------------------------------------------------------------------------------------------- void ausgabe (int laenge,int* p_int2) { int i; for(i=0;i<laenge;i++) { printf(" %d,",*(p_int2+i)); } } ---------------------------------------------------------------------------------------------------------- #include "vertausche.h" void bubblesort(int*p_int,int laenge) { int fertig=1,i,j; for(i=laenge;i>1 && fertig == 1;i--) { fertig=0; for(j=1;j<i;j++) { if(*(p_int+(j-1)) > *(p_int+j)) { vertausche(p_int+(j-1),p_int+j); fertig=1; } } } } ----------------------------------------------------------------------------------------------------------- void vertausche(int*p_int1,int*p_int2) { int temp; temp=*p_int1; *p_int1=*p_int2; *p_int2=temp; } ---------------------------------------------------------------------------------------------------------- void zufall5(int laenge,int* p_int5) { int i,zufall; for(i=0;i<laenge;i++) { zufall=rand(); *(p_int5+i)=zufall; } } ---------------------------------------------------------------------------------------------------------- Das Programm erzeugt immer wieder 10 neue Zufallszahlen und sortiert sie aufsteigend von klein nach groß!:marine :marine
8. April 200421 j danke, ich werds mal probieren wenn ich zeit hab, leider hab ich zuviel mit'nem server am hut
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.