Lottozahlengenerator in C

Hi Zusammen

Habe folgendes Problem.Ich soll ein Lottozahlengenerator schreiben in C, der die zahlen 6 aus 49 mit Zusatzzahl zieht.In einem ersten Schritt sollen 6Ziehungszahlen in der Reihenfolge der Ziehung ausgegeben werden, anschließend die Zusatzzahl.In einem weiteren Schritt sollen die geuzogenen Zahlen sortiert ausgegeben werden und die Zusatzzahl an schluss kommt.

Soweit so gut, allerdings erzeugt mir irgendwie der Zufallsgenerator immer die selben Zahlen !!! Desweiteren vermute ich irgendwie das er nicht in die unsigned int zahl(void){ reingeht.

Würde mich über tipps und Hilfe sehr freuen. Vielen Dank vorab.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

/* Erzeugung von Zufallszahlen im Bereich 1 < n <= 49 */
unsigned int zahl(void){
static int init=0;
unsigned int wert=0;

/* Damit nicht immer mit der gleichen Reihenfolge begonnen wird,
wird der Zufallszahlengenerator mit der Anzahl der Sekunden,
die seit dem 1.1.1970 0 Uhr vergangen sind, initialisiert */
#include <time.h>
#include <math.h>

/* Erzeugung von Zufallszahlen im Bereich 1 < n <= 49 */
unsigned int zahl(void){
static int init=0;
unsigned int wert=0;

/* Damit nicht immer mit der gleichen Reihenfolge begonnen wird,
wird der Zufallszahlengenerator mit der Anzahl der Sekunden,
die seit dem 1.1.1970 0 Uhr vergangen sind, initialisiert */
if(init==0) {
srand((unsigned) time(NULL));
init=1;
}
while (wert == 0 || wert > 49)
wert=rand();
}

int main(void) {
printf ("Markus Mustermann Studiengang TI Gruppe T\n" );
printf ("Matrikelnummer: xxxxxxxxxx\n");
printf ("Lottozahlengenerator\n\n");

int Z[7]={0,0,0,0,0,0,0};
for (int z=0;z<=7;z++){
Z[z]=1+(rand()%49);
for (int q=0;q<z;q++){
if (Z[z]==Z[q]){
z--;
break;
}
}
}
printf ("Die Lottozahlen lauten: ");
for (int i=0;i<6;i++){
if (Z<10){
printf("0");
}
printf ("%i",(Z));
printf (" ");
}
printf("\n");
printf ("Zusatzzahl:%i\n ", (Z[6]));
for(int j=1;j<6;j++){
int rekord=Z[0];
int imax=0;
for(int i=0;i<=6-j;i++){
if (Z>rekord){
rekord=Z;
imax=i;
}
}
Z[imax]=Z[6-j];
Z[6-j]=rekord;
}
printf("Die Lottozahlen lauten: ");
for (int i=0;i<6;i++){
if (Z<10){
printf("0");
}
printf ("%i",(Z));
printf (" ");
}
printf (" %i ",(Z[6]));

return (0);

}
 
Hi!

Leider bin ich C noch nicht so fit, aber in PHP (auf C basierend) habe ich sowas mal realisiert.
Dabei habe ich erstmal ein array erzeugt mit den Zahlen 1 bis 49. Diese habe ich dann durcheinander gewürfelt. Dadurch konnte auf einfache Art vermieden werden, dass keine Zahl doppelt auftaucht.

Die ersten 6 Zahlen sind dann die gezogenen Zahlen, die 7. meine Zusatzzahl.

Nur diese ersten 6 Zahlen habe ich dann noch einmal sortiert.

PHP kann mit eigenen Befehlen arrays durcheinanderwürfeln und auch wieder sortieren - kann C das auch?

Gruß
Volker
 
Hallo zusammen!

@Karlibert: Wusste gar nicht, dass PHP solch wüste Sachen beherrscht ;)

@Simsi: Dass dein Funktionskopf
/* Erzeugung von Zufallszahlen im Bereich 1 < n <= 49 */
unsigned int zahl(void){
...usw...
zweimal im gezeigten Programm auftaucht ist hoffentlich nur ein Kopierfehler gewesen!?
Außerdem: Hab ich's bloß übersehen, oder wo rufst du diese Funktion auf
z.B. Z = zahl();

Sollte ich das Programm jetzt irgendwie flasch verstanden haben, hier ein relativ kurzes C-Programm aus der Richtung von mir (6 Zahlen ohne Zusatzzahl); vielleicht hilft's dir, die Funktion müsste soweit ich's getestet hab passen:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

main()
{
int zahlen[6];
int i, j, flag;



system("cls");


//Dem Zufallszahlengenerator die gegenwärtige Uhrzeit als
//Anfangswert liefern:
srand((unsigned)time(NULL));

for (i = 0; i < 6; i++)
{
do
{
zahlen = rand() % 49 + 1; //Zufallszahl generieren

flag = 0;

for(j = i - 1; j >= 0; j--)
{
if(zahlen == zahlen[j]) //Prüfen, ob Zufallszahl bereits
flag = 1; //im Array vorhanden, wenn ja, dann
} //neuer Durchlauf
} while(flag == 1);

printf("Zahl %d: %2d\n", i+1, zahlen);
}

}

MfG
berty
 
Hi!

Zitat von berty:
@Karlibert: Wusste gar nicht, dass PHP solch wüste Sachen beherrscht ;)
das könnte dann so aussehen:
/* die 49 Zahlen bereitstellen*/
$zahlen=range(1,49);

/*Das Ziehungsgerät starten*/
srand(time());
shuffle($zahlen);

/*Die Ziehung*/
for ($i=0;$i<=5;$i++)
{
echo "$zahlen[$i] ";
$gezogen[]=$zahlen[$i];
}
echo "Zusatzzahl: $zahlen[6]<br>";

/*Wiederholung in der richtigen Reihenfolge*/
sort($gezogen);
foreach ($gezogen as $zahl)
{
echo "$zahl ";
}
echo "Zusatzzahl: $zahlen[6]";


Kann das so ähnlich auch in C funktionieren?

Gruß
Volker
 
Hallo Karlibert!

Bin auch nicht so der Hardcore-C-Programmierer, von einer shuffle-ähnlichen Funktion hab ich allerdings in ANSI-C noch nichts gehört.
Sieht man halt doch, dass PHP aus mehreren anderen Programmiersprachen zusammenklabuster worden ist.

Greetz nach Gütersloh!
 
Top