Varrius Geschrieben 7. April 2004 Geschrieben 7. April 2004 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++?
Master Z Geschrieben 7. April 2004 Geschrieben 7. April 2004 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?
Varrius Geschrieben 7. April 2004 Autor Geschrieben 7. April 2004 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
Master Z Geschrieben 7. April 2004 Geschrieben 7. April 2004 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));*
Master Z Geschrieben 7. April 2004 Geschrieben 7. April 2004 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); } }
Varrius Geschrieben 7. April 2004 Autor Geschrieben 7. April 2004 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
Master Z Geschrieben 7. April 2004 Geschrieben 7. April 2004 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!
nic_power Geschrieben 7. April 2004 Geschrieben 7. April 2004 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
Varrius Geschrieben 7. April 2004 Autor Geschrieben 7. April 2004 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
nic_power Geschrieben 7. April 2004 Geschrieben 7. April 2004 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
Master Z Geschrieben 8. April 2004 Geschrieben 8. April 2004 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!
Varrius Geschrieben 8. April 2004 Autor Geschrieben 8. April 2004 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?
Master Z Geschrieben 8. April 2004 Geschrieben 8. April 2004 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?
nic_power Geschrieben 8. April 2004 Geschrieben 8. April 2004 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
Master Z Geschrieben 8. April 2004 Geschrieben 8. April 2004 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
Varrius Geschrieben 8. April 2004 Autor Geschrieben 8. April 2004 danke, ich werds mal probieren wenn ich zeit hab, leider hab ich zuviel mit'nem server am hut
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden