You are on page 1of 16

Programmastructuurdiagrammen

J. van Dort
Mollerlyceum
Bergen op Zoom

Tweede, herziene, versie. '03


Programmastructuurdiagrammen
§1 Inleiding

In de komende lessen gaan we een begin maken met programmeren. Programmeren is


in feite niets anders dan het vertellen aan een computer van wat je wilt dat hij doet. Dat
gaat (helaas) niet in gewone spreektaal, want die is vaak voor meerdere uitleg vatbaar.
Er zijn daarom verschillende speciale programmeertalen ontwikkeld. Dit zijn talen met
een beperkt aantal 'woorden' (opdrachten e.d.) waarvan de betekenis precies vastligt.
Ook de syntax (de manier waarop 'zinnen' gemaakt moeten worden) ligt precies vast.
Daardoor kan de computer de door jou gegeven opdrachten (de programmacode) op
precies één manier vertalen naar bewerkingen die door de processor uitgevoerd kunnen
worden.
Het schrijven van een (groter) programma is vaak een hele klus, waarvan het typen van
de programmacode slechts een klein deel uitmaakt. De meeste tijd gaat zitten in het
testen van het programma (doet het wel wat ik wil?; kan het tegen 'verkeerde' invoer
e.d.?) en het bedenken van hóe je de oplossing van het gegeven probleem gaat
aanpakken. In het algemeen is het het makkelijkst eerst de hoofdlijnen vast te leggen en
daarna de details uit te werken. Het vastleggen van de structuur van de oplossing (het
algoritme) gebeurt in een programmastructuurdiagram (PSD). Je bent ze al eens
tegengekomen in een van de eerdere hoofdstukken.
Je gaat vanaf opdracht 5 werken met het programma StruktoGraaf dat het tekenen van
een PSD voor je doet. Het invullen van het PSD moet je zelf doen, maar dat is juist het
interessante en leuke aan programmeren…………
Maar StruktoGraaf doet meer: als je de juiste aanpak gekozen hebt, vertaalt het jouw
PSD in een computerprogramma dat direct uitgevoerd kan worden. Je hoeft dus zelf
(nog) geen echte programmeertaal te gebruiken.
Je kunt een demoversie van StruktoGraaf downloaden van www.sichemsoft.nl. Met deze
demo kan je geen PSD 's opslaan, maar je kan je PSD's wél bewaren door ze m.b.v.
knippen en plakken in een Word-document te plakken.

§2 Wat is een programmastructuurdiagram?

Een PSD (programmastructuurdiagram) is een schema dat de onderlinge volgorde en


samenhang van opdrachten binnen een programma weergeeft. PSD's worden niet
geschreven in een programmeertaal, maar dienen om de structuur van een programma
vast te leggen. Dit is onafhankelijk van de programmeertaal die je (later) gebruikt. Het
vertalen naar programma-code gaat daarna een stuk eenvoudiger.
Een PSD bestaat uit een rechthoek (of als je ingewikkelder programma's gaat maken, uit
meerdere rechthoeken), waarbinnen tekst of een aantal basisfiguren voorkomt.
De drie meest gebruikte basisstructuren zijn: de opdracht, de keuze en de herhaling.
(StruktoGraaf bevat er nog meer, maar die zullen wij niet gebruiken.)

opdracht keuze herhaling

Door deze basisstructuren te combineren kan je voor elk programma een PSD maken.

§3 De opbouw van een PSD


De opdrachten en acties die uitgevoerd moeten worden in een PSD worden in principe
van boven naar beneden uitgevoerd. Bekijk het volgende voorbeeld maar eens. De tekst
tussen accolades maakt geen deel uit van de programmacode, maar is commentaar (zie
ook §4).

Programmastructuurdiagrammen jvd
13-3-2003 2
{ k wadr aat }
Dit programma doet het
volgende:
sc hr i j f " Van wel k get al wi l j e het k wadr aat ?" Eerst wordt er een tekst op
het scherm afgedrukt: de
l ees get al { hi er wor dt het i ngev oer de get al gel ez en} vraag 'Van welk getal wil je
het kwadraat?'. (Dat wat
kwadr aat : = get al * get al { k wadr aat ber ek enen}
tussen de aanhalingstekens
sc hr i j f " Het k wadr aat i s : " staat wordt letterlijk
afgedrukt.)
sc hr i j f k wadr aat 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
19b ×h2
kan worden met de formule g = . (Hierbij zijn de lengtematen in cm en g in kg.)
l
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:

{ t af el v an 6} Na de verklarende regel die in


de eerste opdracht afgedrukt
sc hr i j f " De get al l en ui t de t af el van 6 zi j n: " wordt, krijgt de variabele teller
de waarde 1. In de derde regel
t el l er := 1 begint een herhalingsblok:
zolang geldt: 'teller <= 10 is
ZOLANG t el l er <= 10 waar (true)' wordt het
deelprogramma in het binnenste
ui t k omst : = t el l er * 6
blok herhaald.
schr i j f ui t komst De voorwaarde 'teller <= 10'
wordt onwaar(false) als teller
t el l er : = t el l er + 1 groter dan 10 is. Als dat zo is,
wordt het deelprogramma niet
meer uitgevoerd en stopt het
programma.
Op het scherm worden de antwoorden van de tafel van 6 afgedrukt.
Bestudeer het voorbeeld dat gegeven wordt in de PPpresentatie: Voorbeeld bij §5.

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.

Bekijk het PSD op de volgende bladzijde:

Programmastructuurdiagrammen jvd
13-3-2003 4
{ max i mum}

s c hr i j f " Geef t wee get al l en"


Als getal1 groter is dan getal2
l ees get al 1 dan krijgt max de waarde
l ees get al 2 van getal1,
anders krijgt max de
get al 1>get al 2 waarde van getal2.
JA NEE
Op het scherm wordt het grootste
max : = get al 1 max : = get al 2 getal getoond.

s c hr i j f " Het gr oot s t e v an dez e get al l en i s : " & Een keuzediagram wordt ook wel een
als-dan-anders – constructie
{ De & z or gt er v oor dat er ni et op een ni euwe genoemd.
r egel begonnen wor dt met af dr uk k en. }

s c hr i j f max

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.

§7 Het werken met StruktoGraaf


We gaan 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 (compileren) 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)
‰ We maken 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.

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):

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 Bij de schrijfopdracht staan er nu drie opdrachten in één
- ZOLANG n<=10 opdracht; ze worden nu op één regel afgedrukt.
- SCHRIJF n, " x 7 = ", n*7 Let op de scheidingskomma's en het gebruik van spaties
- n :=n+1 binnen de aanhalingstekens.

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.

Verbeter de fout(en) en compileer opnieuw.

ο Kies na correcte compilatie Code⏐Uitvoeren 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.

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

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.
Voorbeeld PSD Ooggetuigenverslag

{ 1} p : =5 regel p q p>-3q commentaar


1 5 Toekenning van waarde 5 aan p
{ 2} q : =- 1 2 5 -1 Toekenning van waarde –1 aan q
3 5 -1 waar 5 is groter dan (-3*-1=) 3.
{ 3} ZOL ANG p >- 3 q
4 3 -1 p krijgt waarde p+2q, dus 3.
{ 4} p : =p +2 q
5 3 2 q krijgt waarde –2q, dus 2. Nu
terug naar regel 3.
{ 5} q : =- 2 q 3 3 2 waar 3 is groter dan (-3*2=) -6
4 7 2 p krijgt waarde p+2q, dus 7.
{ 6} s c hr i j f " p =" , p 5 7 -4 q krijgt waarde –2q, dus -4. Nu
terug naar regel 3.
{ 7} s c hr i j f " q =" , q
3 7 -4 niet 7 is niet groter dan (-3*-4=) 12,
waar dus nu naar regel 6.
6 7 -4 Afgedrukt wordt: p=7
7 7 -4 Afgedrukt wordt: q=-4

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 8} { opgav e 9}

{ 1} x : =1 aant al : =0

{ 2} y : =2 l ees i nvoer get al

{ 3} ZOLANG x < 6 ZOLANG i nv oer get al > 10

{ 4} x > 4 i nv oer get al : =i nv oer get al - 5

aant al : = aant al + 1
JA NEE
i nv oer get al > 6
{ 5} y: =y+x
JA NEE
{ 6} x: =x+2
s c hr i j f i nv oer get al aant al : =aant al + 3
{ 7} s chr i j f x , y
aant al : =aant al + 1

s c hr i j f aant al
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!!

In de volgende opgave(n) moet je constanten (zoals kapitaal en rente) op die manier


verwerken.

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.

§9 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, 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:

{ ar r ay mak en}

v oor i : =1 t m 11

get al l enr i j ( i ) : = i nt ( 4* r andom)

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!)

§10 De keuze (vervolg)

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:

Als de waarde van de variabele lengte


l engt e<150 kleiner is dan 150 (anders gezegd: als
de conditie (voorwaarde) 'lengte>150'
waar is) wordt het woord 'prima' op
het scherm afgedrukt. In het andere
JA NEE
geval wordt de waarde van lengte met
10 verhoogd.
schr i j f " pr i ma" l engt e: =l engt e+10

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:

l engt e>100 EN l engt e<150


Het woordje EN geeft je de mogelijkheid om in de
conditie van een keuzediagram te controleren of
aan twee (of meer) eisen tegelijkertijd voldaan is.
JA NEE

...... ......

Een conditie van de vorm 'aantal<7 OF


gewicht 15' levert het antwoord JA op als de waarde van de variabele aantal kleiner is
dan 7, óf de waarde van de variabele gewicht kleiner is dan 15, óf dat dat allebei geldt.
Voorbeeld:

ui t komst <=2 OF ui t komst >=7


Als uitkomst de waarde 20 heeft
wordt nu op het scherm de
opmerking "fout!" afgedrukt. Als
uitkomst de waarde 5 heeft
JA NEE wordt er "OK" afgedrukt.

schr i j f " OK" schr i j f " f out ! "

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!).

{ v oor beel d conc at enat i e}


Als je een string karakter voor
karakter wil opbouwen (in een naam: =" abcdef ghi j kl mnopqr s t uvwxy z"
lus bijvoorbeeld) is het vaak
handig om met de lege string ni euw: =" " { l ege st r i ng}
te beginnen. Zie het volgende
PSD. i : =1 { begi nwaar de t el l er t j e}

ZOLANG i <=26

ni euw: =ni euw + naam[ i ]

Dit PSD levert op het scherm de i : =i +3


string 'adgjmpsvy'. Ga dit na.
sc hr i j f " De gemaakt e st r i ng i s : " , ni euw

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.

§12 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 (die je in een van de eerste hoofdstukken van het boek al
tegengekomen bent). 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.

Bekijk het volgende PSD als voorbeeld:


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

woor d: =" t abel "

i : =1

ZOLANG i <=5

s c hr i j f as c ( woor d[ i ] )

i : =i +1

Ga dit na.

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

ni euw: =" "

v oor i : =0 t m 9

ni euw: =ni euw + c hr ( 65+i )

s c hr i j f ni euw

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