PSD 2003- 2009

49
Hoofdstuk 1 Programmastructuurdiagrammen Als je iets wilt programmeren, dan is het handig dat je eerst een programmastructuurdiagram gaat maken. In deze lessen leer je hoe je een programmastructuurdiagram (PSD) kunt maken. Een PSD is een schema die je helpt om een probleem optelossen. Eigenlijk is een PSD de presentatie van een algoritme. Een algoritme is een voorschrift dat stap voor stap aangeeft hoe een bepaald probleem opgelost kan worden. Stel je wilt het gemiddelde uitrekenen van twee getallen. Het algoritme kan zijn: Geef twee getallen Tel de getallen op Deel door 2 Geef de uitkomst Een PSD kan bestaan uit de volgende figuren: 1. 1 handelingssymbool

Transcript of PSD 2003- 2009

Page 1: PSD 2003- 2009

Hoofdstuk 1 Programmastructuurdiagrammen

Als je iets wilt programmeren, dan is het handig dat je eerst een programmastructuurdiagram gaat maken. In deze lessen leer je hoe je een programmastructuurdiagram (PSD) kunt maken.

Een PSD is een schema die je helpt om een probleem optelossen. Eigenlijk is een PSD de presentatie van een algoritme. Een algoritme is een voorschrift dat stap voor stap aangeeft hoe een bepaald probleem opgelost kan worden.

Stel je wilt het gemiddelde uitrekenen van twee getallen. Het algoritme kan zijn:

Geef twee getallen Tel de getallen op Deel door 2 Geef de uitkomst

Een PSD kan bestaan uit de volgende figuren:

1.

2.

In een handelingssymbool komt een opdracht te staan en in een beslissingsymbool zet je een vraag. Deze vraag kan je alleen met ja of met nee beantwoorden.

1

handelingssymbool

beslissingssymboolja nee

Page 2: PSD 2003- 2009

Een PSD van het bovenstaande algoritme kan zijn:

Je ziet dat er gebruik is gemaakt van de woorden lees en schrijf. Met lees wordt er bedoeld dat je gegevens gaat invoeren , dat kan zijn door middel van een toetsenbord. Met schrijf wil je gegevens tonen, dat kan zijn op het scherm.

Je hebt een spelletje dat niet kan draaien op een computer waarvan de grafische kaart een geheugen heeft van 4 mb. Als je nu wilt weten of je het spelletje kan instaleren, dan je stel de volgende vraag: is het geheugen van de grafische kaart 4 mb? Hier kan je een PSD van maken

Je merkt dat er onder ja niks staat. Dat is logisch, want je hoeft niks te doen. Het spel werkt immers niet.Bij een beslissingsymbool moet je de vraag zorgvuldig stellen. Je kan niet vragen: Hoeveel Mb is de grafisch kaart? Omdat je hier niet met nee of met ja kan antwoorden.

Een wat oudere man heeft een bepaalde versie van windows. Het kan zijn 98, xp of vista.

Met behulp van een PSD kun je er achter komen welke versie de man heeft. (*bs = besturingssysteem)

opdracht 1: Een PSD maak je met behulp van een potlood en liniaal. Over het algemeen bezitten ICT-leerlingen niet over deze attributen. Maak een PSD dat als resultaat

2

lees getal1,getal2

som := getal 1 + getal2

gemiddelde:= som/2

schrijf gemiddelde

grafische kaart = 4 Mb

ja nee

installeer spel

versie = 98

ja nee

*bs = 98 versie = xp ja nee bs = xp bs = vista

Page 3: PSD 2003- 2009

heeft, dat je volgende les een potlood en liniaal bij je hebt.

Vul hieronder in het PSD de volgende vragen en opdrachten:

Heb je een potlood? Schaf een potlood aan Neem de volgende les mee (4* keer gebruiken) Heb je een liniaal/geodriehoek? Schaf een liniaal/geodriehoek aan

opdracht 2: Maak een PSD waarin staat hoe je een auto moet starten. Gebruik hierbij:

start auto doe autodeur open doe sleutel in contact stap in auto doe autodeur van slot zit sleutel in contact? Is autodeur open

3

ja nee

ja nee

Page 4: PSD 2003- 2009

Een winkel hanteert tijdens de uitverkoop de volgende kortingsregels:1. 50 % korting op artikelen waarvan slechts 1 exemplaar in voorraad is;2. 40 % korting op artikelen waarvan 2 tot en met 5 exemplaren in voorraad zijn;3. 10 % korting op artikelen waarvan 6 of meer exemplaren in voorraad zijn

Je gaat hier een PSD van maken. Hoe moet je nu beginnen? Er zijn drie verschillende kortingen. Welke korting je krijgt hangt af van het aantal exemplaren. Het is dus handig om te beginnen met de vraag. Is het aantal exemplaren gelijk aan 1. Als dat het geval is, weet je dat de korting 50 % is. Dan kan je vragen, is het aantal exemplaren 6 of meer? enz.

opmerking: = betekent gelijk aan > groter dan < kleiner dan >= groter dan of gelijk aan <= kleiner dan of gelijk aan

opdracht 3: Je studeert elke avond, behalve op zaterdagavond. Dan ga je met je vrienden uit, tenzij er een mooi programma op de televisie is. Zijn je vrienden verhinderd en er is geen mooi tv-programma, dan ga je naar de bioscoop. Schrijf een PSD uitsluitend met behulp van de volgende vragen:

Mooi tv-programma? Vrienden verhinderd? Zaterdagavond?

Opdracht 4: Een bedrijf hanteert bij een sollicitatieprocedure voor de functie netwerkbeheerder de volgende selectiecriteria:

1. leeftijd niet jonger dan 18 jaar2. in het bezit van een ict-diploma niveau 3 + cisco certificaat3. in het bezit van een ict-diploma niveau 4

Schrijf voor deze procedure een PSD.

4

exemplaren = 1ja nee

korting = 50 exemplaren >= 6

ja nee

korting = 10 korting = 40

Page 5: PSD 2003- 2009

Hoofdstuk 2 variabelen

Een simpele voorstelling van het geheugen van een computer is een grote ladekast.In ieder la kan je iets opbergen. Bijvoorbeeld een getal, een letter of een zin. Voordat je iets in la stopt moet je deze la eerst een naam geven. Hier zijn een aantal regels voor.

De naam van een la begint met een letter nooit met een cijfer

Er mag nooit een leesteken in de naam voorkomen. Een naam bestaat uit één woord

Een la is niks anders dan een geheugenplaats.

opdracht5. Noteer welke van de volgende namen er goed zijn:

a. getalb. 2boekc. x,yd. som%e. boek1f. x

Je hebt een la de naam getal1 gegeven. Je wilt er nu een waarde instoppen. Dat kan op twee manieren

manier 1. Met behulp van de opdracht lees getal1. manier 2 Met behulp van een waarde toekenning opdracht de :=

Als je de lees opdracht gebruikt (manier 1), dan wordt er een getal op het toetsenbord ingetikt. Dat getal komt in het laatje met de naam getal1.Gebruik je manier 2 dan stop je er zelf een waarde in. Bijvoorbeeld getal1 := 5. Dit spreek je als volgt uit getal1 wordt 5 (:= betekent wordt)

Kijk nog eens na het eerste voorbeeld

Je hebt vier laatjes gebruikt en je hebt ze genoemd: getal1, getal2, som en gemiddelde.

5

lees getal1,getal2

som := getal 1 + getal2

gemiddelde:= som/2

schrijf gemiddelde

Page 6: PSD 2003- 2009

Met de opdracht lees getal1, getal2. Gaan er twee laatjes open en worden twee getallen in gestopt bijvoorbeeld 10 en 20

10 20

Met de opdracht som:= getal1 + getal 2 worden de getallen opgeteld en de uitkomst wordt in het laatje met de naam som gestopt. (In het laatje getal1 blijft het getal 10 en in het ander laatje 20)

10 20 30

Met de opdracht gemiddelde := som/2 wordt het getal uit het laatje som gehaald, gedeeld door 2 en opgeborgen in het laatje gemiddelde. (In het laatje som blijft het getal 30)

10 20 30 15

Met de laatste opdracht wordt de inhoud van laatje gemiddelde op het scherm getoond.

6

getal1 getal2 som gemiddelde

getal1 getal2 som gemiddelde

getal1 getal2 som gemiddelde

getal1 getal2 som gemiddelde

Page 7: PSD 2003- 2009

In plaats van laatjes te tekenen is handiger om een tabel te maken. Zo’n tabel noem je een geheugentabel. Het geheugentabel van dit voorbeeld ziet als volgt uit

Je hebt gezien dat je voor delen het teken / gebruikt en voor de optelling de +Zo gebruik je voor de vermenigvuldiging het teken * , voor aftrekken de – en voor machtsverheffen ^.

opdracht 6: Schrijf een PSD dat de oppervlakte van een cirkel berekent. Je moet de straal inlezen. (oppervlakte cirkel = 2 * 3,14 * straal2)

opdracht 7: Schrijf een PSD dat het product, deling en de som berekent van de getallen 3, 4 en 5. Bedenk goede namen voor de ‘laatjes’.

Je weet nu dat een laatje een visualisering van een geheugenplaats of geheugenadres is.

Bekijk het onderstaande PSD

Met de opdracht

wordt in geheugenadres T1 het cijfer 1 gezet.

Met de volgende opdracht

wordt in adres T1 het cijfer 1 als ware uitgewist en vervangen door de uitkomst 1 + 2 oftewel 3 (Je kunt ook zeggen het laatje gaat open. Je haalt het cijfertje eruit, tel er 2 bij op en stop de uitkomst er weer in . In dit geval 3)

7

getal1 10

getal2 20

som 30

gemiddelde 15

T1 := 1

T1 := T1 + 2

T2 := T1 + T1

schrijf T1,T2

T1 := 1

T1 := T1 + 2

Page 8: PSD 2003- 2009

Met deze opdracht

Krijgt T2 de waarde 6.

opdracht 8: Schrijf een PSD waarin: De getallen K en L via het toetsenbord ingelezen worden. De uitkomst van de onderstaande formule berekend en afgedrukt wordt.

UIT := (K+L)2/ (K-L)2

8

T2 := T1 + T1

Page 9: PSD 2003- 2009

Hoofdstuk 3 problemen omzetten in een PSD

Het lesgeld van een muziekschool is afhankelijk van het aantal kinderen uit één gezin dat lid is.Het lesgeld bedraagt bij:

1 kind € 300 2 of 3 kinderen € 500 4 of meer kinderen € 650

Je wilt nu een PSD maken dat inleest hoeveel kinderen lid zijn en dan het lesgeld afdrukt.

Je zal nu een aantal geheugen plaatsen gaan benoemen. Je hebt een geheugen plaats nodig waarin het aantal kinderen wordt opgeslagen. De naam van dit plaats kan zijn: aantal kinderen. Dit is echter niet goed. Je weet namelijk dat een naam maar uit één woord mag bestaan. Dit los je op door het aan mekaar te schrijven, dus zo aantalkinderen. Dit leest niet echt plezierig. Daarom laat je het tweede woord beginnen met een hoofdletter; aantalKinderen.Je hebt nog een geheugen plaats nodig voor het lesgeld. Die noem je dan lesgeld.

Om te weten hoeveel lesgeld er betaald moet worden, heb je het aantal kinderen nodig.Je begint met de opdracht

Om er achter te komen wat er is ingevoerd , kun je vragen: aantalKinderen = 1 en daarna aantalKinderen > 3. De tweede opdracht is dan

Nu kun je aangeven wat het lesgeld moet worden. Met de opdracht schrijf lesgeld komt het op het scherm te staan. Op de volgende blz. zie je het uiteindelijke PSD.

9

lees aantalKinderen

aantalKinderen = 1

ja nee

aantalKinderen > 3ja nee

Page 10: PSD 2003- 2009

opdracht 9: Voor het afdrukken van een reclamefolder wordt door een drukkerij het te betalen bedrag zonder BTW als volgt bepaald:

zetkosten: vast bedrag van € 75 papier- en drukkosten: €0,05 per bladzijde

Schrijf een PSD dat aan de hand van het ingelezen aantal bedrukte bladzijden het te betalen bedrag inclusief 19 % BTW afdrukt

Bedenk juiste namen voor de geheugenadressen. Bedenk een formule waarmee je de BTW snel kan uitrekenen.

opdracht 10: Schrijf een PSD dat de getallen X en Y inleest, waarna de inhoud van de getallen X en Y verwisseld wordt.

Dit is een lastige opdracht, maar je zal hiervan vaak gebruik maken. Je verwisselt de inhoud van twee geheugenadressen.

10

X Y

lees aantalKinderen

aantalKinderen = 1ja nee

lesgeld := 300 aantalKinderen > 3

ja nee

lesgeld := 650 lesgeld := 500

schrijf lesgeld

Page 11: PSD 2003- 2009

We noemen de twee geheugenadressen X en Y. In X komt bijvoorbeeld 10 en in Y 40

10 40

De opdracht is nu zorg ervoor dat in X 40 komt en in Y 10 (Hint maak gebruik van nog een geheugenplaats)

opdracht 11: Maak van het hier onderstaande PSD een geheugentabel en geef aan wat de uitvoer is. Ga ervan uit, dat voor G1 de waarde 6 en voor G2 de waarde 9 wordt ingelezen.

opdracht 12: Schrijf een PSD dat van twee willekeurig ingelezen getallen het kleinste getal afdrukt.

opdracht 13: Dit is een moeilijke opgave. Toch moet je dit kunnen oplossen. Je kan de opdracht doorlezen en dan zeggen deze snap ik niet dus sla ik hem over. Dat is niet de bedoeling . Maak gebruik van internet of van personen die volgens jou je verder kunnen helpen. Schrijf een PSD dat drie willekeurig ingelezen getallen sorteert van klein naar groot. Hint: noem de getallen klein, middel en groot en zorg ervoor dat in klein het kleinste getal komt enz.

11

X Y

lees G1 , G2

G3 := G1 + G2 + 15

G3 < 25ja nee

G3 = 25

schrijf G3

Page 12: PSD 2003- 2009

Het maken van een PSD gaat steeds makkelijker als je veel oefent. Daarom volgen hieronder nog een aantal opdrachten. Je kan een PSD ook maken met behulp van het programma StruktoGraaf. Voor de werking van de StruktoGraaf, zie bijlage 1. Vanaf opdracht 14 kun je het programma gebruiken.Bestudeer ook bijlage 2 fouten opsporen.

opdracht 14: Een energie bedrijf hanteert 2 tarieven voor het waterverbruik, en wel tarief 1 : vastrecht € 200,- per jaar en een bedrag van 50 cent per m3

tarief 2: vastrecht € 150,- per jaar en een bedrag van 75 cent per m3

Schrijf een PSD dat het waterverbruik en tariefgroep inleest en vervolgens het te behalen bedrag inclusief 19 % BTW afdrukt.

opdracht 15: Het BTW-tarief wordt dikwijls met een bepaalde code aangegeven,bijvoorbeeld:

code 1 = 0 % code 2 = 6 % code 3 = 19 %

Schrijf een PSD dat de prijs van een artikel en de code van de BTW via het toetsenbord inleest en de prijs van het artikel inclusief BTWW afdrukt.

opdracht 16: In glasfabriek Splinters worden 25 soorten glas vervaardigd. Ten behoeven van de afdeling administratie heeft elk glassoort een code. De prijs exclusief BTW van elk glassoort wordt op basis van de code als volgt samengesteld:

code 1 t/m 10: € 10,- per m2 glas. + € 15,- snijkosten per bestelling. code 11 t/m 20: € 15,- per m2 glas. + € 25,- snijkosten per bestelling. code 21 t/m 25: € 20,- per m2 glas. + € 30,- snijkosten per bestelling

Schrijf het PSD dat, uitgaande van het ingelezen aantal m2 glas en de glascode, afdrukt hoeveel men voor een bepaalde bestelling moet betalen. De BTW bedraagt 19 %.

opdracht 17: In verband met het 100 –jarig bestaan van bedrijf ’Shopping’ is besloten elk personeelslid iets extra te geven een zogenaamde gratificatie. Deze gratificatie bedraagt per personeelslid 5 % van zijn jaarsalaris, verhoogd met 0,5 % per dienstjaar. De gratificatie bedraagt maximaal 20 % van het jaarsalaris. Schrijf een PSD dat van de werknemer het jaarsalaris en het aantal dienstjaren inleest en vervolgens het bedrag van de gratificatie afdrukt.

opdracht 18: Schrijf een PSD dat van een willekeurig ingelezen brutoloon het nettoloon berekent en afdrukt. Voor de inhouding geldt het volgende:

12

Page 13: PSD 2003- 2009

1. Als het weekloon minder dan € 200 bedraagt, wordt er niet ingehouden.2. Als het weekloon niet minder dan € 200 en niet meer dan € 300 wordt er 10 % ingehouden.3. Als het weekloon meer dan € 300 wordt er 30 % ingehouden.

opdracht 19: De hoogte van de contributie van een sportvereniging is afhankelijk van de sport die men beoefent, de leeftijd e3n het aantal jaren dat men lid is van de vereniging.

De contributie voor sportcode 1 bedraagt € 50,- en voor sportcode 2 € 225,-

Leden ouder dan 40 jaar krijgen € 25,- korting. Leden die langer dan 10 jaar lid zijn, krijgen € 20,- korting.

Schrijf een PSD dat van een lid de sportcode, de leeftijd en het aantal jaren lidmaatschap inleest en het bedrag van de verschuldigde contributie afdrukt

opdracht 20: Van een aantal artikelen wordt de prijs verhoogd op de volgende manier: als de prijs meer is dan € 150 komt er 19% bij; artikelen die goedkoper zijn dan € 55 worden 11% duurder; de rest wordt 16% in prijs verhoogd.

Maak een PSD dat een prijs leest en de nieuwe prijs afdrukt.

opdracht 21: Maak een PSD voor het omrekenen van een temperatuur in graden Celsius naar graden Fahrenheit: F = 1,8*C+32

opdracht 22: Maak een PSD voor een stukje programma in een digitale radiowekker Twee getallen vormen de invoer, noem ze UUR en MIN. Ze stellen een tijdstip voor in uren en minuten. Bijvoorbeeld: 18 en 59 staan voor 18.59 uur. Maak het stukje PSD dat bij elk tijdstip de volgende minuut bepaalt. Bijvoorbeeld 17.24 uur wordt 17.25 uur en 18.59 uur wordt 19.00 uur.

13

Page 14: PSD 2003- 2009

Hoofdstuk 4 De herhaling

Je krijgt de opdracht om van 10 getallen het gemiddelde uit te rekenen. Dit kun je als volgt oplossen. Je maakt een PSD dat 10 getallen inleest, daarna worden ze bij elkaar opgeteld en als laatste wordt het gemiddelde uitgerekend. Zie onder staande PSD

Je merkt dat je iets steeds herhaalt, namelijk lees getal. Het gene wat je steeds herhaald, kun je in een lus zetten. Een lus is niks anders dan een programmadeel dat steeds herhaald wordt.In een PSD ziet een lus er als volgt uit

Nu moet je ervoor zorgen dat je in de lus komt en er natuurlijk ook weer een keer uit.

14

lees getal1 lees getal2 lees getal3 lees getal4 lees getal5 lees getal6lees getal7 lees getal8lees getal9lees getal10

som:= getal1+getal2+getal3+getal4+getal5+getal6+getal7+ getal8+getal9+getal10

gemiddelde := som /10

schrijf gemiddelde

hier staat de voorwaarde om in de lus te komen.

dit is de lus.

Page 15: PSD 2003- 2009

Dit gaat als volgt. Je weet dat je 10 getallen moet inlezen. Je geeft een geheugenplaats de naam teller. De teller krijgt een startwaarde van 1. In de lus ga je de teller steeds met 1 op hogen. Dat kun je als volgt doen

teller := teller +1

De voorwaarde om met de lus door te gaan is nu vrij eenvoudig te bedenken. Zolang de teller kleiner of gelijk is aan 10 ga door met de lus. In onderstaande PSD is dit nu ingevuld.

Onthoud nu:

regel 1 heb je nodig om in de lus te komen regel 2 is de voorwaarde om met de lus door te blijven gaan regel 3 zorgt ervoor dat je een keer uit de lus kan komen.

In de lus ga je nu getallen inlezen en bij elkaar optellen en buiten de lus wordt het gemiddelde berekend. Op de volgende bladzijde zie je het resultaat

15getal1 getal2 som gemiddelde

teller:= 1 regel 1

zolang teller < = 10 regel 2

teller := teller + 1 regel 3

Page 16: PSD 2003- 2009

opdracht 23: a. Leg uit waarom bij regel 1 de som op nul wordt gezet. b. Wat gebeurt precies bij regel 2.

Om deze vraag te beantwoorden is het handig om het volgende te doen. Stel dat voor getal de volgende getallen zijn ingetikt: 1, 3, 5, 3, 6, en 7. Maak dan een geheugentabel voor som en getal. Wat is de som dan?

Je krijgt van een medewerker van het K.N.M.I de opdracht om een PSD te schrijven voor het volgende probleem.In de maand januari willen ze iedere dag om 12:00 uur de temperatuur buiten meten. Ze willen weten hoe vaak de temperatuur onder nul is.

Wel, je weet dat januari 31 dagen heeft en iedere dag moet je een temperatuur invoeren. Het invoeren van de temperatuur doe je dan in een lus. Deze lus wordt 31 keer uitgevoerd. In de lus maak je een tweede teller, die bijhoudt hoe vaak de temperatuur onder nul is geweest. Deze teller noem je bijvoorbeeld onderNul.De PSD staat op de volgende bladzijde.

16

teller := 1

som := 0 regel 1

zolang teller <= 10

lees getal

som:= som + getal regel 2

teller := teller + 1

gemiddelde:= som /teller

schrijf gemiddelde

Page 17: PSD 2003- 2009

opdracht 24: Schrijf een PSD waarin de som van de getallen 1 tot en met 20 bereken en afgedrukt wordt.

opdracht 25: Schrijf een PSD dat de uitkomsten van de tafel van 6 afdrukt.

opdracht 26: Schrijf een PSD (zonder lees opdracht) dat de som bepaald en afdrukt van de volgende reeks getallen. 10, 20, 30 ,40 ,50, 60 ,70, 80 ,90 en 100

opdracht 27: Schrijf een PSD (zonder lees opdracht) dat de som bepaald en afdrukt van de volgende reeks getallen. 50, 45, 40, 35, 30, 25, 20, 15, 10, 5, 0 en –5

opdracht 28: Schrijf een PSD voor het volgende probleem. Van 8 getallen moet je het kleinste getal eruit halen en op het scherm worden getoond.

Hoeveel geheugen adressen heb je nodig ? Hoe ziet de lus eruit?

opdracht 29: Maak een PSD dat een positief geheel getal vraagt en vervolgens laat aftellen tot 0.

17

teller := 1

onderNul := 0

zolang teller <= 31

lees temperatuur

temperatuur < 0

ja nee

onderNul := onderNul + 1

teller := teller + 1

schrijf onderNul

Page 18: PSD 2003- 2009

opdracht 30: Een docent wenst met behulp van de computer een overzicht van het totaal aantal behaalde voldoendes en het totaal aantal behaalde onvoldoendes voor een proefwerk. Schrijf een PSD dat

het totaal aantal leerlingen inleest dat aan het proefwerk heeft deelgenomen

van elke leerling het behaald cijfer inleest

de gewenste gegevens afdrukt

opdracht 31: Maak een PSD dat maximaal 3 keer om een wachtwoord vraagt en controleert of het ingevoerde woord klopt. Gebruik de herhalingsstructuur.

opdracht 32: Schrijf een PSD dat eerst één getal inleest en vervolgens van dit ingelezen getal de machten 0 tot en met 16 afdrukt.

opdracht 33: Er bestaat een methode om van twee getallen de grootste gemene deler (GGD) uit te rekenen. Het is gebaseerd op delen met rest. Het gaat als volgt: Deel de grootste door de kleinste. Deel vervolgens de kleinste door de rest. Ga zo door tot de rest 0 is. Het getal

waardoor gedeeld werd is dan de GGD Voorbeeld: De GGD van 791 en 175:

791 : 175 = 4 rest 91175 : 91 = 1 rest 8491: 84 = 1 rest 784:7 = 12 rest 0 De GGD is 7

Maak gebruik van de volgende twee bewerking mod en div.Met behulp van mod bepaal je de rest en met div bepaal je het gehele deel van

de deling

Voorbeeld 27 div 4 = 6

27 mod 4 = 3 ( ga dit na)

Maak hiervan een PSD. Als je niet weet wat GGD is, zoekt het dan even op (internet?)

18

Page 19: PSD 2003- 2009

De lussen die je tot nu hebt gemaakt, daarvan weet je van te voren hoe vaak het herhaald moet worden. Deze lussen worden dan ook een tellend lus genoemd. Het kan ook gebeuren dat je niet weet hoe vaak een lus herhaald moet worden. Zo’n lus wordt dan een niet- tellende lus genoemd.

Kijk eens naar het volgende probleem. Je wilt van een aantal getallen het grootste getal eruit halen. Je weet niet precies uit hoeveel getallen. Je weet wel dat de getallen allemaal groter zijn dan nul.Je moet ervoor zorgen dat je in de lus komt en er weer uit zonder dat je een teller gebruikt. Dat kan je als volgt gaan doen. Je weet dat de getallen die je intikt groter dan nul zijn. De getallen –1, -2 , -3500 enz. komen er zeker niet in voor. Als je één van de vorige getallen intikt moet je uit de lus gaan Je maakt een PSD met de volgende voorwaarde:

De uitdrukking > betekent groter dan . Dus er staat zolang het getal niet kleiner dan0 is ga verder met de lus.Hoe kom je nu in de lus? Door getal een waarde te gegeven. Dit kan bijvoorbeeld met lees getal.

Als je nu voor getal een waarde intikt die groter is dan 0 is dan kom je in de lus. Maar je wilt er ook een keer uit. Je moet dan de mogelijkheid krijgen om het getal in te tikken dat kleiner is dan 0. Dit kun je voor mekaar krijgen door in de lus de opdracht lees getal te plaatsen.

19

Zolang getal > 0

lees getal

Zolang getal > 0

Page 20: PSD 2003- 2009

Nu nog het probleem oplossen. Als je één getal in voert is dat meteen het grootste getal. Onder de opdracht lees getal, nog buiten de lus, geef je de opdracht

In de lus ga je na of het volgende getal, wat ingelezen wordt, groter is. Als dat het geval is dan krijgt grootsteGetal de waarde van dat getal.

Dit alles moet samen worden gevoegd in één PSD

20

lees getal

Zolang getal > 0

lees getal

grootsteGetal := getal

grootsteGetal >= getalja nee

grootsteGetal := getal

lees getal

grootsteGetal := getal

zolang getal > 0

grootsteGetal >= getal

ja nee

grootsteGetal:= getal

lees getal

schrijf grootsteGetal

Page 21: PSD 2003- 2009

Nog een voorbeeld. Een docent wil van een klas het gemiddelde cijfer bepalen van een proefwerk. Van te voren staat niet vast over hoeveel leerling het gaat.Je moet nu eerst een sluitgetal bedenken. Welk getal kun je niet halen voor een proefwerk?Bijvoorbeeld een 11.Omdat je gemiddelde wilt bepalen moet je achteraf wel weten hoeveel cijfers er zijn ingetikt. Je laat dus een teller meelopen.Tevens moeten de cijfers worden opgeteld in de lus.Het PSD is dan als volgt.

opdracht 34: Beantwoord de volgende vraag Waarom begint de teller niet met 1?

opdracht 35: Schrijf een PSD dat van een groep leerlingen: de proefwerkcijfers inleest berekent hoeveel leerlingen een cijfer lager dan 6 behaald hebben het aantal leerlingen afdrukt met een lager cijfer dan 6

Neem als sluitgetal het getal 101.

opdracht 36: Schrijf een PSD dat van een aantal ingevoerde positieve en negatieve getallen de som afdrukt van:

de positieve getallen de negatieve getallen

Wat is een geschikt sluitgetal?

opdracht 37: Schrijf een PSD dat een aantal getallen inleest en alleen van de getallen die groter zijn dan 100, de som bepaalt en afdrukt. Het sluitgetal = 0

21

lees proefwerkCijfer

teller:= 0

som := 0

zolang proefwerkCijfer <> = 11

som:= som + proefwerkCijfer

teller := teller + 1

lees proefwerkCijfer

gemiddelde : =som /teller

schrijf gemiddelde

Page 22: PSD 2003- 2009

opdracht 38: Schrijf een PSD dat een ingelezen getal alleen vermenigvuldig met 3, de nieuwe waarde hiervan weer met 3 enz., zolang de waarde kleiner is dan 500. Tenslotte dienen de laatste waarde van het getal en het aantal herhalingen afgedrukt worden.

opdracht 39: Schrijf een PSD dat van een bedrijf: Van elke werknemer het werknemersnummer, de leeftijd en het aantal

dienstjaren inleest. Het gemiddelde aantal dienstjaren berekent en afdrukt van alle

werknemers die ouder dan zijn dan 40.

Neem als sluitgetal 99

opdracht 40: Maak een PSD dat laat raden naar een getal onder de 10.

22

Page 23: PSD 2003- 2009

hoofdstuk 5 programmeren (verdieping) Toevalsgetallen, 'afronden' en rijen, ofwel de functies RANDOM en INT, en arrays.

Alle programmeertalen bevatten een functie die willekeurige getallen kan genereren. Ook StruktoGraaf heeft zo'n functie: RANDOM. Deze levert toevalsgetallen tussen de 0 en 1 op. Wil je een toevalsgetal tussen 0 en 7 toekennen aan een variabele a ( een variabele is een wezen een laatje), dan geef je de opdracht a:= 7 * RANDOM. Wil je een toevalsgetal tussen 1 en 8, dan geef je de opdrachta:= 7 * RANDOM + 1

Een andere functie die in veel programmeertalen voorkomt is INT (van integer, geheel getal). Deze functie kapt een (positief) reëel getal af (dwz, verwijdert het gedeelte achter de komma) zodat er een geheel getal overblijft. Bijvoorbeeld: INT(5.23) = 5, INT(0.731) = 0, INT(√10) = 3, maar INT(-3.6)= -4 en INT(-2.1) = -3.

opdracht 41: Maak een PSD dat een dobbelsteen simuleert, gebruik de random functie.

opdracht 42: Marloes heeft een prijs gewonnen van € 100.000 en zet dit bedrag per 1 januari a.s op de bank tegen 4% rente per jaar. Aan het eind van ieder jaar neemt zij een willekeurig bedrag op. Maak een PSD dat als invoer heeft dat bedrag, wat zij opneemt, en als uitvoer de grootte van het kapitaal, steeds per 1 januari, afgerond op hele euro's.

Als je van een geheel getal (bijv. 753) het laatste cijfer wilt hebben kan je de INT-functie op de volgende manier gebruiken: deel het getal door 10 en neem de INT van de uitkomst. Vermenigvuldig die INT-uitkomst met 10 en trek dit af van het oorspronkelijke getal. Het getal dat je nu vindt is het laatste cijfer.

opdracht 43: Maak een PSD dat het laatste cijfer geeft het van het getal 175.

opdracht 44: Maak een PSD dat de laatste twee cijfers van een ingevoerd getal geeft. Controleer je programma met: 156, 3458910, 12500, 12 en 5.

23

Page 24: PSD 2003- 2009

ArraysSoms is het handig om een hele rij variabelen (van hetzelfde type) met één naam te beschrijven. Daarvoor heb je de beschikking over arrays.Een array is een tabel die bestaat uit één rij. De naam van een array eindig altijd met Rij. Een array die bestaat uit getallen kan je dan getallenRij noemen en een letterRij bestaat uit letters.

Stel je voor dat je 10 getallen in een array wilt plaatsen, zie onderstaande tabel. Hoe gaat dat in z’n werk?

index 1 2 3 4 5 6 7 8 9 10getallenRij 23 175 25 34 4 76 12 33 66 9

De naam van de array is getallenRij. Als je nu het vierde getal wilt hebben, geef je de opdracht schrijf getallenRij [4] . Wil je achtste getal veranderen dan geef je de opdracht getallenRij [ 8] := 3. enz.

Het vullen van een array doe je met behulp van een luststructuur. Zie onderstaande PSD.

Als je de inhoud van een array op het scherm wilt tonen, maak je ook gebruik van een lusstructuur. Zie onderstaande PSD

24

i := 1

t := 2

zolang i <= 10

getallenRij[i] := t

t := t +2

i: = i+1

i := 1

zolang i <= 10

schrijf getallenRij[i]

i: = i+1

Page 25: PSD 2003- 2009

opdracht 45: Voeg de laatst twee PSD’s samen en geef aan wat de uitkomst is.

opdracht 46: Maak een PSD dat vijf getallen inleest (maak gebruik van een array). Daarvan het gemiddelde uitrekent. Als uitvoer moet er op het scherm komen te staan de vijf getallen plus het gemiddelde.

opdracht 47: Maak een PSD dat vier getallen inleest en deze getallen sorteert van klein naar groot. Maak gebruik van een array.

strings

Strings zijn variabelen die tekst bevatten in plaats van getallen. Die tekst kan bestaan uit één karakter (letter of symbool), een hele zin (in StruktoGraaf max 200 karakters) of helemaal geen karakters (een lege string). Een stringvariabele krijgt een waarde door een toekenning, bijv. naam := "Jan Klaasen".De karakters uit zo'n string kan je apart in een variabele opslaan. Bijvoorbeeld naam[1] is "J" en naam[6] is "i". LET OP: de spatie naam[4] telt ook mee!Met naam[5:8] krijg je de substring die bestaat uit het 5e tot en met 8e karakter, dus "laas". Met de functie LEN kan je het aantal karakters van een string te weten komen: LEN(naam) heeft de waarde 11. Een string is een bijzonder array.

opdracht 47: Maak een PSD dat twee woorden (of zinnen) leest en dan afdrukt of het tweede woord langer, korter of even lang is als het eerste woord, en hoeveel karakters dat scheelt.

opdracht 48: Maak een PSD dat een woord inleest (van minimaal 8 karakters) en daarna de substring afdrukt die bestaat uit de laatste vijf karakters. Is het woord korter dan 8 karakters, moet er een foutmelding afgedrukt worden.

Uit twee strings kan een nieuwe string gemaakt worden door ze aan elkaar te rijgen (concateneren betekent plakken). We gebruiken daarvoor de + operator.Bijvoorbeeld: na de opdrachten naam := "Jan" en woord := "Klaassen" geeft de opdracht nieuw := naam + woord aan de string nieuw de waarde "JanKlaassen" (zonder spatie!).

Als je een string karakter voor karakter wil opbouwen (in een lus bijvoorbeeld) is het vaak handig om met de lege string te beginnen. Zie het volgende PSD.

25

Page 26: PSD 2003- 2009

Dit PSD levert op het scherm de string 'adgjmpsvy'. Ga dit na.

opdracht 49: Maak een PSD dat een ingelezen woord 'achterstevoren' weer afdrukt.

opdracht 50: Een palindroom is een woord of getal dat achterstevoren gelezen hetzelfde woord of getal oplevert, zoals ‘lepel’, ‘negen’,46564, etc. Maak een PSD dat bepaalt of een ingelezen woord een palindroom is en de juiste conclusie afdrukt.

26

naam := “abcdefghijklmnopqrstuvwxyz”

nieuw := “ “ {lege string}

i := 1

zolang i <= 26

nieuw := nieuw + naam [i]

i := i + 3

schrijf “de gemaakte string is : “,nieuw

Page 27: PSD 2003- 2009

De functies ASC en CHR.Zoals je weet worden ook letters, leestekens e.d. in een computer voorgesteld door getallen. Er is een afspraak gemaakt welk karakter door welk getal voorgesteld wordt. Deze lijst is de ASCII-tabel (Zoek op internet naar een ASCII-tabel)Daarin kan je o.a. vinden dat de letters A t/m Z de ASCII-waarden 65 t/m 90 gekregen hebben; bij de letters a t/m z horen de getallen 97 t/m 122 en de spatie heeft ASCII-waarde 32. In programmeertalen bestaan er functies die bij een karakter vertellen welke ASCII-waarde hij heeft en, omgekeerd, die je bij een opgegeven waarde (van 0 t/m 255) het bijbehorende karakter geeft. In Struktograaf geldt dit ook: het zijn de functies ASC en CHR. Bijvoorbeeld:

ASC(“a”) geeft de ASCII-waarde van de kleine letter a, ofwel 97;CHR(100) geeft het karakter met ASCII-waarde 100, ofwel de kleine letter d.

Vb:Dit programma drukt achtereenvolgens de ASCII-waarden van de letters t, a, b, e en l af. Ga

dit na.

Voorbeeld:Dit programma maakt een ‘woord, bestaande uit de hoofdletters A t/m J en drukt dit af. Ga dit

na.

opdracht 51: Maak een PSD dat van een ingelezen karakter de ASCII- waarde geeft.

opdracht 52: Maak een PSD dat van een ASCII- waarde de bijbehorende karakter geeft.

opdracht 53: Maak een PSD dat van een ingelezen zin (bestaande uit (hoofd-)letters, spaties en een punt) uitzoekt welke letters er in voorkomen en van elke letter zegt hoeveel er voorkomen. De uitvoer is de zin, met daaronder een lijstje van de voorkomende letters met de aantallen.

27

woor d: ="t abel "

i : =1

ZOLANG i <=5

schr i j f asc( woor d[ i ] )

i : =i +1

ni euw: =""

voor i : =0 t m 9

ni euw: =ni euw + chr ( 65+i )

schr i j f ni euw

Page 28: PSD 2003- 2009

opdracht 54: Je kunt een simpel geheimschrift maken door alle letters in een woord te vervangen door een letter die een vast aantal plaatsen (bijv. 4) verderop in het alfabet staat. Dus dan a e, b f, k o en p t. Maak een PSD dat een woord inleest en daar dan zo'n codering op toepast. Ga er van uit dat het woord alleen kleine letters bevat. Test je programma met: aardbei, zwaardvis en informatica.

opdracht 55: Er zijn talen die geen klinkers kennen. Maak een PSD dat een zin inleest, alle klinkers uit die zin verwijdert en het resultaat afdrukt.

28

Page 29: PSD 2003- 2009

bijlage 1 werking StruktoGraaf

Het werken met StruktoGraaf

Je gaat nu werken met het programma StruktoGraaf: een programma dat je in staat stelt om op een eenvoudige manier (het technische gedeelte van) PSD's te maken. Bovendien kan het je PSD vertalen naar een programmeertaal (genereren) en het programma laten werken, zodat je direct kunt controleren of het PSD doet wat je bedoelde.

Start het programma StruktoGraaf. (Start – Programma's – Informatica) Kies Bestand Nieuw of druk op Ctrl-N of klik op de knop met het lege vel in de

horizontale knoppenbalk. (zie ook de afbeelding hieronder) Je maakt als voorbeeld de tafel van 7. Zet de cursor links bovenin het scherm en typ: {De

tafel van 7}. Klik op de knop met de rode rechthoek in de verticale knoppenbalk. Klik vervolgens ergens in het tekenvenster. Er verschijnt een leeg rechthoekje (met de

cursor). Klik dan op de knop met de horizontale lijn en vervolgens op de onderkant van of binnen

in het zojuist getekende diagram. Er is een nieuw rechthoekje bijgemaakt. Klik op de knop met het zolangdiagram (het herhalingsdiagram) en vervolgens binnen het

onderste rechthoekje. Het PSD bestaat nu uit een lege rechthoek (een procesdiagram) gevolgd door een herhalingsdiagram.

Maak nu het diagram verder af door een klik op de knop met de horizontale lijn en tot slot een klik binnen het door het zolangdiagram omsloten PSD. Het totaal moet er nu als volgt uitzien (afgezien van de zeven extra regels tekst aan de linkerkant):

29

Page 30: PSD 2003- 2009

In de afbeelding hierboven is ook van de zes belangrijkste knoppen in de verticale balk de betekenis gegeven. Je kunt e.e.a. ook teruglezen bij de helpfunctie. ( help – inhoudsopgave – introductie). De helpfunctie is ook handig als je de opdrachten moet maken. Je kunt o.a. een aantal voorbeelden bekijken en de syntax van StruktoGraaf. Completeer het PSD door de programmaregels in het diagram in te typen en wel als volgt:

- n:=1- ZOLANG n<=10- SCHRIJF n,” x 7 = “, n*7- n :=n+1

Opmerkingen: Typ eens achter de laatste opdracht (n:=n+1) een lange rij uitroeptekens. Je ziet dat de

breedte van de figuur vanzelf aangepast wordt. Veeg nu die uitroeptekens weer uit; het PSD blijft even breed! Om het PSD de best passende afmeting te geven druk je nu op de knop met de twee pijlen in de horizontale menubalk (links naast de 'ongedaan-maken’-knop).

Als je na het maken van het 'frame' van het PSD wil gaan beginnen met het typen van tekst, is het handig om eerst op het schuine pijltje linksboven ('selecteren') te klikken. Je kunt dan met de muis de cursor overal neer zetten om te typen of te wissen, zonder dat er nieuwe cellen ingevoegd worden.

Kies CodeGenereren. Het PSD wordt nu door Struktograaf vertaald naar een echt computerprogramma. Dit heet compileren. Als het compileren lukt krijg je de melding hiernaast:

Als het PSD niet in één keer goed genereerd wordt krijg je een foutmelding. Klik op de knop, dan verschijnt er een venster als hieronder.

Onderaan in het venster staan foutmeldingen. Als je die aanklikt gaat de cursor naar de regel waar een fout zit. In dit geval is er een dubbele punt getypt, waar een := teken had moeten staan.

Verbeter de fout(en) en genereer opnieuw.

30

Bij de schrijfopdracht staan er nu drie opdrachten in één opdracht; ze worden nu op één regel afgedrukt. Let op de scheidingskomma's en het gebruik van spaties binnen de aanhalingstekens.

Page 31: PSD 2003- 2009

Kies na correcte compilatie CodeUitvoeren of Ctrl-F9 of de knop met de raket. Nu wordt de uitvoering gestart en de tafel van 7 verschijnt op het scherm. Met een druk op een toets verdwijnt dit scherm weer.

Om je PSD op te slaan: klik op het diskette-symbool links in de menubalk en geef in het dan geopende venster aan waar je het PSD wil bewaren: neem een (aparte) diskette (A:) of gebruik je eigen gedeelte van de harde schijf (H:). Neem als naam voor het bestand: opgave nr. ….

31

Page 32: PSD 2003- 2009

Bijlage 2 Fouten opsporen

Een PSD dient (rechtstreeks) om te zetten te zijn in een correct functionerend programma. Om de werking van een PSD te begrijpen of te controleren is het noodzakelijk om de opdrachten na te lopen. Daarbij worden de opdrachten stap voor stap op papier uitgevoerd. Dit heet een ooggetuigenverslag. Zie het volgende voorbeeld.

Als je een PSD gemaakt hebt dat na compilatie géén foutmeldingen meer geeft wat betreft de syntax, maar toch niet doet wat je er van verwacht, bevat het een logische fout. Een manier om zo'n fout te ontdekken is het maken van een ooggetuigenverslag van het gedeelte van het PSD waar je vermoedt dat de fout zit. Een andere manier is om StruktoGraaf het PSD stap voor stap te laten doorlopen. Dat doe je door na een geslaagde compilatie te kiezen voor: Code/Doorlopen. Voor het programmaatje van bladzijde 6 bovenaan krijg je dan het volgende venster te zien:

regel p q p>-3q commentaar1 5 Toekenning van waarde 5 aan p 2 5 -1 Toekenning van waarde –1 aan q3 5 -1 waar 5 is groter dan (-3*-1=) 3.4 3 -1 p krijgt waarde p+2q, dus 3.5 3 2 q krijgt waarde –2q, dus 2. Nu

terug naar regel 3.3 3 2 waar 3 is groter dan (-3*2=) -64 7 2 p krijgt waarde p+2q, dus 7.5 7 -4 q krijgt waarde –2q, dus -4. Nu

terug naar regel 3.3 7 -4 niet

waar7 is niet groter dan (-3*-4=) 12, dus nu naar regel 6.

6 7 -4 Afgedrukt wordt: p=77 7 -4 Afgedrukt wordt: q=-4

32

Voorbeeld PSD

Ooggetuigenverslag

{1} p: =5

{2} q: =- 1

{3} ZOLANG p>- 3q

{4} p: =p+2q

{5} q: =- 2q

{6} schr i j f "p=" , p

{7} schr i j f "q=" , q

Page 33: PSD 2003- 2009

Klik op de knop 'Stappen' en de volgende opdracht, dat is de regel die door de zwarte balk aangegeven wordt, wordt uitgevoerd. Elke klik op die knop laat de volgende opdracht uitvoeren. Daarbij worden de waarden van de variabelen in het linker schermpje getoond, terwijl het scherm rechtsonder de uitvoer (of invoer) van het programma laat zien. Probeer dit uit! Deze 'debugger' (foutenzoeker) komt vaak van pas!

33