• Nie Znaleziono Wyników

Inleiding in CPS

N/A
N/A
Protected

Academic year: 2021

Share "Inleiding in CPS"

Copied!
56
0
0

Pełen tekst

(1)
(2)
(3)

C""I Ol-' NO IJ,) 0 O'IJ'I 00'

IIIIII

IIIII

III,I

I'

I~

/'

/1111'/"/111111111111/111 1 111 1

lil/I!

11111 /111111111;1111111111111/11/11111! 1[,li ,111111111. ,/ 11'11111111/1111. 11111111111 1111111111111111 1/111111 1 BIBLIOTHEEK TU Delft P 1826 6264

" " "" /I" I

C 560236

(4)
(5)

inleiding

r

CPS

ir.

L.P.B.M.

Janssen

(6)
(7)

0.1.

Voorwoord

Convcrsational Programming System (cps) is een zogenaamd "time-sharing-systcm". Dit wil zeggen, dat verschillende mensen simultaan een fractie van een seconde de computer gebruiken, waardoor de wachttijden tot practisch nul worden gereduceerd. De communicatie met de computer vindt plaats door middel van terminals. Dit zijn een soort schrijfmachines, die via de gewone telefoonlijnen met de computer zijn verbonden. Cps werkt interactief, (iat wil zeggen, er bestaat een voortdurende wisselwerking tussen de gebruiker en de computer. De normale gang van zaken is dat U zich bekend maakt aan de computer ('logon-procedure'). Hierna typt U een programma in, waarbij iedere regel onmiddellijk door de computer wordt gecontroleerd op taalfou-ten, waarvan, iIldien deze voorkomen, onmiddellijk een melding volgt. Is het programma klaar, dan geeft U een bewaal ·I)dracht ('save-statement') en daarna gaat U rekenen (' xeq-statement').

De taal CPS is tamelijk eenvoudig, want hij sluit Jlauw aan bij normale spreek-taal en wiskundige uitdrukkingen. Als U enkele statements kent, kunt U al eenvoudige programma's schrijven. Daarna kunt U Uw kennis van de taal uit-breiden, waardoor U steeds grotere en meer ingewikkelde programma's kunt creëren. Dit is ook verwerkt in de opzet van deze handleiding. De tekst uit het eerste hoofdstuk, in rechte letters gedrukt, is voldoende voor het schrij-ven van eenvoudige programma's. De cursieve gedeelten gaan dieper op de stof

in en zijn in eerste instantie niet nodig om eenvoudige programma's te schrijven. Het tweede hoofstuk heeft een analoge opzet. Men kan ook hier een scheiding maken tussen het eenvoudige deel, met rechte letters en het moeilijkere deel, met cursieve letters gedrukt. Om redenen van duidelijkheid zijn in deze hand-leiding alle standaardwoorden (XEQ, GOTO, IF THEN, etc.) in hoofdletters uitgevoerd. Dit is niet nodig bij het programmeren, U kunt voor de standaard-woorden zowel hoofdletters als kleine letters gebruiken. Aan het einde van ieder hoofdstuk zijn twee extra voorbeelden opgenomen. Aan het eind van deze handleiding is een lijst opgenomen van veel voorkomende foutmeldingen

met verklaringen en aanwijzingen voor het gebruik van andere dan de IBM 2741 terminals

Tot slot wil ik er de nadruk op· leggen, dat deze handleiding niet pretendeert een volledige taalbeschrijving te zijn. Omwille van de beknoptheid zijn alleen die statements opgenomen, die over het algemeen voldoende zijn om de meeste programma's te kunnen schrijven.

Delft, juni 1975 ir. L.P.B.M. Janssen

(8)
(9)

0.2. Inhoud

0.1 Voorwoord 3 0.2 Inhoud 5 1.1 Programmeren in C.P.S. 7 1.2 In- en uitloggen 8 J.3 Symbolen 9 1.4 Stroomd iagrammen 10 l.5 Regelnummering 1 I 1.6 Statements 12 1.6.1 Expressies 12 1.6.2 In- en uitvoerstatements 12 1.6.3 Sprongstatements 15 1.6.4 Voorwaarden 16 1.6.5 Loop-statements 17 1.7 Standaard-routines 21 1.8 Besturingsopdrachten 21 1.8. I Programmabesturing 21 1.8.2 Lib besturing 23 1.9 Fouten 24 1.9.1 Foutmelding 24 1.9.1.1 Syntactische fouten 24

1.9. I.2 Dynamische fouten 25

1.9.2 Foutenverhetering 25

1.9.2. I Syntactische fouten 25

1.9.2.2 Dynamische fouten 25

1.10 Voorbeelden van programma's 27

2.1 Besturingso

po rach ten

31

2.1 Autosave 31 2.1.2 Logout (Resume) 31 2.1.3 Resequence 32 2. 1.4 Load-save-fi1e 33 2.1.5 Maximale geheugenruimte 34 2.2 Taalbeschrijving 35 2.2.1 Direct 35 2.2.2 Array 35 2.2.2.1 Declaratie 35

2.2.2.2 Het gebruik van arrays 35

2.2.3 String 37

2.2.3.1 Declaratie 37

2.2.3.2 Het gebruik van strings 37

2.2.3.3 String-arrays 38

2.2.4 Standaard routines 39

2.2.5 Uitvoer-statements 39

2.2.5:1 Put image 39

(10)

2.2.6.1 Functieproeed ures 40

2.2.6.2 Interne procedures 40

2.2.6.3 Externe procedures of subroutines 42

2.3 Voorbeelden 43 3.1 Foutboodschappen 45 3.2 Andere terminals 47 3.2.1 Teletype terminal 47 3.2.2 IBM 3270 beeldbuisterminal 47 6

(11)

HOOFDSTUK

1.1. Programmeren

in

c.P.S.

Voordat men een probleem kan programmeren moet het eerst geanaliseerd worden. Als voorbeeld zullen we een nulpuntsbepaling van een ingewikkelde maar continue functie bekijken. We kiezen daartoe een bepaalde startwaarde

Xo waarvan we vermoeden dat het nulpunt rechts van deze waarde ligt.

Vervolgens laten we x toenemen met een stapgrootte Xs en kijken we wanneer de functie van teken wisselt, dus wanneer een nulpunt gepasseerd wordt. Is dit het geval, dan gaan we één stap terug en met deze waarde als nieuwe startwaarde herhalen we de procedure met een stapgrootte die b.v. 5 maal zo klein is. Dit doen we totdat de gewenste nauwkeurigheid is bereikt. In 'nor-male' spreektaal en 'nor'nor-male' wiskunde zou het probleem als volgt geformu-leerd kunnen worden:

10 vraag de waarden op van Xo (beginpunt), Xs (begin stapgrootte) en n

(ge-wenste nau wkeurigheid). 20 stel x = Xo

30 stel s = Xs (stapgrootte bepaling) 40 bereken y 0 = f(x)

50 stel x = x + s (nieuwe x is oude x plus stapgrootte). 60 bereken y 1 = f(x).

70 stel z = y 0 x Y 1 (z is negatief als er een nulpunt tussen de oude x en de nieuwe x ligt).

80 als z

<

0 ga dan naar regel 110, zo niet ga dan gewoon door. 90 stel nu y 0 = Y 1

100 ga terug naar regel 50

110 controleer of de stapgrootte kleiner is dan de gewenste nau wkeurigheid. Als dit zo is, ga dan naar regel 150, zo niet ga dan gewoon door. 120 omdat er tekenomslag heeft plaatsgevonden doen we een stap terug, dus

x = x - s.

130 maak de stapgrootte kleiner: s =

s

i

5

140 ga naar regel 50. 150 druk de resultaten af .

Deze analyse is zonder veel moeite om te zetten in een c.p.S. programma. Als de functie er b.V. als volgt uitziet:

f(x) = x + e(x- 2) wordt het programma

10 20 30

,40

GET LIST (xO,xs,n)

x = xO s = xs

yO = x + exp(x- 2)

(12)

50 60 70 80 90 100 IlO 120 130 140 150 11: 12: 13: x=x+s yl =x+exp(x- 2) z=yO*yl IF z

<

0 THEN GOTO 12 yO = yl GOTO II IF s

<

n THEN GOTO 13 x=x - s s = s/5 GOTO II PUT List (x)

1.2. In- en uitloggen.

Voordat men kan beginnen met het schrijven van en het rekenen met een programma moet men zich aan de computer bekend maken. De computer moet nl. weten of U gemachtigd bent om te rekenen en welk budget hij moet belasten. U moet hiertoe eerst de knop rechts op het toestenbord van de ter-minal op "on" zetten, waarna de terminal zacht zal beginnen te zoemen. Zoemt hij niet, dan moet U de stekker in het stopcontact steken. U drukt nu éénmaal op de "return"-toets. Dit is de grote vierkante toets rechts op Uw toestenbord . De verbinding tussen de terminal en de computer komt dan tot stand.

U kunt nu gaan inloggen. Daartoe typt U:

LOGON xxxxxx/yyyy PRoe (eps)

xxxxxx is de zogenaamde useridentification en yyyy is een password. De useridentification vertelt de computer welk budget hij moet belasten en het password geeft aan of U gemachtigd bent om dit budget te gebruiken. Deze twee lettercombinaties worden U toegewezen door de budgetbeheerder van de werkgroep of het practicum. Is er geen password nodig, dan moet U als volgt inloggen:

LOGON xxxxxx PRoe (eps)

Na het logoncommando ingetypt te hebben drukt U op de "return"-toets. De computer zal de melding geven:

XXXXXX LOGON IN PROGRESS AT tijd ON datum waarin tijd en datum het precieze moment van inloggen aangeven. Hierna kunnen eventuele algemene mededelingen van het rekencentrum volgen en daarna typt de computer:

ENTER eps LOGIN PARAMETERS

Hierop reageert U door alleen de "return"-toets in te drukken. De computer zal daarna een klein streepje in de kantlijn plaatsen ten teken dat U kunt be-ginnen.

(13)

- - -

-Gebeurt niet alles zoals hierbuven is beschreven dan zijn er twee mogelijkheden;

a) Er gebeurt niets. De "Return "-toets wordt geblokkeerd.

Bel dan toestel 253. Dit is het automatische antwuordapparaat van het rekencentrum, dat U zal vertellen of het systeem 'down' is of 'normaal draait '. Is het systeem 'down', dan moet U enige tijd wachten, voordat U een

nieuwe poging om in te loggen kunt wagen. Draait het systeem normaal, zet

dan de terminal enige seconden op 'off' en herhaal de hele procedure. b) U heeft een fout gemaakt in de logon procedure. De computer geeft hiervan

dan een melding. U moet dan datgene wat fout was goed intypen, niet de hele logon procedure herhalen.

Bent U klaar met rekenen dan kunt U dit aan de computer mededelen door in te typen:

LOGOUT

U krijgt dan een mededeling, waarvan het laatste bedrag aangeeft hoeveel de sessie gekost heeft; daarna typt de computer:

IKJ 56400A ENTER LOGON OR

LOGOFF-Als U hierna niet direct doorgaat met een nieuwe logon moet U intypen: LOGOFF

Pas daarna mag U de terminal uit zetten.

1.3. Symbolen.

eps

kent drie soorten symbolen.

a) De letters a tj m z (kleine letters en hoofdletters).

b) De cijfers 0 tjm 9, waarbij de nul essentieel verschilt van de letter o. c) De speciale symbolen.

Naast de algemeen bekende tekens: + - ) \

>

en

<

zijn er nog een aantal andere tekens.

decimale punt (i.p.v. de decimale komma).

*

"maal"-teken "gedeeld door"-teken

"is gelijk aan"-teken of "wordt"-teken (bijv. a = a + 2 betekent a wordt a + 2)

-, "niet" -teken

string quote

scheidingskomma bij in- en uitvoerstatements

(14)

dubbele punt

puntkomma, afsluiting van statements

& "and "-symbool

I

"or"-symhuol '! uitvoerteken foutmelding .@ "atn-teken

#

l1ummeringsteken $ dollarteken ~ cent-teken % procent-teken

Combinaties van speciale symbolen komen ook voor: ~* tot de macht

>=

groter dan of gelijk aan

<=

kleiner dan of gelijk aan , = ongelijk aan

,>

niet groter dan

,<

niet kleiner dan

I~ begin van commentaar

:xl

eind van commentaar

De tekens: en" mogen alleen in strings of in commentaar gebruikt worden.

Als het "="-teken het eerste symbool op een regel is, zal deze hele regel niet

in het geheugen van de computer opgenomen worden. De op deze regel

voor-komende boodschap zal rechtstreeks aan de operator op het rekencentrum

worden doorgegeven.

1.4. Stroomdiagrammen.

Bij de voorbeelden in deze handleiding zullen, waar nodig, stroomdiagrammen

geplaatst worden. Vaak is het zinvol om voordat men begint met

programme-ren het probleem door middel van een stroomdiagram te analyseren. De in

deze handleiding gebruikte codes zijn:

I

I

: opdracht

<

>

: if-statement

\

/

: uitvoeropdracht a = 10 (5) 25 : Do a = 10 to 25 by 5

..,

: niet waar JO

(15)

- - - -....

1.5. Regelnummering

.

In het algemeen moeten de statements in een programma van een regelnummer worden voorzien. De enige eis die in

ers

aan een regeillummer wordt gesteld is, dat het groter dan of gelijk aan 1.00 moet zijn, en kleiner dan of gelijk aan 9999.99 en dat het niet meer dan twee cijfers achter de decimale punt mag hebben.

Regelnummer 2357.03 zal door CPS zonder meer worden geaccepteerd. De volgorde van intypen van statements kan volkomen willekeurig zlïn, daar de computer ze zelf rangschikt naar opklimmend regelnummer.

voorbeeld 1 :

Typt U bijvoorbeeld in:,

916.3 put list (c)

12b=1.36

1 a = J 2.5

916

dan zal Uw programma er als volgt uitzien:

1. a = 12.5;

12. b=1.36;

916. c = (a'll.b):~o"(a+b);

916.3 PUT LIST (c);

In dit voorbeeld ziet U, dat CPS automatisch naar opklimmend regelnummer sorteert, alles netjes onder elkaar zet en de regels met een ";" afsluit

In

ers

mag nooit meer dan één statement per regel voorkomen.

U kunt echter het nummeren van de regels ook aan de computer overlaten. Indien U bijvoorbeeld als eerste regelnummer

#10

intypt, dan zullen de statements achtereenvolgens de volgende regelnummers krijgen: 10,20,30, .. . .

Typt U echter bijvoorbeeld als eerste regelnummer in:

#7.2,1.3

dan zal de regelnummering worden: 7.2,8.5,9.8, 11.1, .

Met andere woorden: het eerste regelnummer is 7.2 en dit zal bij iedere stap met 1.3 verhoogd worden.

Bent U klaar met het intypen van Uw programma, dan zult U de automati-sche regelnummering moeten onderbreken. Dit doet U door op de "attention"-toets (ATTN) rechts boven op het "attention"-toetsenbord te drukken, mits er op de des

-betreffende regel geen statement staat.

(16)

1.6. Statements.

ePS-statements kunnen in 5 groepert ingedeeld worden:

de expressies, in- en uitvoerstatements, sprongstatements, voorwaarden en

loopstatements. Na ieder statement moet op de "return"·toets gedrukt worden. (Dit is de grote vierkante toets, rechts op het toetsenbord.) De computer zal daarna een nieuw regelnummer uittypen en een underscore (" ") geven, ten teken dat hij klaar is om nieuwe informatie van U te ontvangen.

In CPS kunt U standaardopdrachten naar believen met hoofdletters of met

kleine letters intypen. Voor identifiers, labels enz. maakt het wèl verschil of

U hoofdletters of kleine letters gebruikt.

1.6.1. Expressies.

De volgorde waarin in eps een algebraïsche expressie wordt uitgevoerd is: a) haakjes

b) mach tsverheffen

c) vermenigvuldigen en delen d) optellen en aftrekken

Vermenigvuldigen en delen, respectievelijk optellen en aftrekken hebben

on-derling geen prioriteit.

bijvoorbeeld:

x3/ a a - b

+ 5

-8b x

+

y wordt in eps:

of

xxxxxxyx x(2*a)/8/b + 5*(a - b)/(x + y)

Indien bovenstaande berekening zeer vele malen herhaald wordt (bijvoorbeeld in een loop), verdient x*xxx de voorkeur boven xxx3, aangezien

vermenig-vuldigen minder rekentijd kost dan machtsverheffeIl.

1.6.2.

In- en uitvoerstatements.

ln- respectievelijk uitvoerstatements zijn opdrachten, waarmee getallen ingelezen, respectievelijk uitgeprint kunnen worden.

Het algemene invoerstatement is: GET LIST ( . . . )

Als de computer dit statement tegenkomt, zal hij opvragen wat tussen de haak-jes staat.

Staat ergens in het programma:

GET LIST (a,b,c)

(17)

- - -

---dan zal de computer de waarden van a, b en c opvragen.

Op de terminal verschijnt "a". Daaronder typt U de waarde van "a" in, waar-na U op de "return"-toets drukt. Hierna zal de computer een "b" uittypen, enz.

In hel volgende voorbeeld stelt een "p" in de kantlijn de reactie van de pro-grammeur voor, een "c" de reactie van de computer.

Voorbeeld 2.

De waarden die ingevoerd moeten worden, zijn: voor xl: 0.5, voor a: 7.3 en voor x2: 0.62. Het statement is:

GET LIST (x I ,a,x2) De te volgen procedure is:

c: xl p: 0.5 c: a p: 7.3 c: x2 p: .62

Bovendien ziet U in het voorbeeld, dat de nul voor de komma weggelaten mag worden.

U kunt ook, nadat op de terminal "x I " verschenen is, de waarden van x I, a

en x2 op één regel intypen, mits gescheiden door een komma.

Het voorbeeld wordt dan:

c: xl p: .5,7.3,0,62 of c: xl p: .5,7.3 c: x2 p: .62

Het algemene uitvoerstatement is PUT LIST ( . . . ) Dit is identiek aan:

? . . . .

De computer drukt de waarden van datgene wat op de plaats van de puntjes staat af.

Zou na bovenstaand voorbeeld in het programma staan: PUT LIST (xa,x2,a)

(18)

of

?xl,x2,a

dan zou de computer hierop reageren met: .5. .62 7.3

Opmerking 1.

Bij een "PUT LIST"-statement moeten haakjes gebruikt worden; bij een '.?"-statement mag dit niet.

Opmerking 2.

I

Tussen de verschillende in te voeren of uit te voeren elementen moeten kom-ma's staan.

Het is ook mogelijk tekst op te nemen in de uitvoer. Deze moet dan tussen string-quotes (zie l.2) staan.

Voorbeeld 3:

Als a = 0, b = 3.1415 en x = 7.128596 en de computer komt in het programma tegen:

PUT LIST ('De integraal van',a,'tot' ,b,'is' ,x) of

? 'De integraal van',a,'tot' ,b,'is' ,x dan zal de uitvoer worden:

De integraal van 0 tot 3.1415 is 7.1283596

Voor ieder uitvoer-statement zal een nieuwe regel gebruikt worden:

? 'De in tegraal van " a ? 'tot',b,'ü',x

geeft als uitvoer:

De in tegraal van 0 tot 3.1415 is 7.1283596.

Dit heeft ook tot gevolg dat

? ' , ? ' ,

betekent 2 regels overslaan.

(19)

· - - -

-1.6.3.

Sprong-statements.

In een ePS-programma kan naar een zogenaamd "label" gesprongen worden. Een label is een naam van ten hoogste 6 symbolen, gevolgd door een dubbe-le punt.

De restricties die aan een label gesteld worden zijn:

het eerste symbool moet een letter zijn; er mogen geen spaties in voorkomen. Geldige labels zijn:

lab:, g2eka:, bier:, Liesje:, p2:, g:

Ongeldig zijn:

723:, b2 c6:, 3Iab:, truus, jenever: Opmerking:

In een label zijn kleine letters en hoofdletters significant, dus: LAB =1= LAb =1= lab

Het springen naar een label gebeurt met een "goto"-statement. Dit statement mag met of zonder spatie tussen go en to geschreven worden.

Zowel "GO TO" als "GOTO" worden geaccepteerd.

Het volgende voorbeeld geeft aan hoe een stroming door een buis opgewarmd wordt. Hierin is het Nusseltgetal (Nu) een maat voor de overgedragen hoeveel-heid warmte, het Reynoldsgetal (Re) karakteriseert de stroming en het Prandtl-getal (Pr) is een stofconstante.

Voorbeeld 4.

#

10 ? ' warm teoverdrach t bij turbulente buisstromen'

20 lab:

30 GET LIST (Re, Pr)

40 ?' ,

50 Nu= .027 ... Rex.~.8~Pr ... x..33 60 ? 'Het Nusseltgetal is',Nu

70 GOTO lab

In dit programma worden steeds andere Reynolds- en Prandtlgetallen ingevoerd en daarmee wordt het Nusseltgetal uitgerekend.

Opmerking I:

In het goto-statement mag het label niet gevolgd worden door een dubbele punt.

Opmerking 2:

Omdat -tfovenstaand programma steeds maar doorgaat moet het, als men klaar is met rekenen, afgebroken worden door op de "ATTN"-toets te drukken. Opmerking 3:

Achter een label mag ook een statement staan: Bijvoorbeeld: 20 lab: GET LIST (Re,Pr)

(20)

1.6.4. Voorwaarden.

Het "goto"-statement wordt vaak gebruikt in samenhang met een voorwaarde. De algemene vorm voor een voorwaarde is:

IF . .. THEN ...

Dit statement gaat na of dat wat na "ir' komt, waar is. Is dit het geval, dan doet de computer wat achter "then" staat. Is dat wat achter "ir' staat niet waar, dan zal het programma de "then"-opdracht negeren.

Voorbeeld 5: 10 20 30 40 50 60 70 80 90 100 110 [6

GET LIST

(x) ? 'wortel van x' GET LIST (x)

IF x <0 THEN GOTO neg y = SQRT(x) ? ' wortel' ,x,'is',y GOTO klaar neg: y = SQRT(-x) ? ' wortel' ,x,' is' ,y " x i' klaar:

(21)

- -- -~ --- - - -- - - -Opmerking:

SQRT is een standaard routine, die de wortel uit een getal trekt (zie 1.5). Als in bovenstaande programma de x negatief is, zal het programma regel 10

ti

m 30 en 70

ti

m 110 doorlopen. Is x positief, dan zullen regel 10

ti

m 60,

100 en 110 doorlopen worden.

Een uitbreiding van het "IF .. . THEN ... "-statement is het "IF ... THEN . .. ; ELSE ... "-statement.

Als de "IF-expressie" waar is, zal de "THEN-expressie" uitgevoerd worden. Is de "rF-expressie" niet waar, dan zal de "ELSE-expressie" uitgevoerd worden.

Bijvoorbeeld:

IF y

<

0 THEN b = 10; ELSE b = 20 of

lF p = 10 THEN GOTO labl; ELSE GOTO lab2

Opmerking:

Het "IF THEN; ELSE"-statement is het enige CPS-statement waarin een ";" getypt moet worden.

Er kunnen in een "IF THEN"-statement meerdere voorwaarden gesteld wor-den door "&" of

"I"

(logische "and" of "or")-symbolen te gebruiken.

IF n

>

Ia & n <20 TEEN GOTO lab

betekent: ga naar lab als n

>

10 én tevens n

<

20, dus als 10

<

n

<

20. IF n

<

10

In>

20 THEN GOTO lab

betekent: ga naar lab als n

<

10 óf als n

>

20.

1.6.5. Loop-statements.

De "DO-loops" worden gebruikt om aan bepaalde variabelen achtereenvolgens verschillende waarden toe te kennen. Het volgende programma corrigeert steeds

5 verschillende meetwaarden, namelijk xl tlm x5 door middel van de

(22)

Voorbeeld 6. 10 20 30 40 lab: 50 60 loop: 70 80 90 100 110 120

Begin

GET LIST

y

=

O.9 x

l.02 +

O.Ix

x,y

GET LIST

(door)

door

=

I

? 'Correctie van meetwaarden.' ? ' ,

? 'Vul nu de meetwaarden in.'

GET LIST (x 1 ,x2,x3,x4,x5)

DO x = xl ,x2,x3,x4,x5

y = .9.xxx ~ 1.02 + 1 ~x

? ' De meetwaarde is' ,x,' de gecorrigeerde waarde is' ,y

END loop

? 'Typ een 1 in als U door wilt gaan, anders een 0'

GET LIST (door)

IF door

=

1 THEN GOTO lab:

Dit programma zal, als het op regel 90 aankomt, terugspringen naar regel 60

en dan de volgende waarde van x nemen. Is er geen volgende waarde meer

aan-wezig, met andere woorden, is x5 geweest, dan gaat het programma door met

regel 100.

(23)

- -

---

--~ --

-

- - - ---Een uitbreiding op dit statement is het "DO TO BY"-statement.

Bijvoorbeeld:

DO a = 10 TO 25 BY 5

a zal hierin achtereenvolgens de waarden 10, 15, 20 en 25 aannemen. Laat men het "BY"-gedeelte weg, dan zal als stapgrootte 1 genomen worden. Bijvoorbeeld:

DO a = 10 TO 25

a krijgt hierin achtereenvolgens de waarden 10, 11, 12, 13, ... , 24,25. Voorbeeld 7.

Dit voorbeeld behandelt een numerieke integratie door de oppervlakte onder een polynoomcurve te berekenen. In regel 10 en 20 wordt tekst uitgevoerd. In regel 30 worden de begin- en eindwaarden van het integratie-interval opge-vraagd. In regel 40 wordt de integraal op nul gezet. Daarna wordt in regel 50 het integratie-interval in 100 stukjes verdeeld. In regel 60 worden de opper-vlakken van deze stukjes uitgerekend en gesommeerd. In regel 80 wordt een correctie toegepast en in regel 90 wordt de uitvoer geregeld. De polynoom is x3 - X

+

60.

10 ? 'Numerieke integratie'

20 '! 'Vul de grenzen van het te beschouwen interval in' 30 GET LIST (begin, eind)

40 int = 0

50 DO i = begin TO eind BY (eind .-begin)/l 00 60 int = int

+

(ix i~ü - i

+

60)* (eind - begin)/l 00 70 END

80 int

=

int - (begin**3 - begin

+

60

+

eind**3 - eind + 60)* *(eind - begin)/200

90 ? 'de integraal is', int

Er kunnen ook meerdere loops in elkaar voorkomen. Om ze te kunnen onder-scheiden moeten ze van een label worden voorzien.

Voorbeeld 8:

indien men een }ijst van het kental voor warmteoverdracht (Nu) naar een vloei-stof die door een buis stroomt wil maken voor verschillende stromingscondities en verschillende stofeigenschappen kan daarvoor het volgende programma ge-bruikt worden:

(24)

8

10 ? 'Nusselt als functie van Reynolds en Prandtl.'

20 ?' , 30 loop I: DO Re = 4000 TO 10000 BY 500 40 ? 'Re =' ,Re 50 loop2: DO Pr = I TO 5 60 Nu = .027*Re)f*.8*Pr*K33 70 ? 'Pr =',Pr:en Nu =',Nu 80 END looP2 90 ?' , 100 END loopl

In dit programma zal eerst de eerste waarde van Re genomen worden. Daar

-mee zal de hele 2e loop doorgerekend worden. Dan zal de tweede waarde

van Re genomen worden, enz.

Opmerking I: In enkelvoudige "DO"-Ioops mogen labels gebruikt worden;

ko.nen er "DO"-Ioops in "DO"-loops voor, dan moeten labels gebruikt wor-den.

Opmerking 2: Er mag niet door middel van een "GOTO"-statement van

buiten de loop naar een label binnen de loop gesprongen worden.

(25)

- - -

--~~---~ - -

-1.7. Standaard-routines.

Voor het rekenen met de computer staan een aantal standaardroutines ter beschikking, te weten:

sin (x) sinus van x; x in radialen sind (x) cos (x) cosd (x) atan (x) atand Ca) sqrt (x) exp (x) log (x) loglO (x) abs Cx)

sinus van x; x in graden cosinus van x; x in radialen cosinus van x; x in graden arctangens van x; in radialen arctangens van x; in graden wortel uit x; x ;;;. 0

e tot de macht x

natuurlijke logaritme van x; x

>

0 gewone (i 0) logaritme van x; x

>

0 absolute waarde van x

Deze routines mogen in elkaar voorkomen, bijv.

Y

=

exp (sqrt (abs (atan (sin (log I 0 (x)))))) is een volkomen legaal statement.

1.8. Besturingsopdrachten.

Er zijn bepaalde statements, die direct (d.w.z. zonder regelnummer) ingetypt worden en die dienen om een programma te besturen. Deze statements wor-den "besturingsopdrachten" genoemd. Logon en Logout (zie 1.2) zijn hier voorbeelden van.

1.8.1. Programmabesturing.

Om een programma, nadat het geschreven is, te starten, dient het statement xeq (of XEQ)

gebruikt te worden. Dit is identiek aan EXECUTE

Onmiddellijk nadat dit commando ingetypt is en er op de "return"-toets gedrukt is, zal het programma beginnen met rekenen. Indien U tijdens het rekenen niet meer verder wilt gaan met Uw programma, moet U op de atten-tion-toets (A TTN) drukken. De computèr stopt met rekenen en zal U vertel-len met welke regel hij bezig was.

Er bestaan 5 alternatieve XEQ-commando's, namelijk:

a) XEQ a

waarbij a een regelnummer is. Bijv.:

(26)

XEQ 18

betekent: "doe alleen regel 18".

b) XEQ a THRU b

Dit commando betekent: "begin bij regel a en ga door tot je bij regel b aange-komen bent.

c) XEQ THRU b

Dit commando betekent: "begin bij het begin en stop zodra je bij regel b

bent aangekomen.

d) XEQ a THRU ...

Door dit commando zal het programma bij regel a starten en tot het eind van

het programma doorgaan.

e) XEQ* THRU . . .

Dit programma betekent: "ga door waar je gebleven was. Het kan bijvoorbeeld

gebruikt worden nadat het programma gestopt is door middel van een

"STOP"-commando in het programma (zie 2.2.4) of door middel van de attention

(A TTN )-toe tso Voorbeeld 9: 10 ? 'begin' 20 GOTO L2 30 Ll: ? 'L1' 40 GOTO L3 50 L2: ?' L2' 60 GOTO L1 70 L3: ? 'L3' XEQ geeft als uitvoer:

begin

U

L1 L3

XEQ 30 THR U ... geeft als uitvoer: L1

L3

XEQ 20 THR U 30 geeft als uitvoer:

L2 L1

XEQ THRU 30 geeft als uitvoer:

(27)

begin L2 Ll

Opmerking: In plaats van regelnummers kunnen ook labels gebruikt worden. In bovenstaand voorbeeld geeft

XEQ 30 THRU 50

h~'tzelfde resultaat als

XEQ Ll THR U L2 of

XEQ 30 THRU L2

Dezelfde regels als voor het "XEQ"-statement gelden, gelden ook voor het "LlST"-statement. Dit commando resulteert in het uittypen door de computer van het programma, zoals dit in het geheugen staat.

Bij een listing worden alle standaard-statements met hoofdletters geschreven en het "?" -teken wordt vervangen door "PUT LIST".

Bij een LIST-opdracht wordt niet gesprongen. In voorbeeld 9 zou het commando

LIST 20 THRU 30 leiden tot de volgende uitvoer:

20 GOTO L2; 30 Ll: PUT LlST('U');

Op eenzelfde manier als U met het LIST-statement regels in Uw programma kunt laten uittypen, kunt U door middél van het ERASE-statement regels in Uw programma uitwissen.

Het enige verschil in gebruik tussen een "LlST"-statement en een ERASE-statement is, dat, indien U het hele programma wilt wissen, U niet ERASE kunt gebruiken, maar in moet typen

ERASE THRU . . . Het statement

ERASE 30 THRU 50

betekent veeg regel 30 tot en met regel 50 uit.

1.~.2.

Libbesturing.

Als een programma ingetypt wordt, wordt dit in het snelle en dure werkgeheu-gen opwerkgeheu-genomen. In dit geheuwerkgeheu-gen kan met het programma gerekend en gemanipu-leerd worden. Wil men echter een programma bewaren, dan moet dit in het

(28)

zame achtergrondgeheugen (library genaamd) gezet worden.

Om een programma te bewaren typt U in: SA VE (nnnn).

Hierbij is nnnn een door Uzelf te kiezen naam van maximaal 6 symbolen,

waarvan het eerste symbool een letter moet zijn, en waarin géén spaties

mo-gen voorkomen. Hoofdletters en kleine letter zijn significant, dus NaaM =1= NAAM =1= naam.

Het programma staat nu in het werkgeheugen én in het achter~rondgeheugen.

Het kan nu uit het werkgeheugen verwijderd worden door het commando:

ERASE THRU ...

of door een logout. Het blijft dan echter wel in het achtergrondgeheugen staan. Wil men het programma vanuit het achtergrondgeheugen naar het wergeheugen overbrengen, dan luidt het commando hiervoor:

LOAD(nnnn)

waarbij nnnn weer de naam van het programma is.

Het programma blijft echter óók in het achtergrondgeheugen staan. De enige manier om het programma uit het achtergrondgeheugen te verwijderen is door het statement:

LIB ERASE (nnnn)

Er schuilt bij het saven nog wel een moeilijkheid. Indien U een naam gebruikt

waaronder al een programma in de library staat, wordt het oude programma

uitgeveegd en het nieuwe daarvoor in de plaats gezet. Men kan dit echter

voor-komen, door te kijken welke programma's zijn gesaved. Dit kan door het

com-mando in te typen:

UB LiST

De computer zal hierna alle programmanamen die voorkomen onder dezelfde

useridentificatie waaronder ingelogd is, uittypen.

1.9. Fouten.

1.9.1. Foutmelding.

1.9.1.1. Syntactische fouten.

Indien er tijdens het intypen van een programma een syntactische fout gemaakt wordt, zal

eps

hierop reageren door een uitroepteken te typen. Drukt men daarna op de "return"-toets, dan zal op de terminal een foutboodschap

ver-schijnen.

Voorbeeld 10:

10 ? 'dit is een voorbeeld'

(29)

- -

- -

- . - -~--

-20 GET LIST (mu,n,x2

UNBALANCED PAREN 20

Regel 20 moet dus opnieuw ingetypt worden. 1.9.1.2. Dynamische fouten.

Er kan ook een fout optreden, als de computer met het programma aan het rekenen is.

Deze categorie fouten noemt men dynamische fouten. Ook hiervan krijgt U een melding. Voorbeeld 11: 10 a = 20 20 b = 75.23 30 c=5 40 ? ' dynamische fout' 50 y = b/(a - 4~c) 60 ?'y =',y

Nadat er een "XEQ" gegeven is, zal dit programma de volgende uitvoer geven: dynamische fout

50

**

DIVISION BY ZERO

Na de foutmelding zal de computer stoppen met rekenen en U moet dan eerst de fout verbeteren.

Opmerking I: Het getal 50 in de foutmelding geeft het regelnummer aan, waarin de desbetreffende fout gevonden is.

Opmerking 2: Achter in deze handleiding staan een aantal veel voorkomende foutmeldingen met een verklaring.

1.9.2.

Foutenverbetering.

1.9.2.1. Syntactische fouten.

Bij het verbeteren van syntactische fouten moet, nadat het nieuwe regelnum-mer is verschenen, het statement opnieuw (maar dan goed) worden ingetypt. 1.9.2.2. Dynamische fouten.

Voorbeeld 12:

10 PUT LIST ('dynamische fout')

20 LEB:GET LIST(Xa,Xe);

30 X=Xa + Xe

40 PUT LIST (X)

50 IF X = 0 THEN GOTO LAB

Dit programma zal bij een "XEQ" de dynamische foutmelding geven:

(30)

- - - ---~-~,~ - - - -- -

-50

**

ILLEGAL TARGET EXP.

De computer kan namelijk het label "LAB" niet vinden. Dit kan verholpen worden door, met regelnummer, een nieuwe regel 20 of een nieuwe regel 50

in te typen, waarin U de beide labels hetzelfde maakt:

Een andere mogelijkheid is het intypen van: 201 @LEB@LAB@

De computer zal hierop reageren door uit te typen: 20. LAB: GET LIST (Xa,Xe)

De computer heeft in regel 20 overal LEB vervangen door LAB. U had

na-tuurlijk ook in kunnen typen:

501 @A@E@

Fout was echter geweest: 20l @E@A@

want dit heeft tot resultaat:

20 LAB: GAT LIST (Xa, Xe)

ILLEGAL STATEMENT

Deze manieren van foutenverbetering zijn ook toe te passen als U iets in een programma wilt veranderen.

Voorbeeld 13: 10 a=3.357 20 b = 20 30 DO c =.5 TO 4 BY .5 40 x = b*a**c 50 ?x 60 END

Stel, dat b niet de waarde 20, maar de waarde 40 moet krijgen, dan heeft de opdracht

201 @20@40 een foutieve uitwerking.

Het programma wordt:

10 a=3.357 20 b = 20

30 DO c =.5 TO 4 BY .5

40 b = 40

(31)

50 ? x

60 END

Een oplossing voor dit probleem is de opdracht:

201 @=20@=40@

U kunt natuurlijk ook gewoon een nieuwe regel 20 intypen.

De verbeteringen worden alleen in het werkgeheugen aangebracht. Indien U wilt dat ze ook in het achtergrondgeheugen worden opgeborgen, geeft U een save-commando met dezelfde naam, als die waaronder het programma in het achter-grondgeheugen staat. Het oude programma (zonder verbeteringen) wordt dan uitgewist en het nieuwe (verbeterde) programma wordt daarvoor in de plaats gezet.

1.10. Voorbeelden van programma's

Voorbeeld 14:

In het volgende voorbeeld wordt de zogenaamde foutenintegraal (Errorfunction) uitgerekend. Deze is gedefinieerd als

2 z _ 2

ERF (z) = .7'::. Jet dt y 1T O

In regel 30 worden het argument z van de errorfunctie en de

integratiestap-grootte opgevraagd. In regel 70 wordt de integraal bepaald door de

oppervlak-te onder de kromme uit oppervlak-te rekenen en in regel 90 wordt een begin- en eind-correctie toegepast.

(32)

- --~--- ---~ -

-Stroomdiagram.

get list

(z,stap)

int

=

int -

(1

+

exp (-z**2)*z/(2*stap))

Programma.

1 0 ? 'Dit programma berekent de Errorfunctie van het getal z' 20 ? 'Vul nu eerst z en het aantal integratiestappen in.' 30 GET LIST (z,stap)

40 Pi=4~atan(l)

50 Înt = 0

60 DO j = 0 TO z BY z/stap 70 int = int + exp H**2)*z/stap 80 END

90 int = int - (l + exp (-z**2»*z/(2*stap) 100 erf = 2/SQRT (Pi)*int

110 ?'ERF(',z,')=',erf

(33)

Voorbeeld 15:

'--==E==:::::;-

._--..

---.----E"---~

a

=

0

<

) Programma.

antw

=

D<O

rex

=

-b/2a

irnx

=

V

-D/2a

10 ? 'Dit programma berekent de wortels uit een kwadratische vergelijking' 20 ? 'van de vorm a*xxx2 + b*x + c

=

0'

30 lab 1: GET LIST (a,b,c)

40 IF a = 0 THEN GOTO lab3

(34)

-- - - - --

-50 D = bx.b - 4x.a*c

60 IF D

<

0 THEN GOTO lab2

70 p = -b/2/a 80 q = SQRT (D)/2/a 90 ? 'Xl =',p + q,'X2 =',p - q 100 GOTO klaar 1101ab2: rex=-b/2/a 120 imx = SQRT (-D)/2/a

130 ? 'XI =' ,rex,'+' ,irnx,' *i;X2 =' ,rex,' -' ,imx,' *i'

140 GOTO klaar

ISO lab3: IF b = 0 THEN GOTO lab4

160 x = -c/b

170 ?'X=',x

180 GOTO klaar

190 lab4: IF c = 0 THEN GOTO labS

200 ? 'STRIJDIG!!!!'

210 GOTO klaar

220 labS: ? 'IDENTIEK'

230 klaar: ? 'Wilt U nog een keer rekenen? Ua = 1, nee = 0)'

240 GET LIST (antw)

250 lF antw = I THEN GOTO labl

260 ? 'Dan stoppen we ermee'

(35)

HOOFDSTUK II.

2.1. Besturingsopdrachten.

2.1.1. Autosave.

U zult merken, dat, nadat U op de "Return"-knop gedrukt heeft, vaak de toetsen even niet ingedrukt kunnen worden. Dit is normaal. Soms echter blijven de toetsen vast zitten: er is een storing in de computer ontstaan, waar-door het systeem "down" is. Alles wat in het werkgeheugen staat, is dan ver-loren gegaan. Dit is bijzonder onplezierig als U juist een groot en uitgebreid programma ingetypt, maar nog niet gesaved heeft. Om dit risico niet te lopen, kunt U, telkens als U enkele regels heeft ingetypt, de automatisdteJ"~$elnum­ mering door middel van de "attention"-toets afbreken, het programma saven en daarna weer dOQrgaan. U kunt dit werk echter ook door de computer la-ten doen, door gebruik te maken van de zogenaamde "Autosave"-faciliteila-ten. U moet dan bij het inloggen, nadat de computer U gevraagd heeft:

ENTER CPS LOGIN PARAMETER

niet direct op de "Return"-knop drukken, maar eerst intypen: AUTO (pppp)

waarin pppp staat voor het zogenaamde "autosave-member". Dit is een naam, die aan dezelfde voorwaarden als een normale "save"-naam moet voldoen. De computer zal nu steeds om de paar regels het programma automatisch in het achtergrondgeheugen zetten. Ten teken dat dit gebeurt, zal steeds als er auto

-matisch gesaved wordt een dubbele horizontale streep in de kantlijn verschij

-nen. Gaat het systeem dan per ongeluk "down", dan zal het programma tot aan de laatste dubbele streep behouden blijven.

Komt het systeem weer "op", dan kunt U opnieuw inloggen met een ander autosavemember. Hierna typt U in: load (pppp). U kunt ook inloggen met hetzelfde autosavemember. De computer zal dan de boodschap geven:

RESTART COMPLETE

Een listing zal U leren, dat het programma dan in het werkegeheugen staat. De "autosave" wordt opgeheven door een "logout".

Dit betekent, dat een programma dat in het achtergrondgeheugen staat onder de naam pppp door een "logout" uitgeveegd wordt. Daarom moet U, voor-dat U uitlogt, het programma "saven" (zie 1.8.2) onder een naam, die niet dezelfde is als het autosavemember.

2.] .2. Logout (resume).

Er bestaat een alternatieve manier van uitloggen. indien U in plaats van

"LOG-OUT" intypt

LOGOUT (RESUME)

(36)

- -~~--- -

-blijft de computer in CPS doorwerken. U krijgt dan de boodschap:

ENTER CPS LOGIN PARAMETERS

U kunt hiermee dus een autosave activeren of overgaan op basic (dit is een

andere conversational taal).

2.1.3. Resequence.

Met de resequence-opdracht kunt U Uw programma van een nieuwe r

egelnum-mering voorzien. Het commando luidt:

RESEQ THRU .

De computer voorziet Uw programma van de regelnummers 1,2,3,4, ...

enz. Bovendien zal hij automatisch het nieuwe programma beginnen te listen.

Wilt U dit niet, dan moet U op de attention-toets (ATTN) drukken, waarna

de listing stopt. Een "save"-statement zorgt ervoor, dat de nieuwe

regelnum-mering ook in het achtergrondgeheugen opgenomen wordt.

Het algemene statement is:

RESEQ a (THRU b)(FROM c)(BY dj waarbij weer vele combinaties mogelijk zijn, bijv.

Reseq thru Reseq thru by Reseq thru from

"Reseq a thru .. . " zal bij regel a in het oude programma beginnen met

her-nummeren. "Thru b" betekent dat de computer doorgaat tot en met regel b in het oude programma; "thru ... " betekent dat het programma tot het eind toe hernummerd wordt. "From c" betekent, dat het eerste regelnummer van

het nieuwe programma de regel c zal zijn. "By d" geeft aan met welk getal

de regelnummers zullen opklimmen.

Voorbeeld 16:

1 0 ? ' oppervlak van een vierkant en een cirkel.'

20 GET LIST (r)

30 ol = r*r

40 ? 'oppervlak van het vierkant

='

,ol

50 02 =3.14159265~nH

60 ? 'oppervlak van de cirkel

='

,02

70 ?"

Indien U eerst het oppervlak van een cirkel en pas daarna het oppervlak van het vierkant zou willen uitrekenen, kunt U het programma modificeren door

in te typen:

(37)

RESEQ 30 THRU 40 FROM 63 Hierdoor krijgen regel 30 en 40 de nummers 63 en 64

Opmerking: zoudt U ingetypt hebben:

Reseq 30 thru 40 [rom 60,

dan zoudt U de volgende boodschap gekregen hebben:

~~ LINE NUMBER OVERLAP - RESEQ SUPPRESSED

en de reseq zou niet doorgaan.

2.1.4. Load-save-file.

U kunt, indien U dit wenst, Uw programma van een key voorzien, waardoor alleen mensen die deze key kennen met het programma kunnen werken.

Een key is een woord van maximaal 6 letters, dat achter de naam van het pro-gramma staat en dat bij een "Lib-list"-opdracht niet uitgetypt wordt. De ver-schillende mogelijkheden van een key zullen aan de hand van het volgende voorbeeld worden toegelicht.

Voorbeeld 17:

U kunt een programma saven door in te typen: SAVE (pro,gramma)

pro is de naam van het programma gramma heet de longkey

gram heet de shortkey gr heet de listkey

Weet U van een programma de longkey, dan kunt U alles met het programma doen (xeq, load, list, save). Weet U alleen de shortkey, dan kunt U het pro-gramma niet onder dezelfde naam saven; met andere woorden, U kunt geen veranderingen in het programma, zoals dit in het achtergrondgeheugen staat, aanbrengen. (dus alleen load, xeq en list is toegestaan). Probeert U te saven met de shortkey (save (pro,gram», dan zal de boodschap volgen:

~* KEYINCORRECT

en het savecommando zal zonder effect blijven.

Kent U alleen de listkey, dan kunt U niet saven en niet listen (alleen load en xeq). Is het programma geload met:

load (pro,gr) en geeft U de opdracht:

LIST

dan verschijnt de boodschap

(38)

**

PROGRAM IS LIST AND SAVE PROTECTED -OPERA TION SUPPRESSED en de Iisting gaat niet door.

Opmerking: Iedere werkgroep en ieder practicum heeft een contactman die de contacten met het rekencentrum onderhoudt. Mocht U onverhoopt Uw key vergeten zijn, stelt U zich dan met hem in verbinding.

2

.

1.5.

Maximale geheugenruimte.

De maximale geheugenruimte. die een CPS-programma mag innemen, is 4 pages (= 16384 bytes). Is Uw programma te groot geworden, dan ontvangt U hiervan een melding. Het programma kan niet uitgebreid worden en even-min kan er iets in veranderd of verbe'terd worden. Stukken van het program-ma uitvegen helpt ook niet. Bij verbeteringen van een programprogram-ma of bij erasing van bepaalde gedeelten blijven namelijk de oude statements in het programma staan en worden alleen op non-actief gesteld.

Er bestaat een manier om deze overtollige ballast kwijt te raken. De procedure hiervoor is:

a) Voeg aan Uw CPS-programma als eerste regel toe:

1 DCL XXXX FiLE ENV (F(I60)SPACE(TRK,(2,2))) XXXX is een willekeurige naam met dezelfde voorwaarden als een save-naam).

b) Typ daarna direct (d.w.z. zonder regelnummer) in: STORE FILE XXXX

LiST 2 THRU . ..

c) Maak Uw werkgeheugen schoon door een ERASE THRU . ..

d) Typ op de terminal in met een regelnummer dat niet in Uw CPS-program-ma voorkomt:

DCL FiLE XXXX

daarna direct (d.w.z. zonder regelnummer) iNCLUDE FILE ON XXXX

Daarna wacht U enige tijd, totdat de boodschap komt:

*.x. END OF FILE ON XXXX

Uw programma staat nu zonder de ballast van de op non-actief gestelde statements in het werkgeheugen.

e) SA VE Uw programma.

(39)

Opmerking:

Mocht Uw programma zo vol zijn, dat het zelfs a) niet meer accepteert, bel dan het rekencentrum; er bestaat nl. nog een manier om Uw overbodige state-ments kwijt te raken.

2.2.

Taalbeschrijving.

2.2.1. Direct.

Via de terminal is de computer ook als "rekenmachine" te gebruiken. Daartoe typt U zonder regelnummer bijv. in:

Nadat U op de "Return"-toets gedrukt heeft, zal het antwoord onmiddellijk uitgetypt worden.

2.2.2.

Array.

2.2.2.1. Declaratie.

U kunt in CPS gebruik maken van arrays. Dit zijn getallenverzamelingen in de vorm van matrices. Deze arrays moeten gedeclareerd worden aan het begin van een programma. Daartoe typt U met regelnummer in:

DCL aaaa (10)

Dit is een array van 10 elementen met als naam aaaa, of DCL bbbb(7,lO)

Dit is een array in de vorm van een 7 bij 10 matrix. Opmerking:

Voor aa aa of bbbb kan een willekeurige naam van maximaal 6 symbolen wor-den gebruikt, die niet met een cijfer mag beginnen.

2.2.2.2. Het gebruik van arrays.

Het statement

GET LIST (aaaa)

zal tot gevolg hebben, dat de array element voor element opgevraagd wordt. Het commando

PUT LIST (bbbb)

zal achter elkaar alle getallen die de array bevat uittypen.

Een elegante manier om een array uit te voeren wordt in het volgende voor-beeld uitgewerkt.

Voorbeeld 17:

70 Ll: DO i = I TO 7

(40)

- -- - - - -~---- ~-- - - -

-80 L2: DO j

=

1 TO 9 BY 2

90 ? 'A(',ij,')=',a(ij),' en A(,ij+ 1,')=',a(ij+ 1)

100 END L2

110 ENDLl

Dreigt Uw array zo groot te worden, dat het programma deze niet meer kan

verwerken (dit is iets, wat bij rasters voor partiële differentiaalvergelijkingen nogal eens kan voorkomen), dan kunt U de array declareren als:

DCL aa aa (70,120)DEC(6)

CPS zal dan niet de normale hoeveelheid van 16 significante cijfers

doorreke-nene, maar slechts 6.

CPS kent ook de mogelijkheid van arrays met variabele grenzen. Deze

decla-reert U als volgt:

DCL cccc (m) CONTROLLED

waarbij U voor de voorlopige grens m een getal invult, dat in de orde van groot-te van de definitieve grens ligt. Indien daarna in Uw programma de variabele n

een waarde krijgt toegewezen (geheel getal), kunt U intypen: ALLOCATE cccc(n)

De nieuwe grens wordt n. Voordat de grens veranderd kan worden, m.a. w.

voordat U een nieuwe "allo ca te " kunt geven, moet eerst het statement

fF ALLOCA (cccc) THEN FREE cccc

gepasseerd worden. Voorbeeld 18: 36 10 20 30 40 50 60 70 80 L: 90 100 110 120 pCL X(5) CONTROLLED

? 'van hoeveel getallen wilt U het gemiddelde bepalen?'

GET LIST(n)

1F ALLOCA (X) THEN FREE X ALLOCATE X(n) GET LIST (X) som = 0 DO p = 1 TO n som = som + X(p) END L gem = som/n

(41)

2.2.3.

String.

2.2.3.1. Declaratie.

Een stringvariabele is een variabele, die geen numerieke waarde heeft, maar

waarin een bepaalde tekst staat opgeborgen.

Een string moet als volgt gedeclareerd worden:

DCL ssss CHAR (10)

Dit betekent, dat de stringvariabele 10 symbolen moet bevatten.

Een andere mogelijkheid is:

DCL ssss CHAR (20) V AR

De toevoeging "V AR" (varying) heeft tot resultaat, dat de string een

wille-keurig aantal variabelen, mits kleiner dan of gelijk aan het opgegeven getal

(hier 20), mag bevatten. ss ss is een willekeurige naam voor de string.

2.2.3.2. Het gebruik van de strings.

Het toewijzen van tekst aan een string gebeurt op de volgende wijze:

s

=

'dit is een string'

Strings kunnen gekoppeld worden volgens:

s = sllls2

Indien sI = 'DIT IS' en s2 = 'een string' dan zal PUT LIST (s) na bovenstaand

statement resulteren in: DIT IS een string

Het inlezen van een string kan op twee manieren gebeuren:

a. GET LIST (s)

De computer vraagt dan als het programma gedraaid wordt s

U moet dan Uw tekst intypen, bijv.:

'Dit is een string'

b. READ INTO (s)

De computer zal nu alleen een streepje (underscore) geven en geen "s"

uit-typen als het programma gedraaid wordt. U kunt dan de tekst zonder stnng

-quotes intypen.

Dit is een string

Opmerking: Bij een "GET LIST" moeten wel stringquotes gebruikt worden;

bij een "READ INTO" mag dit niet.

(42)

~ - - - - ~~ - - - ~---- -

-Een string kan ook een bepaald getal bevatten:

P = '12345'

Hiermee kan niet gerekend worden, want P heeft geen numerieke waarde. Wil

men dit getal toch een numerieke betekenis geven, dan moet men gebruiken

a = eval (P)

a krijgt dan de "geë·valueerde ", d. w.z. de numerieke waarde van P, dus

a = 12345.

CPS kent het statement "substring" , dat een gedeelte van een string leest,

bijv.:

q = substr (P ,3,4)

Als P de inhoud "voorbeeld" heeft, krijgt q hier de inhoud "orbe", d.w.z. vier opeenvolgende letters van P (voorbeeld), te beginnen bij de derde letter van P.

Voorbeeld 19:

10 DCL q CHAR (129) VAR

20 ? 'programma om op de terminal grafieken te tekenen' 30 40 ? ' ,

,

,

q= 50 DO i = 1 TO 7 60 q = q

11

q 70 END 80 q='O'lls 90 DOx=OT0360BY15 100 Y = 50~(1 + sind (x)) 110 PUT LIST(substr(q,l,y)II'.x-') 120 END

Met dit programma wordt m.b.v. een string op de terminal de grafiek van 5041 + sind(x)) getekend. In regel 50 tot en met 70 wordt een string van 128. (= 27) spaties samengesteld. In regel 80 wordt hier een "nullijn kenmerk" aan toegevoegd. In regel 100 wordt de string op de gewenste lengte afgekapt en van een sterretje voorzien.

2.2.3.3. String-arrays.

U kunt strings ook in een array plaatsen. U krijgt dan zogenaamde

string-ar-rays. Deze moeten gedeclareerd worden met:

DCL sI (20) CHAR (30;

of

(43)

DCL s2(20) CHAR(30) VAR

De arrays sI en s2 in dit voorbeeld hebben ieder 20 stringelementen, die elk weer uit 30 symbolen bestaan.

(De elementen uit sI moeten 30 symbolen hebben, de elementen uit s2 mo-gen maximaal 30 symbolen hebben)

2

.

2.4

.

Standaardroutines.

Buiten de standaardroutines, zoals deze in het eerste hoofdstuk beschreven

staan, kent CPS nog andere standaardroutines .. ,

ALLOCA(X) "waar" als de array X "allocated" is en "onwaar" als de

array "free" is (2.2.2.2)

EVAL(X) evalueert, indien mogelijk,een string tot een numerieke

waarde (2.2.3.1)

MIN (X 1 ,X2, . .. ) Zoekt de kleinste waarde uit Xl, X2, . . .

MAX (X I ,X2, . . . ) Zoekt de grootste waarde uit X I, X2, .. .

FLOOR (X) afronding tot geheel getal naar beneden

CEIL(X) SIGN (X)

SUBSTR (str,a,b)

RANDOM

STOP

afronding tot geheel getal naar boven

(teken van X) + I als X

>

0

o

als X

=

0

-I als X

<

0

neemt een bepaald gedeelte van een string (2.2.3.2)

geeft willekeurige (random) getallen tussen 0 en I.

Onafhankelijke randomgeneratoren kunnen verkregen worden door random verschillend te schrijven, bijv. RANDOM, random, RaNdOm

indien CPS dit statement tegenkomt, stopt hij met de

berekening totdat het commando XEQ *" thru . . .

gegeven is.

2.2.5.

Uitvoer-statements

.

In hoofdstuk I is het "put list"-statement behandeld. U zult bij het gebruik bemerken dat door het wegvallen van niet significante nullen aan het begin en het eind van het getal, een nogal rommelig geheel ontstaat.

Er is ook een statement dat een vast ingedeelde uitvoer geeft. 2.2.5.1. Put image.

Bij het "PUT IMAGE"-statement moet ergens in het programma (waar doet

er niet toe) een image gedeclareerd worden, bijv.:

IlO im: IMAGE

a=---.--

b=--- c = . . .. .

(44)

- - - -

- - - -

- - ----~ - - -

-Een image-declaratie bestaat uit twee regels. De eerste bevat een label en het

woord "IMAGE". De tweede heeft géén regelnummer en zal letterlijk

uitge-voerd worden. Het algemene uitvoerstatement is

PUT IMAGE (a,b,c) (im)

waarbij "im" de naam van het label is, dat in de declaratie wordt gebruikt.

eps

zal nu het image van I 10 (2e regel) uittypen, met daarin ingevuld de

waarden van a, b en c; en wel a met 3 cijfers vóór en 2 cijfers na de komma.

b als geheel getal en c met een .drijvende komma, dus bv: .357'02 (dit is

0,357

*

102

). Voor een drijvende komma is een serie van 5 of meer puntjes

nodig. (Zie voorbeeld 25).

2.2.6.

Procedures.

Eén zeer nuttig aspect van

eps

is nog niet behandeld; namelijk de

mogelijk-heid om procedures te gebruiken.

Een procedure is een stuk programma, dat telkens wordt uitgevoerd als het

wordt opgeroepen. Komt er in één of meer programma's meerdere malen een

bepaalde berekening voor, en kan men dit niet ondervangen door met een

"DO"-loop te werken, dan moet men een procedure gebruiken.

eps

kent drie soorten procedures.

1) de functieprocedures 2) de interne procedures 3) de externe procedures

De functieprocedures en interne procedures hoeven in

eps

niet gedeclareerd

te worden, de externe procedures wel.

2.2.6.1. Functieprocedures.

Met een functieprocedure, ook wel "Iet"-procedure genoemd, kent men aan

een variabele een functie toe. De algemene vorm is:

LET f(x) =0 • • •

Deze toekenning mag overal in het programma plaats vinden. Voorbeeld 20:

Indien U in een programma veel met hyperbolische functies werkt loont het

de moeite het programma te beginnen met: 10 LET sinh (x) =0 (exp (x) - exp (-x))/2

20 LET cosh (x) =0 (exp (x)

+

exp (-x))/2

30 LET tanh (x) = sinh (x)/ cosh (x)

Hierdoor kunt U in Uw hele programma de hyperbolische functies op

eenzelf-de manier gebruiken als eenzelf-de normale sinus en cosinus. 2.2. 6. 2. In terne procedures.

Een interne procedure kan een hele berekening bevatten. Zij kan met of zonder "dummyparameters" gebruikt worden.

(45)

Zonder dummyparameters heeft zij de vorm: int: PROC

(hier de procedurestatements) END int

Deze procedure wordt in het programma opgeroepen met CALL int

(int is een willekeurige naam) Met dummyparameters:

int: PROC (x,y,z)

(hier de procedurestatements) END int

Deze procedure wordt opgeroepen met: CALL int (a,b,c)

In het laatste geval zullen overal in de procedurestatements voor x, y en z de waarden a, b en c ingevuld worden.

Deze twee procedurevormen zullen met twee eenvoudige voorbeelden worden toegelicht.

Voorbeeld 21:

10 j.x. Interne procedure zonder dummy para meters

.x.f

20 a = 10 30 b = 25 40 CALL som 50 PUT LIST (c) 60 som: PROC 70 c = a + b 80 END som Voorbeeld 22:

10 j *-In terne proced ure met dummyparameters.x.j 20 a = 10

30 b

=

25

40 CALL som (a,b,c) 50 PUT LIST (c)

60 som: PROC (p,q,r)

70 r = p + q

80 END som

In beide voorbeelden vormen regels 10

ti

m 50 het hoofdprogramma en regels 41

(46)

- - - ---~---

- -

-60 t/m 80 de procedure, die in het hoofdprogramma in regel 40 wordt

aange-roepen.

Opmerking: In CPS is alles wat tussen

1*

en

*1

staat commentaar. Dit wordt

alleen bij een listing afgedrukt. Bij een XEQ negeert de computer dit

commen-taar.

2.2.6.3. Externe procedures of subroutines.

Een externe procedure, ook wel subroutine genoemd, maakt geen deel uit van

het hoofdprogramma, maar is als een apart programma gesaved. Dit heeft als

voordeel, dat deze procedure slechts één keer geschreven hoeft te worden, maar toch in verschillende programma's kan worden gebruikt.

De externe procedure heeft de volgende vorm:

10 naam: PROC (a,b,c,d)

Hier komen Uw procedure-statements.

90 END naam

Deze procedure moet gesaved worden onder dezelfde naam die gebruikt wordt

in de eerste regel (hier "naam")

Het hoofdprogramma moet beginnen met:

10 DCL naam ENTRY EXT Het oproepstatement is:

CALL naam (p,q,r,s)

Ook hier worden in de subroutine aan de parameters a,b,c en d de waarden toegekend die p,q,r en s in hun hoofdprogramma hebben.

"Naam" is een willekeurige naam.

De regelnummers zijn willekeurig gekozen. Voorbeeld 23:

10 som: PROC(p,q,r)

20

!-*

dit is de externe procedure

*1

30 r = p + q

40 END som save (som)

10 DCL som ENTR Y EXT

20

1*

dit is het hoofdprogramma

*1

30 a = 10

40 b = 25

50 CALL som (a,b,c) 60 PUT LIST (c)

(47)

2.3. Voorbeelden.

Voorbeeld 24:

Dit programma berekent van een aantal getallen het gemiddelde en de varian-tie. 10 20 30 40 50 60 70 80 90 100 11: IlO 120 130 140 ISO 12: 160 170 180 190 200 210 DECLARE x(10) CONTROLLED;

PUT LIST ('berekening van gemiddelde en variantie'); PUT LIST ('aantal getallen?');

GET LIST (n);

IF n

<

2 THEN GO TO flauw; IF alloca (x) THEN FREE x; ALLOCATE x(n);

GET LIST (x); som = 0; DO i=l TO n; som = som

+

xCi); END 11;

gem = somin; var = 0;

DO i = I TO n;

var = var

+

(x(i) - gem)**2; END 12;

PUT LIST (' gemiddelde over' ,n,' getallen =' ,gem); PUT LIST ('variantie=',l/(n -l)*var);

PUT LIST (' de getallen waren' ,x); GO TO eind;

220 flauw: PUT LIST ('flauw hoor'); 230 eind: END;

Voorbeeld 25.

Tot slot volgt nog een voorbeeld van een tamelijk uitgebreid programma, dat een functie integreert, tabelleert en grafieken van de functie zelf en van de integraal van de functie tekent.

Verklaring:

In regel 30

tlm

70 wordt een string r met 128 spaties gevormd voor het te-kenen van de grafieken. In regel 90

tlm

180 wordt de functie gedeclareerd. In regel 210

tlm

270 wordt de functie geïntegreerd. Regel 410

tlm

440 be-palen de maximum- en minimum waarden van de functie en van de integraal (i.v.m. het "schalen" van de grafieken). In regel 500 en volgende worden de grafieken getekend. 10 20 30 4011: DECLARE q(50) CONTROLLED; DECLARE r CHAR(I29) VAR;

r = ' '.

DO i = I TO 7;

(48)

- - - ---~----~~~---- ---~~~--~- ~----50 60 70 80 90 100 IlO 120 130 140 150 160 170 180 190 200 210 220 23012: 240 250 260 270 280 290 300 310 320 330 340 350 360 370 380 13: 390 400 410 420 430 440 450 460 470 44 r = rl Ir; END 11; r =

'1'1

Ir;

PUT LIST ('integratieprogramma');

PUT LIST ('Hoeveel programmastappen wilt U?'); GET LIST (n);

IF allo ca (q) THEN FREE q; m = n

+ I;

ALLOCATE' q (m);

PUT LIST ('declareer nu eerst Uw functie d.m.v.'); PUT LIST (' een LET f(x) = ... statement in regel 180'); PUT LIST (' en geef daarna XEQ 180 THRU . .. '); STOP;

PUT LIST ('geef de begin- en eindwaarde van x'); GET LIST (begin, eind);

step = (eind - begin)/n; int = -f(begin)*step/2; DO i = 0 TO n; j = begin + i*step; int = int + fU)*step; q(i + I) = int - fU)*step/2; END 12; ma xii =-.IE61; minii =.1 E61; maxif =-.1 E'61; minif = .1 E 61 ; PUT LIST (' '); PUT LIST (' '); PUT LIST (' '); PUT IMAGE (l)(iml); PUT IMAGE (I) (im2); PUT IMAGE (I) (im I); DO i = 1 TO n

+

I ; j == begin T step*i; t = fU);

IF t> maxif THEN maxif = t; IF t < minif THEN minif = t;

IF q(i) > maxii THEN maxii = q(i); IF q(i)

<

minii THEN minii = q(i); PUT IMAGE U,fU),q(i)) (im3); END 13;

(49)

PUT LIST (' '); PUT LIST (' '); 480 490 500 510 520 530 14:

PUT LIST ('grafiek van de functiewaarden'); PUT LIST ('minimum =',minif, 'maximum =',maxif); PUT LIST (' ');

DO i = 1 TO n + I; 540 j = begin + i*step;

550 PUT LIST(substr(r,I,IOOf(maxif - minif)*fU) ·· 1)11'*');

560 END 14;

570 PUT LIST (' '); 580 PUT LIST (' ');

590 PUT LIST ('grafiek van de integraal');

600 PUT LIST ('minimum =', minii, 'maximum =', maxii); 610 PUT LIST(' ');

620 15: DO i = 1 TO n + I;

630 PUT LIST (substr(r,I,IOO/(maxii - minii)*q(i) -- 1)11'-*');

640 END 15; 650 im 1: IMAGE; 1**********1**********1**********1 660 im2: IMAGE; X f(x) int (f(x» 670 im3: IMAGE;

I.

I . . . .

I . . . .

.

.

Opmerking: .1 E 61 betekent: 0.1 x 1061 = 1060.

3.1.

Foutboodschappen

Enkele veel voorkomende foutboodschappen met toelichting zijn: UNBALANCED PAREN

Er komen in het desbetreffende statement niet evenveel linker- als rechter-haakjes voor.

ILLEGAL STATEMENT De computer herkent het statement niet.

IDENTIFIER TOO LONG

Een identifier (variabele, label, etc.) mag uit niet meer dan 6 symbolen bestaan. TARGET INSIDE "DO" OR "PROC"

U mag niet van buiten een loop of procedure naar een label binnen een do-loop of procedure springen. (uit een do-do-loop springen mag wel)

Cytaty

Powiązane dokumenty

D latego najw ażniejszym i pytaniam i, rozstrzygającym i o faktycznej sile oddziaływ ania sztu­ ki, są p ytania o to, do czego jest zdolny w spółczesny człowiek, czy jest on

skupiała się na tym, żeby nie tyle porzucić pojęcie „mediów” – bo to i tak niemożliwe, biorąc pod uwagę jak niesłychanie obecne stało się już od pewnego czasu –

On en a un nouveau témoignage dans ce passage où François transpose dans son style instinctivo-affectif l’épigraphe du roman de Godbout extraite d’une oeuvre d’André Breton : «

As far as the date of Thomas is concerned, both the Named Testimonia, where Thomas is mostly mentioned in the apocryphal context and the fact that the Coptic GThom was

Voor de realisatie van de doelstellingen in deze wet, zal er echter door de TAW nog veel technische invulling moeten worden gegeven: In de vorm van leidraden en als

Toruńskie Planetarium działa w ramach Fundacji Przyjaciół Planetarium i Muzeum Mikołaja Kopernika w Toruniu, która założona została 8 V 1990 r.. Jest to fundacja

W latach następnych jego aktywność badawcza była coraz bardziej ograniczana obowiązkami organizacyjnym i (stanowisko dziekana Wydzia­ łu Filologicznego UW, funkcja

Istotną cechą zaprezentowanego systemu jest takie wspomagania zarządzania, które nie tylko odnosi się do strategicznego poziomu procesów zarządczych, ale również