Referentie BASIC

Home / Programmeren / Referentie basic

In deze referentie kun je nazoeken welke BASIC commando's waar bij horen. Het is niet aan te raden om deze tutorial te gebruiken als je begint met programmeren, je kunt dan beter de gewone BASIC tutorials gebruiken.

Opmerking: we maken hier gebruik van de QBASIC syntax

Structuur

BASIC kent nauwlijks structuur, dus we hoeven hier weinig over te zeggen. Het is gebruikelijk je programma te starten met de declaraties van alle variabelen, daarna het commando CLS om het scherm te legen, en als laatste het commando END om het programma te beeindigen. Er zijn geen afsluitende tekens aan het eind van een commando, echter elk commando moet op een aparte regel.

Variabelen

BASIC kent een aantal variabelen, en je kunt tijdens het programma de soort van een variabele niet veranderen. De beschikbare soorten:

NaamWat past erin?MinimumMaximumVoorbeeld
StringTekst-32.767 tekenstekst$
IntegerGehele getallen-32.76832.767getal%
Lange integerGehele getallen-2.147.483.6482.147.483.647grootgetal&
Enkele precisieGetallen met een komma-3,402823*10^383,402823*10^38precies!
Dubbele precisieGetallen met een komma-1,79769313486231*10^3081,79769313486231*10^308ergprecies#

Het type van variabelen vrij stikt: de variabele moet zelf bij elke keer dat hij aangesproken word door het teken dat bij dat type hoort vergezeld gaan.

Variable declareer je met DIM, dus DIM invoer$ declareert een variabele invoer met het type string.

Invoer en Uitvoer

Uitvoer gaat in BASIC met het commando PRINT. Dat wordt dus: PRINT "test" of PRINT variabele$. Je kunt ook meerdere stukken aan elkaar zetten met een ;-teken, dus: PRINT "Inhoud: "; variabele$; ", eind van de regel"

Ook invoer gaat heel vlug: INPUT "Vraag: ",variabele$. Zoals je ziet zit in INPUT dus ook PRINT verwerkt.

Ook belangrijk: commentaar gaat met REM, dus REM commentaar

Voorbeeld

DIM invoer$
CLS
REM Hier is de voorbereiding afgerond en begint het programma
PRINT Dit programma doet niks nuttigs"
INPUT "Hoe oud bent u? ",invoer%
PRINT "U voerde "; invoer%; " in"
END

Dit voorbeeld geeft de uitvoer:

Dit programma doet niks nuttigs
Hoe oud bent u? 23
U voerde 23 in

Controle

Dan gaan we nu controles doorspreken. Ook dit is in BASIC vrij eenvoudig en wijkt weinig af van de "normale" syntax. IF geeft een controle aan, THEN geeft het eind van een controle aan, ELSEIF geeft een alternatieve controle aan, ELSE is waar als alle andere onwaar zijn en ENDIF sluit het IF blok af. In het volgende voorbeeld wordt de invoer gecontroleerd op een bepaalde waarde:

DIM invoer$
CLS
REM Hier is de voorbereiding afgerond en begint het programma
PRINT Dit programma doet niks nuttigs"
INPUT "Hoe oud bent u? ",invoer%
IF (invoer% < 20) THEN
PRINT "U voerde een getal lager dan 20 in"
ELSEIF (invoer% > 40) THEN
PRINT "U voerde een getal groter dan 40 in"
ELSE
PRINT "U voerde een getal groter dan 20 en lager dan 40 in"
ENDIF
END

Even alle booleanse operatoren op een rij:

Controleren ofTekenExpressieKlopt als...
Is gelijk aan=waardea$ = 27klopt als waardea hetzelfde is als 27
Is kleiner dan<waardea$ < 27klopt als waardea kleiner is dan 27
Is groter dan>waardea$ > 27klopt als waardea groter is dan 27
Is niet gelijk aan<>waardea$ <> 27klopt als waardea niet gelijk is aan 27
Is kleiner dan of gelijk aan<=waardea$ <=; 27klopt als waardea kleiner is dan of gelijk is aan 27
Is groter dan of gelijk aan>=waardea$ >=; 27klopt als waardea groter is dan of gelijk is aan 27

Geavanceerdere controle

In BASIC zijn er 4 vormen van geavanceerdere controles: AND, OR, XOR en NOT. AND is waar als beide waardes waar zijn, OR is waar als een van beide of beide waarde waar zijn, XOR is waar als een van beide maar niet als beide waardes waar zijn en NOT is waar als de waarde onwaar is. Dat resulteert in het volgende voorbeeld:

DIM invoer$
CLS
REM Hier is de voorbereiding afgerond en begint het programma
PRINT Dit programma doet niks nuttigs"
INPUT "Hoe oud bent u? ",invoer%
IF (invoer% > 20 AND invoer% < 40) THEN
PRINT "U voerde een getal groter dan 20 en lager dan 40 in"
ELSEIF ((invoer% < 20 AND invoer% <> 2) OR invoer% = 56) THEN
PRINT "U voerde een getal kleiner dan 20 maar niet gelijk aan 2 in, of u voerde 56 in"
ENDIF
END

Lussen

De FOR-lus

De FOR-lus is het best te gebruiken als je iets een vast aantal keer wilt herhalen, bijvoorbeeld 20x. Kijk goed naar het onderstaande programma. Dit programma zet 10x Ik zal nooit meer spieken op het scherm.

CLS
PRINT "Dit Programma schrijft 10 strafregels"

FOR teller% = 1 TO 10
PRINT "Ik zal nooit meer spieken"
NEXT

END

Als je dit programma uitvoert krijg je dit op je scherm:

Dit Programma schrijft 10 strafregels
Ik zal nooit meer spieken
Ik zal nooit meer spieken
Ik zal nooit meer spieken
Ik zal nooit meer spieken
Ik zal nooit meer spieken
Ik zal nooit meer spieken
Ik zal nooit meer spieken
Ik zal nooit meer spieken
Ik zal nooit meer spieken
Ik zal nooit meer spieken

De DO-WHILE-LOOP-lus

Deze lus heeft, in tegenstelling tot de FOR-lus, een variabel aantal herhalingen. Het aantal herhalingen hangt af van een variabele. We kunnen het bovenstaande strafregelprogramma heel eenvoudig ombouwen tot een programma waarin de gebruiker op moet geven hoeveel strafregels hij/zij wil. Bekijk het onderstaande voorbeeld:

CLS
INPUT "Hoeveel strafregels wil je hebben?", aantal%

teller%=1
DO WHILE (teller% <= aantal%)
PRINT "Ik zal nooit meer spieken"
teller% = teller% + 1
LOOP

END

De DO-LOOP-WHILE-lus

Hoewel deze lus veel lijkt op de vorige is er een belangrijk verschil. De voorwaarde wordt niet vooraf gecontroleerd, maar pas na het uitvoeren van de lus. Dat zorgt ervoor dat de lus in ieder geval 1x wordt uitgevoerd, in tegenstelling tot de DO-WHILE-LOOP-lus, die minimaal 0x wordt uitgevoerd. Voorbeeld:

CLS

DO
PRINT "Ik zal nooit meer spieken"
INPUT "Zal ik nog een strafregel laten zien? (J = Ja, N = Nee)", antwoord$
LOOP WHILE (antwoord$="J")

END

De DO-UNTIL-LOOP-lus en de DO-LOOP-UNTIL-lus

De DO-UNTIL-LOOP is de tegenhanger van de DO-WHILE-LOOP lus, en de DO-LOOP-UNTIL lus is de tegenhanger van de DO-LOOP-WHILE lus. Het enige verschil is dat de UNTIL-lussen werken totdat aan een voorwaarde voldaan wordt, en de WHILE-lussen zolang aan een voorwaarde voldaan wordt. Omdat dit erg verwarrend werkt is het beter het gebruik van deze twee te mijden.

Het gebruik van subroutines en functies

In tegenstelling tot gewone programmeertalen kent QBASIC 2 soorten functies: de functies en de subroutines. De subroutines werken als gewone functies in een programmeertaal: je kunt er een aantal opdrachten in zetten, en de subroutine op een willekeurig punt aanroepen. Functies in QBASIC zijn net als functies in andere talen, ze geven ook een waarde terug. Het enige verschil tussen subroutines en functies is dat de functie wel een waarde teruggeeft, en een subroutine niet.

De Subroutine

Subroutines staan normaal gesproken helemaal onderaan het programma. Als je werkt met QBASIC for DOS, dan kun je via Bewerken -> Nieuwe SUB een nieuwe subroutine aanmaken. Een subroutine wordt, net als normale functies, aangeroepen met parameters. Het geheel komt er dan zo uit te zien:

SUB naamvandezesubroutine (parameter$)
END SUB

Het bovenstaande is een minimale subroutine. Natuurlijk kun je ook zonder parameters werken, je kunt dan het hele gedeelte tussen de haakjes en de haakjes zelf weglaten. Hieronder vindt je een verder uitgewerkt voorbeeld:

SUB eensubroutine (parameter1$, parameter2%)
PRINT "De subroutine wordt gestart"
PRINT "De meegeleverde parameter: "; parameter1$
PRINT "De andere parameter: "; parameter2%
END SUB

Het aanroepen van een subroutine is ook niet zoveel werk. Er zijn 2 manieren:

CALL eensubroutine ("DeEersteParameter",5574)
eensubroutine "DeEersteParameter",5574

De Functie

De functie werkt in veel opzichten hetzelfde als de subroutine, alleen roep je hem op een andere manier aan.

FUNCTION kwadraat (parameter%)
kwadraat = parameter% * parameter%
END FUNCTION

PRINT kwadraat(5)
getal% = kwadraat(43)

Let hierbij op dat de waarde die teruggegeven wordt de variabele is die dezelfde naam heeft als de functie. Als je functie dus eenfunctie heet, dan is de waarde die op het scherm gaat de inhoud van de variabele eenfunctie.