Oefeningen met ARRAY's

Cursussen, tutorials
Plaats hier uw bijdrage.

Oefeningen met ARRAY's

Berichtdoor Gordon » wo sep 05, 2007 10:33 pm

Arrays

Iemand wilde een LOTTO programma schrijven.
Het lukte natuurlijk. Maar omdat de helpfile nog niet volledig vertaald
was, had de programmeur nog nooit gehoord van arrays. Zijn
programma bestond alleen uit IF..THEN statements.
Hier volgt een uitleg over arrays.

Een reeks is misschien een goede vertaling voor het woord ARRAY.
Sommige mensen gebruiken ook het woordje serie. Hoe dan ook,
het gaat om een serie variabelen met dezelfde naam. En met
een “subscript” of “index” enz. natuurlijk. Ik leg het één en ander uit aan
de hand van een spel kaarten (of lotto ballen).

De 52 kaarten uit het kaartspel hebben allen een individuele
naam “klaver drie, ruiten boer, enz.”. Programmeurs gebruiken liever
een korte duidelijke naam. Daarvoor zijn het programmeurs. Stel we
besluiten de kaarten K1, K2, K3, K4….K52 te noemen. Nu moeten we nog
een afspraak maken over de werkelijke namen. Want de niet
programmeurs zullen hier niets van begrijpen. We spreken af dat de
volgorde van de kaarten in een pak als volgt is:
Klaver Aas Klaver twee Klaver drie…..Ruiten Aas, Ruiten twee…..Harten
Aas,…Schoppen Aas, Schoppen twee, Schoppen drie …. Deze afspraak
komt uit de Bridge wereld. Om de menselijke naam van K36 te vinden
moet ik het volgende doen. Deel 36 door 13, tel bij het antwoord 1 en je
vindt de kleur. De rest na de deling is de waarde van de kaart.
Zesendertig gedeeld door dertien is twee rest tien. Klaver = 1, Ruiten =
2, Harten = 3 en Schoppen= 4. K36 komt dus overeen met Harten tien.
P.s. die één extra optellen is nodig omdat computers nul ook als een getal
kennen. Anders zou K13 als antwoord geven 1 rest 0 terwijl we zonder
onze sneaky (+1) trick 0 rest 13 als antwoord nodig hebben.

Voor LOTTO ballen geldt een zelfde redenering. B1, B2, B3 enz tot B42.
LOTTO is eenvoudiger dan een pakje kaarten voor wat betreft de namen
natuurlijk. B38 is bal 38 enz.

Zo een reeks variabelen met dezelfde familienaam is een ARRAY (reeks)
van getallen. In de computer wereld schrijven we ze alsvogt op K(1),
K(2),K(3) enz. of B(1), B(2) enz.. Naam(1), Naam(2) enz. Bij de
LOTTO ballen gaat het om getallen. Bij de kaarten gaat het om namen
(strings) dus even een correctie : K$(1), K$(2), K$(3) tot en met K$(52)

Okay, maar het is toch zo dat elke variabele met haakjes een functie is?
Zeker. Array’s zijn een soort functie. Ze moeten (vooraf) gedefinieerd
worden met het statement DIM (van dimensioneer) Dus stel ik wil
LottoBal(1) tot en met LottoBal(42) dimensioneren, dan gaat dat zo:

DIM LottoBal(42)
Nu zal LibertyBASSIC geheugen ruimte voor 43 variabele opzij zetten.
LottoBAL(0) tot en met LottoBal(42). Wat heb je daaraan? Liberty BASIC
geeft alle 43 (array)variabelen de waarde 0. Dat wil zeggen dat de
geheugen ruimte die Liberty BASIC voor de array reserveerde met DIM
nu gevuld wordt met nullen. We gaan dat even veranderen en zetten op
geheugenplek LottoBal(1) het getal 1 en op LottoBal(2) een 2 enz.

DIM LottoBal(42)
FOR T = 0 to 42
LottoBal(T) = T
Next T

Voor de kaarten gaat dat net zo, maar wat moeilijker.
DIM Kaarten$(52)
FOR T = 1 to 52
READ D$
Kaarten$(T) = D$
Next T

DATA “Klaver Aas”,”Klaver twee”,”Klaver drie”… enz
DATA enz… enz….
DATA “Schoppen Boer”,”Schoppen Vrouw”,”Schoppen Koning”

Er moeten evenveel DATA staan als er gelezen wordt met READ, dus 52
namen van kaarten.
We kunnen nu te allen tijde in ons programma bijvoorbeeld zeggen:
PRINT Kaarten$(17)
als u de data goed heeft geschreven staat dan op het scherm
Ruiten Vier
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am

Berichtdoor Abcott » za sep 08, 2007 10:05 pm

Hi Mikado,

Ik was even met een stukje bezig.
Heb je hier wat aan?

Code: Selecteer alles

'dim a(42)
[start]

' haal zes ballen
gosub [ballen]

'print zes ballen
for s = 1 to 6
print b(s)
next s


input "nogmaals ";yes$
goto [start]
wait


'de subroutine

[ballen]
redim a(42)
for b = 1 to 6
q = int(rnd(0)*42)+1
if a(q) = 0 then
b(b) = q :a(q) = 1
else
b = b-1
end if
next b
return





Abcott
Avatar gebruiker
Abcott
 
Berichten: 115
Geregistreerd: wo mei 25, 2005 9:58 pm

UW IDEE OVER LOTTO SPEL

Berichtdoor mikadofazant » di sep 11, 2007 7:04 pm

Mijn lotto gokspel is volgens mij voorlopig af ik ga mij nu wat meer verdiepen voor mijn pc kassa daar gaan we voor
als ik aan het lotto spel nog wat zou willen veranderen dan zijn het
alle inputs die nu zijn met het simpele input tekst veranderen door knoppen en het later nog wat grafischer mooier inkleden door bv achtergrond foto's te plaatsen en andere tekeneningen daar mag je mij altijd wel een handje toesteken om LB te leren vollop te gebruiken en mischien evengoed te worden zoals jullie het nu zijn mar daarvoor is er zeker nog een weg af te leggen.
mikadofazant
 
Berichten: 22
Geregistreerd: di aug 07, 2007 4:48 pm

Berichtdoor Gordon » di sep 11, 2007 8:21 pm

Waarschijnlijk zul je ook rijtjes (arrays) nodig hebben
in de PC kassa programma.

Gordon
Avatar gebruiker
Gordon
Site Admin
 
Berichten: 684
Geregistreerd: zo mei 22, 2005 12:50 am


Keer terug naar Leren programmeren met Liberty BASIC

Wie is er online

Gebruikers op dit forum: Geen geregistreerde gebruikers. en 1 gast

cron