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
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.
BASIC kent een aantal variabelen, en je kunt tijdens het programma de soort van een variabele niet veranderen. De beschikbare soorten:
Naam | Wat past erin? | Minimum | Maximum | Voorbeeld |
---|---|---|---|---|
String | Tekst | - | 32.767 tekens | tekst$ |
Integer | Gehele getallen | -32.768 | 32.767 | getal% |
Lange integer | Gehele getallen | -2.147.483.648 | 2.147.483.647 | grootgetal& |
Enkele precisie | Getallen met een komma | -3,402823*10^38 | 3,402823*10^38 | precies! |
Dubbele precisie | Getallen met een komma | -1,79769313486231*10^308 | 1,79769313486231*10^308 | ergprecies# |
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.
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
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
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 of | Teken | Expressie | Klopt als... |
---|---|---|---|
Is gelijk aan | = | waardea$ = 27 | klopt als waardea hetzelfde is als 27 |
Is kleiner dan | < | waardea$ < 27 | klopt als waardea kleiner is dan 27 |
Is groter dan | > | waardea$ > 27 | klopt als waardea groter is dan 27 |
Is niet gelijk aan | <> | waardea$ <> 27 | klopt als waardea niet gelijk is aan 27 |
Is kleiner dan of gelijk aan | <= | waardea$ <=; 27 | klopt als waardea kleiner is dan of gelijk is aan 27 |
Is groter dan of gelijk aan | >= | waardea$ >=; 27 | klopt als waardea groter is dan of gelijk is aan 27 |
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
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
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
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 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.
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.
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 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.