home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
RUN Flagazine: Run 11
/
run11.zip
/
LES11GWB.ASC
< prev
next >
Wrap
Text File
|
1994-01-18
|
22KB
|
280 lines
GW/QBasic Les 11
Compilers
Iedereen die deze vervolgcursus op de voet en actief heeft gevolgd, kan
nu programmeren in GWBasic. Tijdens het verloop van deze lessen is de
opvolger van GWBasic boven de horizon verschenen: QBasic. Microsoft
levert QBasic standaard mee met DOS 5.0 en hoger. Het verschil tussen
beide Basic-talen is heel groot en tegelijk ook heel klein.
U herinnert zich waarschijnlijk de eerste lessen waarin is uitgelegd dat
GWBasic een interpreter is. Een interpreter is een programma dat
ingevoerde programeeropdrachten in min of meer gewone (Engelse) taal
vertaalt naar de machinetaal van nullen en enen die de processor (de
machine) verstaat.
Bij GWBasic vindt deze vertaalslag
TIJDENS
de run of programma-uitvoe-
ring plaats.
Het nadeel van deze werkwijze is dat een geïnterpreteerd programma traag
is. De interpreter verdoet de meeste tijd met uit te zoeken
WAT
hij moet
doen in plaats van het ook daadwerkelijk te doen.
Nog een nadeel van een GWBasic-programma is dat andere gebruikers het-
zelfde interpreter-programma (GWBASIC.EXE of BASICA.EXE) èn de source-
of de broncode (het .BAS programma) nodig hebben om de toepassing te
kunnen gebruiken.
Het verschil
Een compiler werkt heel anders. Alle programeertalen als Algol, ADA,
C++, Pascal, Lisp, Prolog en natuurlijk ook Basic hebben compilers (en
soms ook interpreters). Compilers zijn ook vertaalprogramma's maar ze
doen hun werk niet tijdens de run maar van tevoren. De programmeur
schrijft, test en debugt zijn programma eerst in samenwerking met de
compiler of de interpreter. Als hij daarmee klaar is laat hij zijn
broncode definitief compileren naar machinecode. Het eindresultaat is
dan een .EXE programma dat de gebruiker direct vanaf de DOS-prompt kan
activeren. Als zodanig loopt een gecompileerd Basic-programma vele malen
sneller dan geïnterpreteerde broncode. Bovendien blijft de bron of
source een zaak van de programmeur en is dus niet voor jan en alleman
toegankelijk.
QBasic
Microsoft prijst QBasic aan als een
compiler
. Dit is helaas niet meer
dan de helft van de waarheid. Eerlijker zou het zijn als QBasic een
semi-compiler werd genoemd want dat is het ook.
QBasic accepteert Basic-taal in twee versies: 'ouderwets' GWBasic met
regelnummers en Basic-nieuwe-stijl: gestructureerde programmablokken
zonder regelnummers (en... bij voorkeur zonder GOTO's!).
Het onderstaande stukje GWBasic kan iedere cursist lezen:
100 REM
110 INPUT "Geef een getal kleiner dan 100";A
111 IF A>=100 THEN BEEP:GOTO 110
120 CLS:KEY OFF
130 FOR I=1 TO A
140 PRINT I*A;
160 NEXT I
170 END
In een moderne (op Pascal geïnspireerd) compiler-Basic als TurboBasic,
QuickBasic of PowerBasic ziet hetzelfde programmaatje er heel anders
uit:
┌──────────────────────────────────────────────────────────────────────┐
│
│
│
CLS
│
│
DEFINT A
│
│
┌
WHILE B = 0: ' B is de testcase
│
│
│
PRINT "Geef een postief getal < 100"
│
│
│
INPUT A
│
│
│
┌
SELECT CASE A
│
│
│
│
CASE 1 TO 99
│
│
│
│
B=A: 'B wordt A en daarmee < 100
│
│
│
│
EXIT SELECT
│
│
│
│
CASE ELSE
│
│
│
│
B=0 'B is <> 1 - 99
│
│
│
│
BEEP
│
│
│
└
END SELECT
│
│
└
WEND
│
│
│
│
CLS
│
│
┌ DO UNTIL I=A
│
│
│ INCR I
│
│
│ PRINT I*A;
│
│
└ LOOP
│
│
END
│
│
│
└──────────────────────────────────────────────────────────────────────┘
Over op QBasic?
Er zijn veel Basic-programmeurs die Qbasic wel hebben maar de 'nieuwe
taal' links laten liggen. Ze gaan gewoon door met GWBasic. Zijn ze tegen
het aanleren van gestructureerd en regelnummerloos programmeren?
Nee, ze kijken QBasic niet aan omdat deze taal in feite vlees noch vis
is. QBasic is niet meer dan een uitgeklede QuickBasic compiler. QBasic
wordt door Microsoft weggegeven als smaakmakertje voor de echte compi-
ler. Zodoende hebben de concurrerende Basic-compilers TurboBasic en
PowerBasic minder kans.
Wat is dan het verschil tussen QBasic een QuickBasic? Met QBasic kun je
prachtige, regelnummerloze broncode schrijven, editen, debuggen, uit-
breiden, RUNnen en op schijf opslaan. GeRUNned lopen deze programma's
meestal merkbaar sneller dan hun equivalenten in GWBasic.
Alleen... en nu komt de grote maar... je kunt QBasic-broncode alleen
maar compileren naar het geheugen. Dat wil zeggen dat je er geen EXE-be-
standen van kunt maken. Wie dat wil (en wie wil dat niet?) moet de
QUICK-Basic-compiler van Microsoft kopen voor enkele honderden guldens.
QBasic wordt aangeprezen als het 'snelle alternatief' voor GWBasic.
Maar... is QBasic wel zo snel? Op deze distributiediskette vindt u
het Basic-programma QBOFGW.BAS. Het laat het bord van Galton zien
en is geprogrammeerd door F.M. Kragten.
In de praktijk blijkt dat GWBasic dit programma VEEL SNELLER draait
dan QBasic.
Als u over GWBASIC.EXE en QBASIC.EXE beschikt kunt u het zelf verge-
lijken. Waarschijnlijk laat u QBasic dan voortaan ook links liggen!
Echte compilers
Wie GWBasic ontgroeit, is rijp voor een compiler. Welke? QuickBasic
(
QB
), TurboBasic (
TB
), PowerBasic (
PB
) of VisualBasic (
VB
)? Een kort
overzicht van deze verschillende produkten:
QB is een veelzijdig en goed onderhouden compiler. Er zijn al verschei-
dene versies van uitgebracht.
TB is een bekend alternatief voor QB. De meeste EXE-programma's van TB
1.1 zijn sneller dan die van QB. Alle RUN Flagazines tot en met nr. 9
zijn met TB geprogrammeerd.
PB is de voortzetting van TB. Beide zijn van verschillende uitgevers
maar van dezelfde maker: Bob Zale. De nieuwste versies 3.x van PB zijn
aanzienlijk veelzijdiger dan TB en QB. PB is een werkomgeving voor de
ervaren hobbyist en de (semi) professional.
VB is de grafische programeeromgeving van Microsoft voor Windows-toepas-
singen. De taal is nieuw en heeft nog slechts een vage verwantschap met
Basic.
╔═════╗
╔═══════════════════════════════╣ TIP ╠═════════════════════════════╗
║ ╚═════╝ ║
║
Wilt u vrijblijvend kennismaken met de nieuwe PowerBasic-compiler?
║
║
Dat kan op twee manieren:
║
║
1. Download uit TeleRUN het programma:
TRYPB3.ARJ
║
║
en download tegelijk
LOADER32.ARJ
║
║
2. Als u geen modem heeft vraag deze programma's dan aan via de
║
║
RUN LezersService (zie elders in dit Flagazine).
║
║
║
║
TRYPB3.ARJ
bevat de volledige PB-compiler maar is in zoverre be-
║
║
perkt dat u niet naar schijf kunt schrijven of vanaf schijf kunt
║
║
lezen.
║
║
Daar hebben we
LOADER32.ARJ
op gevonden: een hulpprogramma dat,
║
║
zij het nogal traag toch Basic-broncode van schijf in de werkom-
║
║
geving van PB kan halen.
║
╠═══════════════════════════════════════════════════════════════════╣
║
PB bevat een zeer uitgebreide Help-functie waardoor u zonder hand-
║
║
leiding toch de geheimen van deze proefcompiler kunt doordringen.
║
╚═══════════════════════════════════════════════════════════════════╝
Anders programmeren
Elke compiler, ook QBasic, heeft een editor of tekstverwerker voor het
schrijven, aanpassen en uibreiden van de broncode. Deze editors zijn
veel handiger in het gebruik dan de primitieve line editor van GWBasic.
De geschreven broncode kan direct worden gecompileerd in het geheugen en
onmiddellijk worden gecorrigeerd bij overmijdelijk opduikende bugs. Een
bijkomend voordeel van de compiler is dat in screen 12 (VGA) kan worden
gewerkt; GWBasic reikt niet verder dan screen 9 (EGA).
PB is bovendien nog uitgerust met een Integrated Debugger waarmee moei-
lijk te vinden fouten beter en sneller kunnen worden opgespoord.
Het is toegestaan 'op z'n GWBasics', dus met regelnummers te programme-
ren maar dat is niet de bedoeling en ook niet wenselijk.
In feite is de probleembenadering ook anders. De meeste GWBasic-program-
meurs hebben al:
100 CLS:KEY OFF:DEFINT A-Z
getypt als ze nog niet of maar half weten wat ze van plan zijn. In de
compileromgeving is de aanpak gestructureerd. Dat wil zeggen dat het
probleem in stukken of modules wordt opgedeeld. Het probleem is in feite
al opgelost in de fase van de probleemstelling/analyse. Het coderen/de-
buggen is eigenlijk bijzaak.
Gestructureerd programmeren betekent dan veel wordt gewerkt met sub-
routines en functies die vanuit een hoofdmodule worden aangeroepen.
U kent de subroutine uit vorige lessen en in de compiler-omgeving mogen
ze ook worden gebruikt. Toch zal de ervaren programmeur in plaats van
subroutines SUBPROGRAMMA'S of kortweg 'Subs' gebruiken. Het verschil
tussen die twee is belangrijk.
Bij een subroutine worden variabelen gebruikt die door het hele program-
ma hun waarden behouden en daardoor menig debuggend programmeur voor
raadsels heeft geplaatst. Een Sub daarentegen is een geisoleerd program-
ma in het hoofdprogramma. De variabelen daarin kunnen dezelde namen
hebben als in het hoofdprogramma maar ze laten elkaar onaangetast. Voor-
beeld:
┌─────────────────────────────────┐
In dit voorbeeld wordt eerst het
│
CLS
│
scherm gewist en de RANDOMIZER
│
RANDOMIZE TIMER
│
op de timer ingesteld.
│
│
Dan volgt een SUB met een loop.
│
SUB SchoonScherm
│
Deze SUB wordt afgesloten met
│
FOR A%=1 TO 25
│
END SUB.
│
LOCATE A%,1
│
Als dit programma wordt gestart
│
PRINT SPACE$(80);
│
worden CLS en RANDOMIZE TIMER
│
NEXT A%
│
uitgevoerd maar de SUB wordt
│
END SUB
│
overgeslagen. SUB's mogen overal
│
│
in het programma staan zonder
│
WHILE C%<10000
│
dat hun integriteit kan worden
│
A%=RND*24+1
│
aangetast.
│
B%=RND*79+1
│
Dan begint het programma en
│
INCR C%
│
springt in de WHILE/WEND-loop.
│
LOCATE A%,B%
│
Daar zit een IF/THEN in die kijkt
│
PRINT CHR$(219);
│
of op de Esc-toets wordt gedrukt.
│
IF INKEY$=CHR$(27) THEN
│
Als dat zo is wordt met CALL de
│
CALL SchoonScherm
│
het SUBprogramma met de naam:
│
C%=0
│
SchoonScherm aangeroepen en uit-
│
END IF
│
gevoerd. Na uitvoering keert de
│
WEND
│
afwerking (net als bij de SUBROU-
│
END
│
tine) terug na het aanroeppunt.
│
│
Daar wordt C% op nul gezet en de
└─────────────────────────────────┘
WHILE/WEND gaat vrolijk verder.
Als u over QBasic, QB, TB, PB of TRYPB beschikt kunt u dit programmaatje
overnemen om te zien wat het doet.
Het nut van QBasic
QBasic komt er hier niet zo best vanaf maar toch kan dit programma van
groot nut zijn als u afscheid wilt nemen van GWBasic en regelnummerloos
en gestructureerd (GOTO-loos) wilt leren programmeren.
Er zijn genoeg boeken over dit onderwerp geschreven die u daarbij de weg
wijzen. Tegen de tijd dat u de grote voordelen van gestructureerd pro-
grammeren ontdekt en er wat bedreven in wordt, kunt u een echte Basic-
compiler aanschaffen: Quick, Turbo of Power.
Het voordeel van gestructureerd programmeren is dat u geen spaghetti-
programma's meer zult maken. U weet dat wanneer een GWBasic-programma
een complexe opbouw krijgt, u door uw eigen bomen het bos niet meer kunt
zien. Dat zal verleden tijd zijn bij netjes en gestructureerd programme-
ren. U zou dan ook over professionele toepassingen kunnen nadenken.
Een ander groot voordeel (vooral van Power) is dat uw gereedschapskist
wordt uitgebreid met gereedschappen die u tot nu toe nooit hebt gekend.
In de voorbeelden zag u er al enkele:
SELECT CASE
DO .... LOOP UNTIL
DO .... LOOP WHILE
SUB .... END SUB
en zo zijn er nog veel meer.
U vindt ze in vrijwel elke Basic-compiler. De een heeft wat meer dan de
ander maar waar het op aankomt is uiteindelijk de snelheid en de veel-
zijdigheid. Wat dat betreft gaat mijn persoonlijke voorkeur naar PB 3.x.
hoewel ik QuickBasic zeker niet wil kleineren.
Jammer is alleen dat er tussen Quick en Power nogal wat incompatibili-
teiten bestaan. Het is vaak een heel gedoe om een mooi programma in
Quick voor RUN Flagazine te moeten aanpassen naar Power.
┌─────┐
┌─────────────────────────────────┤ TIP ├──────────────────────────────┐
│ └─────┘ │
│
Nog een tip. Om een idee te krijgen van de snelheidsverschillen tus-
│
│
sen GWBasic, QBasic, QuickBasic, TurboBasic en PowerBasic staat in
│
│
TeleRUN het programma: VLGPOWER.ARJ.
│
│
Hierin wordt in grafieken het verschil in snelheid aangegeven, geba-
│
│
seerd op het GWBasic-programma PENTOMINO.BAS: de schuifpuzzel die
│
│
zowel op het scherm als rekenend zeer intensief bezig is.
│
└──────────────────────────────────────────────────────────────────────┘
Er zijn nog meer voordelen. Met een compiler kunt u stukken broncode
apart zetten op schijf en met INCLUDE in het compileerproces betrekken.
Zo kunt u zelf uw eigen library van handige routines aanleggen. PB werkt
nu ook met UNITS die ook in een library worden ondergebracht en waarin
gecompileerd programmadelen staan die met het hoofdprogramma kunnen wor-
den geLINKt.
Na dit uitstapje naar Basic-compilers gaan we in de volgende les weer
hands-on aan het werk en behandelen we onder andere de zelfgemaakte
functies die met DEF FN worden aangemaakt en met FN worden aangeroepen.