Professional Documents
Culture Documents
PSD Programmeren
PSD Programmeren
J. van Dort
Mollerlyceum
Bergen op Zoom
Door deze basisstructuren te combineren kan je voor elk programma een PSD maken.
Programmastructuurdiagrammen jvd
13-3-2003 2
Dit programma doet het
volgende:
Eerst wordt er een tekst op
het scherm afgedrukt: de
vraag 'Van welk getal wil je
het kwadraat?'. (Dat wat
tussen de aanhalingstekens
staat wordt letterlijk
afgedrukt.)
De volgende opdracht 'lees
getal' laat het programma
wachten totdat de gebruiker
een getal ingetoetst heeft. De term getal kan je zien als de naam van een
geheugenplaats in de computer en die kan elke waarde bevatten die de gebruiker van
het programma intikt. We noemen dit een variabele omdat getal elke keer een andere
(dus veranderlijke) waarde kan krijgen. De term kwadraat is dus ook een variabele.
Er zijn verschillende soorten variabelen. De twee hoofdtypen zijn: numerieke variabelen, voor het
opslaan van getallen; alfanumerieke, voor het opslaan van tekenreeksen (Eng: strings). Er zijn
aparte numerieke typen variabelen voor het opslaan van gehele getallen (Eng: integer) en voor
reële getallen (Eng: real, of: double). Met numerieke variabelen kan je rekenen, alfanumerieke
variabelen worden gebruikt om tekst op te slaan.
De volgende opdracht maakt de waarde van de variabele kwadraat gelijk aan de waarde
van getal maal getal. Anders gezegd: aan (de variabele) kwadraat wordt de waarde
getal * getal toegekend. Het symbool := gebruik je bij de toekennings-opdracht:
kwadraat wordt getal keer getal.
De volgende opdracht is weer een schrijfopdracht voor een regel tekst (te herkennen aan
de aanhalingstekens).
De laatste opdracht is ook een schrijfopdracht, maar nu wordt de waarde van de
variabele kwadraat afgedrukt (geen aanhalingstekens!).
Opgave 1
Maak in je schrift een PSD dat drie getallen leest en het gemiddelde van die drie getallen
afdrukt.
Zorg er voor dat aan de gebruiker van het programma duidelijk gemaakt wordt wat er
van hem verlangd wordt. Een leeg scherm met een knipperende cursor zegt de meeste
mensen niets, dus laat bijv. het doel van het programma afdrukken ("Dit programma
berekent het gemiddelde van drie door U in te voeren getallen.") Vraag daarna om die
getallen in te voeren, en vermeld de betekenis van de uitvoer.
In het algemeen geldt: maak programma's gebruikersvriendelijk!!!
§4 Commentaar
Commentaar is tekst (géén programmacode) die in een programma tussengevoegd
wordt en bijvoorbeeld nuttig is bij een latere wijziging of uitbreiding van het programma,
of om bepaalde gedeelten van een programmacode of PSD toe te lichten. Zie de tekst
tussen accolades in het PSD hierboven. Begin een programma steeds met een stukje
commentaar waarin je de auteur van het programma aangeeft en een korte omschrijving
van het doel van het programma. Bij het huiswerk vermeld je ook steeds het nummer
van de opgave.
Opgave 2
Een stalen balk met hoogte h en breedte b die voor een lengte l uit een (stevige)
constructie steekt kan aan zijn uiteinde maximaal een gewicht g dragen dat berekend
Programmastructuurdiagrammen jvd
13-3-2003 3
kan worden met de formule . (Hierbij zijn de lengtematen in cm en g in kg.)
Maak in je schrift een PSD dat de drie maten leest en het maximale gewicht berekent en
afdrukt.
§5 De herhaling
Bovenstaande programma's waren rechttoe rechtaan: alle opdrachten werden van boven
naar beneden door het PSD gaand in die volgorde uitgevoerd. In veel situaties moet een
groep opdrachten echter herhaald worden. Een voorbeeld is het volgende programma:
Opgave 3
Maak in je schrift een PSD dat uitrekent hoeveel er uitkomt als je de eerste honderd
kwadraten bij elkaar optelt, en die uitkomst op het scherm afdrukt.
§6 De keuze
Soms is het (verdere) verloop van een programma afhankelijk van de waarde die een
variabele op een gegeven moment krijgt. Er moet dan gekozen worden welk van de
mogelijkheden er gebruikt moet worden.
Bij een keuze is er sprake van een voorwaarde ofwel conditie en een tweetal
handelingen, waarbij kenmerkend is dat óf de ene óf de andere handeling wordt
uitgevoerd. Welke actie wordt uitgevoerd is afhankelijk van het feit of aan de voorwaarde
is voldaan of niet.
N.B. Er bestaan ook constructies waarbij je naar aanleiding van de waarde van een variabele uit
méér dan twee handelingen kan kiezen. Deze zullen in deze lesbrief echter niet besproken worden.
Programmastructuurdiagrammen jvd
13-3-2003 4
Als getal1 groter is dan getal2
dan krijgt max de waarde
van getal1,
anders krijgt max de
waarde van getal2.
Opm: De ampersand ( d.i. het &-teken) achter de schrijfopdracht zorgt er voor dat de volgende schrijfopdracht
de tekst direct achter déze tekst plaatst. Wil je van meerdere variabelen de waarden afdrukken in één
schrijfopdracht, dan kan dat ook door die variabelen met komma's ertussen achter de schrijfopdracht te
vermelden. De twee laatste schrijfopdrachten uit dit PSD kunnen dus ook vervangen worden door één
opdracht: schrijf "Het grootste van deze getallen is: ", max.
Opgave 4
Maak in je schrift een PSD dat twee getallen leest en dan het grootste getal met 2
vermenigvuldigt en daarna optelt bij het andere. Daarna wordt de uitkomst afgedrukt.
Programmastructuurdiagrammen jvd
13-3-2003 5
! 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):
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.
Programmastructuurdiagrammen jvd
13-3-2003 6
! Kies Code!Genereren. 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 gecompileerd kan worden 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.
wordt de uitvoering gestart en de tafel van 7 verschijnt op het scherm. Met een druk
op een toets verdwijnt dit scherm weer.
Programmastructuurdiagrammen jvd
13-3-2003 7
@ 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. …. Overigens wordt iedere keer als je een compileer-
opdracht geeft het huidige PSD automatisch op schijf opgeslagen, zodat de laatste
versie steeds bewaard wordt.
Opgave 5
Maak van de opgaven 1 t/m 4 een PSD in Struktograaf, compileer en test elk PSD.!
N.B. Het is altijd verstandig om een programma éérst op te slaan, en pas daarna te
testen. Als het niet (goed) werkt kan je de programmacode kwijtraken als de computer
vastloopt!!
Opgave 6
Maak een PSD van een programma dat (met een herhalingslus) bepaalt wat de uitkomst
is als je de getallen 1,2,3….tot en met een getal dat je in moet voeren met elkaar
vermenigvuldigt, en daarna de uitkomst op het scherm toont. (Als je dus bijvoorbeeld het
getal 6 invoert, wordt er uitgerekend hoeveel 1x2x3x4x5x6 is en de uitkomst 720 wordt
op het scherm afgedrukt.)
Opgave 7
Maak een PSD dat twee getallen (die kleiner dan 1000, het eerste kleiner dan het
tweede) inleest en dan alle kwadraten die voorkomen tussen die twee getallen afdrukt.
(Dus als je bijvoorbeeld eerst 10 en dan 50 invoert, krijg je het lijstje met de volgende
kwadraten: 16, 25, 36, 49.)
§8 Fouten opsporen
Programmastructuurdiagrammen jvd
13-3-2003 8
Opgave 8
Ga na aan de hand van een ooggetuigenverslag wat het hieronder links staande
programma zal afdrukken. Maak het ooggetuigenverslag in Word en sla het op.
Opgave 9
Zie het PSD hier rechtsboven.
a. Wat wordt er getoond als het invoergetal gelijk is aan 13?
(Maak een ooggetuigenverslag in Word)
b. Wat wordt er getoond als het invoergetal gelijk is aan 20?
(Maak een ooggetuigenverslag in Word)
Opgave 10
Maak een PSD dat drie getallen leest en dan de kwadraten van de kleinste twee van die
getallen bij elkaar optelt en het resultaat afdrukt. Laat de uitvoer afdrukken in een
Nederlandse zin. (Bijvoorbeeld: invoer van de getallen 9, 17 en 11 geeft op het scherm:
'Als je de kwadraten van de kleinste twee getallen optelt krijg je: 202.)
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:
Programmastructuurdiagrammen jvd
13-3-2003 9
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!
Opgave 11
Maak een PSD dat een beginkapitaal en een rentepercentage inleest en vervolgens een
tabel (dwz twee kolommen naast elkaar, zonder opmaak) afdrukt met de jaartallen vanaf
dit jaar tot over 20 jaar en de waarde van het kapitaal in dat jaar. Vergeet niet bij de
uitvoer een titel boven de kolommen te zetten. Je hoeft het kapitaal (nog) niet af te
ronden op hele euro's, o.i.d. Bijvoorbeeld: als je kiest voor beginjaar 2003, kapitaal
10.000 en rente 7% krijg je (ongeveer) het volgende op het scherm:
Jaar Kapitaal
2003 10000
Bedenk dat als je een getal met 7% wil verhogen je
2004 10700
het makkelijkst dat getal kunt vermenigvuldigen met
2005 ..
het getal 1,07!
2006 ..
Wil je er 7% van afhalen, vermenigvuldig je met 0.93!
..
..
2022 ..
Opgave 12
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. Geef de uitvoer weer in een
Nederlandse zin.
Programmastructuurdiagrammen jvd
13-3-2003 10
Opgave 13
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 bedrag op
van ! 5000. Maak een PSD dat berekent hoe lang zij dit zal blijven kunnen doen. Mocht
dit méér zijn dan 50 jaar, moet er afgedrukt worden: 'Tot aan je pensioen.'
Opgave 14
Maak een PSD dat een tabel afdrukt van de eerste honderdvijftig getallen en hun
kwadraten, waarbij er na iedere 10 regels in de tabel een regel overgeslagen wordt.
Vergeet de kolomtitels niet.
Omdat het regelmatig voorkomt dat er nádat het programma gemaakt is gegevens in het
programma nog aangepast moeten worden (bijvoorbeeld rente wordt 5% ipv 4%), is het
verstandig om in de code van een programma zo weinig mogelijk 'echte' getallen op te
nemen. Maak in het begin van het programma een aantal variabelen als kapitaal1,
rente1, kapitaal2 en dergelijke, en geef die de betreffende waarden. (Deze variabelen die
niet echt variabel zijn in het programma heten constanten.) Bijv. kapitaal1:=2000.
Werk dan in de rest van de code van het programma met die variabelen. Als later
dezelfde vraag nog eens komt voor een ander kapitaal of een andere rente, hoef je alléén
die waarde in de eerste regels aan te passen. Anders zou je overal in je programma dat
getal moeten veranderen en dat levert zeker in een groter programma fouten op!!
Opgave 15
Maak een PSD dat uitzoekt na hoeveel jaar een kapitaal van ! 2500, dat uitstaat tegen
7% rente, groter is geworden dan een kapitaal van ! 3000 dat tegelijkertijd uitgezet is
tegen 5% rente per jaar.
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, dan geef je
de opdracht a:=7*RANDOM.
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.
Opgave 16
Dezelfde opdracht als opgave 13, maar het op te nemen bedrag moet nu ingevoerd
worden en er moet een overzicht afgedrukt worden van 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.
Programmastructuurdiagrammen jvd
13-3-2003 11
Opgave 17
Verwerk dit in een PSD en test het.
Opgave 18
Maak een PSD dat de laatste twee cijfers van een ingevoerd positief getal geeft.
Controleer je programma met: 156, 3458910, 12500, 12 en 5.
Opgave 19
Maak een PSD dat de eerste keer 10 keer 'met een dobbelsteen gooit', daarna 20 keer,
dan 30 keer, en zo tot en met 100 keer, en steeds voor ieder van deze aantallen dat
aantal worpen afdrukt, met daarnaast het gemiddelde van de in die serie geworpen ogen.
Soms is het handig om een hele rij variabelen (van hetzelfde type) met één naam te
beschrijven. Daarvoor hebben we de beschikking over arrays.
Om een array van 11 variabelen met de naam 'getallenrij' te maken, gevuld met
willekeurige gehele getallen van 0 tot en met 3, kunnen we bv het volgende PSD
uitvoeren:
Opgave 20
Maak een PSD dat 10 keer gooien met een dobbelsteen simuleert en de uitkomsten
opslaat in een array 'dobbelsteen'. Laat daarna die array afdrukken.
Opgave 21
Maak een PSD dat 100 keer met drie dobbelstenen gooit en telt hoe vaak elke uitkomst
(3, 4, 5,…,18) voorkomt. De uitvoer is een tabelletje met de uitkomsten van de worp en
de frequenties. (Bedenk dat als je met twee dobbelstenen gooit de kans op uitkomst 3
véél kleiner is dan op bv 10, en dat je dus niet zomaar via toevalsgetallen een rijtje met
getallen 3, 4, 5, 6, etc. kan vullen!)
Met behulp van een keuzediagram kan je controleren of een variabele aan een bepaalde
voorwaarde voldoet of niet, en dan in elk van die gevallen een andere vervolgopdracht
geven. Bekijk het volgende stukje PSD:
Programmastructuurdiagrammen jvd
13-3-2003 12
Het kan voorkomen dat de conditie ingewikkelder is. Bijvoorbeeld: lengte moet een
waarde hebben tussen 100 en 150; 100<lengte<150. Als je dit zo intypt in Struktograaf
(of een programmeertaal) krijg je een foutmelding. We kunnen dit voorkomen door te
bedenken dat dit eigenlijk twéé voorwaarden zijn die tegelijkertijd moeten gelden.
Dus lengte>100 én lengte<150.
Je kunt dit op de volgende manier in StruktoGraaf gebruiken:
Opgave 22
Een ronde schijf is verdeeld in 14 even grote stukken. In elk gedeelte staat één van de
getallen 3 tot en met 16. Nadat de schijf aan het draaien is gebracht wordt er als hij
weer stilstaat één van deze getallen aangewezen. Maak een PSD waarin 200 keer draaien
van deze schijf gesimuleerd wordt. Er wordt geteld hoe vaak een van de getallen van 6
tot en met 14 aangewezen wordt en daarna wordt dit aantal afgedrukt.
Opgave 23
Je speelt het volgende spel: je gooit drie keer met een dobbelsteen. Je krijgt één euro
uitbetaald als de eerste of de laatste worp hoger is dan de tweede worp; anders moet je
een euro betalen. Maak een PSD dat 100 van deze spelletjes simuleert en daarna afdrukt
hoeveel euro je uitbetaald krijgt, of moet betalen.
Opgave 24
Voor de winnaar van een spel waarbij een maximum aantal punten gescoord kan worden
van 99 punten, is de volgende prijzengeldregeling van kracht:
De prijs is een vast bedrag van ! 500, aangevuld met ! 3 voor elk behaald punt en
bovendien ! 2 voor elk punt dat gescoord is boven de 46 punten.
Maak een PSD dat een score leest, controleert of die mogelijk is, en daarna het
prijzengeld berekent. Als de ingevoerde score niet mogelijk is moet er een passende
mededeling afgedrukt worden, en de mogelijkheid geboden worden om het opnieuw te
proberen totdat er een mogelijke score ingevoerd wordt. (Het programma mag dus niet
stoppen bij een verkeerde invoer, maar moet opnieuw naar invoer vragen!)
Programmastructuurdiagrammen jvd
13-3-2003 13
Opgave 25
Bodehuis UPS stelt aan pakketten die vallen in de categorie 'middelgrote pakketten' de
volgende eisen: de breedte moet minimaal 10 cm en de lengte min. 15 cm zijn, anders is
het 'te klein'; de lengte, breedte en hoogte mogen samen niet meer zijn dan 1.20 m,
terwijl de lengte niet meer mag zijn dan 70 cm, anders is het pakket 'te groot'.
Maak een PSD dat de drie afmetingen van een pakje inleest en onderzoekt of het aan de
gestelde eisen voldoet. Laat de uitslag (te klein, te groot of goed) op het scherm
afdrukken.
§11 Strings
Er zijn variabelen die tekst bevatten in plaats van getallen. Dit type variabele wordt
string genoemd. Die tekst die een string bevat 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 net als andere variabelen een waarde door
een toekenning, bijvoorbeeld: naam:="Jan Klaassen". Hierbij moeten de karakters
tussen dubbele aanhalingstekens "" staan.
De karakters uit zo'n string kan je apart in een variabele opslaan. (Een string wordt dan
opgevat als een array!) Bijvoorbeeld: naam[1] is "J" en naam[9] is "s". LET OP: de spatie
in naam[4] telt ook mee!
Met naam[5:9] krijg je de substring die bestaat uit het 5e tot en met 9e karakter, dus
"Klaas". Met de functie LEN kan je het aantal karakters van een string te weten komen:
LEN(naam) heeft de waarde 12.
Opgave 26
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.
Opgave 27
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). Net zoals er voor bijvoorbeeld aftrekken en vermenigvuldigen
operatoren zijn, namelijk het -, respectievelijk het *-teken, is er voor concatenatie ook
een symbool: we gebruiken daarvoor (net als voor optellen van getallen) het + teken.
Bijvoorbeeld: na de opdrachten naam:="Jan" en woord:="Klaassen" geeft de opdracht
nieuw:=naam+woord aan de string nieuw de waarde "JanKlaassen" (zonder spatie!).
Programmastructuurdiagrammen jvd
13-3-2003 14
Opgave 28
Maak een PSD dat een ingelezen woord 'achterstevoren' weer afdrukt.
Opgave 29
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.
Ga dit na.
Voorbeeld:
Dit programma maakt een 'woord', bestaande uit de hoofdletters A t/m J en drukt dit af.
Ga dit na.
Opgave 30
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.
Programmastructuurdiagrammen jvd
13-3-2003 15
Opgave 31
Er zijn talen die geen klinkers kennen. Maak een PSD dat een zin inleest, alle klinkers uit
die zin verwijdert en het resultaat afdrukt.
Voor de liefhebber:
Opgave 32
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 de woorden: aardbei, zwaardvis en informatica.
Opgave 33
Dezelfde opgave als opgave 29, maar nu voor een zin, zonder hoofdletters en punt, in
plaats van een woord, waarbij elk woord apart gecodeerd wordt.
Opgave 34
Maak een PSD dat een woord dat met het programma van opgave 32 is gecodeerd, weer
decodeert, zodat het oorspronkelijke woord dus weer herkenbaar is.
Programmastructuurdiagrammen jvd
13-3-2003 16