Iteraties 1 Hoofdstuk 4: Iteraties I. Herhaal n maal structuur a. Inleiding Tot nu toe werden alle opdrachten, nodig om een probleem op te lossen, één maal uitgevoerd. Bij de iteratie kan een deel van het programma meerdere keren herhaald worden, zonder dat deze opdrachten meerdere keren hoeven neergeschreven te worden. Denk als voorbeeld maar eens aan het berekenen van het gemiddelde van 10 gehele getallen. Om deze 10 getallen in te lezen, zouden wij 10 Write – en 10 Read – opdrachten moeten neerschrijven. Voor dergelijke problemen, waarbij het aantal herhalingen vooraf bepaald is, heeft Turbo Pascal de herhaal n maal structuur of for – lus ontworpen. b. PST – diagram De meetkundige figuur om een iteratie voor te stellen in een PST – diagram is een afgeplatte zeshoek. De opdracht, al dan niet samengesteld, die moet herhaald worden zal onder de zeshoek genoteerd worden. Als de herhaling beëindigd is, wordt verder gegaan met de opdracht die rechts van de zeshoek genoteerd staat. Herhaal…maal Teller:beginwaardeeindwaarde Opdracht We noteren eerst het aantal herhalingen. Daaronder, nog steeds in de zeshoek, een variabele teller genaamd, die het aantal herhalingen bijhoudt. De twee uiterste waarden van de teller, beginwaarde en eindwaarde, schrijven we eveneens op. Vul nu zelf de onderstaande structuren aan voor… 20 herhalingen 100 herhalingen Herhaal ___ maal Teller:5 ____ Herhaal ___ maal Teller:1900 _______ De teller krijgt eerst de waarde van de constante beginwaarde. Daarna wordt de teller vergeleken met de eindwaarde. We hebben drie mogelijkheden: Teller > eindwaarde: de opdracht rechts van de zeshoek wordt uitgevoerd. Teller = eindwaarde: de herhaalopdracht wordt een laatste maal uitgevoerd. Teller < eindwaarde: de herhaalopdracht wordt uitgevoerd en de waarde van de teller wordt met 1 verhoogd. Vervolgens wordt de teller opnieuw met de eindwaarde vergeleken. Programmeren K.A.Avelgem A.Mahieu Iteraties 2 c. In Turbo Pascal De teller is een variabele en moet bijgevolg in het var-gedeelte gedeclareerd worden. Beginwaarde en eindwaarde moeten niet gedeclareerd worden, maar moeten wel van hetzelfde type zijn als de teller. Stel dat we een variabele ‘teller’ als INTEGER gedeclareerd hebben, dan kan een for – lus er als volgt uitzien: for teller : = 10 to 20 do begin WriteLn(‘Deze tekst zal x keer verschijnen’); Write(‘Waarbij x gelijk is aan 11.’); end; … De algemene structuur in turbo pascal is dus for teller : = beginwaarde to eindwaarde do opdracht; Zoals in bovenstaand voorbeeld aangegeven, moet een samengestelde opdracht afgelijnd worden door een begin en end; In sommige problemen zal het handiger blijken om de teller steeds met 1 te laten verminderen. De formulering wordt dan: for teller : = eindwaarde downto beginwaarde do opdracht; d. Voorbeeld 1 Bij de geboorte van een baby spreken de ouders af dat ze hun kind elke week 0.2EUR zakgeld geven. Dit bedrag wordt bij elke verjaardag verdubbeld. Bepaal hoeveel het kind zal krijgen op zijn of haar 18e verjaardag. Vul het schema aan met volgende items: Herhaal 18 maal druk:zakgeld zakgeld0.2 zakgeldzakgeld x 2 Verjaardag Teller:118 Schrijf een programma, gebruik makend van bovenstaand PST – diagram. Programmeren K.A.Avelgem A.Mahieu Iteraties 3 e. Voorbeeld 2 Schrijf een programma dat de gebruiker vraagt van hoeveel getallen hij het gemiddelde wenst te berekenen. Laat de gebruiker de getallen ingeven en bepaal het rekenkundig gemiddelde. Vul aan met volgende items: Herhaal aantal maal… lees:aantal druk:gemiddelde somsom + getal Lees: getal som0 gemiddelde som / aantal gemiddeldeberekening f. Oefeningen 1) Schrijf een programma dat de gemiddelde lengte van de leerlingen van een klas afdrukt. Laat de computer eerst vragen hoeveel leerlingen er zijn. 2) Schrijf een programma dat de gebruiker een geheel getal laat inlezen en vervolgens de tafel van 1 tot 10 van dat getal afdrukt. De uitvoer moet er als volgt uitzien (voorbeeld waarbij het ingelezen getal 2 is): 1x2=2 2x2=4 … 10 x 2 = 20 3) Schrijf een programma om de getallen uit de rij van Fibonacci op het scherm af te drukken. Dit is de rij getallen 0 1 1 2 3 5 8 13 21 … waarvan elk getal de som is van de twee voorgaande. Druk de eerste 20 getallen af. 4) Schrijf een programma dat de derde machten van de gehele getallen van 10 t.e.m. 1 berekend en als volgt uitschrijft: 10 1000 9 729 … 1 1 Programmeren K.A.Avelgem A.Mahieu Iteraties 4 II. De repeat until structuur a. Vorm in Turbo Pascal REPEAT UNTIL opdracht1; opdracht2; opdracht3; voorwaarde; b. PST – diagram Herhaal tot voorwaarde Opdracht1 Opdracht2 Opdracht3 c. O pmerkingen De opdracht(en) worden eerst uitgevoerd en dan pas wordt de voorwaarde getest. De (samengestelde) opdracht zal dus minstens 1 keer uitgevoerd worden. Een BEGIN en END zijn niet nodig bij meerdere opdrachten. d. Oefeningen x afdrukken. Begin met x = 1 en laat sin( x) verder x steeds maar dichter tot 0 naderen door elke volgende waarde van x te halveren. Doe dit tot de absolute waarde van x – sin(x) kleiner is dan 1 miljoenste. 5) Laat in 3 kolommen x, sin(x) en 6) Het feit dat bepaalde kernen van elementen zich spontaan omzetten in andere kernen, gepaard gaande met het uitzenden van energierijke straling noemt men radioactiviteit. De tijd waarin een bepaalde hoeveelheid radioactieve stof voor de helft halveerd, noemen we de halveringstijd. Op dit principe steunt de ouderdomsbepaling van hout, botten, papier… Meestal gebruikt men hiervoor de hoeveelheid koolstof – 14. Voor C – 14 bedraagt de halveringstijd 5750 jaar. Bepaal hiermee hoelang het duurt om 3000 deeltjes door straling om de zetten in 150 deeltjes. 7) Laat drie gehele getallen A,B en C inlezen. Vervolgens moeten de waarden ervan cyclisch gepermuteerd worden, dwz de waarde van A komt in B, deze van B komt in C en die van C komt in A. Druk de waarden af voor en na de permutatie. Alles herhaalt zich tot voor A een negatieve waarde wordt ingegeven. Programmeren K.A.Avelgem A.Mahieu Iteraties 5 III. De while do structuur a. Vorm in Turbo Pascal WHILE voorwaarde DO BEGIN opdracht1; opdracht2; opdracht3; END; b. PST – diagram Zolang voorwaarde herhaal Opdracht1 c. Opdracht2 Opdracht3 Opmerkingen De voorwaarde wordt eerst getest. De opdrachten worden pas erna uitgevoerd (als de voorwaarde vervuld is). Is de voorwaarde niet vervuld, dan wordt de (samengestelde) opdracht niet uitgevoerd. Meerdere opdrachten moeten tussen BEGIN en END komen. Kan een REPEAT opdracht steeds omgezet worden in een WHILE opdracht? En omgekeerd? d. Overzicht REPEAT: eerst uitvoeren, dan testen. WHILE: eerst testen, dan uitvoeren. e. Oefeningen 8) Van een sportwedstrijd wordt de af te leggen afstand ingevoerd. Daarna wordt van elke deelnemer die aankomt de tijd in uur, min, sec ingegeven. Vervolgens wordt zijn snelheid afgedrukt. Nu is het aantal aangekomen deelnemers vooraf natuurlijk onbekend. Eindig met invoeren door na de laatste aankomer een tijd=0 in te geven. Druk het aantal aangekomen atleten en tevens hun gemiddelde snelheid. Programmeren K.A.Avelgem A.Mahieu