STICHTING MATHEMATISCH CENTRUM 2e BOERHAAVESTRAAT 49 AMSTERDAM REKENAFDELING MR 8 5 P r a k t i j k e u r s u s ALGOL 6 0 door Geurt s C. H. A . K o s t e r Me e r t e n s I;LAC) 1966 P RA K TIJK CURS US A L G O L E R R A T A Op p a g . re g e l s t a a t : 12 1 5 13 7 14 1 15 9 128 1 8 9 2 5 > 1 t e 1 1 9 = 9 V 1 > 1 2 7 r 2 8 c o m m e n t D 2 t mo e t z i j n : 6 b t r u e = 1 1 own 1 V A l l ] : = A[2 1 := 1 u a e g i n co mme n t — 2 own A[1 9 0 1 : = A [ 2 , 0 1 : = 1 PRAKTIJKCURSITS ALG O L 1 P r o g r a m m a— 9 c o m o u n d Een ALG O L- pr ogr amma is v olgens het "Rev is ed Repor t on the Algor it hmic s t a t Language e m e ALG n O L 60" ( i n het v er v olg aangeduid m e t RR) , s ec tie 4 . 1 . 1 een t compound s tatement o f een bloc k , E e n compound s tatement bes taat u it : " begin" , e een o f m e e r s tatements , onder ling gescheiden door het s y mbool " ; " e n t e n n sb lotte "l e n d " , E e n bloc k heeft dez elfde s tr uc tuur , m a a r tus s en begin en de eer s te statement o c moeten een o f meer dec lar aties s taan, v an elk aar en v an de s tatements kgescheiden door " ; " . Z o w e l compound s tatement a ls bloc k z ijn s tatements , ( De s tatements w a a r u it een compound s tatement o f een bloc k z ijn opgebouwd mogen R dus R o p hun beur t een compound s tatement o f een bloc k z ijn . A l s ieder e s tatement 4 mogen een compound s tatement en een bloc k gelabeld z ijn door een o f meer labels . .Het pr ogr amma i n z ijn geheel mag ec hter b i j de mees te implementaties ( d. w . z . 1 r. ealis er ingen v an ALG O L o p een bepaalde c omputer) n ie t gelabeld z ijn . 1 ) Declaraties ( R R 5) Een dec lar atie defi nieer t d e betekenis v an een o f meer identifi er s , D e z e defi nitie geldt s lec hts binnen het bloc k waar in deze dec lar atie s taat. We k unnen de v olgende s oor ten dec lar aties en bijbehorende dec lar ator en onderscheiden: — D e c la r a t ie v an s imple v ar iables i a _ t e g a , r e a l , Boolean — D e c la r a t ie v an ar r ay s . — D e c la r a t ie v an s witc hes l a t l e z ar r ay 9 r e a l I r L a z , Boolean E l l y of a r r a y s w i t c h — D e c la r a t ie v an een proc edure m o s s I I H s . r eal proc edure , Boolean 21:222gas , p L a e s l y _ r e De dec lar atie v an s imple v ar iables en ar r ay s ma g wor den voorafgegaan door de dec larator own ( maar n ie t own E L E E i, p. v , o w n r e a l E L a z ) . pea-1 3 P r o c e d u r e dec lar ation ( RR 5.4) De pr oc edur e dec lar ation bestaat t ilt : het s y mbool proc edure, ev entueel v oor afgegaan door i n t e g e r , r e a l o f Bo o le a n , v erv olgens de procedure heading en tenslotte de pr oc edur e body . D e proc edure body bes taat u i t een enk ele s tatement (v aak een compound s tatement o f een bloc k ). I n de f o r ma l par ameter p a r t wor den, indien aanwezig, de f o r m a l par ameter s opgesomd. D ez e z ijn a lt ijd identifi er s . I n de s pec ifi c ation p a r t k an infor matie v er s tr ek t worden ov er n u l o f meer d e r f or mele p a r ameter s . T us s en f o r m a l par ameter p a r t en s pec ifi c ation p a r t k an een v alue p a r t worden opgenomen w aar in een o f meer v an de f o r m a l par ameter s u i t de s pec ifi c ation p a r t v oork omen ac hter het s y mbool v alue. S ZE IMOCOMMINE S 4 Sc ope (RR 2.4.3, 2.7, 4 . 1 3 4 . 3 . 4 0 4 . 7 . 3 . 2 , 4 . 7 . 3 . 3 , Een ident ifi er s t e lt s teeds een entiteit v oor d ie k an z ijn: s im p le v ar iable, a r r a y , 5 . 3 . 5 , switch, f o r m a l par ameter ( die behalv e op een d e r v oor 5 . pr oc4edur e, . label 3 o f een ) gaande entiteiten ook betr ek k ing k an hebben op een s t r ing o f op een ex pres s ion of s ubs c r ipted v ar iable) . Aangez ien i n pr inc ipe gelijk luidende identifi er s v e r s c h illende entiteiten kunnen v oor s tellen, en de betek enis v an een uitdr uk k ing o f s tatement w a a r in een identifi er v oor k omt er v an afhangt welk e ent it eit door d ie identifi er wordt v oorges teld, i s het noodz ak elijk dat we ondubbelz innig kunnen v as ts tellen om welk e ent it eit het gaat. Dit k an a ls v olgt: Volgens de ALG O L- s y ntax is z ijn een pr ogr amma o f een proc edure body alleen een bloc k als aan het begin een o f meer dec lar aties s taan, maar w e z ullen i n het v erv olg ieder pr ogr amma en ieder e proc edure body als een bloc k beschouwen. Nu behoor t ieder e ent it eit die door een identifi er wor dt voorgesteld b ij een bepaald block. H e t v erband tussen entiteit en identifi er k an i n de tek s t v an een AL G O L pr ogr amma op d r ie manier en z ijn vastgelegd: — V o o r s imple v ar iables , ar r ay s , s witc hes en proc edures door een dec lar atie. De ent it eit behoor t bi_j_het k leins te bloc k waar in die dec lar atie s taat. - V o o r een label door het geplaats t z ijn v oor een s tatement, daarv an gescheiden door een " : " . D e ent it eit behoort b i j het k leins te bloc k waarbinnen de g e la belde s tatement s taat. ( N , B, I s de gelabelde s tatement een proc edure body dan behoort de label b i j dez e proc edure body . I n het M C - I ALG O L-s y s teem i s ec hter voor het gev al de proc edure body m e t een dec lar atie begint, een s pr ong naar een der gelijk e label n ie t toegestaan) pea-2 — V o o r een f o r m a l par ameter door het v oork omen i n de f o r m a l par ameter lis t . De ent it eit behoor t b i j d e proc edure body . In dez e d r ie gev allen i s het z onder m e e r duidelijk welk e entiteit de identifi er v o o r s telt. V e r d e r duidt een identifi er i n de v alue p a r t o f s pec ifi c ation p a r t de g e lijk namige f o r m a l par ameter aan. K o m t nu een identifi er i n de programmatek s t op een andere w ijz e v oor , dan gaan we na o f b ij het k leins te bloc k waar in deze identifi er v oor k wam een entiteit behoort d ie door een gelijk luidende identifi er w or dt voorgesteld. Z o j a , dan hebben we de gezochte ent it eit , de identifi er w o r d t loc aal genoemd; z o nee, dan i s de identifi er niet- loc aal. W e gaan dan na o f een gelijk namige entiteit behoor t b i j h e t k leins te bloc k dat d i t bloc k omv at, en v erv olgens v oor het bloc k dat dat bloc k weer omv at, en we z etten d i t proc es v oor t totdat we de gezochte e n t it e it gevonden hebben. W e zoeken dus v an binnen u it naar buiten toe. Lev er t d i t proc es n ie t een entiteit op, dan k an de identifi er nog een s tandaardfunc tie o f standaardprocedure z ijn . I s ook d it niet het gev al dan i s het pr ogr amma fout. H e t is eveneens fout als b i j een bloc k twee gelijk namige entiteiten zouden behoren. Met d i t proc es i s het a lt ijd mogelijk s tatis c h ( d. w. z, z onder het pr ogr amma u it te v oeren) v as t t e s tellen welk e ent it eit een identifi er v oor s telt. V o o r een unsigned integer d ie een label v oor s telt (RR 3 . 5 . 1 , 3. 5. 5) kunnen we op analoge w ijz e v as ts tellen welk e label bedoeld wor dt. H e t i s helaas n ie t a lt ijd mogelijk s tatis c h te bepalen o f een uns igned integer een label dan w el een ar ithmetic ex pres s ion v oor s telt. I n het Xl- ALG O L- s y s teem ( d. w. z. M C - I I s y s teem v oor tek s ttes ten en M C - I systeem v oor uitv oer en) i s de unsigned integer a ls label n ie t toegestaan. Opmerking 1 . I n het offi c iele ALG O L i s dez e hele k wes tie nog iets ingewik k elder (vgl. h e t "additional bloc k " u i t RR 4 . 7 . 3 . 1 ) . I n de pr ak t ijk is d i t v an geen belang. Opmerking 2. I n het Xl- ALG O L- s y s teem w or dt i n een f o r s tatememt de s tatement achter do a lt ijd a ls een bloc k beschouwd. pca-3 5 H e t proc edure-mec hanis me ( RR 4 . 7 , 5.4) Een proc edure s tatement wor dt uitgev oerd, en de waarde v an een func tion des ignator w or dt bepaald, door de bijbehorende proc edure H a a n ac t tual e par r o e p e , Iedere ameter b i j nd e" aanroep v an de pr oc edur e k omt ov ereen met een for mal par ameter b i j de proc edure dec lar ation. A a n de f o r ma l par ameter s d ie i n de v alue par t wor den opgesomd, w or dt b i j aanroep de waar de toegekend die de overeenkomstige ac tual par ameter op dat moment heeft o f b lijk t t e hebben„ A l le andere f o r m a l par ameter s wor den ov er al w aar z e ( d . w . z . h u n identifi er s ) i n de procedure body v oork omen, vervangen door de tek s t v an de overeenkomstige ac tual parameter. I s dez e geen v ar iable ( RR 3.1) m a a r w el een ex press ion ( RR 3) dan wordt h i j eer s t tus s en r onde haak jes H (De " aldus e n v er k" r egen ) " proc edure body moet een c or r ec te s tatement z ijn ; deze wor dt g e p l a a t s t . uitgevoerd en v erv olgens w or dt het pr ogr amma v oortgez et. I n gev al w e m e t een function proc edure t e doen hebben, moet tijdens de uitv oer ing een o f meer malen ex plic iet een waarde worden toegekend aan de pr oc edur e identifi er . D e laats te aldus toegekende waarde w or dt desgewenst gebr uik t o m de berek ening v an de e x pression waar in de func tion des ignator ( de "aanr oep" v an de func tie proc edure) voorkwam, v oor t t e z etten. ( N . B. H e t i s n ie t ju is t , binnen de proc edure body de procedure identifi er i n een ex pres s ion t e gebruik en wanneer men daar me delaats t toegekende waarde w i l aanduiden. E e n der gelijk e v er melding duidt a lt ijd op een ex plic iete rec us iev e aanroep v an de proc edure. Het i s ook toegestaan om een (func tion-) pr oc edur e door een goto s tatement t e v erlaten, en eveneens o m een func tion-proc edure b i j w ijz e v an pr oc edur e s t atement aan t e r oepen. I n dez e twee gev allen i s de toegekende waar de aan de procedure identifi er v a n geen belang; i n het eer s te gev al hoeft een der gelijk e t o e kenning z elfs i n het geheel nog niet geschied t e z ijn . Het gev olg v an bovengenoemd vervangingsproces k an z ijn dat een identifi er w o r d t binnengevoerd i n een s tuk pr ogr amma waar een gelijk luidende identifi er r eeds een ander e ent it eit v oor s telt. Dit is v olk omen c or r ec t; de door het vervangingsproces binnengevoerde identifi er b lijf t dez elfde ent it eit v oor s tellen als h i j blijk ens het i n par agr aaf 3 beschreven zoekproces r eeds v oor s telde als ac tual par ameter . M e n k an d i t ook als v olgt i n zien: Wanneer i n een c or r ec t ALG O L- pr ogr amma s y s tematis c h ieder e k eer dat een identifi er v oor k omt d ie een bepaalde ent it eit v oor s telt, dez e identifi er w o r d t v er v angen door een passend gekozen andere identifi er ( d ie n ie t r eeds i n deze c ontex t een andere ent it eit v oor s telt) dan v er ander t de betek enis v an het ALG O L- pr ogr amma niet. Hieron, pea-4 Hieronder v olgt een l i j s t mogelijk e ac tual par ameter s , en de ju is t e s pec ifi c atie (indien aanwezig) v an de f o r m a l par ameter . ( N . B . I n leder v an de genoemde gev allen mag de ac tual par ameter z e lf een f o r ma l par ameter z ijn (het z gn. doorgev en van de f o r m a l par ameter ) . D i t i s uiter aar d alleen mo g e lijk v oor pr oc edur e- aanr oepen binnen een proc edure body). actual par ameter : s p e c i fi e r : ar ithmetic ex pres s ion Boolean ex pres s ion s tring s i n t e g e r V e r m e l d i n g in value par t toegestaan? of r eal j B o o l e a n t r i designational ex pres s ion n switch identifi er s w i array identifi er a r r j g n l a b e l t c a = = = a a e j e a , (In het Xl- ALG O L- s y s teem niet) n e e h y n e e voor integer o f r e a l a r r a y ook iat_s _911 ar r ay o f r e a l E a t voor Boolean a r r a y ook B o o l e a n ar r ay j procedure ident ifi er p r o c e d u r e n j a a e voor integer of r eal procedure ook integer proc edure o f r e a l pr oc edur e e n e e voor Boolean pr oc edur e ook B o o l e a n proc edure n e e Opmerking. U i t R R 4 . 7 . 5 . 4 z ou men kunnen opmaken dat indien i n een d e r laats te twee gev allen de ac tual par ameter de proc edure identifi er v a n een func tie- pr oc edure z onder par ameter s i s , v er melding i n de v alue p a r t v an de f o r ma l par ameter wel i s toegestaan. I n d it gev al i s de s pec ifi er int eger proc edure, r e a l proc edure of Boolean proc edure ec hter z eer onlogis c h: de ac tual par ameter i s een ex pres s ion en k an het bes te integer , r e a l r es p. Boolean ges pec ifi c eerd wor den, cm= ummt . n. . . . mmn N. B. M e t een f o r ma l par ameter die a ls een s w it c h , (type) a r r a y o f ( t y p e ) procedure i s ges pec ifi c eerd, k an alleen een ac tual par ameter c orres ponderen die u i t een enk ele identifi er bes taat. B ij a lle f o r m a l par ameter s d ie i n de v alue par t wor den opgesomd i s v olledige specificatie v er eis t. V o o r het Xl- ALG O L- s y s teem i s v oor ieder e par ameter enige specificatie v er plic ht. Wanneer ' c a l l b y name" w a n n e e r " c a l l by v alue"? Uit de ops omming i n par agr aaf 5 b lijk t dat b i j enk ele s pec ifi c aties d e " c a ll by v alue", d.y /. z. d e v er melding i n de v alue par t, i s toegestaan. In dez e par agr aaf gaan we er v an u it dat we m e t een par ameter t e mak en hebben waar bij inder daad c a ll by v alue i s toegestaan. I n dat gev al i s de s pec ifi c atie pea-5 zo v olledig mogelijk : integer , r e a l , Boolean, integer E L I E , r e a arl r ayE o fmlabel. V o o r s ommige toepassingen is v olledige s pec ifi c atie n ie t Boolean . wens elijk ; c a ll b y v alue i s dan n ie t mogelijk . . Wat betek ent nu c a ll by v alue i n ter men v an uitv oer ing v an het pr ogr amma? In d i t gev al wor den b i j de aanroep v an de proc edure de f o r m a l par ameter s a ls het w ar e gedec lar eer d v ooraan i n de proc edure body ( ar r ay s m e t dez elfde bound p a ir waarden, a ls de overeenkomstige ac tuele a r r a y had b i j z i j n dec lar atie) . Hier in wor dt de waar de geeopieerd v an de ac tual par ameter . Wanneer w e nu de waarde v an de f o r m a l par ameter v eranderen, w or dt alleen deze " eopie" v er ander d; de ac tual par ameter w or dt niet beinv loed. Ev enz o, wanner de waarde v an de a c tual par ameter tijdens uitv oer ing v an de proc edure v er ander t, b l i j f t de waarde v an de f o r m a l par ameter hetz elfde. We kunnen nu de v olgende gev allen onderscheiden: De f o r m a l par ameter i s Integer , r e a l o f Boolean ges pec ifi c eerd e n b i j u i t voering v an de proc edure wor dt aan de f or mal par ameter een waarde toegekend, o f de par ameter i s integer a r r a y , r e a l a m a z of Boolean E a u gespecificeerd e n nu wor dt aan een o f meer v an de elementen een waarde toegekend. Is h e t nu de bedoeling dat de ac tual par ameter hier door v an waarde v er ander t (dat mag i n het gev al in t e g e r , r e a l o f Boolean dus alleen als de ac tual p a r a T. meter een v ar iable is ) , dan gebruik en we c a ll b y name ( d . w . z . w e gebruik en c all by v alue niet) . E e n der gelijk e f o r ma l par ameter kunnen we "output- par ameter " noemen. Is een der gelijk e waardev erandering daarentegen niet gewenst, o f z elfs ongeoor loofd ( nl. a l s d e ac tual par ameter w e l een ex pres s ion maar geen v ar iable is ) dan moeten w e c a ll by v alue gebruik en. Tengevolge v an s ide effec ts oftewel neveneffecten v an de pr oc edur e k an de waarde v an de ac tual par ameter v eranderen. D i t neveneffect i s dan een v e r andering v an de waar de v an een niet- loc ale v ar iable tijdens uitv oer ing v an de procedure body . I s het de bedoeling dat dan ook de f o r m a l par ameter v an waarde v er ander t, dan gebruik en we c a ll by name, anders c a ll b y v alue. Een z eer belangr ijk gev al i s Jensen's dev ic e geheten. H i e r b i j v indt het nev eneffect plaats door middel v an een output- par ameter . Daar mee c orres pondeert dan een ac tuele v ar iable d ie i n de uitdr uk k ing v oor een andere ac tual par ameter v oor k omt. D ez e laats te i s n ie t v alue ges pec ifi c eerd; door i n de proc edure een waarde toe t e kennen aan de outputparameter v er ander t de waarde v an deze parameter mee. I s de ac tual par ameter een s ubs c ripted v ar iable dan k an zelfs z ijn " ident it eit " v eranderen. - D e bepaling v an de waarde v an de ac tual par ameter k an neveneffecten met zich meebrengen ( de ac tual par ameter i s dan de func tion des ignator o f bev at de func tion des ignator v an een func tion-proc edure me t neveneffecten). Z ijn deze effec ten gewenst, dan c a ll by name, anders c a ll b y v alue. — D e bepaling v an de waarde v an de ac tual par ameter v er gt een niet v er waar loos bare r ek entijd, ma a r v eroorz aak t geen neveneffecten. U i t overwegingen van effi c ienc y k an c a ll by v alue op z ijn plaats z ijn . - D e f o r m a l par ameter i s integer o f integer a r r a y ges pec ifi c eerd, e n het i s v oor de ju is t e wer k ing v an de proc edure noodz ak elijk dat de par ameter v an ty pe integer is . Wanneer nu niet met r edelijk e z ek er heid ges teld k an worden dat de corresponderende ac tual par ameter inderdaad het ty pe integer z al hebben dan zal c a ll by v alue e r v oor z or gen dat b i j de aanroep tijdens het c opier en v an de waarde v an de ac tual par ameter z onodig een automatis c he ov ergang v an r e a l naar integer plaats v indt. O ok in het omgekeerde gev al (ty pe r e a l v er eis t v oor c orrec te wer k ing, ac tual par ameter mogelijk integer ) k an m e t v r uc ht c all b y v alue gebr uik t wor den. Verder z i j nog v er meld dat we b i j ar r ay s c a ll by v alue s lec hts b r u i k e n als daar een goede r eden v oor is , aangezien dan t egelijk er t ijd de waar v a n de actuele a r r a y en de waar de v an de ( mogelijk v ers c hillende) c opie daa v an i n de for mele a r r a y opgeslagen moeten worden. D i t z ou (z onder goede reden) een ov er bodige belas ting v an de geheugenruimte v an de uitv oerende c omputer betekenen. Daarentegen geldt v oor de andere par ameter s ( v oor label i n minder e mate) w a a r voor c a ll by v alue i s toegestaan, dat w e c a ll by name s lec hts gebr uik en als e r een goede r eden v oor bes taat. I n de gev allen waar c a ll b y v alue en c a ll b y name v er s c hillende r es ultaten zouden oplev eren, i s nat uur lijk s lec hts een alter natief i n ov ereens temming m e t onze bedoeling; maar ook i n gev allen waar het r e s u ltaat hetz elfde b l i j f t k an c a ll by v alue een aanz ienlijk e bes paring i n de r ek entijd geven. pca- 7 Voorbeelden Ga i n de v olgende v oorbeelde na om welk e reden(en) c a ll b y v alue o f c a ll b y name i s gekozen. procedure PO LtoCART ( x , y , r , fi ) ; v alue r , fl ; r e a l x , y , r , fl ; comment PO LtoCART tr ans for meer t de poolc oordinaten ( r , fi ) t o t c artes iaans e coordinaten y ) ; 1 2Aanroep b ijv . P O L t o CART ( X[k ], IT N], mod 4. (1 / k ), a r g / k ) . 9 procedure TRANSFORM ( i, n , V i) ; v alue n ; Integer i , n ; r e a l V i ; . 0 I : = 1 E l m 1 u n t i l n do Vi: = 1 - 1 / V i for 2 Aanroep b ijv . T R A N S F O R M ( j, m , C [ j, j1) x : = procedure V U L ( A , m n , input) ; v alue m , n ; integer m , n ; r e a l input; ar r ay A ; rbegin i n t e g e r i , j ; x for l : = 1 1 u n t il m do f o r j: = 1 E t a , 1 u n t il n do AR , j j : = input c end o sAanroep b ijv . V U L ( A, 1 , r ead, r ead) o f V U L ( A, p , q , 1 / ( p + q)) (Het laats te gev al k an v oor gr ote p en c i effi c ienter : f begin r e a l s o m l ; i s oml:= 1 / + q) ; VU L ( A, p , sci, s o m l) ) end ; y Dit z ou ov erbodig z ijn als " input " v alue ges pec ifi c eerd was . G a na hoe dan : echter de betek enis v an V U L ( A, 1 , r ead, read) v olk omen v er ander t -aangenomen = dat r r ead de func tion des ignator i s v an een func tie-proc edure d ie de waarde xaanneemt v an " h e t volgende getal op de getalband" e n die a ls for midabel nev ens effect het opschuiven v an de band heef t i , n r(eal pr oc edur e DETSOL2 ( A, b , n) ; v alue A ; integer n ; r e a l a r r a y A , b ; f comment DETSOL2:= deter minant v an ar r ay A l l : n , 1 : l a en a r r a y Ica_ : n i l wordt vervangen door de oplos s ing x v an het lin e a ir e s tels el A x x = b ; ) DETSOL2:= DET SO L ( A, b , n) e n Wanneer men ov er een proc edure DETSO L bes c hik t d ie hetz elfde pr es teer t d als i n het c omment v an DETSOL2 beschreven s taat, m a a r d ie z ijn tus s enr es ultaten i n de ar r ay A bewaar t, dan k an men beter DETSOL2 gebr uik en als de actual par ameter v oor A ongerept moet blijv en, o f als dez e integer a r r a y gedeclareerd is . pea- 8 Jensen' d e v i c e Een v oor beeld v an het gebr uik van Jensen's dev ic e is : r eal pr oc edur e P I ( k , a , b , ik ) ; v alue a , b ; ! E t m s . . k , r eal a ,p i ; b ; r e a l lamia i k 1 ); 1 for k := a a t a := .Ph= 1 pi 1 u n t i l end ; b b d o p i uitgedr : Mathematisch uk t: P I = I 1 f k = ka p B i j de aanroep: P I ( i, 1 , q , 1 + p / i) lu id t de proc edure body na het inv ullen v an i de waar de x v an de ac tual par ameter s " 1 " e n " q " , e n de tek s t v an de ac tual f parameters " 1" e n " 1 + p / I " : k t a in _ i n t e g e r a , b ; r e a l p i ; ; a:= 1 ; b:= q ; pi:= 1.; — i: = a Et22 1 u n t il b do pi:= p i x ( 1 + p / for PI:= p i end to11.1.32.1211 Als de f or mele " k " v er ander t, v er ander t de ac tuele " I " , daar door de ac tuele "1 + p / i " e n daar mee de for mele " f k " . Sc hematis c h v oorges teld: Ga na 1. P I 2. 9 3. o , [ I D P I f o r m e e actueel niv eau . . > 1 + p l n i n de v olgende gev allen wor dt berekend: wat i ( i, 1 , q , 1 + p / v ( I, e 1 ( n, a 1 , n , n) e uA PI r d A I , / i pea- 9 Recursieve proc edures ( RR 5. 4. 4) Het i s uiter aar d toegestaan i n een proc edure body een andere proc edure aan t e roepen. H e t i s i n ALG O L eveneens toegestaan binnen de body v an een proc edure deze proc edure z e lf aan t e roepen. E e n proc edure d ie z ic hz elf aanroept heet een rec urs iev e pr oc edur e. O ok een niet r ec ur s ief geschreven proc edure k an r ec ur s ief gebruik t wor den, n l . wanneer b i j een proc edure de bepaling v an de waarde v an een actual par ameter d ie c orres pondeert me t een c all- by - name f o r m a l par ameter , een aanroep v an de pr oc edur e ten gevolge heeft, z oals i n P I ( i, 1 9 In v3 r i j v eel implementaties i s het r ec ur s ief gebr uik v an proc edures n ie t mogelijk . 9 P I ( j , 1 Zowel i n het X l - a ls i n het X8-ALG O L-s y s teem i s het gebr uik v an r ec ur s iev e p r o 9 3 cedures aan es t r ic 9 M geen E r1 , t ie gebonden. Een bekend v oor beeld v an een r ec ur s iev e proc edure i s dat v an de func tie-proc edure voor het berekenen v an de fac ulteit v an een getal: integer proc edure fac ( n » v alue n ; integer n ; fac:= i f n = 0 then 1 els e fac ( n - 1) x n De waar de v an fae (2) w or dt ongeveer a ls v olgt berekend: fae ( 2) n:= 2 fac:= i f n = 0 then 1 els e fac ( n - 1) x n = i f 2 = 0 then 1 els e fac ( n - 1) x n = i f f a l s e then 1 els e fac ( n - 1) x n fae ( n - 1) x n n 9 fac:= : = = n = 1 = 2 1 = 1 i f n ' = 0 then 1 els e fac ( n - 1) x n ' C M .= = C M =- 2 S : 1 = C = 1 3 =1 :M .S E = i f f a l s e t h e n 1 els e fac ( n' - 1) x n ' fae ( n ' - 1) x n ' n" :=n'- 1=1- 1=0 fac:= i f n " = 0 then 1 els e fac ( n" - 1) x n " = i f 0 = 0 then 1 els e fac ( n" - 1) x n ” = i f t r u e t h e n 1 els e fac ( n" - 1) x n " 01.C=1.MIS CINS S =1 = 1 X n 1 =1 = 1 X 1 = 1 X n = X 2 =2 ' i f 1 = 0 then 1 els e fac ( n' - 1) x n ' pea- 10 Dit i s g e e n g e lu k k ig vo o rb e e ld , i n z o v e r r e d a t h e t g e e n n a vo lg in g v e rd ie n t : 1. o m d a t h e t ze lf d e w e r k s n e l l e r e n m e t m i n d e r g e h e u g e n g e b ru ik ka n wo rd e n g e daan d o o r e e n n i e t -re c u rs i e v e p ro c e d u re . 2. o m d a t v o o r n b i j v . g r o t e r d a n 1 5 h e t re s u lt a a t v a n f a c (n ) w e l g r o t e r z a l z i j n dan d e g ro o t s t e re p re s e n t e e rb a re in t e g e r, zo d a t d e p ro c e d u re b e t e r a l s e e n re a l p ro c e d u re g e d e cla re e rd ka n wo rd e n . ( V o o r h e t X l - A L G O L - s y s t e e m g e ld t d it b e z wa a r n i e t o md a t d e u i t k o ms t v a n e e n in t e g e r p ro c e d u re , a l s d e ze t e g ro o t i s , d a a r a u t o ma t is c h a l s e e n r e a l w o r d t vo o rg e st e ld ; i n h e t X 8 - A L G O L syste e m e c h t e r i s f a c (1 2 ) = 479001600 g r o t e r d a n d e g ro o t s t e wa a rd e d i e a a n een in t e g e r v a ri a b l e o f p ro ce d u re i d e n t i fi e r k a n wo rd e n toegekend, n l. 6 7 1 0 8 8 6 3 0 wa a rd o o r d e u it v o e rin g va n h e t p r o g r a m m a v o o rt i j d i g w o rd t b e e in d ig d ) 3. o m d a t d e u it v o e rin g va n d e p ro c e d u re n o o it z a l e in d ig e n in d ie n h e t a rg u me n t d o o r o n vo o rzie n e o msta n d ig h e d e n n e g a tie f i s . B e t e r i s b i j v . t e s c h ri j v e n : i f n < 0 t h e n g a l a A L A R M ; f a c: = Voorbeelden v a n h e t ve ra n t wo o rd g e b ru ik va n re c u rs i e v e p ro ce d u re s z i j n me e s t a l in g e wikke ld e n lig g e n d o o rg a a n s n i e t o p n u me ri e k t e r r e i n . ( E e n g o e d vo o rb e e ld is e c h t e r d e lo c a le p ro ce d u re I i n d e p ro c e d u re Q A D, z i e A P 2 5 1 ) Een n i e t -n u me ri e k e to e p a ssin g : Ge vra a g d w o r d t we lk e ve ld e n v a n e e n sch a a kb o rd i n m i n d e r d a n b i j v . 4 ze t t e n b e ze t kunnen wo rd e n d o o r e e n p a a rd d a t o p h e t v e ld a l s t a a t . We d e n ke n o n s e e n i a t e m .de m y i e v e p ro c e d u re : re rc ul rs . V E L D p [ ro1ce d u re P A A R : D ( x , y , n ) ; va lu e x , y , n ; in t e g e r x , y , n ; i8f x < 1 , t h e n e ls e i f x > 8 t h e n e ls e 1 if y < 1 t— h e e l s—e i— f y > 8 t h e n e ls e : 8i f V E L D [ x ,J y < n t h e n g din t e eg e r d c x , ld y ; 122 e a r e e r d , . V E L D[ x , y l : = n ; e g ia f o r d x:= - 2 , - 1 , 1 , 2 d o n v e f o r dr y: = i vf a b s (d x ) = 1 t h e n 2 e l s e 1 , - d y d o o l g e P A A RD ( x + cbc, y + d y , n - 1 ) n s end I.S S IE MGE 1.2.0 1=Mrg• 412• 10arB M t c o l = m 0 1 . 1 0 5 3 n u m m i 0 = • tE m l.LE =E 21.E 1 v— .1=K gams A l l e v e ld e n va n V E L D mo e t e n wo rd e n g e vu ld m e t d e wa a rd e O. Do o r d e a a n ro e p : P A A R D (1 , 1 , 4 ) w o r d t d a n e e n p o s it ie v e in t e g e r in g e vu ld o p d i e velden, d i e b in n e n 4 ze t t e n v a n u it v e l d [ 1 , 11, d . w . z . a l , d o o r e e n p a a rd b e r e i k baar zijn . , pca- 11 Opgave. V o e r de s tatement PAARD ( 1, 8 , 2) u i t m e t een s c hema als boven i s opgesteld v oor de berek ening v an fac ( 2) . Opmerking. V o o r h e t Xl- ALG O L- s y s teem duur t de uitv oer ing v an de s tatement PAARD ( 1 9 1 , v er gt de aanroep 69 seconden, dat is dus r u i m 3 x z ov eel r ek entijd. W e worden 4 ) z ien dus hoez eer effi c ienc y -ov erwegingen h ie r c a n by v alue gebieden. 2 0 s e c o nr ecdur s iev e proc edure gebruik en w e alleen wanneer het for muler en v an een Een e n . niet- r ec ur s iev e oplos s ing z eer ingewik k eld wor dt. B i j het s c hr ijv en v an een r e c u r W sieve a nproc edure i s het gewenst dat men goed nagaat o f e r aan de r ec ur s ie een eind k n eomt. e r x , 10 y Sw it c h e s en des ignational expressions ( RR 3 . 5 9e 4 . 3 . 5 , 5 . 3 ) n Door middel v an een s witc h des ignator k an men, aan de hand v an een s ubs c r ipt n expression, u i t een l i j s t des ignational expressions e r een k iez en. n Als gedec lar eer d is : i sewitc h S:= L , i f p then L els e A , S[a] t dan heeft de s tatement " a l l S[nl" v o o r waarden v an de integer v ar iable n binnen i het ber eik 1 < n < 3 dez elfde betekenis als : n 0d e .Voor waarden v an n buiten dat ber eik is de waarde v an de s witc h des ignator Sa ll 1v ongedefinieerd. Volgens R R 4 . 3 . 5 moet dan de go t o s tatement equiv alent z ijn 9a met een dummy s tatement, d . w . z . h e t pr ogr amma moet ac hter de go t o s tatement _l iu worden v oortgez et, als of e r nooit geprobeerd was de waarde v an een s witc h des ige fnator t e bepalen. Wanneer we bedenken dat de n i n S[n] i . p . v . e e n v ar iable ook np best de func tion des ignator z ou kunnen z ijn v an een func tie-proc edure m e t dec la=a r1ratie: t tinteger aroc edure n ; hv begin PR1NTTEXT ( O l t mag niet op papier v e r s c h ijn e 4 ) : n:= 0 end ee waar in PR1NTTEXT een code-procedure i s d ie de a ls ar gument gegeven s t r ing u i t nr Lm int ( en "4:" e n " $ " d e har dwar e repres entation v oor s t r in g quotes z ijn ) , pr e e dan z ien we dat het v olledig implementer en v an dez e r egel t o t gr ote c omplic aties ll kan leiden. Ve r m o e d e lijk is d i t dan ook i n geen enk ele implementatie v an ALG O L sd ve olbrac ht: V o o r h e t X l - en het X8-ALG O L-s y s teem i s v er eis t dat de waarde v an ieen s witc h des ignator, wanneer dez e bepaald wor dt, ook gedefi nieerd i s . f n = 2 t h pea- 12 Een eenvoudige ma a r nuttige toepassing v an het s witc h-mec hanis me is : Ez . g 2 1i procedure t ( letter ) ; s tr ing le t t e r ; . n begin PRINT T EXT ( letter ) ; ga_t2 EXIT end; _ l si _ w Ee i i .A: . . t ( 4 4 ) ; B: t k b ) ; C : t 4 4 ) ; D : t ( < r t .d S ) ; t ( 4 4 ) ; G: t ( k E : e c L o F : t g > t( ) ;4m$) M: ; N: t ( L h i( A i S ) ; H : 1 e A f 4t ) (;t s i )0; T :: t ( 4 0 ) ; U : t (4:11>); V: t S: W : t (4w$); X : t ( 4 4 ) ; ttk t L Y: Z: t ( 4 ) ; (( t04 (4:y$); 4 ) ; t F < EXIT : P 4 ) : e A 1 ; end tV r B (Ik 4 : P (DeEaanroep "Letter ( 7) " • : ' ) ; kw o 2t T r d4 a< 1 l V s 7 > 24i then EXI T els e ALFABETE71 Eat 2 t i f 7 Q )v : o 6 l g t = A L F(: A B E T [ 7 ] ;u = i t t4 g e v o e vr Ad :th 1 ( e a , = G: t e (44) > 1 S l B n ) a L o )E PRINTTEXT ; u , ; . E X I T R Op e Cpapier X v er s c hijnt dus de le t t e r " g " . J: e n d k , I : t ; D T De ev aluatie v an een s witc h des ignator, z e lf een des ignational ex pres s ion, le v e r t t( a , e ( een v an een s witc h lis t „ dus w eer een des ignational ex pres s ion, d ie 4 l E element l < 4 t , behalve s een label ook een c onditionele des ignational ex pres s ion o f weer een s witc h )4 ; s e F designator k an z ijn . I n de laats te twee gev allen moet de ev aluatie worden v oor t, a , A gezet 1 een label wor dt gevonden, d ie dan de waar de v an de oor s pr onk elijk e o G totdat L , switch des ignator i s . H e t volgende v oorbeeld toont aan hoe deze v oortgez ette ev ak , F ) ; aHt e het A es s entiele deel v an een pr ogr amma k an uitmak en. lu ; B i s een r eek s v an ALG O L-s y mbolen, waaraan een code i s toegekend , Gegeven K E I volgens:Td e volgende tabel: , t code: J s[y m b o o l : ( k 9 1 9 4 K 2 +]) ; , ; 3 L L 4 , : M 0 5 t 1 2 3 4 5 6 7 8 9 , ( n nu een proc edure s c hr ijv en d ie c ontr oleer t o f de r eek s ALG O L- s y mWe w ille N t bolen een r i j c or r ec te ALG O L- getallen is , w aar bij d e k omma als s c heider tus s en , l O getallen k an dienen. twee i , ) P ; , -, E l l a G pea- 13 Correc t i s b i j v . : +2-3 ,+ io Inc orrec t daarentegen: +2 - 0 91 0 We v er onder s tellen dat i n0een i n t , 9 1 : C O D E v a n S Y M B O O L [ 1 : n ] de codes -. 0 van de achtereenvolgende 0ALG O L- s y mbolen s taan. 0 7 ,9 : De pr oc edur e dec lar atie luidt 5+ Boolean r o e e d u r e Getalreeks (k, lengte, SYMB); value lengte; i l l t m s - k, lengrte, SYMB; 33 0 t / m 9; comment s y mbool+ 1 :=0 fout f o u t , Punt [s ], Tien[s]9 Integer [s fout ; -switch Tek en 7 , Punt[s ] Tien [s I, integer [s I , einde; . Integer [s ], Teken[s] 9fout 9 fout , fout fout , F r actie [s 1 fout ; + 9 F r ac tie fout Tien[s]0 F r ac tie[s ], einde; Integer[s] + 9 T ie n fout Tekenexp[s], fout , fout E x p [ s ] 3 fout T e k e fout Tekenexp:= fout f o u t fout - E x p [ s ] , fout ; n [ s ] Ex p i n t e g e r [ s ] , Teken[s] , fout 0einde; , fout , Ex p[s ] switch Integer switch Punt switch switch switch switch latmez_ procedure s ; 12 .Getalreeks:= t r u e ; k := 0 ; gs_f = 1 l r ie ne kt se: = g efals r [e;1 ] ; fout: G e9t9_ ta 2 einde: Ln end k : De aanr oep is nu: G e t a lr e e k s ( i n , CODEvanSYMBOOL[i]) = k Opgave: + Vo e r de pr oc edur e u it v oor de bovenstaande symboolreeksen. 1 enis k an aan de waarde v an de output- par ameter i n a afl oop wor den Welke betek ; toegekend, indien de waarde v an de func tion des ignator fals e is ? s : = i f k > l e n g t e t h e n 6 e l s e pca- 14 11 B o o l e a n e r e s s io n s en l o •sche v ar iabelen ( RR 3.4) Een Boolean ex pres s ion i s alles w at i n een i f c laus e tus s en i f en then mag s taan. J uis t als v an een ar ithmetic ex pres s ion de ev aluatie w or dt v oortgez et totdat een numeriek e waarde i s gevonden, en de ev aluatie v an een des ignational ex pres s ion uiteindelijk een label moet lev er en, z o wor dt ook een Boolean ex pres s ion geev alueer d totdat een der logis c he waarden tr ue o f fals e i s v er k r egen. D e waarde b ijv . van de Boolean ex pres s ion " 2 < 0 " i s fals e d i e v an " 3 x 3 + 4 x 4 = 5 x 5 " is t r u e . Met behulp v an de ar ithmetic oper ator s + , - , x / , : e n /IÊ» k an worden aangegeven hoe u i t een o f twee getallen een der de getal moet worden berek end, en de r elational operators < , < , = , > , > en + gev en aan hoe b i j twee getallen een logis c he waarde moet wor den berekend. O p s oor tgelijk e w ijz e i s het mogelijk b i j een o f twee l o gische waarden een derde logis c he waar de t e laten berekenen, n l. m e t behulp v an een d e r logic al oper ator s 1 , A , V , 1 en = , e n w el v olgens de r egels d ie i n RR 3 . 4 . 5 gegeven worden. Ev enals v oor de ar ithmetic al oper ator s gelden v oor de lo g ic a l oper ator s pr ior iteits r egels 0 D e v olgor de is : 1 , A , V , We gev en als v oor beeld de ev aluatie v an " t r u e 1 1 3 x 3 = 9 V 1 > 1 " true 1-19 = 9 V 1 > 1 true tr ue V 1 > 1 — 1 1— true 1 fals e V 1 > 1 true 1 fals e V tr ue true 1 1E12R true Opgave. G a m e t behulp v an R R 3 . 3 . 1 e n 3 . 4 . 7 na, dat nooit twee ar ithmetic al operators naas t elk aar mogen s taan, ma a r dat w e l de logic al oper ator 1 door ieder e andere logic al oper ator mag worden voorafgegaan. Een berekende logis c he waarde k an onthouden wor den door toek enning aan een logis c he v ar iabele, d ie dan Boolean gedec lareerd moet z ijn . Ev enz o z ijn e r Boolean ar r ay en Boolean proc edure. Het v olgende i s een v oorbeeld v an het gebr uik v an een Boolean ar r ay . I n de ar r ay PR I EM w or dt m e t de " z eef v an Eratos thenes " o p de k - de plaats de waar de ingev uld v an de uits pr aak " k is een pr iemgetal" . pca- 15 begin i n t e g e r k , p ; Boolean ar r ay PRIEMI1 : 1600]; PRIEM[1]:= fals e; for k := 2 E l m 1 u n t il 1600 d o PRIEM[k ]:= t r ue; for k : = 2 2122 1 u n t il 40 d o begin i f PRIEM[k ] then for p:= k x k ,§_tfp . end; _ k u n t i l Rest v an het pr ogr amma 1 6 0 0 end d o P R I E M expressions v oor s tellen, dan kunnen we i . p . v . 1 A evengoed Als A en B Boolean [ p ] : = s c hrijv en: i f A then f falsae els e t r u e , e n v er der ( mit s de ev aluatie v an B geen neveneffecten v eroorz aak l s t): e e i.p.v . A A B i f A then B els e fals 1 .0 0 .2 .1 .1 0 tE I S C M = K M to3 0 .0 1 2 .1 1 M M E M I Z I P E N I E M U ntr E IMME IZIK O IK EMME) t r W s Z n a l a r a l M O = M E M O R M E l t . .1.• 0221..1.=0 i f A then ue els — tr— —e B i . p . v . A V B i f A then ue i . p . v . A — B els — e t r— 1Indien B de ber ek ening van B v eel t i j d v er eis t, k an door een der gelijk e s c hr ijfw ijz e soms een bes paring i n de r ek entijd v erk regen worden. Be la n g r ijk e r is , dat het voor een bepaalde waar de v an A ongewenst k an z ijn dat B geev alueerd wor dt. Werken we bijv oor beeld met een implementatie waarv an de ar it met iek b i j deling door 0 een n ie t gedefi nieerd r es ultaat lev er t, dan z etten we i . p . v . " a / b < eps 1" w ellic ht lie v e r iet s a ls " b + 0 A a / b < eps 1". Wanneer deling door 0 z elfs a ls een f out beschouwd wor dt, dan moeten we hier v oor w e l s c hr ijv en: " i f b = 0 then — fals —e els —e a / b < eps 1". own ( RR 5 5 . 2 . 5 ) Als tijdens de uitv oer ing v an een pr ogr amma een bloc k wor dt binnengegaan, z ijn de waarden v an de daar gedec lareerde s imple v ar iables en ar r ay s nog ongedefi nieerd. D it geldt ook indien het bloc k reeds eer der i s door lopen en dez e grrootheden toen wel een waarde hebben gekregen. Beginnen hun dec lar aties ec hter me t het s y mbool own, dan b l i j f t hun waarde behouden. V o o r s imp le v ar iables en ar r ay s waar v an de bound p a ir ex pres s ies constanten z ijn , k an men d it opvatten als of z i j i n het buitens te bloc k gedec lareerd z ijn (afgezien v an de mogelijk heid dat b i j het buitens te bloc k reeds een gelijk namige entiteit behoort). I ndien het bloc k w aar bij de own gedec lar eer de s imple v ar iable o f ar r ay behoor t i n een proc edure body s taat, i s het mogel i j k nog andere inter pr etaties aan own t e geven, m e t name a ls het een proc edure betr eft die r ec ur s ief gebr uik t wor dt. pea- 16 In d e zogenaamde dynamische opv atting, waar mee i n de MC- r f- ALG O L- v er taler g e ex perimenteerd is , bes taat v oor ie d e r r ec ur s ie- niv eau een eigen s et own s imple v ariables en ar r ay s . Volgens een andere dynamische inter pr etatie bes taat een d e r gelijk e s et v oor elk e plaats i n het pr ogr m m a waar de proc edure wor dt aangeroepen, als of de pr oc edur e body steeds v oor z o'n proc edure aanroep ges ubs titueerd wor dt (body r eplac ement) . W i j beschouwen h ie r ec hter s lec hts de s tatis c he inter pr etatie, waar bij v an elk e own gr ootheid ten hoogste 1 waar de bekend is . Men k an z ic h afv ragen i n welk e omstandigheden het z inv ol i s een gr ootheid own te dec lareren i . p . v . dez e gewoon i n het buitens te o f althans een omv attend bloc k te dec lareren. Voor s imple v ar iables e n ar r ay s m e t v as te bound p a ir waarden heeft d it alleen z in in een pr oc edur e, n l . v o o r die grootheden waarv an alleen binnen de proc edure de waarde bepaald o f gevraagd wor dt, w aar bij toc h deze waarde v an de ene aanroep tot de ander e behouden moet blijv en: i n d it gev al z ou dec lar atie i n een buitenbloek t ot gevolg hebben dat de proc edure n ie t a ls een z elfs tandige eenheid beschouwd k an w o r den. E e n gr ootheid als wagenstand (hoeveel s y mbolen s taan e r a l op de r egel) e n c as e-defi nitie ( hoofdletter s o f k leine letter s ) i n een proc edure d ie aangeboden s y mbolen omz et i n ponsingen v oor een F lex owr iter band, kunnen daar het bes te own gedec lareerd wor den. W e moeten e r w e l op een o f andere w ijz e v oor z or gen dat d ie grootheden eer der een waarde k r ijg e n dan e r naar hun waarde gev raagd wor dt. Dynamische own ar r ay s , me t v ar iabele bound p a ir waarden dus , kunnen gebr uik t worden om geheugenruimte t e bes paren i n het gev al dat de s ubs c r ipt expressions in pr inc ipe ov er een gr oot ber eik kunnen v ar ier en, t e r w ijl toc h steeds ov er een beperk t ber eik tegelijk de waarden onthouden behoeven te wor den. (BUNT. e e n c y c lis c h magaz ijn o f e e n zogenaamde s tapel) I n het X8- ALG O L- s y s teem z ijn op het ogenb lik own ar r ay s nog niet geimplementeer d. B i j de mees te implementaties , waaronder het Xl- ALG O L- s y s teem, z i j n dynamische own ar r ay s n ie t toegestaan. D i t i s w e l het geval b i j de MC - I I - v er t aler . 13 f o r s tatements ( RR 4.6) In een f o r s tatement moet de s tatement ac hter do worden uitgev oer d met die waarden van d e lopende v ar iabele, d ie door de f o r l i s t elements wor den bepaald. Er z i j n d r ie s oor ten f o r l i s t elements : 1. A r i t h m e t i c ex pres s ion. 2. St e p - u n t il- e le m e n t . I n v eel implementaties w ijk t de wer k ing op onderdelen a f van de w er k ing beschreven i n R R 4.604.2. O m d ie r eden v er mijden we gev allen w aar in b ijv . d e ev aluatie v an de stapwaarde neveneffecten geeft. 3. W h ile - e le m e n t . Deze d r i e mogen door elk aar i n een f o r l i s t gebr uik t worden. pca- 17 Enige v oorbeelden: 1. f o r z := - ar c tan / a) , s in ( z ) , 1 - z it% 2 do p r in t (z) TIE E K .E 3 2. I n v u lle n v an een codetabel: wijz er := for code:= 32, 1 , 2 , 19, 4 , 21, 22, 7 , 8 , 25 do begin V E R T A A L [ c o d e l : = w ijz er : = w ijz e r + 1 ; CODE[wijz er]:= c ode end 3. j moet de getallen 1 t / m n doorlopen m a a r het getal i ( w aar bij 1 < i < n) overslaan. for j: = 1 E l m 1 u n t il i - I , i + 1E t p 2 1 u n t il n do 4, c moet de c ijf e r s 0 t / m 9 c y c lis c h doorlopen, t e beginnen b i j c ijf e r cO. for c := c 0 Et22 . 1 u n t i l 5. O p l o s s i n g v an x = f (x) m e t x 0 a ls begins c hatting, w aar bij I f q x ) I < 10 9 , x:= x 0; 0 . for s 1z2=2 f 2(x) w h ile abs ( z - x ) > - 5 x ohs (z ) do x := z . 1 u n t i l c 0 1 d o M a r .1 .3 0 M M E N . M . S T I N . pca- 18 14 H o e w or dt e e n - k t i _ _ _ o ra n _ 1 _ 1 a ite u vo rd ? m M , O t a M M t Men z ou kunnen denken dat een rek enmac hine b i j de uitv oer ing v an een ALG O La . t g pr ogr amma de i n z ijn geheugen opgeslagen ALG O L- tek s t door loopt, en b i j het r n vinden v an een identifi er s teeds w eer bepaalt welk e entiteit bedoeld w or dt, etc . D it i s n ie t e r g effi c ient: v e e l dat eens e n v oor a l gedaan k an wor den, gebeur t b ij dez e aanpak s teeds opnieuw, hetgeen onnodig v eel t i j d k os t. In d e pr ak tijk gaat men dan ook anders t e wer k : me n gebr uik t een c ompiler o f v er taler , dat w i l zeggen een pr ogr amma dat a ls input een ALG O L- pr ogr amma heeft en als output een pr ogr amma i n de c ode v an de mac hine, het z gn. o b je c t pr ogr amma. D i t objec tpr ogr amma wor dt dan uitgev oer d. Men k an v oor een mac hine v er s c hillende v er taler s c ons trueren: de ene z a l s n e lle r wer k en en min d e r geheugenruimte bes laan, de ander e z a l een effi c ienter objec tprogramma lev er en. Door v er s c hillende v er taler s z a l bijv oor beeld de s tatement " x : = a X b + c / d " v er s c hillend v er taald kunnen worden. I n ALG O L beschreven z ijn dan twee mogelijk e v er talingen er v an ( waar bij ieder e s tatement een machinecode-opdracht is ) : 1, b E g l a r eal F , S i , S2, 53; . F:= a ; Sl: = F ; 2 t a r e aF:=l b ; 52:= F F,; 2 F S F i F:= S i ; F : = F x S23 SJ := F ; ; . : 12 = a; : = F x b; S l : = F; F:= c ; 52:= F ; F : = c; F:= d ; S3:= F ; F : = F / d; F:= S2 ; F : = F / S3; S2:= F ; F : = F + Si; F:= S i ; 1 1 F:= S i ; x := F e n d := F end + S 2 In h e t objec;tpr ogr ar nma z ullen steeds s ter eotiepe opeenvolgingen v an mac hineS i code-opdrachten v oork omen, c orres ponderend m e t een bepaalde "ac tie- eenheid", : bijv oor beeid= het ALG O L- s y mbool " * " . O m nu het objec tpr ogr amma k o r t t e houden, i s het 1nuttig dat de v er taler i n plaats v an z otn opeenv olging een opdrac ht s c hr ijft, d ie1 een (parameterloz e) machinecodeprocedure aanroept, d ie dan bes taat ; x : = F pca- 19 uit de s ter eotiepe opeenvolging v an opdrachten. M e t n azou b sbijv " oor i beeld n d aanroep e A L Gc orres O Lponderen een kunnen v an de ( h ie r i n ALG O L t e k s t beschreven) machinecodeprocedure proc edure ABS; begin F : = S i; i f > 0 then — g2 . 1 2 FL ; L: S I :1 = : end = F v an machinecodeprocedures dat het objec tpr ogr amma c ompleteer t Het ar s enaal ; heet het c omplex . H e t objec tpr ogr amma u it het v oorbeeld k an me t behulp v an een c omplex als v olgt ger ealis eer d worden: 12 . 2g 2 i n t e g e r i ; r e a l F ; r e a l I r end z a S t l : 1 0 0 1 comment c omplex ; procedure ST APEL; begin S[i]:= F ; i: = i + 1 end; a s t s a l m O NTSTAPEL; begin i: = i - 1 ; F : = SR] end; EE2c edur e M U L ; begin O NT ST APEL; F := F x S[ i - S [ i - 11:= F end; pLocedure DrV;122E121:= I - 1; O NTSTAPEL; F:= F / S[i + 1]; STAPEL end; am p A comment objec tpr ogr amma; i: = 1 ; t 12202 Ea . t o 6 , 8 t 6 P A r e F:= a ; ST APEL; D a l D F:= b ; ST APEL; x ; , MUL; b a F:= c ; ST APEL; e , g F:= d ; ST APEL; b i DIV; , n c ADD; O , N O NTSTAPEL; x := F d T end ; S T A P E L ; F : = F pea- 20 De c omplex proc edures z ullen i n het algemeen c orres ponderen me t eenvoudige a c tie-eenheden. Sommige mac hines hebben z odanig aan ALG O L aangepaste opdrac hten, dat eenheden als " M U L " , " D r y " e n " AD D " u i t 1 opdr ac ht bestaan, z odat z e n ie t meer i n het c omplex behoeven t e wor den opgenomen: i n plaats v an de aanroep van d e proc edure z et men dan lie v e r de opdrac ht z elf . Dez e mac hines kunnen een ALG O L- pr ogr amma s neller en me t minder geheugengebruik uitv oer en dan andere mac hines . Z o duur t op de X1 een ALG O L- pr ogr amma 10 t o t 20 ma a l z o lang als een z or gv uldig me t de hand geschreven equiv alent mac hinec odeprogramma. B i j de X8, m e t z i j n meer op ALG O L toeges pits te opdrachten, bedraagt dez e fac tor 2 t o t 3 . Waar om wer k t n u b i j een v er taler het objeetpr ogr amma langz amer dan noodz ak elijk ? In h e t algemeen omdat ook i n de eenvoudigste gev allen r ek ening gehouden wor dt met de groots te c omplex iteit die k an optreden: - - Komt i n een ar ithmetic ex pres s ion een f o r m a l par ameter v oor , dan k an evaluatie daarv an een r ec ur s iev e aanroep v an de proc edure m e t z ic h brengen, maar i n v er r eweg de mees te gev allen z al dat n ie t z o z ijn . - - B ij een f o r s tatement k an tijdens uitv oer ing de lopende v ar iabele v an identiteit veranderen, a l gebeur t dat mees tal niet . — Een go t o s tatement k an buiten het bloc k v oeren, m a a r doet dat v aak niet . De c ompiler geeft dus steeds een algemene v er taling, e n het c omplex bev at de meest algemene r outines . 15 _Ti•ds duur e n l a a t s r u i m t e van het r o r a mma Hoelang uitv oer ing van een ALG O L-programma duur t, en hoev eel r u im t e het p r o gr amma i n z al nemen, hangt s ter k a f v an het gebr uik te v er taler s y s teem. W e z ullen h ie r dus n ie t een v olledige handleiding geven v oor het berek enen v an de benodigde plaats e n t i j d v oor het gehele pr ogr amma. Wel i s h e t nuttig, t e kunnen bepalen v oor k or te s tuk k en ALG O L- pr ogr amma, wat u i t een oogpunt v an effi c ienc y de bes te f or muler ing is . In r u w e benadering k an men de tijds duur r es p. lengt e v an een s tatement schatten door de tijds duur r es p r u imt e v an delimiter s e n identifi er s o p t e tellen. V o o r de X1 e n de X8 bedragen plaats e n r u imt e (De gegevens v oor de X8 z i j n tentatief, uits luitend v oor de v er gelijk ing v er meld) : pca- 21 X1 s y s teem integers 1 .5 ms ec 1 plaats 2 . 5 mms ec 1 plaats 1 msec 3 plaats en 12.5 mms ec 1 plaats .5 ms ec 1 plaats 1 msec 1 plaats 4 0 m m s e c 1 plaats 1 msec 1 plaats 1 9 1 m m s e c 2 plaats en 1 msec 1 plaats 2 plaats en x r eals X8 s y s teem 1 plaats 5 5 mmsec mmsec 1 plaats 1.5 ms ec 1 plaats 2 . 5 mms ec - 1 plaats 2.5 ms ec 1 plaats x, / 1 plaats iN 2 3 plaats en 10 m s e c 3 msec 5 mmsec 1 plaats 6 5 m m s e c Booleans b 2 plaats en :=, A , 1 , > etc 1 plaats 1 msec sul 3 plaats en 3 msec 53 m m s e c [11, 121 5 plaats en 5 msec 53 + 8 6 mms ec [11, 12, 131 7 plaats en 7 msec 53 + 172 mms ec [ i l l .5 ms ec Voor de X1 geldt nog het volgende: - - Het ingaan en v erv olgens w eer v er laten v an een bloc k v er gt 4 ms ec . - - De c ons tr uc tie " f o r — u n t i l d o " neemt 13 geheugenplaatsen in . - - De c ons tr uc tie " i f . . . t h e n . — — else" neemt 3 plaats en i n en v er gt 1 ms ec . - - De f o r s tatement me t een s impele lopende integer v ar iabele, e n c onstanten o f s imple v ar iables a ls beginwaarde, stapgrrootte en eindgrens vergt 7 . 5 ms ec p e r s lag. "g2 J 2 L A B E L " v er gt een verwaarloosbare t ijd en neemt nor maal 1 plaats in. Een la b e l v oor een s tatement neemt geen plaats i n . voorbeeld Loont het de moeite v oor het X1 s y s teem de f o r s tatement u i t t e schrijven? " for 1:= 1 tt,92 1 u n t il 1000 do" v er gt v olgens het bovenstaande 7.5 seconden en 22 plaats en. 11 1: neemt 22 plaats en i n en v er gt 6 . 5 seconden. = ( Bij nauwk eurige meting z ijn de t ijden r es p 7 . 6 e n 5 . 8 seconden). 1 In ; het algemeen loont het n ie t de moeite, v oor z o'n k leine t i j d wins B t de ov er z ic htelijk heid v an het pr ogr amma op t e offer en. B : i pea- 22 • voorbeeld O p een bepaald punt i n het pr ogr amma moet v aak wor den uitgerek end, voor v er s c hillende waarden v an i , j en k : s i + A [ i, j , k l ; 1 + 1 , 5 + 1 + 2 „ 5 + 1 + 7 = 14 ms ec s2;-- s 2 + A[1, j , k l x A [ i , j , k ] 1 4 + 3 + 1 + 7 = 25 ms ec Op de X1 duur t d i t per k eer ongev eer 39 ms ec , Sc hr ijv en we ec hter : a;=! A f t , j , k ] al + a 1 + 1 . 5 + 1 + 2 0 5 + 1 = 7 m s e c 1 + s2 + a x a 7 + 3 + 1 = 11 m s e c 1 0 dan duur 5 t de + berek ening 2805 ms ec . Voor d e 1 X8 z+i j n dez e t ijd e n . 8 2 e n „ 25 ms ec . B lijk b a a r lo o n t het b i j 7 = sommige mac hines i n s ommige gev allen de moeite o m de waar den v an 1 een ar r ay0- element, waar naar enige malen gev raagd z a l wor den, aan een hulpv ariabele . t oe t e kennen. 5 m Opvallend is , dat de X1 n ie t alleen v eel langz amer i s dan de X8 , m a a r dat de s tijden v oor de v er sec hillende X1 oper aties n ie t v eel v an elk aar v er s c hillen, t e r w ijl b i j de X8 wce l degelijk aanmer k elijk v er s c hil i n t i j d is tus s en de operatoren onder ling .B i j de X1 neemt het eigenlijk e r ek enwer k minder t i j d i n bes lag dan de daar v oor v er eis te adminis tr atie. B i j d e X8 i s de adminis tr atie mees tal v eel ger inger ( Bij s ubs c ripted v ar iables , w aar de adminis tr atie v r i j uitgebr eid is , i s de s nelheids v erhouding v an de twee mac hines dan ook duidelijk minder gr oot) , Het X 1 e n het X8 s y s teem v or men h ie r in twee ex tr emen, ander e s y s temen b e vinden z ic h daartus s en, o f niet v e r daarvandaan. U it bovenstaande c ijf e r s b lijk t dat ov er igens equiv alente s c hr ijfw ijz en v aak een v er s c hillende duur v an uitv oer ing hebben, bijv oor beeld " a x a " k an equiv alent z ijn m e t " a /I\ 2" m a a r de t ijd e n hoeven niet g e lijk t e z i j n ( X1 5 ms ec r es p 11 ms ee) . Blijk baar i s het mogelijk , door het Mez en v an een ges c hik te s c hr ijfw ijz e een pr ogr amma enigz ins t e v er s nellen. H oew el v er s c hillende s y s temen duidelijk v ers c hillende eigenschappen hebben, i s h e t toc h mogelijk hier v oor enk ele suggesties t e gev en, d ie een grotendeels algemene geldigheid z ullen hebben. Een gev olg v an d it v er s nellen k an z ijn dat de c ons tr uc tie v an het pr ogr amma minder ov er z ic htelijk wor dt, M e n moet z ic h e r s teeds rekenschap v an geven of d i t v er lips aan elegantie en het ex tr a benodigde denk werk opwegen tegen de t e behalen tijdw ins t. Bes teed dus d e mees te ener gie aan het optimalis er en van d ie s tuk k en pr ogr amma d ie het mees t worden door lopen, bijv oor beeld binnen (geneste) f o r s tatements . pea- 23 st_lamttLe Laat geen wer k dubbel doen„ Wordt naar de waarde v an een bepaald a r r a y element enk ele malen g e vraagd, k en hem dan toe aan een hulpv ar iabele. Hebben enige ex pr es sies s ubex pres s ies gemeen, k en d ie dan toe aan een hulpv ar iabele, Maak b i j proc edure dec lar ation, daar v oor i n aanmer k ing komende p a r a meters v alue. st_ltamtLe Binnen geneste f o r s tatements : r ek en een v an een o f meer lopende v ariabelen afhangend tus s enres ultaat u i t z o gauw dat k an. S t e l de berekening niet u it t o i n de " k er n" v an de f o r s tatements . suggestie B i j de mees te ALG O L s y s temen s taan codeprocedures t e r bes c hik k ing, die aanmer k elijk s neller wer k en dan de corresponderende ALG O L pr oc edures. G ebr uik d ie proc edures dan ook . mgy s lle . enter pr oc es . V a a sjime_slia Maak n ie t onnodig een v aak doorlopen compound s tatement t o t bloc k , k door e r een dec lar atie t e laten plaats v inden. E e n compound s tatement g e e f t binnen een f o r s tatement i s n ie t noodz ak elijk een bloc k . W e l i s de e body v an een proc edure i n de mees te s y s temen een bloc k . S c h r ijf e desnoods een proc edure aanroep i n een v eeldoorlopen tr ajec t u it . n e e n v voorbeeld Berek end moet worden "( ex p (x ) - e x o u Ingewikkelde s tandaardroutines a ls " s in " , " ar c tan" e n " ex p" dur en d (i - x ) ) p / ( e x p erg lang. W e kunnen de uitdr uk k ing her s c hr ijv en t ot g e ( x ) + m e x "1 - p2 / (ex p ( 2( X x )- + 1) " , welk e uitdr uk k ing dr iemaal z o s nel a t) x berekend ) " wor dt. h e voorbeeld Stel, i n het gebr uik te s y s teem hebben we de bes c hik k ing ov er de s tanm daardprocedures SOM en INTEG RAAL, met voor de hand liggende betekenis. a t i s "SOM (1, 1 , n , SOM ( j, 1 , m , INT EG RAAL ( x , x 0, x l , c h SW x P ( j) X Q (1, j ) x R (1, j , x ) , toler antie) ) ) " e is beter t e berekenen a ls h e "SOM ( I , 1 , n , S (1) x SOM ( j, 1 , m , P ( j) x ( i , j ) r INTEG RAAL ( x , x 0, x l , R ( i, j , x ) , toler antie) ) ) ". s Bovendien loont het b i j gr ote n waar s c hijnlijk de mc eite de waarden c van P i n een hulpar r ay op t e s laan, omdat z e anders v oor ieder e h r waarde v an 1 opnieuw berekend moeten wor den. i j v i n g e e n pca- 24 Over geheugengebruik v alt algemeen het volgende t e zeggen: Tijdens uitv oer ing v an het pr ogr amma moet het geheugen bev atten — het c omplex — h e t objec tpr ogr amma de r u im t e v oor de v ar iables - - de w er k r uimte v oor de adminis tr atie. De lengte v an het c omplex heeft de pr ogr ammeur n ie t i n de hand. D e benodigde wer k r uimte s peelt alleen een r o l b i j een pr ogr amma dat uitgebr eid gebr uik maakt v an r ec ur s iv iteit. O m het objec tprogramrna noemenswaardig k or ter t e maken z ou de pr ogr ammeur a l v r i j gr ote wijz igingen i n z ijn pr ogr amme aan moeten brengen. B l i j f t ov er de r u im t e v oor de v ar iables , z owel s implii't als s ubs c ripted v ar iables . H e t aantal s imple v ar iables z a l noon gr oot z ijn , a l was het maar omdat de pr ogr ammeur z e s tuk v oor s tuk moet dec lar er en e n ar r ay daarentegen v an 10 000 elementen k an de pr ogr ammeur m e t n ie t meer 'moeite dec lareren dan een v an nul elementen. Komt een pr ogr amma i n r uimtenood, dan moet de pr ogr ammeur i n eer s te ins tantie proberen r uimte te winnen door de benodigde r uimte voor array s t e v erminderen. H ij k an ov erbodig geworden ar r ay s v er wijder en door blok v er lating, v oor dat h ij nieuwe dec lar eer t, o f een ar r ay op v er s c hillende plaats en v er s c hillende functies laten v er v ullen. Integer ar r ay s v an k leine integer s k an h i j "pak k en", dat w i l zeggen me e r dan een integer i n een ar r ay plaats opbergen. I n het a l gemeen moet h i j een equiv alente s c hr ijfw ijz e v an het pr ogr amma v inden, d ie minder ar r ay r uimt e v er eis t. In h e t er gs te gev al k an het pr ogr amma idie n naa uelk t aar o n gedr o maaid e worden, w aar bij ieder deel een k or ter objec tpr ogr ams t u k k e n ma en mis s c hien minder geheugenbehoefte heeft. g e s p l i t s t w o r d e n , pea- 2 5 16 N o g lets ov er t ild e n en effi c ienc y De tijds duur v an de standaardfuncties v oor het X l - en het X8- ALG O L- s y s teem (tijden v oor de X 8 nog met defi nitief) ' X1 X 8 scirt 4 4 ms ec in 2 6 , 7 ms ec 3 6 5 mms ec 5 9 1 mms ec exp cos 2 4 2 8 7 ms ec 7 4 0 mms ec 2 ms ee 6 4 0 mms ec sin 2 6 ms ec 6 7 0 mms ec arctan 1 0 9 2 ms ec 7 2 8 mms ec 4 T er v er geli Jong 3 14 2 9 ms ec 1 5 mms ec Als b i e$x p r e s s z ond -zowel i n t i j d a ls i n geheugengebrulk aanz ienlijk effi elenter k a n z ijn ,ee rs h e Het t l ekenen b:Jv v a n m -I- n x ( n - 1) v er gt o p de X8 ongev eer 120 mms ec en i daIn w a rv8 plaats b i j en V o o r ( n - x n m i s d i t ongeveer 90 mms ec e n 4 plaats en W e a z o d it begr ijpen als w e weten hoe beide ex pres s ies v er taald wor den kunnen vn eIn 4 eh l = n:: e m o n St = F F = , F - 1,: gt ex X l i( F = F i8 k n x F + m dn ; n es 1 y .F 1 , „ e ) es tF x ne ( F F + ve n Dit k-an biwoor beeld b i l de berek ening v an een poly noom v an gr oot beiang Zi311 om uka0 + 1x x ( a l + x x (a2 + x x (a3 x x ( a4 + x x a5))))' + 495 mms ec ,' 29 plaats en da ) x x + a4) x x a 3 ) x x + a2) x x + a l ) x x + aO + 360 mms ec ; 11 plaats en lq(a5 in x v aar d s c hr ijv en we niet, gUiter n ee a0 + +a l x x + a2 x * 2 + a3 x x 4 3 + a4 x x 4 4 + 25 . sr5( m s . + 2 0 0 0 um m ,m s e c : be 4 1 elp l a a t s e n xd pw ro er pea- 26 Nog een v oorbeeld: We w i l l e n de r es t t er m berekenen die onts taat wanneer we de T ay lor r eek s v oor s in (x ) n a de t e r m m e t x * 9 afbrek en: s in (x ) = x - x 41/4 3 / fac (3) + x * 5 / fac (5) x * 7 / fac (7) + x * 9 / fae (9) + R (x) r eal RE222aumt I t ( x ) ; v alue x ; r eal x ; begin r e a l x 2; x2:= x x x ; R:= s in (x) - ((((x2 / 72 - ) X X2 / 42 + 1) x x2 / 20 - 1) x x2 / 6 + 1) x x end Opmerking. D e t ijd e n i n het voorafgaande z ijn v er meld o m een indr uk t e gev en v an de tijds v er houdingen tus s en v ers c hillende oper aties e . d. W e gebr uik en z e daar om niet o m de effi c ients te t e bepalen v an twee v er s ies , indien dat niet op het oog k an. Indien het v er s c hil i n tijds duur n ie t onmiddellijk t e z ien v alt z a l d i t w aar s c hijnlijk te k le in z ijn o m de moeite v an het narekenen t e belonen. H e t gemak v an ALG O L, ni , ommeren, z ou h ie r b ij v er lor en gaan. bek d Men k an het z ic h ook , ten koste v an de effi c ienc y , t e m o e ilijk mak en, door ie t s i n a tALG O L t e oms c hr ijv en wat daar in ook rec hts treek s k an worden uitgedr uk t. d1. W e s c hr ijv en e niet i f x < 0 then -x — els e x m a a r a b s (x ) — p niet e x p ( in (a) x b) m a a r a * b r niet e : = 2. 718; z := e 4 q m a a r z : = ex p (q) o g niet a * (1 / 2) m a a r s c i r t (a) r niet 1 . 5 x 10 4 (-3) m a a r 5 a 1niet 0 (-1) x r m a a r - r m - 3 niet i f s t h e n tr ue els e fals e m a a r s 0 m e2. V e r d e r bedenken we dat het geen z in heeft de waarde v an een ex pres s ie aan u een v ar iabele toe t e kennen, indien de waarde v an deze v ar iabele v erv olgens r slechts 1 k e e r gebr uik t wor dt. M e n s c hr ijv e dus niet : z i p:= Z ER O ( n, b , e , f n, p r ) c om v er v olgens p alleen t e gebr uik en v oor : p r i n t ( p) . h We s c hr ijv en dan: p r i n t (ZERO ( n, b , e , f n , pr ) ) . n Ook niet: t : = entier ( k x f ) ; n:= k x k - 1 i e als v erv olgens t en n alleen gebr uik t wor den in : q : = t n . t Men s c hr ijv e dan: q : = e n t ie r ( k x f ) : ( k x k - 1) . o m Nog a , Beter is : a b s ( f / p) ; m:= n x q 4 (1 / d) d e en nog beter nu: m : = n x abs ( f / p) 4 (1 / d) . m e i n n v i o s o pea- 27 3. F o r s tatements d ie dez elfde f o r l i s t hebben en w aar bij de ene n ie t op het res ultaat v an de gehele andere f o r s tatement behoeft te wachten, kunnen s amengetrokken wor den. I n plaats v an: for j : = 1 s : .for j : = 1 Et 9 1 . en w e beter : s c hrijv .2 for j : = 1 Ets 9 . 1 . en nu u znien t iw e l dat w e nog beter kunnen s c hr ijv en: E 2 m for j : = 1 s l m 1 u n t il m do C [ j, j] : = 1 - 1 C [ i o j1 . 11 o 4. E r zd uijnnntwee t t i il v aak voorkomende gev allen aan t e geven w aar bij het n ie t z inv ol i s C een m lIa r r a y t e gebr uik en o f waar bij althans een der indic es ov er bodig is . d o m jDe eer ] s te ov erbodige ar r ay - s oor t i s d ie , w aar bij n a toekenning v an een 1 d waarde : = aan een element de waarden v an de eer der berekende elementen .o 1niet m e e r gebr uik t worden. 2 2 k C a [C Als wj e bijv oor beeld 1 / 1 + 1 / 2 + 1/ 3 + • + 1 / n w ille n berekenen als v olgt: C ,[ A[0]:= 0 ; O jj for j : = 1 5 ,] , . ] we de ar r ay A door een s imple v ar iable vervangen: j:dan kunnen j 2 2 1 := = 0; A:= ] u n t i 1 for j : - 1 E l m 1 u n t il n do A: = 1 / j + A l / Van nde tweede ov erbodige ar r ay - s oor t k omen de elementen steeds v oor m e t C d [als index - ex pr es s ie een getal. H ie r b ij i s de ar r ay een v er z ameling op z ic ho jz elf staande v ar iabelen, geen ges truc tureerde v er z ameling. A , Voorbeeld [ j ] j : = A[1]:= r ead; A[2]:= A[ 1 ] + 1 ; A[3]:= A[ 1 ] / A[2]; ] A ; for k : = 4 , 5 do A[k ]:= l n ( A[k - 2]) ; C [ jz:= b x A[ 4 ] / A[2] + c x A[ 5 ] / A[ 3 ] ; [ w:= a x A[ 1 ] + b x A[ 4 ] /1Ê» 2 + c x A[ 5 ] 4\ 2 j 1 uik en h ie r lie v e r 5 s imp le v ar iables : , We gebr ] j A:= r ead; B:= A + 1 ; C:= A / B ; + ] 1D:= l n ( B ) ; E : = I n ( C ) ; : /z : = b X D / B i - c x E / C ; = jw : = a x A + b x D x D + c x E x E 1 Wanneer i n d it tweede gev al naas t de ov erbodige index ook z inv olle indic es C [voorkomen, b ijv , r e a l a r m _ PARAM[1 : 5 , 1 : k , 1 : n ] , dan dec lar er en jwe natuur lijk : r e a l array_ PA,' PB, PC , PD , PE( 1 : k , 1 : , j Als v oor beeld v an het ov erbodig gebr uik v an ar r ay s e n v an nog enk ele ander e ] genoemdee fouten z ullen we een pr ogr amma geven v oor het berekenen v an e en 1 / e . n d pea- 28 Zoals bekend: e = 1 + 1 / fae (1) + 1 / fac ( 2) + 1 / fac (3) + 1/e = 1 - 1 / fac (1) + 1 / fac (2) - 1 / fac (3) + We z u lle n eer s t ov erbodige ar r ay s gebr uik en en het pr ogr amma v erv olgens s tap voor s tap v er beter en. G a na hoe mees tal een v er beter ing pas dank z i j de v or ige stap mo g e lijk wor dt. begin i n t e g e r n ; n:= r ead; begin i n t e g e r k ; r e a l p ; r e a l a r r a y A , B[1 : 2, 0 : ni, FAC[0 : FAC[0]:= 1 ; for k := 1 2 1 . A[1, 0]:= A[ 2 , 0]:= 1 ; 22 for k := 1 a t m . 1 . 1 B [ 1 , l a = 1 / F AC[k ]; begin u n t i l u n t i l n B[2, l a = ( - 1) 4 k / F AC[k ]; n d o A[1, l a = A[ 1, k - 1 ] + 13[1, k b d o F A C A[2, l a = A[ 2 , k - 1 ] + B[ 2 , I d [ k ] :ends= F for k := 1 Lt2p A . 1 NLCR; p r in t ( A[1, l a ; p r in t ( A[2, l a end; begin C u n t i l NLCR; [n k p:= A[ 1 , n i x A[ 2 , n ] ; p r in t (p) end -d o 1 end ] We z ie n i n het pr ogr amma x d r ie p a r a lle lle for statements: f or k := 1 E l m 1 until n do We tr ek k en dez e s amen en k schrappen tevens de v ar iabele p , waarv an de waarde 9 g 1 . 2 . 1 4 .1 ; dt gebr uik t. immer s s lec hts 1 k eer wor begin i n t e g e r n ; n:= r ead; begin integer k ; r e a l a r r a y A , B[1 : 2 , 0 : n ] , F AC[0 : n i ; FAC[0]:= 1 ; [ 1 , 6 3 P E e , , o i 2.13 for k := 1 a t .1 2 2 . 2 1 B[1, l a = 1 / F AC[k ]; u e n t i l B[2, l a = ( - 1) * k / F AC[k ]; n . d o A[1, k ]:= A[ 1 . k - 11 + 13E1, k b pa end end F A[2, l a = A[ 2 , k - i i + B[2, k ] ; A NLCR; p r in t ( A[1, l a ; p r in t ( A[2, k l) C end; [ NLCR; p r in t ( A[1, n ] x A[ 2 n ] ) l a = F A C [ k pca- 29 In bovenstaande tweede v er s ie z ien we dat de a r r a y F AC t o t de eer s te s oor t d e r overbodige ar r ay s behoor t: Heeft FAC[k ] eenmaal een waarde, dan worden FAC[k - 11 en de daaraan voorafgaande elementen v an F AC n ie t meer gebruik to D e index v an FAC k an dus ac hterwege blijv en. Hetz elfde geldt v oor de tweede index v an A en B. begin i n t e g e r n ; n:= r ead; begin ! E l a m k ; r e a l F AC ; r e a l a r r a y A , 13[1 : 2 ] ; A[1]:= A[2]:= 1 ; for k := 1 s tep 1 u n t il n do begin F A C : = F AC x k ; B[1]:- 1 / F AC ; 13[2]:= ( - 1) it% k / F AC ; A[1]:= A[ 1 ] + B[ 1 ] ; A[2]:= A[ 2 ] + B[ 2 ] ; NLCR; p r in t ( A[1]) ; p r in t ( A[2]) end; NLCR; p r in t ( A[1] x A[2]) end end We z ie n nu dat de ar r ay s A en B t o t ov erbodige ar r ay s v an de tweede s oor t z ijn geworden: alleen A[1], A[2], B[ 1 ] en B[ 2] v er s c hijnen i n de tek s t. ( I n feite was d e eer s te index v an A en B a l v anaf het begin ov erbodig). W e nemen dus liev er v ie r v ar iabelen: e l , e2, t e r m l e n ter m2. V e r d e r i s het nu onnodig •een apar t binnenblock t e intr oduc er en , begin i n t e g e r n , k ; r e a l F AC , e l , e2, t e r m l , t e r m2 ; n:= r ead; F AC:= e l : = e2:= 1 ; for k := 1 2122 1 u n t i l n do begin F A C : -t e r m l: = 1 / F AC ; ter m2:= ( - 1) ilk k / F AC ; el:= e l + t e r m l ; e2:= e2 + t er m2; F A C NLCR; p r in t ( e l) ; p r in t (e2) x k ; end; NLCR; p r in t ( e l x e2) end pea- 30 De uitdr uk k ing ( - 1) 4 k z or gt v o t r het alter ner end tek en v an ter m2. D i t k an v eel effi c ienter d o o r t er m2 s teeds t e vervangen door - t e r m 2 / k , waar door F AC o v e r bodig wor dt. begin integer n , k ; r e a l e l , e 2 9 n:= tr eea rd ;me i;: = e2:= t er m: = 1 ; for k := 1 a L e i 1 u n t il n do begin t e r m : = - t e r m / k ; el: = e l + abs ( ter m) ; e2:= e2 + t e r m ; NLCR; p r in t ( e l) ; p r in t (e2) end; NLCR; p r in t ( e l x e2) end pea- 31 17 E l t i s i m s x . ma T ot nu toe i s s teeds gesproken ov er effi c ienc y i n detailpunten: s teeds w er d getoond hoe een bepaald proc es op effi c ienter e w ijz e k on worden geschreven, V a n hoger belang is , dat het proc es z e lf effi c ient i s e n i n het volgende z ullen we aanwijz ingen en v oorbeelden i n die r ic hting geven. Voorbeeld,. L a t e n we het pr obleem aanpakken v an het naar gr ootte rangs c hik k en v an de elementen v an een ar r ay . E e r s t z etten we het gr oots te element v an de a r r a y op de laats te plaats , v erv olgens het op 1 n a groots te op de op 1 n a laats te plaats , enz,We k r ijg e n het gr oots te element ac hteraan door v an v or en a f e lk tweetal elementen te v er wis s elen a ls het niet i n de ju is t e v olgor de s taat, m e e d u r e SORT1 ( A , n) ; v alue n ; i n t s z y n',! ar r ay .b eAt a; i n t e g a . k , j ;lv = n s te2 - 1 u n t il 2 do for r e a l for j: = 2 s tep 1 u n t il k do z ; be i f A( j1 < 11 then m m a lm r ..0 .0 O S O m a t a ' 12 . 91 end 1 We k unnen d it pr oc es effi c, ienter mak en door min d e r v er wis s elingen t e doen' z i, p . v , e l k v er k eer d geordend tweetal opeenvolgende elementen t e v er wis s elen kunnen w e ineens het max7imum v an de r eek s zoeken, e n d it gr oots te element m e t = het laats te v er wis s elen. ZAo k r ijgen w e' procedure SORT2f ( A, n ) ; v alue n ; i n t s j .be i r 1 r. for k := n; sten, - 1 u n t il 2 d o a A m m ain rj mr Aaax ;y= 1 ; Amax := A( jmax L, e r n ; E j: = 2 s t a .k A ; for j.b e1n i f A U j i > Amax then , 1 n t i l u j becrin j m a x :k , =end; o . d j -A[jmax1:=, =A lkj ] ;; A[k ]:= Am a x m A m a 1 a end x 1 xend . = , ; j A c ienterA k a fn wor Dat h e t proc es nog v eel effi den inger ic ht b lijk t u i t de pr oc edur e r m a e ( Comm, A C M[ 8 (1965)x 11, Quicker,sort 1 Alg o r it h m 271), j a e 1 l n 1 A d . m = a z x e ; n end V 42.11.8.11IN G pea- 32 T er v er gelijk ing de t ijd e n v oor het Xl- ALG O L- s y s teem v oor een a r r a y v an 50 elementen: SORT1 ( A , 50) 4 5 s ec SORT2 ( A , 50) 2 6 s ec 1 0 s ec Quic k ers ort ( A, 50) Hier b lijk t dat h e t goed is v oor d i t s tandaardprobleem een oplos s ing u i t de l i t e r a tuur t e nemen. D i t geldt ook v oor v eel numer iek e pr oblemen, z oals het v inden v an een nulpunt, h e t benaderen v an een func tie door een pol3rnoom enz . Voorbeeld. W e beschouwen de integr atie v an een r eele func tie f( x ) ov er het inter v al a <_ x—< b. W e v er delen het inter v al i n s tuk jes v an lengte h , bepalen de integr aal over ie d e r s tuk je m e t een benaderings formule, e n v inden een benadering v an de totale integr aal door de s om v an deze waarden t e nemen. A l s benaderings formule v oor de integr aal v an x 0 t o t x 0+h kunnen we nemen: 1. blok jes methode 2, t r apez iumr egel h x f( x 0) h / 2 x (f(x0) + f(x 0 + h)) 3, r e g e l v an Simps on h / 6 x (1(x0) + 4 x f( x 0 + h/2) + f(x 0 + h)) We pas s en deze for mules toe o m 1 / x t e integr er en ov er 1 < x < 2 , hetgeen als r es ultaat In(2) = .693147180560 moet oplev er en. W e bepalen het antwoord i n een bepaalde pr ec is ie m e t de v er s c hillende methoden, e n k ijk en dan hoe effi c ient z e z ijn. E e n goede maats taf v oor de effi c ienc y geeft het aantal malen dat de integr andfunc tie berek end moet worden. We k r ijg e n dan de v olgende tabel: aantal ev aluaties benodigd b i j aantal dec imalen tr apez ium- regel v an 4 regel 2 Simpson 3 2 37 4 3 3 361 11 5 4 3607 32 7 5 +36000 96 11 6 302 17 7 951 27 8 +3000 49 9 +9500 83 r elatiev e pr ec is ie 1 blok jes methode 10 147 11 247 Uit dez e tabel b l i j k t w el duidelijk dat de r egel v an Simps on v er r eweg het effi c ientste pr oc es geeft, en dat de blok jes methode n ie t pr ak tis c h br uik baar i s . pca- 33 In h e t v olgende v oor beeld wor dt een v eel eenv oudiger en effi c ienter pr oc es v e r k r e gen door een f or mule iets anders t e s c hr ijv en. G ev raagd w or dt gemiddelde en s pr eiding t e berek enen v an getallen x ( 1] t / m x [n], d ie op een getalband s taan, v oor afgegaan door de waar de v an n . D i t k an als v olgt: l a t a 2 E n; r e a l gemiddelde, s pr eiding; n:= r ead; 122 . sx:= 0 ; gir l for i: = 1 p_t_22 1 .begin 1 x [i]:= r ead; s x := s x + x { i] end; 2 u n t i l 1 gemiddelde:= s x / n ; s := 0 ; n 1 for d i : =o 1 L t 9 2 .s preiding:= s c irt ( s / ( n - 1)) . 2 end; a . 1 m u n t i l i end n ; d Nu i s ( x [ i] - gemiddelde) 4, 2 =ox t i ] it\ 2 - 2 x g e m i d d e l d e + gemiddelde 4, 2. r s : Wanneer we dus reeeds tijdens het lez en ook nog de s om v an de x [ i l /1\ 2 opbouwen, = a kunnen we de s pr eiding acshter af z onder s ommatie berekenen en is het n ie t nodig l + onder lijk e x [ i ] tegelijk t e onthouden: de ( mogelijk z eers v ele) afz ( x be i s I 2 , g a r [ i sn:= r e a d ; s x := s x 2: . i , ] n ; ,x for 1:= 1 -21 r e a ;=l 0 ; g e .r x := r ead; s x := s x + x ; s x 2:= s x 2 + x x x end; x , 122E12 m i ye s x gemiddelde:= s d d x / n ; s preiding:= s qr t ((sx2 - gemiddelde x s x ) / ( n - 1)); .a , e l p s x l end d e . 1 2 , a ) ur n t i l g e m 2 n i d dr ; d e l da oy e , s p x r e [ 1 i d , i n g ; : 0 • 0 0 0 0 0 • 0 • • 0 0 9 0 0 0 0 pea- 34 18 E f fi c i e n c d o o r betrouwbaarheid Doordat de pr ogr ammeer taal ALG O L i n v er gelijk ing me t eer der e pr ogr ammeer talen v oor de pr ogr ammeur een v eel gemak k elijk er hanteerbaar ins tr ument is , i s het l o nend geworden pr ogr amma's t e s c hr ijv en die s lec hts enk ele malen o f z elfs eenmaal behoeven t e wor den uitgev oerd v oor pr oblemen d ie v r oeger m e t een tafelr ek enmachine zouden z ijn opgelos t. V o o r z ulk e pr ogr amma's i s het a l w einig z inv ol v eel moeite t e bes teden aan het v er k or ten v an de t ijd , benodigd v oor uitv oer ing v an het pr ogr amma; h ie r i s v oor al v an belang hoev eel t i j d v er s t r ijk t tus s en de oor s pr onk elijk e f o r mu le r in g v an het pr obleem e n het gereed k omen v an de r es ultaten. In d e pr ak tijk b lijk t dat deze t i j d b ijn a a lt ijd v eel gr ot er i s dan nodig z ou z ijn , doordat e r z ov eel fouten gemaak t worden. Wanneer we door een bepaalde manier van pr ogr ammer en minder fouten zouden mak en, o f minder t i j d nodig zouden hebben om een gemaak te fout op t e s poren, k an daar v oor ger us t iets wor den prijs gegev en van de s nelheid v an het pr ogr amma. I n feite geldt ditz elfde ook v oor pr oduk tiepr ogr amma's , d ie v aak uitgev oerd moeten worden: de r es ultaten z ijn n ie t meer waar d dan d e mate w aar in w i j o p hun juis theid mogen v ertrouwen, e n helaas i s het nooit mogelijk v oor 100 pr oc ent de c or r ec theid v an een pr ogr amma t e garanderen ( wat al b l i j k t u it het f e it dat ook na lange t i j d nog fouten worden ontdek t i n goed getes te en v aak gebr uik te pr ogr amma's ) . De belangr ijk s te d r ie s oor ten fouten z ijn w el: — f o u t e n tegen ALG O L — v e r g is s in g e n en v er s c hr ijv ingen — onv oldoende geldigheid v an het proc es Op de eer s te s oor t fouten z a l h ie r n ie t v er der wor den ingegaan. De bes te r emedie tegen v ergis s ingen en v er s c hr ijv ingen i s v er moedelijk het v er hogen v an de lees baar heid v an de pr ogr ammatek s t, z odat de fouten eer der opv allen. Wat de laats te s oor t fouten betr eft: Alle r e e r s t moet getr ac ht wor den steeds een proces t e k iez en en t e pr ogr ammer en dat z o algemeen mogelijk e geldigheid heeft, waar bij dus v oor de toepasbaarheid v an het proc es geen r es tr ic ties gelden; als dat niet lu k t moet d u id e lijk omschreven worden welk e de r es tr ic ties z i j n en moet het pr ogr amma nagaan o f aan de v oorwaarden v oor de toepas baarheid v oldaan is . pea- 35 19 L e e sbaarheid Een goede lay - out k an v eel bijdr agen t o t de ov er z ic htelijk heid en lees baarheid v an het pr ogr amma. St e r k aanbevolen wor dt de volgende r egel, d ie de s tr uc tuur v an het pr ogr amma i n de lay - out t o t uitdr uk k ing br engt: Wanneer een s y mbool l a s t i l en het bijbehorende s y mbool end niet op dez elfde r egel staan, z org dan dat l i s g a rec ht bov en end k omt t e s taan, en dat het stuk programma daartussen r ec hts v an de k olom tus s en begin en end k omt ( als of na het s y mbool begin de k a n t lijn ongeveer 8 plaats en ops c huift, e n v oor het s y mbool end w eer 8 plaatsen teruggaat). S c h r ijf labels (gev olgd door " : " ) i n de k olom tus s en 12221,11 en end v an het bloc k w aar bij z e behoren ( z ie par agr aaf 4) . Bijv oor beeld: 12trai . r e a l a ; S T A R T : v o s v 12s .begin i ga. • • • • • • • • •ZOEK: e n dend; ; V 0 0 0 0 0 0 a e o e s l a s b; 6 0 0 9 o a * a begin • to a t o e . • • O O O O O 0 • • • • end; S O 0 0 0 c i c t e e t begin • • 1 1 • 0 0 0 1 P . b e ......•••. g i n end • 9 • e a 0 e a • 9 I ? e n EINDE: d ; end H ier bij s taan o f end dus aan het begin v an een r egeL G es c hik te punten o m een r e g e l a f t e br ek en z ijn dan ook : v oor 1291 2 een " ; " , do, els e o f then. ( Pr obeer dus n ie t els e r ec ht onder het bijbehorende then i2, e n d o f e e n te plaats en) . l a b e l , e n v e r d e r n a pca- 36 Een r edelijk e s patier ing tussen de s y mbolen is ook v an gr oot belang voor de lay - out. Hier v oor kunnen de volgende r egels gebr uik t worden, d ie welis waar enigz ins w i l l e k eur ig z ijn , m a a r waarv an het konsekwent gebr uik een r us tige tek s t garandeert: Geef tus s en ieder tweetal s y mbolen een s patie, behalv e - t u s s e n de afz onder lijk e s y mbolen v an een identifi er o f een getal. - t u s s e n een a r r a y o f s witc h identifi er e n het s y mbool " [ " . t u s s e n een label identifi er e n " : " . - t u s s e n de unair e oper ator en "-F T - l i n k s v an ; , : = ) ] ' e n " - r e c h t s v an ( e n [ 1 In v oorhbeelde k omen a lle uitz onder ingen v oor : ' h e t evolgende n t o p e r az : =n P d( - A[0], , VOORBEELD: 3.14 10 -2); In ALG O L bes taat een gr ote v r ijh e id v oor de keuz e v an de identifi er s . D o o r h ie r verstandig gebr uik v an t e mak en kunnen we de k ans o p v er s c hr ijv ingen reduc eren. In h e t volgende s tuk je pr ogr amma: 122zta I . E t a g for k := 1 E l m 1 u n t il m do F g[k ]:= SUM ( j, 1 , n, I l k , j ] ) / n ; a a r end y m .zal een v er wis s eling tussen m en n v eel minder opv allen dan wanneer we ( gebr uik m makend v an onz e k ennis v an wat m e n n betekenen) s c hr ijv en: , be 1 l a t .: 9 n 1 2 E for le t t e r : = 1 1 u n t il nletter s do a ] r Fgem[letter ]:= SUM (auteur, 1 , nauteurs , F r eq[letter , auteur ]) / nauteurs ; r; j zr :eend n l a Mees e t tal z a l het n ie t m o e ilijk z ijn een geschikte naam t e k iez en. W e l moeten w e l bedenken, dat v oor een ar r ay v aak beter een naam gekozen k an worden d ie k ar ak tE e rm isstiek i s v oor de afz onder lijk e elementen dan v oor het geheel, dus ter ,zniet maar COORDINAAT[l : 3 ] , PUNT [l : 3 ] 1 F maar VELD[1 : 8 , 1 : 8 ] , :gniet BORD[1 : 8 , 1 : 81 n [niet WOORD[1 : lengte] maar LET T ER [ l : lengte], a 1aangezien b ijv . L E T T E R [ i ] een le t t e r , en niet een woor d v oor s telt. u : tm e l u ; r s O0 2 O, 1 1 , 0 0 0 V 0 0 0 , 1 0 . 0 0 8 0 0 0 . X 9 0 0 0 . V 0 1 9 . 0 9 C . . V O 0 0 pea- 37 2_111_ ,.. 14E We . . s mo e t e n p ro b e re n vo o r onze p ro ce sse n e e n f o r m u l e r i n g t e vin d e n d ie z o a lg e me e n r o sgae Llijk mo l g e ld ig i s , zo d a t d e ze lfd e f o r m u l e r i n g i n p rin c ip e o o k g e sch ikt i s in d ie n e s o mmig e d e t a ils v a n h e t p ro b le e m ve ra n d e re n . W e mo e t e n d u s g e e n g e b ru ik ma ke n . van o e2v2a llig e e ig e n sch a p p e n v a n o n ze g e g e ve n s, d i e n i e t u i t d e p ro b le e ms t e llin g y l i at 1 1 _lg, ecn1. W i l l e n w e b ijv o o rb e e ld e e n p ro c e s f o r m u l e r e n v o o r h e t vin d e n v a n d e kle in st e vo u it e e n r i j g e t a lle n wa a rv a n w e ve rwa ch t e n d a t e r w e l e e n g e t a l k l e i n e r i s d a n 1 0 6 , zo u d e n w e ku n n e n s c h rijv e n : dan min : = 1 0 ; e d i t s t u k j e p r o g r a m m a e e n k e e r g e b ru ike n v o o r e e n re e k s g e t a lle n d i e ma a r a l s6 w f o r a lle g r o t ke r z: i j n d a n 1 0 6 =re v e rz a me lin g : vo, o rd i ead en g a a It d i tmin s := t M[ 1 ] ; f o r k:= 2 E t a . 1 i el e e n o f a n d e re re d e n e e n me th o d e mo e t e n g e b ru ike n d ie n i e t p r o c Wa n n e e r ew e tpo cueh no mt d n d o s in a l l e d e1 n kb a re mo g e lijkh e d e n v o o rz i e t d a n mo e t e n we : i f m i u s — V a rdI e n [wa akro n d ] e r d e me t h o d e g e ld ig i s i n e e n c o mme n t a a r v e rme ld e n . . d e v oIno rwa < D e — i n h ett p r oi g r a m m a e r o p t e st e n o f a a n d e vo o rwa a rd e n vo ld a a n i s . n v o m gi l e ln V o o rb e e ld t h e e n n d e , -f r eoa l n p ro r c e d m u re f ( z ) ; v a lu e z ; r e a l z ; d m u l e r o n t Het i i s v e r e ins t d a t z > 0 ; co mme i n :i g if z = i f 0 t h e n t t g l a re a l w ; w: = s q r t ( z ) ; f : = s i n ( w ) / w e n d e ls e s M 12EM g :In d i[[t evo o rb e ekld w o rd t g e b ru ik g e ma a kt v a n st a n d a a rd p ro ce d u re s v a n h e t l W 2 ]kd X 8 -] A i gLGOLN . LsDey sr <it j e geem t a lle n X [ 1 : i n ] mo e t m e t e e n zo d a n ig g e t a l v e rme n ig v u ld ig d wo rd e n , m C dat X [ q ] g e l i j k a a n 1 w o r d t , w a a r b i j ci e e n v a n d e b a n d t e le z e n g e t a l i s . i R E e rst ne , f o u t ie ve o p lo ssin g : ; t P mo s e d u re s c a l m u l t ( A , n , la b d a ); h R value la b d a ; in t: E n ; r e a l la b d a ; r e a l E m r e I .. A ; n N m T fo r i: = 1 E t a i T . 1 end; n E u n t i l : X s c a lmu lt ( X , m 1 / X [ re a d i) n T end = d o M ( A U tHet b[ e z wa a r h ie rt e g e n i s , d a t in d ie n d o o r e e n le e sf o u t o f d o o r e e n f o u t o p d e L D ain vo ekrb a n d h e t g e le ze n g e t a l n i e t i n h e t b e r e i k 1 t / m m l i g t , d a t d a n h e t = ] r A l gre su lt a a t va n d it st u kje p r o g r a m m a o n g e d e fin ie e rd i s , w a t o n d e r m e e r w i l zeggen i ] udat e l k e imp le me n t a t ie v a n A L G O L h i e r w e e r v e rs c h ille n d o p k a n re a g e re n . x m In d e vo lg e n d e o pllo ssin a g g e ld t d i t b e zwa a r n i e t m e e r : e b d n a t v t...0 0 1 3 =P 1 2 , 6 1 1 2 i l l a Z a pea- 38 begin i 2 t 2 E s z q; procedure s c almult ( A, n , labda) ; value labda; l a t s z a n; r e a l labda; r e a l a r r a y A ; 1 for 1:= 1 Ets2, 1 u n t il n do A[ i] : = A [ i ] X labda 2end; 2 1q:= r ead; 1 1 < ct A ci < m then s c almult ( X, m , 1 X [ c i ] ) els e if 1 begin N LC R ; PRIN'r T EXT (4c1 niet ju is t *) ; EXI T end 2 end . Mer k op idat v oor de par ameter labda v er melding i n de v alue l i s t abs oluut n noodzakelijk is : de waarde v an X[ q ] en dus ook die v an 1 X [ q ] wor dt tijdens t de aanroep v an s ealmult g e lijk aan 1 . e Er moet nietg alleen ges treefd worden naar "algemene geldigheid" v an het gehele programma; e we moeten e r ook v oor z or gen dat het onwaar s c hijnlijk is dat een der r deelprocessen n ie t c or r ec t z ou blijv en func tioneren als elder s i n het pr ogr amma een I wijz iging wor; dt aangebr ac ht algemene geldigheid dus ook v oor de delen v an het programma. I n d ie n bijv oor beeld bovenstaande procedure s c almult geschreven z ou z ijn voor een gev al w aar in de ac tual par ameter v oor labda een s imple v ar iable is , dan zou toc h opneming i n de v alue l i s t u i t oogpunt v an betrouwbaarheid gewenst z ijn . Voorbeeld. In een pr ogr amma w or dt me t een aantal s y mbolen gewer k t, d ie a ls integer s z i j n voorgesteld me t de volgende c odetabel: symbool: code: 1 0 2 1 3 2 9 3 6 4 2 5 13 6 7 7 8 9 8 4 1 1 ? , 10 1 14 10 + 5 1 5 0 De v r aag o f nu een s y mbool een der s y mbolen 10 , +toev , alligheid odat f ju is t dei codes s v an deze s y mbolen een v ijfv oud z ijn , a ls v olgt de k a n m e t worden ges teld: c ode : 5 x 5 = c ode. b e h u l p Het ju is t enr t e v ragen: c ode = 10 V code = 5 V code = 15 V code = 10. v i s ec hter a Het bes te i s ec hter v ooraan i n het pr ogr amma te s c hr ijv en: integer n u l, een, twee, d r ie , v ie r , v ijf , z es , z ev en, ac ht, negen, v raagtek en, k omma, tientje, plus , m in , punt; nul:= 12; een:= 3 ; twee:= 9 ; dr ie:= 6 ; v ier := 2 ; v ijf : = 13; z es := 73 zeven:= 8 ; ac ht:= 4 ; negen:= 11; vraagteken:= 1 ; k omma:= 14; tientje:= 10; plus:= 5 ; min:= 15; punt:= 0 ; en dan t e v r agen: c o d e = t ient je V code = plus V code = m i n V code = punt. Blijk t nu dat w e het pr ogr amma met een andere c odetabel w ille n gebruik en, dan hoeft ma a r op een plaats i n het pr ogr amma iets v er ander d t e wor den. pea- 39 De v oor de algemene geldigheid wens elijk e r elatiev e z elfs tandigheid v an een deelproces k an men v aak bereik en door het i n de v or m v an een bloc k o f z elfs v an een procedure t e s c hr ilv en. Daar door k an men er v oor z or gen dat de hulpgrootheden v an het deelpr oc es , die voor de r es t v an het pr ogr amma niet t e r z ak e doen, gedec lareerd worden op de plaats w aar z e nodig z ijn . H e t is dan gemak k elijk er na t e gaan o f een grootheid w e l gedec lar eer d is , en de kans dat men ten onrec hte een identifi er i n twee betekenissen gebr uik t, i s aanz ienlijk v er minder d. Er z ijn v e le r le i r edenen die het wens elijk kunnen doen z ijn een bepaald proc es i n de v or m v an een pr oc edur e t e s c hr ijv en, waaronder het volgende d r ie t a l: 1. H e t proces k o m t meer malen v oor : w e gebruik en de proc edure b i j w ijz e v an afk orting. 2. H e t proc es i s een conceptuele eenheid, d ie als bouwsteen z ou kunnen dienen voor andere progrrammays. Wanneer w e r eeds ov er een acceptabele procedure beschikken die het gevraagde proces v er r ic ht , gebruik en we uiter aar d die proc edure: n ie t alleen bes paart ons dal de moeite v an het pr ogr ammer en, maar ook het r is ic o dat w e daar bij een fout mak en. D i t geldt des t e meer v oor bibliotheek -proc edures , waarv an w e niet alleen r edelijk er w ijs mogen v er onder s tellen dat z e effi c ient z i j n , maar ook dat z e gr ondig getes t z ijn . 30 H e t proc es le v e r t een gr ootheid a f waarmee w e v er der w ille n rek enen. I n d it geval gebr uik en we een func tion proc edure z odat de func tion des ignator als pr imar y i n een ar ithmetic ex pres s ion gebr uik t k an worden. Natuur lijk k an e r me e r dan een r eden t egelijk gelden: v oor de r e a l p m c .SUM ( i, a , b a l tfim) In gev al w e de pr oc edur e lout er gebruik en als afk or ting, i s het toc h vaak z inv ol een .b i j v o algemenere s c hr ijfw ijz e t e bez igen door gebr uik t e mak en v an de fac iliteiten die een o r b e e procedure ons n u eenmaal biedt. M e t name moeten we z ov eel mo g e lijk het gebr uik l d a nietl loc ale namen v er mijden door hulpgrootheden binnen de proc edure t e dec lavan l e reren en andere grootheden als par ameter mee t e geven. ( H e t gebr uik en v an n ie t d r locale i ehulpgrootheden geeft ju is t b i j een proc edure, door de implic ietheid v an het b o b i j de aanroep, gemak k elijk aanleiding t o t v ergis s ingen) gebruik vAl d e i t geldt des t e s ter k er v oor een bouwsteen-procedure. A ile e n als het o m een n s t speciale r eden gewens t is gebr uik en we een niet- loc ale naam, en daar v an mak en we a a dan i n een c ommentaar b i j de proc edure heading. n melding d e r Het i s goed hier er v oor te waarschuwen dat v ele numer iek e processen, ook beproefde e standaardprocessen, s lec hts geldig z ijn onder bepaalde v oorwaarden d ie v aak mo e id lijk e t e for muler en z ijn en waaraan doorgaans w e l, ma a r s oms onverwachts n ie t i s n voldaan. e n . pea- 40 Zo i s het i n pr inc ipe n ie t mogelijk een waterdic hte r eal pL2cedure INT EG RAAL ( x , a , b , f x , eps ilon) t e s c hr ijv en: om de integr aal t e bepalen z al een der gelijk e pr oc edur e v oor een gegeven func tie de par ameter f x ev alueren v oor een eindig aantal waarden v an x op het inter v al a < x < b . D e dan v ir or de integr aal afgelev erde waar de is uiter aar d g e lijk aan de waarde d ie wor dt afgelev er d v oor ieder e func tie d ie i n d ie basispunten x dez elfde functiewaarden i x heeft. H e t is ec hter mo g e lijk een func tie t e c ons trueren waarvan de gr afi ek door a l d ie punten ( x , fx ) gaat, maar waarv an de integr aal ov er het inter v al a < x < b s ter k v er s c hilt v an d ie v an de oor s pr onk elijk e func tie. Aangez ien nu de pr oc edur e INT EG RAAL v oor beide func ties dez elfde waar de lev er t , z al d ie voor tenmins te een v an de twee func ties onjuis t z ijn . Voorbeeld v oor de proc edure Q AD ( AP 251): B ij de aanroep Q AD ( x , 0 , 1 9 x . 05 0, , 1x =0 . 7 5 e n x 1 ; de waarde v an de func tion des ignator w or dt dan 00 - 1 2 ) Hetzelfde r es ultaat z al ook worden gelev er d v oor ieder e func tie d ie i n d ie v i j f w o r d t basispunten g e lijk aan 0 i s , z oals s in ( 4 x 3014159265359 x x ) 4 2„ f x gQADe ( x ,e 0 , v1 , sain (l 4 xu 3.14159265359 x x ) 4 2, 1 0 e- 1 2e) g r iend eplaats f t v an i ndedwaarde e r d0.50. a a d waarde 0 v( n a o g e o n o e g ) rd e x het begin v an dez e par agr aaf is e r a l o p gewezen dat we i n een pr ogr amma tes ts In 0 horen i n t e bouwen om z ov eel mogelijk na te gaan o f aan a lle nodige e n bekende , voorwaarden voldaan is . O m het belang hier v an t e onders trepen v olgt een ops omming x van = v oordelen v an het gr ondig z elf- tes ten v an een pr ogr amma: .- B e s p a r i n g v an mac hine- tijd doordat de ultv oer ing van een pr ogr amma waar in een 2 5 fout i s ontdek t w or dt beeindigd0 , - H e t opsporen v an fouten w or dt gemak k elijk er door dat de fout z o dic ht mogelijk b ij d e br on w or dt opgespoord en doordat de f out wor dt ges pec ifi c eerd. - D e r es ultaten v an een pr ogr amma me t tes ts z i j n betrouwbaarder dan die v an hetzelfde pr ogr amma z onder tes ts . Het i s geblek en dat onderstaande proc edure goed v oldoet v oor , h e t a io n l a s s e n v a n t e s= t s : Boolean fout; sILing_ diagnose; r e a l indic atie; i 2 ) fout then if cL bfgin N L C R ; PRINT T EXT ( tr out: 4) ; PRINT T EXT (diagnose); tc _l SPACE ( 1) ; PRINT ( indic atie) ; EXI T u r end e_ e r r o r ( f pea- 41 Het v oor beeld i n het begin v an deze par agr aaf wor dt, b i j gebr uik v an de proc edure: r eal pr oc edur e I ( z ) ; v alue z ; begin r e a l w ; er r or ( z < 0, • t a r gs cuirm w:= t (ez )n; tf : = s in (w) / w v a n end I i s n i e t k (RR 3. 3. 6) 21 R e a l- a r it m e t ie p o s i t i e f Door het R R worden : helaas geen r egels gegeven v oor het rek enen m e t r eal- gr oot heden, z odat v oor, een r eal- gr ootheid x niet k an wor den afgeleid 1 > x. z We z ullen i n het v olgende toc h gebr uik moeten mak en v an een aantal r egels d ie ) voor v ele implementaties , waaronder het X8- ALG O L- s y s teem, w el gelden. ( Vo o r ; het Xl- ALG O L- s y s teem gelden niet a lle gegeven r egels ) Als de implementatie w aar in onze pr ogr amma's wor den uitgev oer d v oor de ber ek eningen me t r eal- gr ootheden een r elatiev e nauwk eurigheid v an b ijv . 1 2 dec imalen heeft, dan z ullen de r es ultaten doorgaans ook z onder s pec iale maatr egelen wel een nauwkeurigheid v an 5 dec imalen hebben. W e kunnen bijv oor beeld a l honderd biljoen getallen me t elk aar v ermenigv uldigen ( v oor de X8 nog a lt ijd een w er k v an eeuwen) voor w e hoeven t e verwachten dat het door de gez amenlijk e afrondings fouten z ov er k omt. T o c h is een s ummier e analy s e v an de afrondings fouten bes lis t n ie t ov erbodig. Voorbeeld: We pr ober en de func tie j1(z ) s i n ( z ) / 7 4 2 - c os (z )/z t e berekenen m e t behulp v an de r e a l pr oc edur e j1 ( z ) ; v alue z ; r e a l z ; j1:= ( s in (z ) / z - c os (z )) / z . We hoev en dan n ie t t e verwachten dat ev aluatie v an de func tion des ignator " i l ( 1 0 -een 6 waarde oplev er t waarv an z elfs m a a r de eer s te dec imaal c or r ec t is : tengev olge ) van afrondings fouten i s de r elatiev e nauwk eurigheid t o t 0 dec imalen teruggelopen. u De afrondings fouten b i j het rek enen m e t r eal- gr ootheden ontstaan door dat n ie t a lle reele waarden a ls r e a l v oor s telbaar z ijn ( d . w . z . d o o r een r eal- gr ootheid kunnen worden aangenomen)„ Het r es ultaat v an een r eal- ar itmetis c he bewerk ing, bijv oor beeld een r e a l -v uldiging, v e r m eknani gals - v olgt worden v erk regen: 1. D e operanden worden volgens de r egels v an de r eal- ar it met iek geev alueerd, zodat hier v oor een r eele waarde v er k r egen i s d ie als r e a l v oor s telbaar 2. H e t exacte mathematis c he r es ultaat v an de bewerk ing wor dt gev or md. 3. D e z e waarde w or dt afgerond t ot een a ls r e a l v oor s telbar e waar de. Wanneer w e het r es ultaat v an de afr onding v an x v oor s tellen als R(x ), dan kunnen we de volgende r egels ops tellen waaraan de func tie R onder m e e r moet v oldoen: pea- 42 1. R ( Et( x ) ) = Ft(x), d . w . z • r eeds a ls r e a l v oor s telbar e waarden wor den niet me e r afgerond. 2. A l s > y dan li( x ) > 11(y). 3. V o o r integerwaarden i binnen de Integer c apac itelt ( d. w . z . waar den die door een i_n_t_sa-grootheid kunnen worden aangenomen): It(1) = (In v r i j v eel s y s temen wor dt het r eal- getal 0 apar t behandeld, z odat bijv oor beeld zou kunnen gelden: ( 3.14 - 3.14) x 2 4 O. B i j d e X8 k omt h ie r w e l degelijk 0 u it ) Uit de gegeven r elaties i s a l t e leiden: 3 . 1 4 - 3 . 1 4 = 0 A 3.14 / 3.14 = 1 . Niet a f t e leiden v a lt 1 / 3 x 3 = 1 ; d i t z al dan ook doorgaans n ie t opgaan. Voor het X8- ALG O L- s y s teem geldt v er der nog: - Als 10 -604 en I It(x) - x I < I R(y) - 1 ( a f r o n d in g naar dic hts tbijz ijnde r eal- waar de) . < - R ( x ) = 0 indien en s lec hts indien x O . l x 1 -< V o o r integerwaarden i waar v oor 11 I < 1 099 511 627 776 = 2 it% 40, geldt R( i) = 1 - V0 o o r het r es ultaat v an de standaardfuncties kan n ie t wor den gegarandeerd dat z e 6 2voor 8 de v o ile 12 dec imalen ju is t z ijn . , De oper atie a 4 b ( b r eal) w or dt berek end als ex p ( in (a) x b) e n z al dus ook d a niet a lt ijd i n 12 dec imalen nauwk eurig z ijn. n Als a en b ec hter a ls r eal- v oor s telbar e waarden z ijn ( d. w . z . 11(a) = a en i Et(b) = b) , en i n mathematis c he z in geldt f(a) - b , w aar bij f een der s tandaar ds functies i s , dan geldt ook v oor het X8- ALG O L- s y s teem f (a) = b . 1 1 1 Hier uit v alt a f t e leiden: ex p (0) = 1 A s gr t (4) 2 A 3.14 4 ( 3.14 - 3.14) = 1 . ( x Niet alleidbaar is : i n (exp (1)) = 1 V s c irt (2) x s c ir t (2) = 2 , ) x Een gr oot v er lies i n r elatiev e nauwk eurigheid onts taat a lt ijd door het v an elk aar iaftrekken v an ongev eer ev en gr ote getallen: < exacte waar de v o o r de X8 r e l a t i e v e fout 1 s0 i n ( 1 0 -cos 6 ( )1/01 0 v ers c hil . 0 0 0 0 0 0 000 000 333 333 33 . 0 0 0 0 0 0 000 000 909 494 70 1 . 7 -2 -6 6) .9 xIn plaats v an j 1 ( 9 9 I9 1 0 de X8 . 000 000 909 494 70 berek end. V o o r nog k leiner e waarden v an het ar gudoor 9 x- 6 ) 9 = . 9 ment z k an niet alleen de r elatiev e, m a a r ook de abs olute fout z eer gr oot worden: I9 0 0 0 9 ,0 voor 9 0j1 ( 0 9 1 9 0d i t 3gev al3k unnen we v oor k leine waarden v an z de onnauwkeurigheid opheffen door 3 In -9 9 32 0 ) 3 de b9 9 ifunc j v tie t e benaderen door een poly noom. W e z ullen onderzoeken i n welk gebied 3 we o9 9 r eb benadering nodig hebben. L a t e n we er v an uitgaan dat v oor ons pr obleem 3 odez 9 e3 9 dec e limalen d 6 voldoende nauwk eurig is . W e bepalen nu de onnauwkeurigheid v an de 9 koors 9 r w pronk o elijk e methode als func tie v an z : i9 r9 j d t g8 5 e m n3 0 e 3 w 0 t 3 pea- 43 De fout i n s in (z) i s r e la t ie f ongeveer 1 0 -door 1 2 . 7 zHa l e- aangenomen t dat z ex ac t wor dt v oor ges teld- dez elfde r elatiev e fout m a t h e m a t i s c h e van - 1 2 hebben. D e afr onding naar een r e a l getal le v e r t nog eens een fout v an r e s u l t a a t 1 0 n a -lute d1 foute 2 l i n g 2 , 1absoluut 0 n 10-12• D e aftr ek k ing s in (z) / z c o s (z ) geeft dan ten hoogste t- 1 2 -een 1 2abs olute fout v an 3 xe x1 0 bare fout 1 0 1z1 --a1122 . x ( D e =is de abs olute fout tens lotte 3 m s f i rn o n d i n (2a 10 9 fout ez ) / z (ng 10 2 / z . O m d a t 1-vVoor a e waarden n welk v an z i s d i t k lein genoeg? -n j- 1 121 /2 ( z ) d i t 2 c.9 on s g e v e e 4o r1 2 z. e ) s u l (D 1 rWe w ille n de polynoombenadering dus gebruik en i n het gebied - 3 t ,a a t )e0 z0 / 3 10 g De T ay lor e r eek s v oor j1( z ) is : j1( z ) = z / 3 - 4 3 / 3 0 + 4 5 / 8 4 0 - .o o f---i 3 n< s z , e f na det eer s te< t e r m a3f , dan mak en we een abs olute fout v an ongeveer 1 g Breken e we o 1 s 1ie 0 vu2 e0 , e n dus een 2 d 4 3 / 3 e r elatiev e v an 4 2 / 1 0 . A l s I z I < 3 -e 3 e r t./dus r 0 voldoende 1 e l nauwk a eurig. t H e t v ols taat h ie r dus de eer s te t e r m t e nemen. n 1 iA -4 3 ie s v z ie < va besete grens r waarde w v oor de oms c hak eling v an de ene op de ander e for mule 0 nDe 2 a1w e door r n -ca vinden d le fouten aan elk aar g e lijk te s tellen: 9 < o o s 2 1 og Dit0 lev er t ons w eer nagenoeg + 3 xs-e 4 2 / 1 0 0 0 11 0 2 / 4 2r eal r o c= e d u r e j 1 ( z ) ; v alue z ; r e a l z ; z 7 (-- 3 . D e Az= i f abs (z ) < 3 4 zi6 u i t e i n d e l i j k e e 10 2 )Nog :p rme eor voorbeelden: c e d u r t h e n /in I- s c i r t -( 3 e a x a + a) - a : een wor tel v an ) 42 + 2x ax x - a = O. V o o r gr ote waarden z 3 sszw o r d van a/ is mathematis c h scirt (a x a + a) - a ongeveer 0. 50, ma a r v oor a > 1 . 6 )riIt 1 0b i 3j de X 8 a x a i - a . N is en > d a 2 l ersblijf t . a -1 l(3 veel ev an ov n z e d - a Xa z o d a t a1 Als w( e s tellen: )t0 iz = 1 / x k r ijgen we de v er gelijk ing 742 - 2x z - 1 / a = 0 , e w e s ni weor telt z s c i r t (1 / a + 1) + 1 li/nmet een 9 d (ogr u ote s ewaarden z xv iez3 h Voor vean a is dez e for mule numer iek heel w at beter . v 1 ) / n f*- Dne ex pr es s ie 2 / s in (2 X x ) - 1 / s in (x) i s v oor waarden v an x dic ht b i j 0 g t( s/ c ei r t oo o ( ze 1 onbrulk d vnumeriek r w baar. a B e t e r i s s in (x) / cos (x ) / (1 + c os (x )). n o t e n s inh (ax ) ; v alue x ; r e a l x ; ar s inh:= i n (s c irt x x + 1) + x ) -gr Dc/e r echa l EmesS_ture ar k + o o d e is v oor gr ote negatiev e waarden v an x in abs olute z in z eer onnauwkeurig, e n s )t rvl a1 voor waarden v an x dic ht b i j 0 i n r elatiev e z in . e + ( ze d a 1 eer z s te )punt los s en . we eenvoudig op door gebr uik t e mak en v an de r e la t ie aHet r ei n ) ) r ar s inh (-x ) - a r s i n h (x). D e tweede moeilijk heid k omt doordat b i j d e berek ening e / 1 van s c irt ( x x x + 1) + x de r elatiev e pr ec is ie grotendeels v er lor en gaat. z z 0 -o 1n 2g ,e dv pea- 44 Wel kunnen we berekenen h s c i r t ( x x x + + x - 1 i n de v oile r elatiev e pr ec is ie, n a me lijk met h:= x x x / ( s gr t ( x x x + 1) +1) + x . H o e berekenen we n u i n (h + 1) i n v oile r elatiev e pr ec is ie? Zogauw we immer s h + 1 berek enen z ijn we w eer alles k w ijt . Indien h 1 dic ht b i j r lig t , dan i s i n ( r ) een benadering v oor I n ( h + 1) , maar v oor h < 3 . 9 i s de waarde gevonden door lin e a ir e in t e r - o f ex tr apolatie in i n ( x + 1) tus s en x 0 e n x = r - 1, n a me lijk y = h / ( r - 1) x i n ( r ) , een betere benadering. ( We nemen aan dat h > 0) . V o o r r nemen we dan It( h + 1) , het r eal- get al waar op h + 1 w or dt afgerond. V o o r h > 3 . 9 w or dt de fout b i j toepassing v an de c or r ec tie z o a l dan toc h nauwelijk s gr ot er dan de fout d ie toch a l aanwez ig is . W e nemen dus v oor i n ( h + 1) s teeds h / ( r - 1) x i n ( r ) , behalve nat uur lijk als r 1 . -r eal pr oc edur e ar s inh (x ); v alue x ; r e a l x ; 122F 2 h:- x x x / ( s qr t ( x x x + 1) + 1) + abs ( x ) ; r : = h + 1 ; Ln ars inh:= s ign (x ) x ( i f r 1 then h els e h / ( r - 1) x i n ( r ) ) r end e a l h , 22 I t e r a tri e v e E 2 2 , e s , a ; ms Een s oor t proc es d a t v aak v oork omt is h e t oplossen v an een v er gelijk ing door middel v an it e r a t ie , d . wo z. d o o r opeenvolgende v erbeteringen v an een s c hatting v an de oplos s ing. Uitgaande v an een begins c hatting x [0] berekenen we x [1]:= f(x[01), dan x [2]:= f(x [1]) enz . E e n iter aties tap bes taat dan u it x[11:= f( x [i- 1]) . Wanneer nu de waar den x [ i] naar de l i m i e t x c onv ergeren, en f is c ontinu i n x , dan is x een w or t el v an de v er gelijk ing x = f( x ) . Doorgaans w or dt b i j een iter aties tap de s c hatting v an een aantal grootheden v er beterd, z oals in : 12101 x [ 1 ] : = f ( x [ i 9 y [ i y 1 1 , [ z [i]:= h (x [i z E ii end ] In W I gev 1 al z 1 ijn de ; ten : ) lim ie x f ( x , =y , z ) A y Het bekendste itergatiepr oc es ( sqrt (a), m e t f(x ) x ( x + a / [ i 1 ] , y [ - 1] - 1 ] , yEt - 11, z [ i x , y en z de oplos s ing v an de v er gelijk ing: g (x, y , z) A z = h (x, y , z). i s w e l de methode v an Newton v oor het berekenen v an x ) / 2. pea- 45 Kiezen we bijv oor beeld x [ 0 1 = 1 9 = 4 , x[1]-a d a n = dit s nel c onv ergeert. Z ouden we door een v er gis s ing a = - 4 genomen hebben, dan k2 . r i j g e n kwr ijgen we: e x [ 1 ] = - 1.50000, x [ 2 1 = .58333, x[31 = - 3.13690, x [4]= - .93088 enz . 5 0 a c geval h t convergeert e r e ehetn proc es n ie t . Zouden we n a i n het pr ogr amma het proc es In 0 0dit v0 , o l g e n s : pas beeindigen, z odr a twee opeenvolgende waarden van x minder dan 1 0 -xv5ersvc hillen, a n dan e lz ou k door a a dez r e v er gis s ing het pr ogr amma n ie t beeindigd worden. [ 2(Het v er s c hil i s telk ens mins tens 2) . N u is i n d it v oorbeeld de berek ening v an de 1 functie f weinig tijdr ov end, ma a r i n de pr ak t ijk k omen hier v oor v aak func ties v oor = waarvan de berek ening per k eer v eel t i j d k os t. I n z o n gev al z ou pas n a lange t i j d 2 bemerk t worden dat het pr ogr amma niet goed wer k t. W e moeten e r dus v oor z or gen . dat 0 i n het pr ogr amma de c onv ergentie gec ontroleerd wor dt. W e moeten e r ook op 5 letten dat we geen gr oter e pr ec is ie eis en dan gez ien de pr ec is ie v an de gegevens 0zinvol i s . 0 We 0 kunnen nu d e v olgende d r ie tests ops tellen d ie i n een iter atiepr oc es moeten w o r , den opgenomen: x1. B e e i n d i g i n g v an het proc es z odr a het aantal iter aties tappen een z ek er max imum, [ bijv . 100, z ou ov er s c hr ijden. D i t I s een s oor t noodrem d ie a f en toe nuttige 3 diensten k an bewijz en. 1 =2. T e s t op de c onv ergentie. 2 De c onv ergentie v an het iter atiepr oc es kunnen we v aak beschouwen aan de hand . van de v olgende s telling: 0 Als op een z ek er inter v al a < x < b de func tie f(x ) v oldoet aan: 0 0 1. a < f(x ) < b 6 2. I f ( x 1 ) - f(x2)1 < lx 1 x 2 1 ( x l e n x 2 op het inter v al [ a , I A x l + x 2) 1 dan c onv ergeert de reek s x [ i ] f ( x [ i - 11) ( met begPinschatting x [0] op het in t e r , x val) naar een l i m i e t x (op het inter v al) d ie v oldoet aan: f(x ) = x . [ De tweede v oorwaarde i s es s entieel (z oals het n ie t convergerende geval f(x) = - x 4 aantoont). I n het pr ogr amma tes ten we daar om o f abs ( x [ i + 11 - x[11) < ] = ohs (x[11 - x [ i - 11), anders beeindigen we het proc es . D ez e v oorwaarde l i g t 2 numeriek e r g m o e ilijk ; n ie t er aan v oldaan z ijn hoeft n ie t op een fout t e wijz en. . Neem bijv oor beeld een ar itmetiek waar in die getallen repres enteerbaar z ijn d ie 0 in dec imale v oor s telling ac hter de punt 5 c ijf e r s hebben en v er der nullen, en 0 0 met de afr onding naar de dic hts tbijz ijnde mogelijk e waarde. Bes c houw nu 0 f(x) = . 6 x ( 1 - x ) . H e t iter atiepr oc es moet dan c onv ergeren naar . 375. 0 Mathematisch geldt: I f ( x i ) - f(x2)1 - . 6 x 1x 1 - x21 < 1x1 - x 21. . H Neem n u x i = .37499, x 2 = .37501. Ev aluat ie v an f ( x l) en f(x 2) geeft: e t i LIOTHEEK MA THE MMJ S CH 6 c i , AMSTERDAM s 61 d u i pca- 46 f( x i) = R ( . 6 x R(1 - .37499)) -4 R ( .6 x R(.62501)) = R ( .6 x 062501) = R(.375006) . 3 7 5 0 1 = x 2, f(x2) = R ( 0 11(.374994) = .37499 = x i , 6 x Komen R ( 1 we n u me t het iter atiepr oc es i n een v an de punten x l o f x 2 ter ec ht, dan -convergeert het proc es n ie t l a n g e r . H e t i s dus niet voldoende langs mathema0 3 weg 7 tische t e bewijz en dat I f ( x i) f ( x 2 ) 1 < 1x 1 - x 21; het b l i j f t nodig hier op 5 0 1 in het pr ogr amma z elf t e tes ten. I s aan de ongelijk heid n ie t meer v oldaan ) ) =dan beeindigen we het pr oc es ; is het v er s c hil n ie t a l t e gr oot dan hebben we R de oplos s ing, anders i s e r iet s fout. (Voor het gev al w e d r ie v er gelijk ingen t egelijk oplossen moet de uitdr uk k ing . 6lx1 - x21 v er v angen worden door een func tie d ( ( x l, y l , z 1) , ( x 2, y 2, z 2) ) , bijv x . s c ir t ( ( x l x 2 ) A 2 + ( y l - y 2) 4 2 + (z 1 - z 2) 2 ) 9 f 1maxo1(1x1 - x 21, 1 y l - y 21, 1z1 - z 21), a ls m a a r geldt: ( . d ( ( x i, y l , z 1) , ( x 2, y 2, z 2) ) = 0 indien en s lec hts indien 6 2 x9 l = x 2 A y l ,-- y 2 A z i = z 2. 4 92. d) ( ( x l, y l , z 1) , ( x 2, y 2, y 2) ) < ) d ( ( x l, y l , z 1) , ( x 3, y 3, z 3) ) + d ( (x2, y 2, z 2) , ( x 3, y 3, z 3) ) v oor a lle = mogelijk e waarden v an x l , y l enzo ( een der gelijk e func tie d heet metr iek ) 1 1Vaak k an de c onv ergentie v an het proc es op een ander e w ijz e bewezen wor den, (bijv oor beeld als e r een monotone func tie F bes taat zodat de waarden F( x [I]) . met toenemende i k leiner worden, m a a r toc h nooit negatief kunnen wor den, 6 xter w ijl de x [ i ] i n een z ek er ges loten gebied z ullen liggen. I n d i t gev al tes ten we .of d e F ( x [ ip inder daad dalen en de x [ i ] inderdaad i n dat gebied liggen. 6Als de bedoeling v an het iter atiepr oc es ju is t is F ( x ) z o k lein mogelijk te k r ijgen 2 4z ijn de v oorwaarden v an monotonie en dat ges loten gebied n ie t nodig; we z ijn 9dan tev reden a ls de waarden F ( x [i]) naar een min imu m c onv ergeren, 3. G 9 e w e n s t e pr ec is ie. ) Stel dat het door meetonnauwkeurigheden i n gegevens n ie t mogelijk is de ex ac te waarde v an f( x ) t e bepalen, maar dat h ie r b ij een z ek ere fout eps gemaak t wor dt. I . p . v . f( x ) w or dt dus f( x ) + eps ber ek end .proces V e reen o nv an d eder waarden s t e l x [ i] ju is t de waarde x is waar v oor x = f( x ) . n u d a t We k r ijgen dan x [ i + 11 = f( x [i]) + eps = f(x ) + eps x + eps ; me t andere woor b i j den: een efout i n xt t e r gr ootte v an eps wor dt tens lotte w el ongev eer gemaak t. h i sttoppen e dus r a lsa de tfout i l x -e x [ i l-l < eps , w aar bij x de l i m i e t v oor s telt We .Hoe bepalen w e d ie fout i n x [i]? We nemen aan dat de fout b i j ieder e s tap een fac tor r k leiner w or dt, W e hebben dan: x [ i - 2 ] = x + d ; x [ i - i i = x + r x d ; x [ i] x + r 42 X d . H ie r u it kunnen we x schatten, en dus ook de : IL.: AMSTERDAM pea- 47 fout I x - x [1]1. O mdat het h ie r ma a r o m een s c hatting gaat i s het v r i j r is k ant de eer s te de bes te k eer dat I x - x L ill < eps het proc es t e beeindigen; lie v e r wachten we nog ev en o m t e z ien o f dat z o b lijf t . G e ld t d it dan bijv oor beeld d r ie maal ac htereen dan beeindigen we als nog het proc es . Als v oor beeld wor dt h ie r een proc edure v oor k l e i n s t e - k -Bij de meetpunten x [1] t / m x [n] z ijn de waarden y [1] t / m y [ n] gemeten, m e t v ermoeWadratenaanpassing delijk e meetfout eps[11 t / m eps [n]. W e w ille n nu de par ameter s p[11 t / m pEml, die g e g e g e v e n . br uik t worden in de berekening van een theoretische func tie f(x, p) m e t par tic le afgeleiden naar p[k i: par tafg ( x p , k ) , z o bepalen dat de uitdr uk k ing U = s q r t (SUM ( I , 1 9 n , ( v( an f de proc edure z ou hier v oor kunnen Widen: De aanroep ( x [ 1 ] , Least Squares (1, n , x[119 y Ell, eps [il, k , m , p[k i, x , I ( x , p) , par tafg ( x , p , k )). p ) De s x[11, y[11 en eps[1] hangen v ia Jensen's dev ic e a f v an i (1 t / m n ) - inputpar ameter y ,p[k] [ 1hangt . v1 ) ia Jensen's dev ic e a f v an k (1 t / m m ) e n heeft de volgende func ties : /1. in p u t p a r a m e t e r d ie b i j de aanroep gev uld moet z ijn me t een begins ehatting. e p s 2, a r a me t e r d ie na de aanroep de bes te gevonden benadering bev at. [ o u ti p u t pD 3. 2 p a r a m e t e r w aar f( x , p) e n par tafg ( x , p , k ) v an afhangen. )De par ameter f ( x , p) h a n g t v ia Jensen's dev ic e a f v an x en p[11 t / m p[ m] . / De parameter partafg (x, p, k) hangt v ia Jensen's dev ic e a f v an x , k en p[1] t / m p[m]. n De ) par ameter s overeenkomend met 1, k , x en p[k ] moeten v an de v o r m <v ar iable> zmijn. H ei t i s dus n ie t mogelijk i . p . v . p [ k ] te s c hr ijv en: i f k 1 then A els e r , n i m a Het iter atiepr oc es w or dt h ie r beeindigd z odr a aan een der volgende v oorwaarden a l voldaan is : i s1. U wor dt b i j een iter aties tap niet k leiner . , 2. U < 1 . ( I n dat gev al z ijn de benaderingsfouten z o gr oot als de meetfouten) 3. D r i e maal ac htereen is een s c hatting v an de l i m i e t v an U hoogstens 10 pr oc ent lager dan de r eeds behaalde waar de. 4. E r z ijn r eeds 100 iter aties tappen v er r ic ht. Least Squares i s een Boolean proc edure. Wo r d t de proc edure beeindigd door dat U in niet onaanz ienlijk e mate s t ijg t , dan is het r es ultaat fals e, ander s t r ue. Een v oor beeld v an een aanroep: aanpassing v an A X (ex p ( r x x ) - 1) aan 25 gemeten waar den y . p[1]:= 1 ; p[2]:= . 7 ; c omment s c hattingen v an A en r ; Least Squares (1, 25, x [ i 1, y[11, eps [i], ko 2 , P[k l, Nit P[1] ( e x p (13[2] x - 1) , i f k = 1 then ex p (pf21 x > Tot s lo t #de proc edure: 7,) 1 e l s e p [ 1 ] x x pea- 48 Boolean E r . comment gebr uik t de niet- loc ale proc edures SYMDET2 e n SYMSOL2 ( A1 2 9 3 2 2n ,8 npar / 2 2; integer 9 ) ; value i , n , k , npar ; r e a l x i, y i , eps i, pk , x , I x . , d f x d p k ; 12 . r eal s m a ll, minwfac , ma x r e le r r , s s q, s s q l, d l , d2, des fr ac ; 2c I u r e r eal a r r a y X , Y , W [ l : n1, F , par o, d e lt a [ l : npar ], 2L e a S i ( n p a r + 1) x npar : 21; •s t 6S q 2u a r t in r ie s -maxcount:= 100; c o m m e n t s m a ll en minwfae z i j n z o gekozen dat l( 3 ; minwfac it, 2 >> r elatiev e pr ec is ie en i s k, (s mall X minwfac ) it% 4 >> k leins te pos itiev e r-eal- get al' m Ln a l e, l : begin r e a l h , max , m in ; sx = max:= s m a ll; .i 1 c, 0 for 1:= 1 2122 1 u n t il n do oy in X [ 1 1 ] : = x i ; Y[ i] : = ui 1 W[1]:= h : = abs ( eps i) ; i f h > max then max : = h n, 0 te end; 0 ,p ; min: = ma x x minwfac ; m s m for i : = 1 s 1 2 2 1 u n t il n do ai i x, bs gla h:= WR ]; W[1]:= 1 / ( if h < m in then m in els e h) end n ck end; w o, fdesfrac:= ( 2 - des frac ) x des r ac ; e:= t i m ; Leas t Squares:= t r u e ; un a np c ta for c ount:= 1 E t t a 1 u n t il max c ount do : ,r = begin f o r k := ( npar + 1) x npar : 2 s t e g - 1 u n t il 1 d o S[k1:= 0 ; c, 1 for k := 1 , ,p 0 sforl ei i: = 1 s tep 1 u n t il n do tk 1 i, 3 122 u n t i m x ; . x:= X [ i ] ; w:= W M ; dy := (Y111 - Ix ) x w ; l , m 01, n p ssq:= d y x dy + s s q; t : = 0 ; jf a t a r ;x x for k := 1 s l m 1 u n t il npar do ; d , r r begin d f : = F [k ]:= w x dfx dpk ; o d e e delta[k]:= delta[k ] + d f X dy ; d e l f l a t a for j : = 1 E x e l [ k ] l'122e1 t:= t 1 ; S[t]:= SEt1 d r d x c if end : = m 1 p r f end 0 u n t i l k : , end; ; k ) = d s d ; 1 y s o 0 , q w : pca- 49 if s s q < n then a l l ex it; i f c ount > I then begin d l : = s s q l - s s q; if d l < 0 then begin i f d l < 0 then f o r k := 5 2 2 1 u n t il npar do pk: = par o[k l; Leas t Squares:= s s q < ( 1 + max r eler r ) x s s q l; end; i f c ount begin i end; d2:= d l end; g o > 2 then t f d l d l > (d2 - d l ) x des fr ac o c:= t i m els e e if c > I then c := c - 1 els e g 2 x. i 1I e x i t 1 t SYMDET2 ( S, npar , 1) ; SYMSOL2 ( S, npar , 1 9 d e l t a ) ; for k : - 1 EL92 1 u n t il npar do " mar l paro[k ]:= pk ; pk := par o[k ] + deltatk i end; s s ql:= s s q end; x s s q then pea- 50 0 2. Pr ogr amma, compound s tatement en bloc k Declaraties 3. Procedure dec lar ation 1 4. Scope 1 5. Het proc edure-mec hanis me 3 G. 4 7. Wanneer " c a ll by name", wanneer " c a ll b y v alue"? Voorbeelden 8. Jensen's dev ic e 8 9. Recursieve procedures 9 1. 0 7 10. Switches en des ignational ex pres s ions 11 11. 14 12. Boolean ex pres s ion en logis c he v ar iabelen own 13, for s tatements 16 14. Hoe w or dt een ALG O L- pr ogr amma uitgev oerd? 18 15. Tijds duur en plaats r uimte v an het pr ogr amma 20 16. Nog lets ov er t ijden en effi c ienc y 25 17., Efficiency v an het proc es 31 18. Efficiency door betrouwbaarheid Leesbaarheid 34 37 21. Algemene geldigheid Real- ar itmetiek 22. Iteratiev e processen 44 19. 20„ 15 35 41