Zum Inhalt springen

wiederholt Zufallszahlen


Varrius

Empfohlene Beiträge

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++?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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);

}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...