anoniem Geplaatst: 23 maart 2004 Delen Geplaatst: 23 maart 2004 Hoe programmeer ik een array met 52 verschillende getallen in BASIC? Abcott Quote Link naar reactie
anoniem Geplaatst: 23 maart 2004 Auteur Delen Geplaatst: 23 maart 2004 Wat voor Basic? In visual basic is dim array(51) voldoende. Quote Link naar reactie
anoniem Geplaatst: 23 maart 2004 Auteur Delen Geplaatst: 23 maart 2004 In elke BASIC geldt dat je daarmee ARRAY(0) = 0, ARRAY(1) = 0 enz. krijgt. [code:1:3c17a3c5a7] DIM ARRAY(52) FOR T = 1 TO 52 ARRAY(T) = T NEXT T [/code:1:3c17a3c5a7] Maar ik wil A(1) = 15, A(2) = 23, A(3) = 51 o.i.d Quote Link naar reactie
anoniem Geplaatst: 24 maart 2004 Auteur Delen Geplaatst: 24 maart 2004 Dan zou je iets met Randomize en Rnd moeten doen om een willekeurige waarde aan de variabele te geven. [code:1:bd58ffa868]Dim array(51) as Byte Randomize For i = 0 to 51 array(i)=int((52 * rnd) + 1) Next i[/code:1:bd58ffa868] Dan zou je alleen nog moeten controleren of er een waarde al gebruikt wordt en zo ja dan een nieuwe waarde kiezen. Quote Link naar reactie
anoniem Geplaatst: 24 maart 2004 Auteur Delen Geplaatst: 24 maart 2004 Dat lukt niet eenvoudig. Hoe moet dat? Misschien moet ik de getallen (kaarten) van hun plek verwisselen. Abcott Quote Link naar reactie
anoniem Geplaatst: 25 maart 2004 Auteur Delen Geplaatst: 25 maart 2004 Oke Wouter, Is dit jouw idee? Ik maak een nieuwe rij B(52) [code:1:77a06b4cf6]DIM B(52) DIM A(52) FOR T = 1 TO 52 A(T) = INT((52 * RND) + 1) IF B(T) = -1 THEN T = T - 1 : NEXT T B(T) = -1 NEXT T [/code:1:77a06b4cf6] Abcott Quote Link naar reactie
anoniem Geplaatst: 26 maart 2004 Auteur Delen Geplaatst: 26 maart 2004 Misschien is dit wel wat? [code:1:6777aa29dc] DIM ARRAY(52) FOR T = 1 TO 52 ARRAY(T) = T NEXT T R1 = INT(RND(0)*52 + 1) R2 = INT(RND(0)*52 + 1) SWAP = ARRAY(R1) ARRAY(R1) = ARRAY(R2) ARRAY(R2) = SWAP [/code:1:6777aa29dc] Uiteraard moet dat verwisselen meerdere malen worden herhaald. Abcott Quote Link naar reactie
anoniem Geplaatst: 9 april 2004 Auteur Delen Geplaatst: 9 april 2004 [code:1:d4670375fc]DIM ARRAY(52) FOR T = 1 TO 52 ARRAY(T) = T NEXT T FOR T = 52 TO 1 STEP -1 R1 = INT(RND(0)*T + 1) SWAP = ARRAY(T) ARRAY(T) = ARRAY(R1) ARRAY(R1) = SWAP NEXT T [/code:1:d4670375fc] Dit schijnt de efficiëntste methode te zijn. Abcott Quote Link naar reactie
anoniem Geplaatst: 13 april 2004 Auteur Delen Geplaatst: 13 april 2004 In een heel grijs verleden heb ik dat eens op de Commodore 64 gedaan. Aangezien dat al weer enige tijd terug is, hier pseudo-code: [code:1:2260d4e754]Bezet[52]; // allemaal 0 Kaart[52]; // allemaal 0 FOR I=1 TO 52 Getal = RANDOM(52); IF Bezet[Getal] == 0 // kaart nog niet geweest Bezet[Getal] = 1; Kaart[i] = Getal; ELSE // kaart alwel geweest opnieuw getal kiezen NEXT I [/code:1:2260d4e754] Er is vast wel iemand die dit naar BASIC kan vertalen. Het is voor mij zo'n 10-15 jaar geleden... Quote Link naar reactie
anoniem Geplaatst: 15 april 2004 Auteur Delen Geplaatst: 15 april 2004 [quote:fae1f82ad5="MacNetron"]In een heel grijs verleden heb ik dat eens op de Commodore 64 gedaan. Aangezien dat al weer enige tijd terug is, hier pseudo-code: [code:1:fae1f82ad5]Bezet[52]; // allemaal 0 Kaart[52]; // allemaal 0 FOR I=1 TO 52 Getal = RANDOM(52); IF Bezet[Getal] == 0 // kaart nog niet geweest Bezet[Getal] = 1; Kaart[i] = Getal; ELSE // kaart alwel geweest opnieuw getal kiezen NEXT I [/code:1:fae1f82ad5] Er is vast wel iemand die dit naar BASIC kan vertalen. Het is voor mij zo'n 10-15 jaar geleden...[/quote:fae1f82ad5] Hier is de BASIC versie: [code:1:fae1f82ad5]dim Bezet(52) 'allemaal 0 dim Kaart(52) 'allemaal 0 FOR I=1 TO 52 Getal = INT(RND(0)*52 + 1) IF Bezet(Getal) = 0 then 'kaart nog niet geweest Bezet(Getal) = 1 Kaart(I) = Getal ELSE 'kaart alwel geweest END IF 'opnieuw getal kiezen {I = I - 1} NEXT I for t = 1 to 52 print Kaart(t);" "; next t [/code:1:fae1f82ad5] Ik stel voor dat je vlak voor de END IF statement nog even I = I - 1 plaatst, anders komen er vele nullen in de reeks voor. P.s. Wouter gaf een dergelijke oplossing al. Het grote nadeel van je oplossing is dat na een poos 50 of 51 kaarten gevonden zijn. De computer moet nu zeer vele malen random uitvoeren voordat de enig overgebleven onbezette kaart gevonden wordt. Abcott. Quote Link naar reactie
anoniem Geplaatst: 15 april 2004 Auteur Delen Geplaatst: 15 april 2004 Ik ben geen BASIC programmeur, dus vraag me niet om een precieze code. Maar het probleem van lang [i:cbb1223efc]randomizen[/i:cbb1223efc] na 50 of 51 kaarten kan je misschien op een andere manier voorkomen (als ik iets doms schrijf, moet je het maar zeggen). Waarom loop je de rij kaarten niet gewoon 1 voor 1 af en randomize je de spelers? Het enige dat je dan nodig hebt is een restrictie dat een speler niet meer kaarten kan krijgen dan het maximum (13 bij 4 spelers). Quote Link naar reactie
anoniem Geplaatst: 16 april 2004 Auteur Delen Geplaatst: 16 april 2004 Lol! Dan hoef je meteen de handen van de spelers niet meer te sorteren! Maar - alhoewel ik geen kei in Kansrekening ben - ik vermoed dat statistisch gezien het niet hetzelfde is. Een slecht bedeelde speler krijg dan altijd de laatste paar kaarten. Daar moet je uiteraard lak aan hebben en gewoon proefondervindelijk even kijken of dat inderdaad zo is. [quote:d6a39894a8="abcott"] <knip> Ik stel voor dat je vlak voor de END IF statement nog even I = I - 1 plaatst, anders komen er vele nullen in de reeks voor. P.s. Wouter gaf een dergelijke oplossing al. Het grote nadeel van je oplossing is dat na een poos 50 of 51 kaarten gevonden zijn. De computer moet nu zeer vele malen random uitvoeren voordat de enig overgebleven onbezette kaart gevonden wordt. Abcott.[/quote:d6a39894a8] Die I = I -1 moet er inderdaad in, in de ELSE-conditie. Voor die laatste kaart hoef je je niet druk te maken, op de C64 was ie in een paar seconden (echt minder dan 10) klaar. Een beetje PC moet dat kunnen overtreffen :) Quote Link naar reactie
anoniem Geplaatst: 24 april 2004 Auteur Delen Geplaatst: 24 april 2004 Zo kan het ook. [code:1:7a6415d38d] DIM A(52) FOR Z = 1 to 52 A(Z)=INT(RND(0)*52+1) FOR K=1 TO Z-1 IF A(Z)=A(K) THEN A(Z)= INT(RND(0)*52+1) : K = 1 NEXT K NEXT Z [/code:1:7a6415d38d] Met de hedendaagse microprocessoren zijn deze kaarten uiteraard binnen tienden van seconden geschud. Abcott Quote Link naar reactie
anoniem Geplaatst: 24 april 2004 Auteur Delen Geplaatst: 24 april 2004 Oke, ik heb het al ontdekt. In mijn laatste voorbeeld mis ik een kaart. Abcott Quote Link naar reactie
anoniem Geplaatst: 26 april 2004 Auteur Delen Geplaatst: 26 april 2004 o sorry verkeerde knop ingedrukt, wilde toch neit posten :oops: :oops: Quote Link naar reactie
anoniem Geplaatst: 5 mei 2004 Auteur Delen Geplaatst: 5 mei 2004 Nog even: [code:1:ab2107599a] s$(1)="klaveren" s$(2)="ruiten" s$(3)="harten" s$(4)="schoppen" for t = 1 to 52 s=int((t-.5)/13)+1 v= t-s*13 print "kaart no. ";t;" soort ";s$(s);" waarde ";v + 13 next t end [/code:1:ab2107599a] v heet een modulus. In sommige Basics is deze modulus functie voor geprogrammeerd. Abcott Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen