Zufallszahlen

Schnelle objektorientierte, kompilierende Programmiersprache.
aqe89
Beiträge: 70
Registriert: Sa Jul 05, 2008 9:36 am
Wohnort: Schweiz

Zufallszahlen

Beitrag von aqe89 » Do Jul 17, 2008 2:56 pm

Mein Problem ist mit diesen Funktionen, dass die Zufallszahlen immer aufsteigend sind.
Zahl Diff
10533
10565 . 32
10601 . 36
10637 . 36
10670 . 33
.....
11176
11212 . 36
11248 . 36
11287 . 39

Ich finde das ein bisschen komisch.
Habe es 2 mal ausprobiert, sind immer aufsteigend aber andere Zahlen, aber immer ähnliche Differenzen immer zwischen 32 und 39.

Es liegt wahrscheinlich an der umrand Funktion, hatte dort mal eine anderen Lösung, gab aber immer einen Integer-Überlauf.
Weiss da jemand eine alternative? Bei Linux könnte man ja noch getpid() rein nehmen. aber bei Windows.

Code: Alles auswählen

unsigned long randtime()
{
    unsigned long randome;
    long min=10000, max=12000;

    srand(time(NULL));

    randome = umrand(min, max);
    printf("%d msec\n",randome);
    return randome;
}


unsigned long umrand( long min, long max)
{
    unsigned long random=0;
    unsigned long rnd = max - min + 1;
    random=rand()%rnd+min;
    return random;
}

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Zufallszahlen

Beitrag von nufan » Do Jul 17, 2008 3:04 pm

Ich hab mir dein Programm ehrlich gesagt nicht angesehen. Aber wenn du eine Zufallszahl generieren willst, versuch es mit randomize ().
Bin mir jetzt nicht sicher, ob das in time.h oder stdlib.h ist. Ich mach halt mal beide rein. :D
Ein einfaches Prog mit randomize:

Code: Alles auswählen

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

int main ()
{

  int zufallszahl;
  randomize ();

  zufallszahl=random (1000);    // Zufallszahl zwischen 0 und 1000 wird generiert. 

  return 0;

}

aqe89
Beiträge: 70
Registriert: Sa Jul 05, 2008 9:36 am
Wohnort: Schweiz

Re: Zufallszahlen

Beitrag von aqe89 » Do Jul 17, 2008 3:19 pm

die Funktion randomize ist nix für mich denn:
randomize()
Diese Funktion ermittelt und setzt den Anfangswert des Zufallsgenerators durch einen Zähler der DOS-Uhr. Dadurch ist dieser Wert selbst für den Programmierer kaum vorhersagbar und die mit random() auf diesem Wert aufbauenden Zahlenfolgen liefern relativ willkürliche Zahlen.
es werden beide funktionen nicht erkannt
Zuletzt geändert von aqe89 am Do Jul 17, 2008 3:20 pm, insgesamt 1-mal geändert.

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Zufallszahlen

Beitrag von Dirty Oerti » Do Jul 17, 2008 3:19 pm

dani93 hat geschrieben:Ich hab mir dein Programm ehrlich gesagt nicht angesehen. Aber wenn du eine Zufallszahl generieren willst, versuch es mit randomize ().
Bin mir jetzt nicht sicher, ob das in time.h oder stdlib.h ist. Ich mach halt mal beide rein. :D
Ein einfaches Prog mit randomize:

Code: Alles auswählen

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

int main ()
{

  int zufallszahl;
  randomize ();

  zufallszahl=random (1000);    // Zufallszahl zwischen 0 und 1000 wird generiert. 

  return 0;

}

Dem ist fast nichts mehr hinzuzufügen.
Außer: randomize(); vor jeder neuen auszugebenden Zufallszahl ausführen.
Führte zumindest bei mir dazu, dass die Zufallszahlen wirklich sehr zufällig waren.

MfG
Daniel
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Zufallszahlen

Beitrag von nufan » Do Jul 17, 2008 3:23 pm

aqe89 hat geschrieben: es werden beide funktionen nicht erkannt
Nicht erkannt?

Benutzeravatar
Dirty Oerti
Beiträge: 2229
Registriert: Di Jul 08, 2008 5:05 pm
Wohnort: Thurndorf / Würzburg

Re: Zufallszahlen

Beitrag von Dirty Oerti » Do Jul 17, 2008 3:34 pm

Hm..ich weiß es selber nicht, deswegen die Frage:

Sind diese Funktionen vllcht plattformabhängig?
Bei Fragen einfach an daniel[ät]proggen[Punkt]org
Ich helfe gerne! :)
----------
Wenn du ein Licht am Ende des Tunnels siehst, freu dich nicht zu früh! Es könnte ein Zug sein, der auf dich zukommt!
----
It said: "Install Win95 or better ..." So I installed Linux.

aqe89
Beiträge: 70
Registriert: Sa Jul 05, 2008 9:36 am
Wohnort: Schweiz

Re: Zufallszahlen

Beitrag von aqe89 » Do Jul 17, 2008 3:35 pm

error: 'randomize' was not declared in this scope
error: 'random' was not declared in this scope
bin jetzt auf interessante Artikel gestossen, werde mich ein weilchen damit beschäftigen. den wie oben erwähnt ist die Funktion randomize für windows, oder sonst haben die da etwas falsches geschreiben. den:
durch einen Zähler der DOS-Uhr.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Zufallszahlen

Beitrag von nufan » Do Jul 17, 2008 3:39 pm

Weiss da jemand eine alternative? Bei Linux könnte man ja noch getpid() rein nehmen. aber bei Windows.
Nach dem Satz dachte ich, dass das Programm für Windows sein soll.
Auf welchem OS programmierst du denn? Da es ein Windows Programm werden soll, nehme ich an, du programmierst auch auf Windows. Bei mir Funktionierts zu 100% auf Vista, XP und Millenium.

aqe89
Beiträge: 70
Registriert: Sa Jul 05, 2008 9:36 am
Wohnort: Schweiz

Re: Zufallszahlen

Beitrag von aqe89 » Do Jul 17, 2008 3:45 pm

Das Programm wird unter Linux (3 Personen ) und unter Windows verwendet.
aber ich habe es unter Windows versucht und es ging nicht. bin jetzt am Windows PC.

habe jetzt ca 10 Artikel über Zufallszahlen, werde da wohl einige Stunden am lesen sein.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

Re: Zufallszahlen

Beitrag von nufan » Do Jul 17, 2008 3:50 pm

Vllt ist das auch Compilerabhängig.
Borland Hilfe sagt das über random:
Syntax

Code: Alles auswählen

#include <stdlib.h>
int random(int num);
Description

Random number generator.
random returns a random number between 0 and (num-1). random(num) is a macro defined in stdlib.h. Both num and the random number returned are integers.

Return Value

random returns a number between 0 and (num-1).
und das über randomize:
Syntax

Code: Alles auswählen

#include <stdlib.h>
#include <time.h>
void randomize(void);
Description

Initializes random number generator.
randomize initializes the random number generator with a random value.

Return Value

None.
Weiß nicht, ob dir das weiterhilft.

Antworten