Code-Schnipsel
Moderatoren: broesel, Martin Conrad, PatrickThema: [EDIT] - Echte Zufallszahlen
[EDIT] - Echte Zufallszahlen
swlx87 am 23.09.2007 um 10:46
Habe kurzerhand die Suche aufgegeben und mir selbst ein Programm in C geschrieben:
/****************************************
* randuser.c *
* Lizens: GPL *
* Autor: swlx87 *
* Zufallszahl nach Eingabe des Users *
****************************************/
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int zahl;
int zufallszahl;
/*Hauptfunktion main ()**************************/
int main () {
printf ( "Zahl: " );
scanf ( "%d", &zahl );
shake_it ();
printf ( "Zahl 0-%d: %d\n\n ",zahl, zufallszahl );
return 0;
}
/*Funktion shake_it ()*****************************/
int shake_it () {
srand ( ( unsigned ) time ( NULL ) );
zufallszahl = rand () % zahl;
return zahl;
}
Und hier das Programm an einem praktischen Beispiel:
/***************************************
* diceroller.c *
* Lizens: GPL *
* Autor: swlx87 *
* Die Berechnung echter Zufallszahlen *
* anhand eines Wuerfelbeispieles. *
***************************************/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define W_100 100
#define W_20 20
#define W_12 12
#define W_6 6
#define W_4 4
int ergebnis;
int tmp;
/*Hauptfunktion **********************************/
int main () {
menue ();
return 0;
}
/*Funktion menue () *****************************/
int menue () {
printf ( " ~ Wuerfel Programm ~\n" );
printf ( " W 100 <1>\n" );
printf ( " W 20 <2>\n" );
printf ( " W 12 <3>\n" );
printf ( " W 6 <4>\n" );
printf ( " W 4 <5>\n" );
printf ( " Auswahl: ");
scanf ( "%d", &tmp );
switch ( tmp ) {
case 1: tmp = W_100;
roll (); /
break;
case 2: tmp = W_20;
roll ();
break;
case 3: tmp = W_12;
roll ();
break;
case 4: tmp = W_6;
roll ();
break;
case 5: tmp = W_4;
roll ();
break;
default: printf ( " Ungueltige Eingabe. \n");
main ();
break;
}
return tmp;
}
/* Funktion roll () *****************************/
int roll () {
srand( ( unsigned ) time ( NULL ) );
ergebnis = rand () % tmp; /* rand ermittelt eine Zufaellige Zahl von tmp */
printf ( "Wuerfel: %d Ergebnis: %d\n\n ", tmp, ergebnis );
return tmp;
}
Re: Echte Zufallszahlen
Patrick (Moderator) am 27.09.2007 um 17:04
--
To follow the path: look to the master, follow the master, walk with the master, see through the master, become the master.
Re: Echte Zufallszahlen
fukurokuju am 27.11.2007 um 00:48
Re: Echte Zufallszahlen
Hanse am 12.12.2007 um 15:39
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//#define W_100 100
#define W_20 20
#define W_12 12
#define W_10 10
#define W_8 8
#define W_6 6
#define W_4 4
#define W_3 3
int roll();
int menue();
int ergebnis;
int tmp;
/*Hauptfunktion **********************************/
int main () {
menue ();
return 0;
}
/*Funktion menue () *****************************/
int menue () {
do
{
printf ( " ~ Wuerfel Programm ~\n" );
//printf ( " W 100 <1>\n" );
printf ( " W 20 <1>\n" );
printf ( " W 12 <2>\n" );
printf ( " W 10 <3>\n" );
printf ( " W 8 <4>\n" );
printf ( " W 6 <5>\n" );
printf ( " W 4 <6>\n" );
printf ( " W 3 <7>\n" );
printf( " Quit <99>\n" );
printf ( " Auswahl: ");
scanf ( "%d", &tmp );
switch ( tmp ) {
/*case 1: tmp = W_100;
roll (); /
break;*/
case 1: tmp = W_20;
roll ();
break;
case 2: tmp = W_12;
roll ();
break;
case 3: tmp = W_10;
roll ();
break;
case 4: tmp = W_8;
roll ();
break;
case 5: tmp = W_6;
roll ();
break;
case 6: tmp = W_4;
roll ();
break;
case 7: tmp = 3;
roll ();
break;
case 99: tmp = 99;
printf("Programmende!!!\n");
exit(0);;
default: printf ( "Ungueltige Eingabe. \n");
main ();
break;
}
}while(tmp!=99);
return tmp;
}
/* Funktion roll () *****************************/
int roll () {
srand( ( unsigned ) time ( NULL ) );
ergebnis = rand () % tmp; /* rand ermittelt eine Zufaellige Zahl von tmp */
printf ( "Wuerfel: %d Ergebnis: %d\n\n ", tmp, ergebnis+1 );//+1 weil die Null sonst mitzaehlt
return tmp;
}
[EDIT] - Re: Echte Zufallszahlen
scusi71 am 20.09.2008 um 23:31
Der srand Aufruf muss hier auf jeden Fall entfernt werden. Ausserdem ist bekannt das der Modulo Ansatz schlechte Ergebnisse bei dem von rand gewöhnlich verwendeten Verfahren liefert aber es gibt ja noch einen anderen Weg.
#include <stdlib.h>
/*
* Simuliere einen Würfelwurf mit einem sides seitigen Würfel.
*/
int rollDice (const int sides)
{
return (1 + (int)(sides * (rand()/(RAND_MAX+1.0))));
}
