• No results found

Een inleiding in de programmeertaal BASIC

N/A
N/A
Protected

Academic year: 2021

Share "Een inleiding in de programmeertaal BASIC"

Copied!
77
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

1*131545,1334 '"

m

'

M a

"'

9 8 2 Instituur voor Cultuurtechniek en Waterhuishouding

Wageningen

asssa-« T A *

ASPECTEN VAN INFORMATIEVERWERKING

30

Een inleiding in de programmeertaal BASIC

ir. J.G. Wesseling

Nota's van het Instituut zijn in principe interne communicatiemidde-len, dus geen officiële publikaties.

Hun inhoud varieert sterk en kan zowel betrekking hebben op een een-voudige weergave van cijferreeksen, als op een concluderende discussie van onderzoeksresultaten. In de meeste gevallen zullen de conclusies echter van voorlopige aard zijn omdat het onderzoek nog niet is afge-sloten.

Bepaalde nota's komen niet voor verspreiding buiten het Instituut in aanmerking

(2)

NOTA 1334 maart 1982 Instituur voor Cultuurtechniek en Waterhuishouding

Wageningen

ASPECTEN VAN INFORMATIEVERWERKING

30

Een inleiding in de programmeertaal BASIC

ir. J.G. Wesseling

Nota's van het Instituut zijn in principe interne communicatiemidde-len, dus geen officiële publikaties.

Hun inhoud varieert sterk en kan zowel betrekking hebben op een een-voudige weergave van cijferreeksen, als op een concluderende discussie van onderzoeksresultaten. In de meeste gevallen zullen de conclusies echter van voorlopige aard zijn omdat het onderzoek nog niet is afge-sloten.

Bepaalde nota's komen niet voor verspreiding buiten het Instituut in aanmerking

(3)

I N H O U D

b i z .

INLEIDING 1

1. DE HISTORISCHE ONTWIKKELING VAN DE COMPUTER 2

2. OVER DE OPBOUW VAN EEN COMPUTER 4

3. BASIC COMMANDO'S 8 4. GETALWEERGAVE EN EXPRESSIES 12

5. PRINCIPES VAN BASIC 15 6. INPUT EN OUTPUT 20 7. SPRONG OPDRACHTEN 27 8. CONVERSATIONELE PROGRAMMA'S 34 9. FOR-NEXT OPDRACHTEN 38 10. ARRAYS EN MATRICES 43 11. SUBROUTINES EN FUNKTIES 46 12. BASIC-FUNKTIES 52 13. DATA OPSLAG 61 14. IMMEDIATE MODE BASIC 65

15. NAWOORD 65 LITERATUUR 67 APPENDIX A: De ASCII code

APPENDIX B: RT-11 BASIC APPENDIX C: RSX BASIC

(4)

INLEIDING

Deze nota is bedoeld voor hen die hun rekenkundige problemen met behulp van de programmeertaal BASIC (Beginners Allpurpose Symbolic Instruction Code) op willen lossen op een computer. Het feitelijk grote voordeel van BASIC ten opzichte van bijvoorbeeld FORTRAN is dat voor BASIC geen kennis van het operating, system nodig

is. Door de eenvoudige commando's kan iedereen na een zeer korte tijd al met BASIC werken. Vooral voor hen die al eens met een

programmeerbaar rekenmachientje hebben gewerkt zal deze taal geen moeilijkheden opleveren.

In de eerste hoofdstukken van deze nota wordt een kort overzicht gegeven van de ontwikkeling en van de opbouw van een digitale computer. Ondanks het feit dat voor het werken met BASIC geen kennis van het

operating system vereist is zal toch in het kort even op de funktie van het operating system worden ingegaan. Dit is alleen bedoeld om de werking van de computer te verduidelijken. In de daaropvolgende hoofdstukken zal dan op de programmeertaal BASIC worden ingegaan. Dit gebeurt aan de hand van eenvoudige voorbeelden. Tenslotte worden dan subprogramma's en speciale funkties van BASIC besproken. In appendices zullen enkele voor verschillende computers specifieke commando's worden besproken. Er is wel van uitgegaan dat de program-ma's op DIGITAL apparatuur draaien (PDP, DEC, VAX), daar bijvoor-beeld de CYBER geen BASIC interpreter maar een BASIC compiler heeft. Op het verschil hiertussen wordt in deze nota nog nader ingegaan.

Er wordt niet naar gestreefd een volledige cursus te geven, maar slechts wat globale informatie en een overzicht van de mogelijkheden van BASIC. De geïnteresseerde lezer zal ook hier bemerken dat, als hij zijn eigen problemen op de computer probeert op te lossen, er

(5)

meer aspekten aan het programmeren zitten dan in een inleidende cursus kunnen worden besproken. Het is daarom raadzaam na enige

tijd met BASIC gewerkt te hebben de uitvoeriger handboeken over deze taal eens door te nemen.

1. DE HISTORISCHE ONTWIKKELING VAN DE COMPUTER

Afgezien van de al veel oudere telramen, is het oudst bekende hulpmiddel bij het rekenwerk het mechanische rekenapparaat van de wiskundige Pascal uit 1652. Dit apparaat kon alleen optellen en aftrekken. Leibniz gebruikte het in 1673 als basis voor zijn rekenmachine waarmee hij ook kon vermenigvuldigen en delen. De eerste rekenmachine waarbij gebruik werd gemaakt van elektriciteit werd in 1937 door Howard Aiken van de Harvard University ontworpen. Deze Automatic Sequence Controlled Calculator (ASCC) werd in 1944

in samenwerking met IBM voltooid. Het was een enorm elektromagnetisch apparaat, vijftien meter lang en 2,5 meter hoog en het bevatte tel-wielen en 3000 relais. Voor die tijd een razendsnel apparaat: ver-menigvuldigen van twee getallen kostte 6 seconden, delen 12 seconden.

In 1945 hadden Eckert en Machly van de Moore School of Electrical

Engineering in opdracht van de amerikaanse regering de ENIAC (Electro-nical Numerical Integrator and Computer) gebouwd. Deze machine be-vatte maar liefst 18000 elektronenbuizen, 70 000 weerstanden, 10 000 condensatoren en 6000 schakelaars. Het apparaat was dan ook 30 meter lang en 3 meter hoog. De machine was echter behoorlijk snel: 0,2 en

2,8 milliseconden voor respektievelijk optellen en vermenigvuldigen van twee getallen. Het energieverbruik van dit apparaat was te ver-gelijken met dat van een stoomlocomotief. Toch was dit apparaat nog geen computer in de eigenlijke zin van het woord. Het apparaat werd namelijk bestuurd door bedrading die voor ieder programma opnieuw moest worden aangelegd. De eerste computer die werd bestuurd door een programma in het geheugen was de Electronic Discrete

Variable Automatic Computer (EDVAC) die eveneens aan de Moore School werd gebouwd en in 1952 klaar kwam.

(6)

Ook IBM ging zich nu met de computermarkt bemoeien en kwam in 1953 met de 701. Intussen was in 1947 de transistor door Bardeen, Brattain en Schockley uitgevonden. Omdat een transistor veel kleiner was dan de elektronenbuis, veel minder energie gebruikte en veel betrouwbaarder was, begon hij langzamerhand de elektronenbuis te vervangen. De

eerste volledig getransistoriseerde computers verschenen in 1959 op de markt, de NCR-GE 304 en de IBM 1401. Maar de ontwikkeling was nog niet beëindigd: in 1959 ontdekte Kilby van Texas Instruments dat het mogelijk was verschillende elektronische componenten op een klein plaatje silicum aan te brengen en hiermee was het geïntegreerde circuit of IC geboren. Aanvankelijk kon er maar een beperkt aantal componenten op een chip worden aangebracht. Mede onder druk van de bewapeningstechnologie en de ruimtevaart die steeds kleinere elektronische schakelingen vroegen ontwikkelde deze technologie zich snel. Nu is het reeds mogelijk vele tienduizenden componenten op enkele vierkante millimeters aan te brengen.

De eerste computer met IC's was de PDP-8/I die in 1968 op de markt kwam. De grote voordelen waren weer: grotere snelheid, goed-koper, lager energieverbruik en een stuk kleiner. Doordat men steeds meer componenten op een chip kon onderbrengen, werd het mogelijk een complete centrale verwerkingseenheid op een plaatje silicum te bakken. Dit was de zogenaamde microprocessor, waarvan de eerste werd uitgebracht door Intel in 1971. Door het aansluiten van geheugen-chips en schakelingen voor de in- en uitvoer kan men met behulp van de microprocessor een volwaardige, maar in omvang kleine computer maken. Alle huis- of hobbycomputers zijn op deze manier gebouwd.

Met deze ontwikkeling is men nog verder gegaan. Zo heeft de supersnelle CRAY I computer een cyclustijd van 12,5 nanoseconden,

-9

(12,5*10 seconden ofwel 0,0000000125 seconden). Deze computer kan maar liefst 80 miljoen instrukties per seconde uitvoeren.

De snelheid van verwerking komt nu al aardig dicht bij het maximum. Dit wordt namelijk bepaald door de snelheid waarmee de elektronen hun weg afleggen, die 3*10 m/s bedraagt. Op het ogenblik is men aan het experimenteren met supergeleiding. Dit treedt op als men materialen afkoelt tot nabij het absolute nulpunt (273°C onder nul). Men is hierbij bezig met zogenaamde Josephson schakelaars, die nu al

(7)

schakelsnelheden hebben bereikt van 15 pico seconden (15*10 seconden). Dat wil zeggen dat ze meer dan 6,5 biljoen keer per seconde kunnen schakelen.

2. OVER DE OPBOUW VAN EEN COMPUTER

Een computer kan men opgebouwd denken uit de volgende elementen (zie fig. 1):

a. De processor. Dit is bij de mini- en microcomputers meestal een enkele processor of processorkaart. Enkele voorbeelden van zo'n processor zijn de Z80, de 6800, de 8080 en de 8085. Een voorbeeld van een processorkaart is de LSI-11, waarop bij-voorbeeld de PDP-11/03 is gebaseerd.

b. Een geheugen. Dit is een elektronische schakeling die in staat is signalen als 0 en 1 te onthouden (0 of +5 V ) .

Door het kijken naar een bepaalde serie geheugenplaatsen (adres) kan de processor dan de inhoud hiervan (data) op-vragen en gebruiken of veranderen.

Er zijn verschillende soorten geheugens. Men is begonnen met het ringkerngeheugen, dat bestaat uit kerntjes waardoor een stroompje wordt gestuurd waardoor het gemagnetiseerd wordt.

Tegenwoordig werkt men ook met IC's die geheugenschakelingen bevatten. Het is al mogelijk 131072 bits op een IC onder

te brengen.

c. Achtergrond geheugen (Backgroundmemory). Daar het geheugen van een computer in grootte beperkt is, en er vaak veel

data moet worden verwerkt, heeft men de achtergrond geheugens ontwikkeld. Deze werken iets trager dan wanneer men met het

(werk)geheugen alleen kan werken, maar kunnen veel meer ge-gevens opslaan. Tegenwoordig wordt een achtergrond: geheugen

gecombineerd met een massaopslagapparaat (=mass storage device), bijvoorbeeld een schijf, of flexibele schijf (floppy disk).

(8)

verwerking dal» pro-gramma invoer \ \ \ X I n s t r u c t i e . r e g i s t e r

i r

besturings-orgaan r e k e n , o r g a a n ( A L U )

rzr

centrale geheugen extern geheugen uitvoer v%<fc r t t u l t a a / randapparatuur / / /

Fig. 1. Schematische opbouw van een microcomputer vergeleken met het menselijk brein. (Uit cursus micro-processors/micro-computers (1977))

(9)

d. In- en/of uitgangen van de processor, die dienen om data (=informatie) naar andere apparaten te zenden en om comman-do's van de randapparatuur naar de processor te brengen. Meestal worden deze uitgangen beschouwd als een geheugen-plaats. Door op deze plaatsen aparte elektronische schake-lingen (=interfaces) te zetten kan er een signaal naar het randapparaat worden gezonden om aan te geven dat er data klaar staan om weggezonden te worden.

e. De randapparatuur (=peripherals).

Dit zijn meestal tragere apparaten die de resultaten van de berekeningen opslaan in een vorm die gemakkelijk met

andere computers uitwisselbaar is (ponskaarten, ponsbanden, magneetbanden) of die de resultaten weergeven in een vorm die voor de gebruiker te begrijpen is (printer, plotter,

terminal). Ook invoerapparatuur (kaartlezer, ponsbandlezer, terminal) wordt als randapparatuur beschouwd.

Voor een uitgebreide beschrijving van bovenstaande elementen kan worden verwezen naar de cursus Computertechnicus-C (1980).

Alvorens in het kort te beschrijven hoe men zich de werking van een computer moet voorstellen zal eerst worden ingegaan op de datacodering bij computers. Daar een computer een elektronisch apparaat is, kent hij geen getallen of letters. Het enige waar hij mee werkt is spanning. Beter gezegd: het al of niet aanwezig zijn van een spanning. Dus kent hij maar 2 toestanden: 0 (geen spanning) of 1 (wel spanning). Deze toestand kan optreden in alle geheugen-posities. Zo'n geheugenpositie noemt men een bit (=binary digit).

Bij ons decimale stelsel wordt gerekend met basis 10, bijvoor-beeld

3087 = 3*103+0*102+8*101+7*10°=3000+0+80+7

Nu was al jaren bekend dat men niet vastzat aan de basis 10. Het is net zo goed mogelijk om de basis 2 te nemen (binair stelsel):

(10)

Om nu getallen te kunnen onthouden en ermee te kunnen rekenen is het geheugen van een computer onderverdeeld in 'vakjes' van 8 bits. Deze vakjes worden bytes genoemd en elk vakje heeft een eigen nummer (adres). Afhankelijk van de grootte van de computer kan het aantal bytes sterk variëren. Daar ook de adressen binair moeten worden ver-werkt hangt de maximale geheugencapaciteit van een computer af van de maximale waarde die een adres kan bereiken. Het maximum aantal adressen bij een machine met een 16-bits adressering is 2 -1 = 65535 adressen. Meestal wordt de omvang aangegeven in veelvouden van 1k=

1024 dus 65535 bytes « 64 kbytes. Een voorbeeld:

Stel de geheugenplaatsen 2045 en 2047 zien er als volgt uit:

adres inhoud 2045 00000100 2047 00100101 De computer krijgt nu de opdracht om deze waarden bij elkaar op

te tellen en in geheugenplaats 2047 te zetten. Dan ziet na de uitvoering van deze opdracht het geheugen er als volgt uit:

adres inhoud 2045 00000100 2047 00101001 Voor het weergeven van letter, cijfers, leestekens, etc. wordt

veelal gebruik gemaakt van de zogenaamde ASCII (American Standard Code for Information Interchange) code. Dit is een code die elke letter en leesteken een eigen combinatie van bitjes geeft. Zie appendix A. De meeste terminals en printers werken met deze code. Zo zal de naam JAN in ASCII in geheugenpositie X en volgenden worden gecodeerd als:

letter J A N De opdrachten die een computer uit moet voeren staan in een

deel van het geheugen. Een verzameling opdrachten heet een programma. geheugenac

X

X+1 X+2 1res code 01001010 01000001 01001110

(11)

Voor het bijhouden van de plaats waar de volgende instruktie vandaan gehaald moet worden heeft de processor een aparte geheugenplaats, de programcounter (PC). Na het voltooien van een instruktie zal de processor de volgende instruktie opvragen. Deze instruktie staat op de geheugenplaats waarvan het adres zich in de PC bevindt. Zo

is het voor de gebruiker mogelijk om spronginstrukties naar andere stukken programma te geven, eenvoudigweg door het veranderen van de inhoud van de PC. Nadat een instruktie uit het geheugen is

gehaald, wordt de inhoud van de PC automatisch met 1 verhoogd. Zie voor een uitgebreide beschrijving de cursus Microprocessors Microcomputers (1977).

3. BASIC COMMANDO'S

Zoals reeds in de inleiding vermeld, gebruikt de firma DIGITAL interpreters in plaats van compilers voor programma's geschreven in BASIC. In het vorige hoofdstuk is uiteengezet dat men van een taal die voor mensen leesbaar is, over moet gaan op een taal die voor

computers te begrijpen is. Hiervoor zijn twee grote groepen program-ma's te onderscheiden die deze overgang (automatisch) mogelijk maken: compilers en interpreters. Dit zijn zelf ook weer programma's die onze programma's vertalen.

Een compiler vertaalt het hele programma in een keer. Voor het gebruik van een compiler moet eerst het programma op een randapparaat, bijvoorbeeld een schijf worden gezet. Om dit programma op schijf te kunnen zetten en er eventueel later weer veranderingen in aan te kunnen brengen, maakt men gebruik van weer een ander type programma: de (text)editor. Na het compileren moet dan vaak nog een derde programma worden gebruikt om alle delen van het programma op de correcte adressen te kunnen zetten: de linker. Deze zorgt tevens voor het koppelen van enkele standaardprogramma's voor in-en uitvoer. Dit is dus al ein-en vrij ingewikkelde procedure die

overigens voor het grootste deel automatisch door de computer wordt uitgevoerd.

(12)

commando's kan vanuit de interpreter alles worden geregeld, zoals in dit hoofdstuk zal worden aangetoond. De programma's worden met een compiler iets sneller dan met een interpreter, maar hiervan zal bij normale (kleine) programma's niets te merken zijn. In

fig. 2 is nogmaals het verschil tussen een compiler en een interpreter aangegeven. compiler \ \

J j

bron-/ bron-/ programma / (FORTRAN) "" '' ver-taling object-programma (machine-taal) uit-voering resultaat

B

bron-programma (BASIC)

Fig. 2. Schematische voorstelling van de werking van een compiler (a) en een interpreter (b). (Uit Cursus Basic (1978))

Alvorens een kort overzicht van de commando's te geven die gebruikt moeten worden om BASIC te kunnen draaien zal, ter

(13)

ver-duidelijking, even dieper op de werking van een computer in worden gegaan. Na het starten van de computer wordt meestal automatisch het operating system (soms ook monitor genaamd) in het geheugen geladen (engels: bootstrap). Dit is een computerprogramma dat de commando's die de gebruiker intypt interpreteert en de betreffende handelingen door de computer laat uitvoeren. Als de gebruiker nu een programma wil draaien moet dit programma eerst van schijf

in het geheugen worden geladen. Dit programma staat op een bepaald deel van de schijf.

Als in een programma wat veranderingen zijn aangebracht en men wil het programma weer op schijf zetten, zal de oude versie van het programma worden verwijderd of onder een andere naam worden opgeslagen. Ook datafiles (gebieden op schijf waar gegevens op staan) moeten kunnen worden ingelezen. Dit alles is de taak van het operating system. Hierover hoeft de gebruiker van de computer zich verder geen zorgen te maken, zolang hij de correcte commando's maar geeft.

Om het BASIC systeem te starten kan worden volstaan met een commando, dat echter voor de meeste operating systems anders is:

op.syst. computer commando RT-11 PDP-11/03 R BASIC

RSX PDP-11/70 BAS DECOPS DEC-10 BASIC

Hierna zal de computer het woordje READY geven, hetgeen wil zeggen dat men kan beginnen met nieuwe commando's in te typen of een

nieuw programma in te typen. Dit programma, of het nu ingetypt wordt of van schijf wordt ingelezen, wordt in het geheugen geplaatst, zodat ermee gewerkt kan worden. Als het programma van schijf wordt gelezen (geladen), wordt het in zijn geheel naar het geheugen getransporteerd.

Bij apparatuur van de firma Digital worden programma's en data naar schijf weggeschreven onder namen met de vorm filenm.ext. De filenaam mag men zelf kiezen. Hij mag bestaan uit 1-6 alphanumerieke tekens, als de eerste maar een letter is. De extensie wordt meestal

(14)

gebruikt om aan te geven welk soort file het is: .BAS voor BASIC

programma's, .DAT voor datafiles, .PAS voor Pascal-programma's etc. In onderstaande commando beschrijvingen wordt gesproken van een BASIC-identificatie. Dat wil zeggen, dat, elke keer als een LIST of RUN commando wordt gegeven, eerst een regel verschijnt met het nummer van de BASIC-versie die momenteel in gebruik is en de datum van het moment waarop het RUN-commando wordt gegeven.

De meest belangrijke commando's in BASIC zijn:

NEW {filenm.ext}

OLD {filenm.ext}

SAVE {filenm.ext}

REPLACE{filenm.ext}

- er zal een nieuw programma worden ingetypt dat later moet worden weggeschreven naar schijf. Na het geven van een RETURN zal, indien geen filenaam is opgegeven, de com-puter naar de naam van het programma

vragen.

Indien .ext wordt weggelaten, zal er worden aangenomen dat hier .BAS moet komen.

- haal een programma dat onder de naam filenm.ext op schijf staat naar het werkgeheugen. Ook hier geldt weer dat

.BAS wordt aangenomen.

- schrijf het programma weg naar schijf. Als filenm.ext wordt opgegeven zal het programma worden weggeschreven onder die naam. Als filenm.ext niet wordt

opgegeven wordt het programma weggeschre-ven onder de naam waarmee het bij 'NEW' werd aangemaakt. Als het programma al bestond, zal bij dit commando een fout-melding op het beeld verschijnen. In dit geval zal namelijk het volgende commando moeten worden gebruikt:

- vervang het programma met de naam filenm.ext door het programma in het werkgeheugen. Als

(15)

filenm.ext niet wordt gegeven wordt aangenomen dat de naam dezelfde is als waaronder het programma van schijf is gehaald.

SCRATCH - maak het werkgeheugen schoon. LIST - geef het programma op de terminal. LIST nnn-mmm - geef de regels nnn tot mmm op de terminal. RUN - laat het programma uitvoeren.

RUNNH - idem, maar zonder identificatie en datum. Een meer volledig overzicht van de BASIC-commando's die gegeven kunnen worden op de bovengenoemde computers wordt gegeven in de appendices B, C en D.

4. GETALWEERGAVE EN EXPRESSIES

Alvorens op de eigenlijke programmeertaal BASIC in te gaan wordt in dit hoofdstukje de manier behandeld waarop BASIC getallen verwerkt. BASIC behandelt alle getallen, of het nu gehele (integer) of gebroken getallen (real) zijn als gebroken getallen. Dit wil zeggen dat alle getallen worden beschouwd alsof er een decimaalpunt in staat. Integers worden wel zo lang mogelijk als integers beschouwd, maar als ermee wordt gerekend worden zij als reals beschouwd.

BASIC accepteert drie getalvormen: integer, real en exponential. Bij een integer wordt het getal ingetypt zonder decimaalpunt. Bij een real getal wordt een decimaalpunt meegegeven, en bij exponentials wordt een basisgetal maal een macht van 10 gegeven. Van alle drie de mogelijkheden wordt een voorbeeld gegeven. Deze voorbeelden zijn allemaal uitdrukkingen voor hetzelfde getal:

1234 1234. 1234.0000

(16)

38 38 In BASIC kan men werken met getallen tussen -10 en 10 , de

kleinste waarde van de exponent is -38. Intern werkt de interpreter met getallen van 24 bits (3 bytes) nauwkeurigheid. Bij het uitprinten van getallen worden waarden

.01 ^ n £ 99999

geschreven als real getallen. Waarden die buiten deze grenzen vallen worden als getal met exponent gegeven. Er worden van een getal

maximaal 6 digits gegeven. Enkele voorbeelden: getal BASIC

1.

.001 9.34567890 1000000

1.

1.E-3 9.34568 1.E+6

BASIC kent de volgende wiskundige operaties:

symbool voorbeeld betekenis A + B A - B A * B A / B A ~ B tel A bij B op trek B van A af vermenigvuldig A en B deel A door B

verhef A tot de macht B

/

Indien in een expressie een aantal operaties moeten worden uit-gevoerd, houdt BASIC zich aan de normale rekenregels die ook in de wiskunde gelden. Dit betekent dat ook hier de volgende rangorde geldt:

1. Uitdrukkingen tussen haakjes hebben de hoogste prioriteit

2. Wisselen van teken (+/-) 3. Machtsverheffen

4. Delen en vermenigvuldigen (zelfde prioriteit) 5. Optellen en aftrekken (zelfde prioriteit)

Als er geen prioriteiten zijn, zal BASIC van links naar rechts een expressie verwerken. Hiermee moet men oppassen, zoals uit enkele voorbeelden zal blijken.

(17)

b. A~B~C wordt verwerkt als 1. ATB

2, (resultaat van stap 1)~C

c. B~4/2 wordt verwerkt als 1. B~4

2. (resultaat van stap 1)/2

d. B~(4/2) wordt verwerkt als 1. 4/2

2. B~(resultaat van stap 1)

e. 7*(A+B)*CB-3)~(A*B)) wordt verwerkt als 1. B-3

2. A*B

3. (resultaat van stap 1) " (resultaat van stap 2) 4. A+B

5. 7 * (resultaat van stap 4)

6. (resultaat van stap 5) * (resultaat van stap 3)

BASIC kent ook de zogenaamde 'relational operators', dit wil zeggen de vergelijkende uitdrukkingen. Deze zullen veel worden gebruikt in voorwaardelijke sprongopdrachten als men afhankelijk van de waarde van een bepaalde variabele een aantal opdrachten door de computer wil laten uitvoeren. De operators die men in BASIC kan gebruiken zijn de volgende:

wiskundig BASIC symbool symbool < < > > <= of =< > >* of => <> of >< voorbeeld

A

A

A

A

A

A

= B < B < - B > B >» B <> B beschrijving A is gelijk aan B A kleiner dan B

A kleiner dan of gelijk aan B A is groter dan B

A groter dan of gelijk aan B A niet gelijk aan B

De symbolen =<, => en >< worden door de interpreter wel geaccepteerd, maar onmiddellijk omgevormd tot <=, >= en o , in welke vorm ze op het beeldscherm of papier zullen verschijnen bij het uitlijsten van

(18)

5. PRINCIPES VAN BASIC

Iedereen heeft tegenwoordig wel eens met een (al of niet program-meerbare) rekenmachine gewerkt. In feite is een computer niets anders. De opdrachten zien er iets anders uit, maar ze hebben dezelfde

betekenis. Een programma bestaat uit een aantal opdrachten (statements) Deze opdrachten worden voorafgegaan door een regelnummer. De computer

zal de opdrachten uitvoeren naar oplopend regelnummer. Dit wordt alleen onderbroken als er een sprongopdracht voorkomt. Dit is een opdracht die de computer vertelt naar een bepaalde regel te gaan en het programma daar verder uit te voeren.

Voor BASIC moet men steeds op het volgende attent zijn:

1. Elke opdracht (»regel in een programma) moet worden voorafgegaan door een nummer. Deze nummers hoeven niet aansluitend te zijn. Er wordt in het algemeen aangeraden de nummers met stappen van 10 op te hogen. Dit is vooral in verband met opdrachten die eventueel later moeten worden tussengevoegd. Als men regelnummers intypt die niet in oplopende volgorde zijn, zal BASIC ze automatisch in de volgorde van regelnummer zetten. Een regel tussenvoegen wordt dus eenvoudig het gewenste regelnummer intypen gevolgd door het bijbehorende statement. Op deze wijze kan men ook regels overschrijven, dit wil zeggen door een nieuwe tekst vervangen. Het verwijderen van een regel uit een programma geschiedt door het geven van het regelnummer gevolgd door het aanslaan van de RETURN toets.

De algemene vorm van een BASIC opdracht is nu

<regelnummer> opdracht {variabelenlist of expressie} waarin alles wat tussen <> staat verplicht is, terwijl alles wat tussen O staat niet strikt noodzakelijk is, maar afhangt van de eisen van de programmeur.

2. Elke gebruikte geheugenplaats (of serie geheugenplaatsen) heeft een eigen naam. De gebruiker is vrij in het kiezen van deze

namen, met de volgende beperking:

een naam mag bestaan uit een letter of een letter gevolgd door een cijfer.

(19)

Voorbeeld:

toegestaan niet toegestaan

A AA A1 IA Z9 JAN B4 A12 Deze namen worden door de BASIC-interpreter 'vertaald' naar

adressen van geheugenplaatsen. Een ander woord voor deze namen is 'variabelen'.

3. In de meeste gevallen zal een computer ook moeten werken met stukken tekst die in het geheugen worden opgeslagen. Dit kan zijn een naam, maar ook een stukje tekst om de uitvoer te

ver-duidelijken. Een tekst kan verschillende bytes geheugen beslaan. De computer houdt zelf bij hoeveel plaatsen de tekst inneemt. Het symbolische beginadres van een tekst in het geheugen wordt aangegeven door een naam met een dollarteken erachter. De regels voor deze namen zijn hetzelfde als bij 2. Enkele voorbeelden:

toegestaan niet toegestaan

A$ 1$ Z2$ 1X$ A5$ JAN$ In het programma, bijvoorbeeld als men een tekst (string) in

het geheugen wil plaatsen, moet deze string altijd tussen quotes worden gegeven, bijvoorbeeld

"WAT IS UW NAAM?" "HET RESULTAAT IS"

(20)

LISTNH

10 REN EERSTE VOORBEELD 28 LET fl=10 30 LET B=l 40 LET C=ft+B 50 PRINT C 60 STOP 70 END REflDV RUNNH 11 TIME: 0.01 SECS. REflDV

'(N.B.: De meeste van de programma's die in deze nota beschreven worden zijn geschreven en hebben gedraaid op de DEC-10, vandaar dat de gebruikte CPU-tijd erbij vermeld is. Dit is de pure reken-tijd die een programma nodig heeft gehad.)

We zullen bovenstaand programma regel voor regel bespreken. In de eerste regel komen we meteen al een belangrijk statement tegen. Dit statement kan worden gebruikt om commentaar in programma's te geven (remark). Als de interpreter de lettercombinatie REM als eerste in een statement tegenkomt, weet hij dat deze regel niet als opdracht behandeld hoeft te worden. Het is vooral in langere programma's aan te bevelen regelmatig gebruik van dit REM-statement te maken, daar het de programma's aanzienlijk verduidelijkt. De algemene vorm van het REM statement is

<regelnummer> REM {tekst}

In de volgende drie regels wordt er een waarde in een geheugen-plaats gezet, ofwel de variabelen A, B en C krijgen een waarde. Of-ficieel moeten deze opdrachten worden voorafgegaan door het woordje LET. Bij apparatuur en software van DIGITAL is dit niet nodig. In de rest van deze cursus zal het woordje LET niet meer worden gebruikt. De algemene vorm van de assign-opdracht is:

(21)

<regelnummer> {LET} <variabele»expressie> Opdracht 20 laat de waarde 10 in geheugenplaats A zetten.

Opdracht 30 zet de waarde 1 in geheugenplaats B.

Opdracht 40 moet als volgt gelezen worden: Haal de waarde in geheugenplaats A op Haal de waarde in geheugenplaats B op Tel deze waarden bij elkaar op

Bewaar het resultaat (de som) in geheugenplaats C

Daar de programmeur natuurlijk niet zonder meer kan kijken wat geheugenplaats C nu voor waarde bevat, moet er een opdracht

zijn om het resultaat van een serie opdrachten aan hem te laten zien. Dit kan gebeuren met het PRINT commando. Zo zal in opdracht

van het bovenstaande programma de inhoud van geheugenplaats C op de gebruikersterminal verschijnen. In dit geval dus 11.

De algemene vorm van het PRINT commando is:

<regelnummer> PRINT {list}

Hierbij kan de list een serie namen van variabelen bevatten, maar er kan ook een text in voorkomen, ingesloten door quotes ("). Indien men geen argumenten achter het PRINT commando geeft, zal er op het beeldscherm een lege regel verschijnen.

Een paar voorbeelden van het PRINT commando zijn: I PRINT "DIT IS EEN VOORBEELD"

II PRINT

29 PRINT "A=",A,", B=",B,", A+B=",A+B

In de laatste regel worden alleen de komma's die tussen quotes staan op de terminal uitgeprint. De andere dienen om de variabelen te scheiden. De STOP opdracht vertelt de computer dat hij kan

stoppen met het programma. Deze opdracht geeft (onder RT-11 en RSX) op de terminal de mededeling

STOP AT LINE 60

zodat de programmeur weet waar het programma is gestopt. Dit is vooral gedaan omdat het mogelijk is meer dan een STOP opdracht in

(22)

een programma te hebben. Het is echter niet noodzakelijk van een STOP-opdracht gebruik te maken. De algemene vorm van het STOP commando :

<regelnummer> STOP

De END opdracht geeft aan de BASIC-interpreter door dat dit het einde van het programma is. Deze opdracht moet altijd aan het

fysieke einde van het programma staan. Als de computer deze opdracht tegenkomt zal hij ook automatisch stoppen met de uitvoering van het programma. Algemene vorm:

<regelnummer> END Een voorbeeldje met strings is nu

19 REM GEBRUIK URN STRINGS 20 fl*="MIJN NflflM IS JflN " 30 B*="EN JOUW NflflM IS PIET" 48 PRINT m 59 PRINT B$ 68 PRINT m:B$ 70 END REflDV RUNNH MIJN NflflM IS JflN EN JOUW NflflM IS PIET

MIJN NflflM IS JflN EN JOUW NflflM IS PIET

TIME: 0.01 SECS. REflDV

De eerste tekstregel wordt nu geplaatst in de serie geheugen-plaatsen met de symbolische naam A$, de tweede in die met naam B$. In regel 40 wordt nu de tekst in de serie geheugenplaatsen A$ uit-geprint. Regel 50 doet hetzelfde met de serie B$. In regel 60 ziet de computer na A$ een komma staan gevolgd door nog een variabele. Hij weet in dit geval dat hij op dezelfde regel moet blijven en de

tweede tekst direkt achter de eerste uitschrijven. Op het gebruik en ";" wordt nog nader ingegaan.

(23)

Het is mogelijk om meer opdrachten op een regel te plaatsen. Dit is in de meeste gevallen niet aan te bevelen, en wel om 2 redenen:

a. Als er wat aan een opdracht veranderd moet worden, de hele regel opnieuw moet worden ingetypt.

b. De later te bespreken GOTO opdracht springt naar een regel-nummer. Als er bijvoorbeeld 3 opdrachten op een regel staan, kan men nooit naar de tweede of derde opdracht springen. Indien men toch enkele opdrachten op een regel zet, moeten deze gescheiden worden door een " " (BACKSLASH). Voorbeelden van het gebruik van verschillende opdrachten op een regel:

10 A=10 B=20 PRINT A,B,A+B

20 A=-10 B=1 C=A+B D=A*B PRINT A,B,C,D,C-D

6, INPUT EN OUTPUT

Een van de meest belangrijke onderdelen van een programma is de communicatie tussen programmeur en computer. Indien dit niet mogelijk was zou men nooit resultaten van programma's kunnen krijgen. De

PRINT opdracht is reeds in het voorgaande hoofdstuk genoemd. Deze diende om data vanuit de computer aan de gebruiker door te geven. Het omgekeerde, dus het doorgeven van data aan de computer is ook mogelijk. Dit gebeurt met het commando INPUT. Algemene vorm:

<regelnummer> INPUT {list}

waarin list een rij van minstens 1 variabelenaam is. Als de computer een INPUT statement tegenkomt, zet hij een ? op de terminal. Dat wil zeggen dat de gebruiker een waarde of tekst in moet typen. Met het aanslaan van de RETURN toets geeft de gebruiker aan dat hij klaar is met intypen.

(24)

LISTNH

10 REM UOORBEELD INPUT 29 INPUT fl 30 INPUT B 40 C=fl+B 50 PRINT "O'SC 68 END REflDV RUNNH ?6 ?7 C= 13 TIME: 0.03 SECS. REflDV

In dit programma worden de waarden van A en B ingelezen via de

terminal. Deze waarden worden opgeteld en dit totaal wordt uitgeprint. Een iets nettere uitvoering van dit programma is:

LISTNH

10 REM BETER UOORBEELD INUOER 20 PRINT "GEEF WflRRDE UOOR fl"; 30 INPUT fl

40 PRINT "GEEF WfiflRDE UOOR B"; 58 PRINT

68 C=fl+B

70 PRINT "fi=";flj" B = " ; B ; " Soumie 80 STOP

90 END REflDV 45 INPUT B RUNNH

GEEF WAARDE UOOR fl ?6 GEEF WAARDE UOOR B ?? fl= 6 B= 7 SOM= 13

(25)

(Bij het nalezen van het programma alvorens de opdracht 'RUN' te geven zien we dat INPUT B vergeten is, zodat we dit alsnog intikken.) Hierbij betekent de puntkomma achter de printopdracht dat de terminal op dezelfde regel moet blijven staan. Zonder deze puntkomma gaat de terminal naar de volgende regel bij het INPUT statement, zodat het vraagteken weer in de eerste positie zou komen. Het is ook mogelijk meer getallen op een regel in te typen. In dit geval moeten de

getallen gescheiden worden door komma's en door hetzelfde INPUT statement worden ingelezen. Een voorbeeldje:

LISTNH

10 REM UOORBEELD INUOER HEER GETALLEN OP EEN REGEL 28 PRINT "GEEF GETALLEN";

38 INPUT A,B,C 48 S=A+B+C

59 PRINT "SOM IS";S 60 END READY RUNNH GEEF GETALLEN 73,5,-1 SOM IS 7 TIME: 0.63 SECS. READS'

Ook strings kunnen door het INPUT-statement worden ingevoerd. Dit gebeurt op precies dezelfde wijze als met normale variabelen. Een voorbeeld:

(26)

LISTNH

18 REM INPUT STRINGS 20 PRINT "WfiT IS UU NflflM?" 36 INPUT N*

40 PRINT "WflflR WOONT U"; 59 INPUT w*

60 PRINT "GQEDENDflG ";N*;" UIT "5W* 70 END REflDV RUNNH WflT IS UW NfiflM? 7J.G.WESSELING WflflR WOONT U ?WRGENINGEN

GOEDENDAG J.G.WESSELING UIT WflGENINGEN

TIME: 8.04 SECS. RERDV

Let ook hier weer op het verschil tussen de beide PRINT-statements. Bij de eerste staat geen komma achteraan, dus zal BASIC het ? van het INPUT-statement op de volgende regel plaatsen. In regel 40 staat een komma achter de tekst, zodat het vraagteken achter deze tekst wordt geplaatst. Binnen de quotes is dan ook geen vraagteken ge-plaatst.

In de vorige paragraaf is het PRINT-statement al besproken. Hierbij kan men echter de positie van het getal dat wordt uitge-print nog enigszins zelf bepalen door middel van de komma (",") of puntkomma (";") achter de variabele-naam te plaatsen. BASIC beschouwt een regel op een terminal of printer als opgebouwd uit 5 zones van 14 posities. Als men twee getallen wil uitprinten en ze zijn gescheiden door een komma, zal de printkop (of cursor) minstens een positie opschuiven, zodat elk getal in een aparte zone komt. Als men bij de uitvoer een van de zones over wil slaan kan dit door het plaatsen van een extra komma. Wil men een kompakte-re opbouw, dan kan gebruik worden gemaakt van de puntkomma (";"). In dit geval worden de getallen achter elkaar weggeschreven, geschei-den door een spatie en een positie voor een eventueel minteken.

(27)

Dit zal worden verduidelijkt aan de hand van het volgende voor-beeld:

LISTNH

10 REM UOORBEELD ÇEBRUIK KOMMfi EN PUNTKOMMA 29 R=l 30 B=-28 40 C=380 50 D=-100 68 PRINT fi,B,C,D 70 PRINT ft,B,,D 30 PRINT fl;B;C;D 90 END REfiDV RUNNH 1 -28 360 -100 1 -20 -100 1 "20 300 -100 TIME: 0.03 SECS. REfiDV

Indien men van tevoren al weet dat een variabele een aantal waarden moet doorlopen, kan men gebruik maken van de READ - DATA

combinatie. Dit is een veelgebruikte combinatie van 2 opdrachten. Algemene vorm:

<regelnummer> READ {varl, var2, varn} <regelnummer> DATA waarde 1, {waarde 2 »waarde n} Het gebruik van deze combinatie zal aan de hand van een voorbeeld worden behandeld.

(28)

LISTNH

10 REM UOORBEELD GEBRUIK REflD-DftTfl 29 READ fl,B,C 30 D=fl+B+C 40 READ X I , X 2 50 V=X1-X2 60 READ Z,Z2 ?Ö E=D+fl+V-Z+Z2 80 PRINT ft,B,C,D 90 PRINT X1,X2,V 108 PRINT Z,Z2,E US DflTfl 1 , 2 , 3 , - 1 , 2 . 5 , 3 . 0 128 DflTfl 9.5 130 END RERDV RUNNH *~i er T e . J TIME: 0 . 8 2 SECS. REflDV

Als in een programma een READ statement voorkomt, zal de

computer automatisch naar het bijbehorende DATA statement zoeken. Zo zal hij in regel 20 automatisch naar regel 110 springen om daar de waarden van de variabelen te halen. In dit geval krijgt de variabele A de waarde 1, B de waarde 2 en C de waarde 3. Intern houdt de computer een teller bij hoeveel waarden hij ingelezen heeft van een DATA statement. Als hij bij regel 40 is aangekomen, weet hij dat de variabelen X1 en X2 respectievelijk de vierde en vijfde waarden uit het DATA statement moeten krijgen, in dit geval -1 en 2,5. In regel 60 krijgen de variabelen Z en Z2 hun waarden. In het DATA statement van regel 110 vindt hij echter alleen de waarde voor Z. Voor de waarde van Z2 zoekt hij dan naar het volgende DATA statement dat staat in regel 120.

(29)

DATA statements hoeven niet op een bepaalde plaats te staan. Zij mogen overal in het programma voorkomen, zelfs voor een READ-statement. Het is aan te bevelen het DATA statement echter consequent ofwel na het READ-statement ofwel aan het einde van een programma te plaatsen.

Indien het nodig is om meer keren dezelfde serie getallen te gebruiken die in een DATA-statement staan, kan het RESTORE commando worden gebruikt. Dit commando zet de teller die bijhoudt waar in een DATA-statement moet worden gelezen terug op 1, zodat bij het volgende READ-statement het eerste getal weer wordt gelezen.

Een voorbeeld:

LISTNH

1Ö REM RESTORE BIJ READ-DATA 2@ READ fl,B,C,D$

38 PRINT D*.A,B/C 46 S=A+B+C

58 PRINT "DE SOM URN DE GETALLEN IS",S 60 PRINT

78 RESTORE 80 READ F,G,H 90 PRINT F;G;H

190 P=F*G*H

110 PRINT "HET PRODUKT IS";P 120 DATA 2,4,6,"GETALLEN:" 130 END

REflDV RUNNH

GETALLEN: 2 4 DE SOM UAN DE GETALLEN IS 12

2 4 6

HET PRODUKT IS 43

TIME: 0.63 SECS.

In regel 20 worden de data van regel 120 ingelezen. Hier kan men zien dat ook strings in een DATA-regel mogen voorkomen. Na het

sommeren wordt de som van de waarden uitgeprint. In regel 70 wordt de teller weer op 1 gezet, en in regel 80 worden dezelfde waarden

(30)

nogmaals gelezen. Uit de output van bovenstaand voorbeeld blijkt dat het programma inderdaad dezelfde waarden weer inleest.

Als programma is het bovenstaande natuurlijk veel te omslachtig. Het is alleen bedoeld om het RESTORE commando te demonstreren. Hoe men met een veel kleiner programma dezelfde resultaten kan bereiken wordt ter oefening aan de lezer overgelaten. Het inlezen en weg-schrijven van data van en naar schijf zal in een van de volgende hoofdstukken worden besproken.

7. SPRONG OPDRACHTEN

De programma's in de voorgaande hoofdstukken worden maar een keer uitgevoerd, en wel elke keer van boven naar beneden, precies volgens regelnummer. Om hiervan af te kunnen wijken, maakt men

gebruik van sprongopdrachten. Het resultaat van een sprongopdracht is dat de instructieteller niet met 1 wordt opgehoogd, zodat de

volgende instruktie wordt opgehaald uit het geheugen: bij een sprongopdracht wordt de instruktieteller gevuld met de positie van een instruktie ergens in het programma. Men kan zowel vooruit als achteruit springen. De algemene vorm van de eenvoudigste sprongopdracht is:

<regelnummer> GOTO regelnummer

Dit is de zogenaamde onvoorwaardelijke sprongopdracht

("unconditional branch instruction"). Iedere keer wanneer deze opdracht wordt bereikt, zal de computer de sprongopdracht uitvoeren. Een voorbeeldje:

(31)

LISTHH IS REM DE SPRONGOPDRACHT 20 PRIHT "GEEF fl"; 30 INPUT R 49 PRINT "GEEF B"; 59 INPUT B 69 C=fi+B 70 PRINT "fl+B=",C 80 GOTO 28 9S STOP

xm

END REflDV RUNNH GEEF fl.?1 GEEF B ?2 R+B= GEEF fl ?4 GEEF B ?-3

a+e-Û E Ë F A ?tc

Dit programma vraagt om twee getallen in te typen. In regel 60 worden deze getallen bij elkaar opgeteld en in regel 70 wordt het resultaat gegeven. Na het uitprinten van deze getallen komt het programma bij regel 80. Dit is de sprongopdracht die de computer vertelt terug te springen naar opdracht nummer 20. Dat wil zeggen dat hij weer om twee getallen vraagt, en weer optelt, en zo voort. Het is nu duidelijk geworden dat dit programma nooit op een normale manier zal worden beëindigd, en nooit aan END toekomt. Er zal

altijd weer worden gesprongen naar regel 10. Dit soort programma's moeten altijd op de 'harde' manier worden afgebroken. Sprongop-drachten hebben wel degelijk nut, maar dan moeten zij worden ge-combineerd met de voorwaardelijke sprongopdrachten ("conditional branch instructions"). De algemene vorm van zo'n voorwaardelijke sprongopdracht is :

(32)

<regelnummer> IF expressie GOTO regelnummer

of

<regelnummer> IF expressie THEN regelnummer

Deze mogelijkheden hebben precies hetzelfde resultaat. In bovenstaande statements is expressie een uitdrukking die ofwel waar is of niet waar is. Als de uitdrukking waar is, zal de opdracht uitgevoerd worden. Is hij niet waar dan zal de sprong-opdracht worden genegeerd en zal het programma met de volgende opdracht doorgaan.

Er wordt in een expressie gebruik gemaakt van een van de relational operators. Een paar voorbeelden van het IF statement ter verduidelijking:

10 IF A>1 GO TO 20 40 IF C<A GOTO 50

70 IF BI >« 0 THEN 210 120 IF Z1$<W9$ THEN 900

In het voorbeeld (regel 10) wordt naar opdrachtnummer 20 ge-sprongen als de variabele A een waarde heeft die groter is dan 1. Als A kleiner of gelijk aan 1 is, zal met de volgende opdracht

worden doorgegaan, met andere woorden de sprongopdracht zal worden genegeerd. In regel 40 wordt naar 50 gesprongen als de waarde van C kleiner is dan die van A. De sprongopdracht in regel 70 wordt uitgevoerd als B1 groter of gelijk is aan 0. De opdracht in regel

120 verdient wat extra aandacht, daar deze met strings werkt. Als met strings wordt gewerkt en een relational operator, zal de string karakter voor karakter worden bekeken. Zo zal eerst het eerste karakter worden bekeken. Zijn deze gelijk, dan zal het tweede worden bekeken. Daar een computer natuurlijk alleen getallen kan bewerken, zal hij wérken met de ASCII waarden van de letter. Als bijvoorbeeld de 3de letter van Z1$ een W is, en de derde letter van W9$ een K,

beschouwt hij W9$ als kleiner dan Z1$, ongeacht de volgende letters. Van deze eigenschap kunnen we uitgebreid gebruik maken bij het alfabetiseren van bijvoorbeeld namen.

Onder RSX kan men nog van een derde mogelijkheid gebruik maken:

(33)

<regelnummer> IF expressie THEN statement

Dit statement kan nu een assign-statement zijn, of een subroutine-call, die later besproken zal worden, of een willekeurig ander statement. Enkele voorbeelden:

20 IF A>10 THEN A=10 30 IF Z2 - 0 THEN X=A*B

1940 'IF N$»'JAN' THEN V$='PIET'

Daar dit alleen bij RSX kan, en niet bij de DEC-10 of onder RT-11 zal hier verder geen gebruik van worden gemaakt in de voorbeelden.

Een voorbeeld van het gebruik van een voorwaardelijke sprong-opdracht:

LISTNH

13 REM VOORWAARDELIJKE EN ONUOORWAflRDELIJKE 28 REM SPRONGOPDRRCKTEN.

38 PRINT "GEEF GETAL"; 48 INPUT Z

50 IF Z>=999 THEN 148 60 IF Z>8 THEN 100 70 IF Z-0 GOTO 120

30 PRINT "GETAL IS KLEINER DftN 0" 90 GO TO 36

100 PRINT "GETAL IS GROTER DAN 0" 118 GO TO 30

120 PRINT "GETAL IS GELIJK AAN 0" 130 GO TO 36

140 PRINT "EINDE PROGRAMMA" 159 END

READS' RUNNH

GEEF GETAL ?-5

GETAL IS KLEINER DAN 0 GEEF GETAL ?0

GETAL IS GELIJK AAN 0 GEEF GETAL ?5

GETAL IS GROTER DAN 0 GEEF GETAL ?999 EINDE PROGRAMMA

(34)

Dit programma maakt duidelijk gebruik van zowel de voorwaardelijke als de onvoorwaardelijke sprongopdracht. Na het inlezen van een getal wordt in regel 50 gekeken of dit getal groter is of gelijk is aan 999.

Is dit het geval, dan wordt gesprongen naar opdrachtregel 140. Deze print de eindboodschap. Als À echter niet groter is dan 999, zal ge-keken moeten worden of het getal positief, nul of negatief is. In regel 60 wordt gesprongen als Z positief is. In dit geval zal naar regel 100 worden gesprongen, waar de boodschap wordt geprint dat het getal positief is. Na het printen springt het programma weer naar opdracht 30, en zal een nieuw getal worden gevraagd. Indien echter het getal niet groter dan nul was, zal in regel 70 worden gekeken of het nul is. Is dit ook niet het geval, dan zal het

automatisch negatief moeten zijn. Vandaar dat er niet wordt getest of het getal negatief is. Zoals in het programma goed te zien is

worden voorwaardelijke en onvoorwaardelijke sprongopdrachten vaak samen gebruikt. Dit programma heeft een duidelijke methode ingebouwd om met de executie van het programma te kunnen stoppen.

Een derde, voor sommige doeleinden zeer bruikbare sprongopdracht is de 0N-G0T0 combinatie. Algemene vorm:

<regelnummer> ON expressie GOTO regelnummers

Hierin mag expressie staan voor zowel een vergelijking als voor een variabele. Achter het GOTO staan nu een aantal regelnummers. In principe is het aantal regelnummers achter GOTO onbeperkt. In de praktijk is het aantal echter beperkt door het aantal dat op een commandoregel kan worden geplaatst.

Afhankelijk van de waarde van de expressie wordt nu naar een van de regelnummers gesprongen. Aan de hand van een voorbeeldje zal dit commando worden besproken.

20 ON I GOTO 50,30,100,200

Afhankelijk van de waarde van I wordt nu een sprongopdracht uit-gevoerd, en wel op de volgende wijze:

(35)

als 1 <• I < 2 wordt gesprongen naar 50, 2 <= I < 3 wordt gesprongen naar 30, 3 <• I < 4 wordt gesprongen naar 100, 4 <• I < 5 wordt gesprongen naar 200.

Als I<1 of I>-5 verschijnt een foutmelding op de terminal.

Een voorbeeldje met deze instruktie is het volgende: stel het Ministerie van Financiële zaken heeft een nieuwe belasting ontwik-keld wegens een of ander tekort. Deze belasting werkt als volgt: bedragen beneden de honderd gulden en boven de vijfhonderd gulden worden niet belast. De bedragen hiertussen worden als volgt belast:

100 <= bedrag < 200 200 <* bedrag < 300 300 <» bedrag < 400 400 <« bedrag < 500 20% 30% 40% 50%

De vraag is nu om een programma te schrijven dat na intypen van een willekeurig bedrag de te betalen belasting geeft. Dit kan als volgt worden gedaan:

10 REM BEREKENEN URN BELASTING

20 PRINT "UAN WELKE BEDRAG MOET DE BELASTING WORDEN BEREKEND-1 30 INPUT B 48 IF B>=500 THEN 170 50 IF B<100 THEN 170 60 ON B/100 GOTO 70,90,110,130 79 K=20 80 GOTO 140 90 X=30 100 GOTO 140 110 X=40 120 GOTO 140 130 X=50 140 T=tt*B/100

150 PRINT "DE TE BETALEN BELASTING IS";*;"* EN HET BEDRAG F.";T 160 GOTO 180

170 PRINT "U BOFT. U HOEFT GEEN BELASTING TE BETALEN." 130 PRINT

190 PRINT "WILT U NOG MEER BEDRAGEN BEREKENEN? TVPE JA OF NEE"; 280 INPUT m

210 IF fl$="JA" GOTO 20 220 PRINT

(36)

URN WELKE BEDRAG MOET DE BELASTING WORDEN BEREKEND ?1SB DE TE BETALEN BELASTING IS 20 V. EN HET BEDRAG F. 38

WILT U NOG MEER BEDROGEN BEREKENEN? TVPE JA OF NEE ?Jfl 'JAN UELKE BEDRAG MOET DE BELASTING WORDEN BEREKEND ?60 U BOFT. U HOEFT GEEN BELASTING TE BETALEN.

WILT U NOG MEER BEDRAGEN BEREKENEN? TVPE JA OF NEE ?NEE DBN WENS IK U UERDER NOG EEN PRETTIGE DAG.

TIME: 8.0? SECS. READV

Laten we nu het eerste geval eens doornemen. In de regels 40 en 50 wordt gecontroleerd of het bedrag binnen de belastbare grenzen valt. Als dit niet het geval is wordt de zin in regel 170 uitgeprint. Als wel belasting moet worden betaald zal in regel 60 worden uit-gerekend in welke klasse het bedrag zit. De ingetypte 150 gulden worden hier door 100 gedeeld, waardoor het getal 1,5 ontstaat. Volgens de bovenstaande beschrijving wordt nu naar het eerste regelnummer in de rij gesprongen, waardoor X op 20% wordt gezet. Vervolgens wordt verdergegaan op regel 140 waar het bedrag wordt berekend wat betaald moet worden. Na het uitprinten van dit bedrag en het percentage wordt gesprongen naar regel 190 waar een vraag wordt uitgeschreven. Hierop verwacht de computer een antwoord in karakters (A$). In regel 190 wordt deze string vergeleken met de string JA. Als de twee strings precies gelijk zijn zal het program-ma terugspringen naar regel 20. Dit zal uiteraard alleen gebeuren als men precies het woord JA intypt. Indien men wat anders intypt, zal het programma stoppen.

(37)

8. CONVERSATIONELE PROGRAMMA'S

Wanneer men de wijze van programmeren gebruikt zoals in het vorige hoofdstuk beschreven is, kan een zeer duidelijk interaktief programma worden geschreven, door veel vragen te laten stellen die met ja of nee beantwoord moeten worden. Afhankelijk van het gegeven

antwoord wordt naar het relevante programma-onderdeel gesprongen. Programma's die op deze wijze zijn opgebouwd heten conversationele programma's (er vindt een soort 'conversatie' plaats tussen gebruiker en computer). Het is mogelijk om vragen in plaats van met ja en nee

met 0 en 1 te laten beantwoorden, maar de meeste mensen zullen aan het gebruik van ja en nee de voorkeur geven. Het mogen natuurlijk ook andere antwoorden zijn, afhankelijk van de vraagstelling.

Bij het programmeren dient men er om te denken de te geven ant-woorden in de vragen, op te nemen. Het gebruik van een

programma-beschrijving is dan niet meer nodig en het programma wordt gebruikers-vriendelijker.

Enkele voorbeelden van vragen zijn nog: "WILT U JA/NEE DOORGAAN?"

"ALS U WILT STOPPEN, TYPE DAN STOP" "TIK IN: I=*LNTIKKEN NIEUWE GEGEVENS"

" U=UITSCHRIJVEN TUSSENRESULTATEN" ii T=TESTEN OP NEGATIEVE WAARDEN" " S-STOPPEN"

"IK KIES NU:"

"WELKE HANDELING MOET IK UITVOEREN? TYPE HELP VOOR HULP"

Een klein voorbeeldje is nu het simuleren van een rekenmachientje dat alleen kan optellen, aftrekken, vermenigvuldigen en delen:

(38)

10 REM REKENMACHIB<ITJE

28 PRINT "DIT PROGRAMMA SIMULEERT EEN EENUOUDIG REKENMRCHIENTJE"

30 PRINT "DAT B K E L E REKENKUNDIGE BEUERKINGEN OP 2 GETALLEN KAN UITUOEREN EN"

48 PRINT "DAT WERKT MET DE REVERSE POLISH METHOD. DE ENIGE BEWERKINGEN"

50 PRINT "DIE UITGEUOERD KUNNEN WORDEN ZIJN OPTELLEN, AFTREKKEN,"

60 PRINT "UERMENIGUULDIGEN EN DELEN."

70 PRINT

30 PRINT "DE COMMANDO'S ZIJN:"

90 PRINT " + : TEL DE GETALLEN BIJ ELKAAR OP"

100 PRINT " - : TREK HET TWEEDE GETAL UAN HET EERSTE AF"

110 PRINT " * : UERMENIGUULDIG DE GETALLEN MET ELKAAR"

120 PRINT "

/

: DEEL HET EERSTE GETAL DOOR HET TWEEDE"

136 PRINT

140 PRINT "OP WELKE TWEE GETALLEN MOET DE BEWERKING WORDEN UITGEUOERD";

150 INPUT X>V

160 PRINT "WELKE BEWERKING (TYPE +,-,* OF />"i

170 INPUT B*

130 IF B*<>"+" GOTO 220

190 REM OPTELLEN

200 PRINT x;"+";v;"=»;x+Y

210 GO TO 410

229 IF B$<>"-" GO TO 260

238 REM AFTREKKEN

240

P R I N T

x;"-";v;"=";x-v

250 GOTO 410

260 IF B$<>"*" GOTO 308

276 REM UERMENIGUULDIGEN

23©

P R I N T

x;"*";v;"=";x*Y

290 GOTO 410

380 IF B*<>'V» GOTO 330

310 REM DELEN

320 REN DOOR O?

330 IF V=0 GOTO 368

348 P R I N T X;":";V.;"="JX/Y

350 GOTO 410

360 PRINT "DOOR O DELEN KAN GEEN ENKELE REKENMACHINE"

370 GO TO 410

330 REM BEWERKING ONBEKEND

390 PRINT "DIE BEWERKING KEN IK NIET. GEEF EEN ANDERE BEWERKING";

400 GO TO 170

410 PRINT

428 PRINT "WILT U NOG MEER BEREKENEN? TYPE JA OF NEE"

i

438 INPUT A*

448 IF A*="JA" GOTO 130

458 PRINT

460 PRINT "DAN IS DIT HET EINDE UAN DE SIMULATIE"

470 END

(39)

DIT PROGRAMMA SIMULEERT EEN EENUOUDIG REKENMACHIENTJE

DAT ENKELE REKENKUNDIGE BEUERKINGEN OP 2 GETALLEN KAN UITUOEREN EN

DAT WERKT MET DE REUERSE POLISH METHOD. DE ENIGE BEWERKINGEN

DIE UITGEUOERD KUNNEN WORDEN ZIJN OPTELLEN, AFTREKKEN,

UERMENIGUULDIGEN EN DELEN.

DE

commuons

ZUN;....,

+ : TEL DE GETALLEN &I J ELKAAR OR,, „..,

- : TREK HET TWEEDE GETAL UAN HET EERSTE AF

* : UERMENIGUULDIG DE GETALLEN MET ELKAAR

/ : DEEL HET EERSTE GETAL DOOR HET TWEEDE

OP WELKE TWEE GETALLEN MOET DE BEWERKING WORDEN UITGEUOERD ?5*4

WELKE BEWERKING <TVPE +,-,* OF /> ?+

5 + 4 = 9

WILT U NOG MEER BEREKENEN? TVPE JA OF NEE ?JA

OP WELKE TWEE GETALLEN MOET DE BEWERKING WORDEN UITGEUOERD 76,-13

WELKE BEWERKING <TVPE +,-,* OF /•> ?t

DIE BEWERKING KEN IK NIET. GEEF EEN ANDERE BEWERKING ?*

6 *-13 =-78

WILT U NOG MEER BEREKENEN? TVPE JA OF NEE ?JA

OP WELKE TWEE GETALLEN MOET DE BEWERKING WORDEN UITGEUOERD 78,4.5

WELKE BEWERKING <TVPE +,-,* OF /•> ?•

S : 4.5 = 1.77778

WILT U NOG MEER BEREKENEN? TVPE JA OF NEE ?NEE

DAN IS DIT HET EINDE UAN DE SIMULATIE

TIMEï 0.18 SECS.

RERDV

(40)

Het programma kan worden verkort door getallen te gebruiken in plaats van string-commando's:

LISTNH

IQ REM REKENMACHIENTJE

28 PRINT "DIT PROGRAMMA SIMULEERT EEN EENUOUDIG REKENMACHIENTJE

-30 PRINT »DAT ENKELE REKENKUNDIGE BEUERKINGEN OP 2 GETALLEN KAN UITUOEREN EN"

40 PRINT "DAT WERKT MET DE REVERSE POLISH METHOD. DE ENIGE BEWERKINGEN"

50 PRINT "DIE UITGEUOERD KUNNEN WORDEN ZIJN OPTELLEN, AFTREKKEN,»

60 PRINT "VERMENIGVULDIGEN EN DELEN."

70 PRINT

36 PRINT "DE COMMANDO'S ZIJN:"

90 PRINT " 1 : TEL DE GETALLEN BIJ ELKAAR OP"

100 PRINT " 2 : TREK HET TWEEDE GETAL UAN HET EERSTE AF"

110 PRINT " 3 : UERMENIGUULDIG DE GETALLEN MET ELKAAR"

120 PRINT " 4 : DEEL HET EERSTE GETAL DOOR HET TWEEDE"

130 PRINT

140 PRINT "OP WELKE TWEE GETALLEN MOET DE BEWERKING WORDEN UITGEUOERD";

150 INPUT X,V

160 PRINT "WELKE BEWERKING <l=+,2=-,3**,4*/>";

170 INPUT B

130 ON B GOTO 208,230,260,300

190 REM OPTELLEN

200

P R I N T

x r + ' - i v r ^ x + v

210 GO TO 350

220 REM AFTREKKEN

230 PRINT Xi"-"5V;"=";X-V

240 GOTO 350

250 REM UERMENIGUULDIGEN

260 PRINT x;

M

*";v;

M

=";x*Y

270 GOTO 350

230 REM DELEN

290 REM DOOR O?

300 IF V=0 GOTO 330

310 PRINT x;":";v;"s»;x/v

320 GOTO 350

330 PRINT "DOOR 0 DELEN KAN GEEN ENKELE REKENMACHINE"

340 GO TO 350

350 PRINT

360 PRINT "WILT U NOG MEER BEREKENEN? TVPE JA OF NEE"i

370 INPUT A*

330 IF fl*="JA" GOTO 130

398 PRINT

400 PRINT "DAN IS DIT HET EINDE UAN DE SIMULATIE"

410 END

READY

RUNNH

(41)

RUHNH

DIT PROGRAMMA SIMULEERT EEN EENVOUDIG REKENMACHIENTJE

DflT ENKELE REKENKUNDIGE BEWERKINGEN OP 2 GETALLEN KAN UITUOEREN EN

DAT WERKT MET DE REVERSE POLISH METHOD. DE ENIGE BEWERKINGEN

DIE UITGEVOERD KUNNEN WORDEN ZIJN OPTELLEN, AFTREKKEN,

VERMENIGVULDIGEN EN DELEN.

DE COMMANDO'S ZIJN:

1

2

-•

4

TEL DE GETALLEN BIJ ELKAAR OP

TREK HET TWEEDE GETAL VAN HET EERSTE AF

VERMENIGVULDIG DE GETALLB4 MET ELKAAR

DEEL HET EERSTE GETAL DOOR HET TWEEDE

OP WELKE TWEE GETALLEN MOET DE BEWERKING WORDEN UITGEVOERD ?-3,5

WELKE BEWERKING <l=+,2=-,3=+,4=/)

72

-3 - 5 =-S

WILT U NOG MEER BEREKENEN? TVPE JA OF NEE ?JA

OP WELKE TWEE GETALLEN MOET DE BEWERKING WORDEN UITGEVOERD ?4,0

WELKE BEWERKING a=+,2=-,3=*,4=/> ?4

DOOR S DELEN KAN GEEN ENKELE REKENMACHINE

WILT U HOG MEER BEREKENEN? TVPE JA OF NEE ?NEE

DAN IS DIT HET EINDE VAN DE SIMULATIE

TIME: 0.14 SECS.

Het eerste voorbeeld is iets groter, maar een stuk duidelijker. Bovenstaande programma's kunnen op eenvoudige wijze worden uitgebreid met andere bewerkingen zoals de mogelijkheid om getallen in 'geheugen-plaatsen' van het rekenmachientje vast te houden.

9. FOR-NEXT OPDRACHTEN

Indien een serie opdrachten herhaaldelijk moet worden uitgevoerd kan men gebruik maken van een sprongopdracht, zoals in hoofdstuk 7 besproken. Als het aantal malen dat deze opdrachten moeten worden uitgevoerd bekend is, zal men liever gebruik maken van een zoge-naamde FOR-NEXT lus, welke te vergelijken is met de DO-loop in

(42)

Het eerste deel is het FOR-commando. De algemene vorm is

<regelnummer> FOR variabele=expressie1 TO expressie2 {STEP expressie3} De variabele wordt gebruikt als een soort teller. Bij het binnenkomen

in de lus krijgt de variabele de waarde van expressiel. De volgende opdrachten worden nu uitgevoerd totdat het programma een NEXT op-dracht tegenkomt. De algemene vorm van deze opop-dracht is

<regelnummer> NEXT variabele

Bij deze NEXT-opdracht weet de computer dat hij nu de waarde van de variabele met de waarde van expressie2 moet vergelijken. Als de waarde van de variabele groter is dan of gelijk is aan de waarde van expressie2, zal worden verdergegaan met de opdracht na de NEXT-opdracht. Als de variabele de waarde van expressie2 nog niet heeft bereikt zal de waarde van expressie3 bij de waarde van de variabele worden opgeteld en de lus nogmaals worden uitgevoerd. Als STEP wordt weggelaten neemt de computer voor de stapgrootte +1.

Enkele voorbeelden van FOR opdrachten zijn: 20 FOR K=1 TO 20

38 FOR L1=.5 TO 2.5 STEP .1 123 FOR A9=-.1 TO -.5 STEP -.01

1340 FOR K=A/B TO L1/L3 STEP (A2-B3)/(C4*D5) en van de bijbehorende NEXT opdrachten:

31 NEXT K 80 NEXT LI

190 NEXT A9 2040 NEXT K

Zoals in bovenstaande voorbeeldjes te zien is mag in het F0R-statement zowel met gebroken als met gehele getallen worden gewerkt. Een voorbeeld van het gebruik van een FOR-NEXT loop samen met het-zelfde programma met een IF-statement wordt nu gegeven:

Stel de opdracht luidt om een programma te schrijven dat de kwa-draten geeft van de getallen tussen 1 en 10. Dit kan op de volgende wijze gebeuren:

(43)

LISTNH 19 REM LOOP 20 1=0 38 1=1+1 46 J=I*I 58 PRINT I,J 60 IF K 1 0 GOTO 38 70 END REflDV RUNNH

1

2

3

4

5

6

7

3

9

10

1

4

9

16 25 36 49 64 31 100 TIME: 0.03 SECS. RERDV LISTNH

10 REM FÛR-NEXT LOOP 20 FOR 1=1 TO 10 30 J=I*I 40 PRINT I,J 50 NEXT I 60 END REflDV RUNNH

1

2

3

4

5

6

i'

3

9

10 TIME: REflDV

1

4

9

16 25 36 49 64 81 100 0.03 SECS.

Het is mogelijk om binnen een lus de telvariabele te veranderen. Dit wordt in het algemeen niet aangeraden, maar het volgende voor-beeld werkt wel:

LISTNH

10 REM LOOP MET UERflNDERDE KRIBBELE 28 FOR 1=1 30 J=I*I 40 PRINT I, 50 I=J 60 NEXT I 70 END REflDV RUNNH

1

5

26 TO

J

30

1

4

25 676

(44)

Bij het binnenkomen in de lus wordt I nu 1 gesteld. Het kwadraat van t is 1 dus in regel 50 zal de waarde van I niet veranderen.

Bij de volgende maal dat de lus wordt uitgevoerd is I met 1 opge-hoogd, dus heeft de waarde 2. In regel 50 wordt I nu 4 gesteld,

zodat bij de hieropvolgende doorgang het kwadraat van 5 wordt be-rekend, en zo voort tot de lus 'satisfied' is (in dit geval dus als 676 groter blijkt te zijn dan 30) en het programma vervolgd wordt.

Het is mogelijk om binnen een lus weer een lus te maken. De

lussen zijn dan 'genest'. Hierbij gelden echter wel enkele beper-kingen. De lussen mogen elkaar niet kruisen, en ze moeten gebruik maken van verschillende variabelen. Sprongopdrachten zijn wel toegestaan. Enkele voorbeelden van deze 'geneste' lussen zijn:

toegestaan r- 10 FOR A-1 TO 20

C

20 FOR J=3 TO 21 STEP 3 30 NEXT J •— 40 NEXT A niet-toegestaan -10 FOR I»1 TO 20 - 20 FOR X — 3 TO 3 -30 NEXT I - 4 0 NEXT A 10 FOR A-3 TO 20 STEP 4

I—20 FOR B-1 Î0 3 30 FOR C-1 TO -3 STEP -1 40 NEXT C 50 FOR D=5 TO 100 STEP 10 60 NEXT D I—70 NEXT B 80 NEXT A

C;

10 FOR A*1 TO 20 I— 20 FOR B=3 TO 40 30 FOR 0 2 TO B+A 40 NEXT C 50 FOR D=4 TO 10 60 NEXT D 70 NEXT A 80 NEXT B

[;

(45)

Terwille van de duidelijkheid is hier tussen de FOR en de NEXT geen serie opdrachten geplaatst. Dit zijn dus geen eigenlijke pro-gramma's naar voorbeelden van lussen. Een voorbeeld van een program-ma met een geneste loop is gegeven in het volgende. Het gestelde

probleem is hier om alle combinaties van getallen tussen 1 en 5 te vinden waarvan de som kleiner dan 5 is.

LISTNH

10 REM GENESTE LOOPS

28 PRINT "

39 FOR fl=l

40 FOR B=l

50 S*A+B

A ' V B'V'SOM

TO 5

TO 5

60 IF S>=5 GOTO 98

70 PRINT A,B,S

30 NEXT B

90 NEXT A

100 END

READV

RUNNH

fl

1

1

1

2

B

1

2

3

\ •y SOM 2 3 4 3 4 4 TIME: 0.04 SECS. READY

In dit probleem wordt ervan uitgegaan dat, als twee getallen een som hebben die gelijk aan of groter dan 5 is geworden, de som van alle volgende waarden van de variabelen A en B ook een grotere

sont hebben, namelijk: variabele A wordt in de binnenste lus constant gehouden terwijl variabele B in grootte toeneemt.

Al8 de som groter wordt dan 5, wordt door de sprong uit de bin-nenste lus A een opgehoogd, terwijl de binbin-nenste lus weer met 1

(46)

10. ARRAYS EN MATRICES

Als veel variabelen gebruikt moeten worden blijkt het geven van namen vaak een probleem te worden. Daarnaast treft men vaak aan dat grote aantallen variabelen een zekere relatie in volgorde tot elkaar hebben. Daarom heeft men de zogenaamde arrays ingevoerd. Dit zijn variabelen, die allen dezelfde naam hebben, maar voorzien zijn van een soort volgnummer. Deze arrays kunnen veel werk besparen omdat het mogelijk is het volgnummer (subscript) in een FOR-NEXT lus als lopende variabele te gebruiken. Ook strings kunnen in een array worden geplaatst. Men komt zo tot 1-dimensionale arrays of vectoren. Heeft men behoefte aan meer dataruimte, dan kan gebruik worden

gemaakt van matrices. Dit zijn 2-dimensionale arrays. Deze variabelen hebben twee tellers (subscripts). In het algemeen geeft de eerste subscript het rijnummer van een element van de matrix, de tweede subscript het kolomnummer. Daar deze arrays (of matrices) een aan-eengesloten stuk geheugen nodig hebben, is het nodig deze ruimte van tevoren te reserveren. Dit houdt wel in dat men vantevoren de grootte van de arrays moet kennen. Het reserveren van geheugenruimte gebeurt door middel van het DIM (dimension) statement. De algemene vorm is

<regelnummer> DIM {variabele(n),variable$(m),variable(o,p),

variable!(q,r)}

Hierin zijn n,m,o,p,q en r integers die de maximale waarden aangeven die de subscripts kunnen bereiken, ofwel de dimensies van de arrays en matrices. Alleen de variabelen die gebruikt worden in het pro-gramma moeten worden gedefinieerd. Meestal wordt een DIM-statement aan het begin van een programma geplaatst. Enkele voorbeelden van het DIM-statement zijn:

10 DIM A(9),B(250) 20 DIM C(10,10),X$(20)

30 DIM V1$(20,100),X9(3),A2$(10)

Een naam die in een DIM-statement is gedefinieerd mag niet meer als normale variabele worden gebruikt. In BASIC is de ondergrens van

(47)

een subscript altijd 0. Zo loopt de array A in regel 10 van A(0) tot A(9) en heeft dus 10 elementen. Hier moet men wel degelijk rekening mee houden. Als in een programma een matrix nodig is van 10 bij 20 elementen, zal men hem in het algemeen dimensioneren als A(9,19).

Een voorbeeld van het gebruik van arrays is het volgende pro-gramma . LISTNH 18 REM SORTEERPROGRflMMfl 28 DIM A<5> 30 FOR 1=8 TO 5 40 READ A<I> 56 NEXT I 60 DATA 4,1,2,10,6,3 70 FOR 1=0 TO 4 80 FOR J=I+1 TO 5 90 IF fl<IXfl<J> GOTO 148

100 REM OMWISSELEN UflN fl<I> EN fKJ> 110 W=fl<I>

120 fta>=fKJ>

130 AU>=W

140 NEXT J

150 NEXT I

160 REM DE UITU0ER 178 FOR 1=0 TO 5 1S0 PRINT F K D ; 190 NEXT I 200 PRINT 210 END READY RUNNH 1 2 3 4 6 10 TIME: 0.03 SECS. READY

In het programma is uitgegaan van 6 getallen met de naam A, dus een array A(5). Deze getallen worden in de regels 30-60 ingelezen van een DATA-regel. Het eigenlijke sorteren gebeurt in de regels 70-150. De sorteermethode zal hier niet worden besproken. Het is aan de lezer om uit te vinden hoe deze methode werkt. Dit zal, na

Referenties

GERELATEERDE DOCUMENTEN

&#34;-straling heeft het grootste ioniserend vermogen en daardoor ook de

Met uitzondering van het klein zeegras treden op de kwalificerende Habitatrichtlijn- en Nb- wetsoorten onder invloed van de dijkwerkzaamheden geen significante effecten op, omdat

Via bestand 601 (zie volgende paragraaf) kunnen eventueel de juiste tekstblokken bij het optreden van een specifiek medicatiebewakingssignaal in een specifieke situatie

Voorgesteld wordt artikel 37b, eerste lid, van de Wet WOZ zodanig te wijzigen dat de verstrekking van gegevens door de gemeente aan de afnemers (rijksbelastingdienst,

Deze eigenschap staat bekend als de wederkerigheid van Maxwell waar dieper op wordt ingegaan bij CT3109

3 = zorgverzekeraars hebben een “artsenverklaring” gemaakt; het geneesmiddel wordt uitsluitend vergoed indien de arts een artsenverklaring heeft getekend en indien uit

De nieuwe voorziening gaat ruimte bieden aan het personeel en de vrijwilligers van de kinderboerderij, de stagiaires van diverse scholen uit de gemeente Emmen en de kinderen van

Zowel voor de partner als voor de kinderen geldt dat de eerste € 125.000 van de belastbare erfenis belast wordt met 10% terwijl bedragen daarboven met 20% belast worden.. Leg uit