Skip to content

Latest commit

 

History

History
153 lines (122 loc) · 9.69 KB

pascal_3.md

File metadata and controls

153 lines (122 loc) · 9.69 KB
                   * Pascal (3) *                          

Welcome to the third PASCAL course. Ofwel, hallo, dit is de
derde PASCAL cursus op de FD. Het mag dan wel FD #13 zijn,
maar aangezien de PASCAL cursus pas zijn derde nummer ingaat
zou alles dus helemaal okie dokie moeten zijn. Wat een gezeur
h�! Ik zal maar beginnen, voor ik nog meer onzin uitkraam.

Vorige keer heb ik het over Koen gehad (helemaal in het begin) en ja hoor, hij had weer iets te zeiken, dus nu even mijn
antwoord: "Ja Koen, je kunt ook 100 minuten bandjes door mijn
programma laten uitrekenen.". Zo, dat is ook weer opgelost.
(NvdR: ja stomme ezel, dat had ik ook al door!)

Nu even echt serieus. Deze keer ga ik lussen bespreken. In
PASCAL zijn drie soorten lussen: FOR-TO-DO, REPEAT-UNTIL en
WHILE-DO. Uit de namen kan al ��n en ander afgeleid worden.
Maar ik zal de verschillende lussen met een voorbeeld
behandelen.

Stel ik wil de getallen 1 t/m 10 op het scherm toveren. Hoe
doe ik dat? Hier komen de drie mogelijkheden:

FOR-TO-DO:

PROGRAM ForNext (input,output);

 VAR                                                        
   teller : integer;                                        
                                                            
 BEGIN                                                      
   FOR teller := 1 TO 10 DO                                 
     writeln(teller);                                       
 END.                                                       

REPEAT-UNTIL:

PROGRAM RepeatUntil (input,output);

 VAR                                                        
   teller : integer;                                        
                                                            
 BEGIN                                                      
   teller := 0;                                             
   REPEAT                                                   
     teller := teller + 1;                                  
     writeln(teller);                                       
   UNTIL teller = 10                                        
 END.                                                       

WHILE-DO:

PROGRAM WhileDo (input,output);

 VAR                                                        
   teller : integer;                                        
                                                            
 BEGIN                                                      
   teller := 0;                                             
   WHILE teller < 10 DO                                     
   BEGIN                                                    
     teller := teller + 1;                                  
     writeln(teller);                                       
   END;                                                     
 END.                                                       

Dat waren ze. Maar nu de uitleg. In het eerste voorbeeld
(FOR-TO-DO) zie je, dat de variabele "teller" van 1 t/m 10 zal lopen. Er staat tenslotte dat de teller zal lopen van 1 tot en met 10, en zolang moet je teller afdrukken. Een FOR lus kan
niet worden onderbroken (voor de echte crack wel, maar dat is
met een GOTO en dat is weer niet gestructureerd en dus niet
netjes). Een FOR lus loopt altijd van onder- tot bovengrens.
Nu denk je natuurlijk: Ik wil ook van 10 naar 1 kunnen lopen,
dat kan, maar dan moet je DOWNTO in plaats van TO gebruiken.
Voor de goede orde: Als de ondergrens groter is dan de
bovengrens (FOR teller := 2 TO 1 DO) dan gebeurt er dus
niets.

Het tweede voorbeeld (REPEAT-UNTIL) werkt heel anders. Hier
wordt de lus op een bepaalde conditie verlaten. In het
voorbeeld staat dan ook HERHAAL ... TOTDAT teller=10. Zolang
teller niet 10 is, gaat de lus door. Probeer maar eens wat er
gebeurt als je de regel "teller := teller + 1;" weglaat. Je
zult zien dat de lus eindeloos doorgaat; teller wordt ook
nooit 10.

Het verschil met het tweede en derde voorbeeld is eigenlijk
minimaal. Ook hier wordt de lus verlaten bij een bepaalde
conditie (teller=10), alleen wordt hier eerst gecontroleerd en daarna pas beslist of de lus doorlopen moet worden. Het grote
verschil is dan ook dat de REPEAT-UNTIL minimaal 1 maal
doorlopen wordt, terwijl dat bij de WHILE-DO niet het geval
is.

Zo, dat was een snel overzicht van de lus functies in PASCAL.
En nu maar oefenen. Tja, ik kan het niet vaak genoeg zeggen,
veel oefenen, anders leer je het niet. Ik zal, hoewel vorige
keer niemand een reactie heeft gegeven(gek h�) (NvdR: ligt
gewoon aan jou!), ook deze keer wat opdrachten geven.

OPDRACHTEN:
(1) Maak een programma dat alle mogelijke combinaties van 4
(hoofd)letters op het scherm zet (doe dit met alleen
FOR-TO-DO, REPEAT-UNTIL of WHILE-DO lussen).
(2) Maak een programma dat alle priemgetallen tot een
ingegeven getal berekend (doe ook dit met alleen
FOR-TO-DO, REPEAT-UNTIL of WHILE-DO lussen).

Voordat jullie kunnen beginnen moet ik nog even snel wat
uitleggen over compound-statements. In PASCAL is het namelijk
zo, dat na bepaalde opdrachten (FOR-TO-DO, WHILE-DO,
IF-THEN-ELSE) maar ��n opdracht mag staan. Bij de FOR-TO-DO
lus mag dus niet staan:

WHILE teller < 10 DO
write(teller);
teller := teller + 1;

De opdracht "write(teller)" is namelijk 1 opdracht en de
volgende opdracht "teller := teller + 1" zou pas worden
uitgevoerd als de WHILE-DO lus voorbij is (nooit(!)). Vaak is
het echter noodzakelijk dat meerdere opdrachten in een lus
worden uitgevoerd. De oplossing hiervoor is het compound-
statement. Een compound-statement is een heleboel statements
omgeven door een BEGIN en een END. Het voorbeeld zal dus
worden:

WHILE teller < 10 DO
BEGIN
write(teller);
teller := teller + 1;
END;

Bij het bovenstaande programma zal alles wel naar wens
verlopen. Samenvattend komt het er op neer dat als je bij
lussen (REPEAT-UNTIL is hier de bevestigende uitzondering)
meerdere statements wil laten uitvoeren, dat je die statements moet laten voorafgaan door BEGIN en eindigen met END.

Zo, met bovenstaande informatie moet je in staat zijn om de
zes opdrachten te maken.

Veel plezier,

����  Jeroen "KUBIE" Smael                                  
����    Galopiahof 6                                        
����      6215TK Maastricht                                 
����        Telefoon : 043-437778                           
                                                            
                                             C YA @!!