Archief - Random number generator

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

DragonX

Legacy Member
Hallo allemaal,

ik zou graag mijn eigen rng schrijven, ik heb al een basis, maar nu zit ik vast. Ik heb dit al:
Random random = new Random();
int num = random.Next(1, 11);
tbxGetal.Text = Convert.ToString(num);
Nu zou ik graag hebben dat hij een random nummer kiest uit 2 verschillende groepen (1,11) en (15,20) ofzo. Weet iemand hoe ik dit zou kunnen doen?


Alsvast bedankt!

De Wouter

Legacy Member
Gewoon een extra integer (num2 ofzo) gebruiken.

Code:
int num2 = random.Next(15,20);

En wat wil je dan doen met de 2 nummers? In een array steken? Samen voegen? Of allebei in je tbxGetal steken?

Code:
Random random = new Random();
int num1 = random.Next(1, 11);
int num2 = random.Next(15,20);
tbxGetal.Text = Convert.ToString(num1) + " " + Convert.ToString(num2);

DragonX

Legacy Member
Ik zou deze 2 (later mss meerdere) nummer groepen dan willen gebruiken om dan uit 1 van die groepen een random nummer te halen, en deze dan weer te geven in mn textbox

De Wouter

Legacy Member
Lijkt me heel bizar en vaag, waarom zou je dat doen? Waarom niet gewoon een nieuwe random? Randoms genereren om in een lijst te zetten en dan random een getal daar uit te halen...

YaMo

Legacy Member
Code:
Random random = new Random();
List<int> list = new List<int>()
list.Add(random.Next(1, 11));
list.Add(random.Next(15,20));
int num = list[random.Next(0, list.Count)];

DragonX

Legacy Member
Bedankt YaMo, dit is echt net wat ik zocht! :) ik kan hier nog vele kanten mee uit qua variaties enzo

DragonX

Legacy Member
Ik ben al een heel stuk opgeschoten met mijn programma, maar nu had ik graag geweten of het mogelijk was om heel simpel getallen uit die lijst van randoms te excluden (getallen te bepalen door middel van checkboxen)

MilM

Legacy Member
YaMo zei:
Code:
Random random = new Random();
List<int> list = new List<int>()
list.Add(random.Next(1, 11));
list.Add(random.Next(15,20));
int num = list[random.Next(0, list.Count)];

Let wel zwaar op met deze oplossing.
De kans op bijvoorbeeld een 15 zal dubbel zo groot zijn als de kans op een 10.
Kans op een specifiek getal uit eerste interval is namelijk 0.5 * 1/12 en de kans op een specifiek getal uit tweede interval is 0.5 * 1/6

Is dit wat je wilt bereiken of niet? Want indien je wilt dat elk getal evenveel voorkomt, zal je een andere oplossing moeten zoeken.

Bijvoorbeeld, een simpele oplossing voor uw specifiek voorbeeld die wel (pseudo)random is:
Code:
int num1 = random.Next(1, 17);
if(num1 > 11)
 num1 += 3;

Indien je een meer algemene klasse wilt schrijven:
  1. Maak een eigen klasse aan met de properties Min & Max en een methode SizeInterval() die "Max-Min+1" teruggeeft
  2. De gebruiker kan nu intervallen ingeven:
    • rg.Add(1,11); rg.Add(15,20); => twee intervallen die aan de lijst toegevoegd worden
    • rg.Add(16); => kan een shortcut zijn voor rg.Add(16,16);
    • geef error terug indien eerste parameter groter is dan tweede parameter
    • om te excluden: rg.Exclude(17); => zoek in lijst naar interval waar 17 in voorkomt. Indien dit ergens voorkomt, split interval in twee. In dit voorbeeld zou je dus de entry (15,20) veranderen naar (15,16) en een tweede entry (18,20) toevoegen aan lijst
    • dit zal enkel werken indien je eerst rg.Add(15,20); gedaan hebt en dan pas rg.Exclude(17); => indien het ook moet werken in omgekeerde volgorde, voeg de excludes toe aan aparte lijst en overloop die pas op het einde net voor je rg.Generate(); doet
    • Geef een error terug indien gebruiker een overlappend interval ingeeft ofwel pas je het bestaande interval aan. Maw, indien de gebruiker rg.Add(18,22); doet zou je (15,20) kunnen aanpassen door de Max property op 22 te zetten of een error teruggeven
  3. Na het ingeven van de intervallen, call je rg.Generate();
  4. Deze methode berekent eerst het totaal aantal elementen ("Total") door op elk interval SizeInterval() te callen en deze op te tellen
  5. Sorteer de lijst op "Min" value
  6. Daarna roep je random.Next(1, Total) op (laten we dit X noemen)
  7. Daarna ga je de lijst af. Zolang X groter is dan SizeInterval(), doe je (X - SizeInterval()) en ga je met de resterende waarde van X naar het volgende interval.
  8. Bijvoorbeeld: Als X 10 is en het eerste interval heeft 8 elementen, dan heeft X nog waarde 2. Ga nu naar het tweede interval. Indien SizeInterval() <= die 2, doe je op dat interval "random waarde" = (Min+X-1) waarbij X hier 2 is
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan