Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

17.05.2006, 10:01

rand() frage

Hallo,

also ich dacht ja eigentlich,dass ich das mit der rand() funktion verstanden habe, aber da dem laut ergebnissen nicht der fall ist, hab ich ne frage.

C-/C++-Quelltext

1
(rand()%50)+1;


erzeugt mir eine zufallszahl zwischen 1 und 50.

C-/C++-Quelltext

1
rand()%30


erzeugt mir ne random zahl zwischen 0 und 30?

C-/C++-Quelltext

1
(rand()%40)+50

erzeugt das jetzt ne random zahl zwischen 40 und 50 oder 50 und 90?
ich tipp ja auf die 50 bis 90.
modulo gibt ja den ganzzahligen rest einer division "zurück".
5%5 = 0
5%4 = 1
etc.

d.h. rand()%40 liefert ne zahl zwischen 0 und 39?
+50 wäre dann ne zahl zwischen 50 und 89?
stimmt das so?

mfg
Drac

Anonymous

unregistriert

2

17.05.2006, 10:10

Zitat

d.h. rand()%40 liefert ne zahl zwischen 0 und 39?
+50 wäre dann ne zahl zwischen 50 und 89?
stimmt das so?


Jup stimmt!

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

3

17.05.2006, 10:11

1.) Deine Zufalls nummern sind bei jedem Start gleich

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 crt_rand.c
 This program seeds the random-number generator
 with the time, then displays 10 random integers.


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

int main( void )
{
   int i;

   /* Seed the random-number generator with current time so that
    * the numbers will be different every time we run.
    */
   srand( (unsigned)time( NULL ) );

   /* Display 10 numbers. */
   for( i = 0;   i < 10;i++ )
      printf( "  %6d\n", rand() );
}
Quelle MSDN


Der % Operator führt eine Modulo Rechnung durch, d.h. er gibt dir den ganzahligen Rest. Beispiel: 128 (mod 120) = 8; 7 (mod2) = 1, d.h. ungerade ;)
Zu diesem Wert, addierst du noch 50, oder 10 oder was weiss ich...

Beispiel:
(128 (mod 120)) + 50 = 8 + 50 = 58, also einen Zahlenwert von 50... bis 119+50.
2.Beispiel: (128 (mod 120)) + 130 = 8 + 130 = 138 Diese Zahl wird jetzt logischerweise nicht modulo gerechnet, bleibt also 138. DEr Zahlenbereich wäre: 130 ... 119+130

Mist zu langsam ;)

ext

Treue Seele

  • Private Nachricht senden

4

17.05.2006, 16:18

Diese Art den Wertebereich einzuschränken führt aber zu ungleicher Verteilung, ne hübsche Erklärung und Alternative findest du hier.

CW_Kovok

Alter Hase

Beiträge: 836

Wohnort: nähe Bonn

Beruf: Schüler

  • Private Nachricht senden

5

17.05.2006, 19:09

für sehr kleine teilbereiche wie die zahlen zwischen 1 und 100 macht das aber nich mehr so viel aus, da sie bei dem im text erwähnten bereich alle zahlen zwischen 1 und 67 33 mal und zwischen 68 und 100 32 mal vorkommt. Etwas was man durchaus vernachlässigen kann, nur gebe ich dir recht, dass man sich dessen bewusst sein muss
Was es alles gibt, das ich nich brauche - Aristoteles

Werbeanzeige