Lesbrief Struktograaf 2012

14
Programmastructuurdiagrammen

description

Lesbrief informatica Struktograaf

Transcript of Lesbrief Struktograaf 2012

Page 1: Lesbrief Struktograaf 2012

Programmastructuurdiagrammen

Page 2: Lesbrief Struktograaf 2012

Programmastructuurdiagrammen MHC

25-09-12 2

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 m.b.v. knippen en plakken of PrintScreen in een Word-document 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.)

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

opdracht keuze herhaling

Page 3: Lesbrief Struktograaf 2012

Programmastructuurdiagrammen MHC

25-09-12 3

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

kan worden met de formule 219b h

gl

. (Hierbij zijn de lengtematen in cm en g in kg.)

Maak een PSD dat de drie maten leest en het maximale gewicht berekent en afdrukt.

{kwadraat}

schrijf "Van welk getal wil je het kwadraat?"

lees getal {hier wordt het ingevoerde getal gelezen}

kwadraat := getal * getal {kwadraat berekenen}

schrijf "Het kwadraat is:"

schrijf kwadraat

Page 4: Lesbrief Struktograaf 2012

Programmastructuurdiagrammen MHC

25-09-12 4

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

Na de verklarende regel die in de eerste opdracht afgedrukt wordt, krijgt de variabele teller de waarde 1. In de derde regel

begint een herhalingsblok: zolang geldt: 'teller <= 10 is waar (true)' wordt het deelprogramma in het binnenste blok herhaald.

De voorwaarde 'teller <= 10' wordt onwaar(false) als teller 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. Opgave 3

Maak een PSD dat de som van de eerste honderd kwadraten uitrekent.

§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. Bekijk het volgende PSD:

Als getal1 groter is dan getal2 dan krijgt max de

waarde van getal1 anders krijgt max de

waarde van getal2.

Op het scherm wordt het grootste getal getoond.

{tafel van 6}

schrijf "De getallen uit de tafel van 6 zijn:"

teller := 1

ZOLANG teller <= 10

uitkomst := teller * 6

schrijf uitkomst

teller := teller + 1

{maximum}

schrijf "Geef twee getallen"

lees getal1

lees getal2

getal1>getal2

JA

max := getal1

NEE

max := getal2

schrijf "Het grootste van deze getallen is: "&

{De & zorgt er voor dat er niet op een nieuwe

regel begonnen wordt met afdrukken.}

schrijf max

Page 5: Lesbrief Struktograaf 2012

Programmastructuurdiagrammen MHC

25-09-12 5

Opgave 4 Maak een PSD dat twee getallen leest en de som van het kleinste en het dubbele van de

grootste afdrukt.

§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.

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

Page 6: Lesbrief Struktograaf 2012

Programmastructuurdiagrammen MHC

25-09-12 6

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 gecompileerd 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 compileer

opnieuw.

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 7: Lesbrief Struktograaf 2012

Programmastructuurdiagrammen MHC

25-09-12 7

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. …. Opgave 5

Opgave 6

Maak een PSD van een programma dat (met een herhalingslus) het product bepaalt van de getallen 1,2,3….tot en met een in te lezen getal en daarna de uitkomst op het scherm toont.

Opgave 7 Maak een PSD dat twee getallen (kleiner dan 1000, het eerste kleiner dan het tweede) inleest en dan alle kwadraten die voorkomen tussen die twee getallen afdrukt.

§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.

-----

Page 8: Lesbrief Struktograaf 2012

Programmastructuurdiagrammen MHC

25-09-12 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 de som van de kwadraten van de kleinste twee van die getallen afdrukt.

regel p q p>-3q commentaar

1 5 Toekenning van waarde 5 aan p

2 5 -1 Toekenning van waarde –1 aan q

3 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=) -6

4 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 waar

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

6 7 -4 Afgedrukt wordt: p=7

7 7 -4 Afgedrukt wordt: q=-4

Voorbeeld PSD

{opgave 9}

aantal:=0

lees invoergetal

ZOLANG invoergetal > 10

invoergetal:=invoergetal - 5

aantal:= aantal + 1

invoergetal > 6

JA

schrijf invoergetal

aantal:=aantal + 1

NEE

aantal:=aantal + 3

schrijf aantal

{opgave 8}

{1} x:=1

{2} y:=2

{3} ZOLANG x < 6

{4} x > 4

JA NEE

{5} y:=y+x

{6} x:=x+2

{7} schrijf x, y

Ooggetuigenverslag

{1} p:=5

{2} q:=-1

{3} ZOLANG p>-3q

{4} p:=p+2q

{5} q:=-2q

{6} schrijf "p=", p

{7} schrijf "q=", q

Page 9: Lesbrief Struktograaf 2012

Programmastructuurdiagrammen MHC

25-09-12 9

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:

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

Page 10: Lesbrief Struktograaf 2012

Programmastructuurdiagrammen MHC

25-09-12 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 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.

Opgave 15 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.

Opgave 16 Maak een PSD dat een tabel afdrukt van de eerste 80 getallen en hun kwadraten, waarbij er na iedere 10 regels in de tabel een regel overgeslagen wordt. Vergeet de kolomtitels niet.

Vanwege wijzigingen in gegevens of in het programma 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 e.d. 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 17 Maak een PSD dat uitzoekt na hoeveel jaar een kapitaal van € 2000, 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.

Page 11: Lesbrief Struktograaf 2012

Programmastructuurdiagrammen MHC

25-09-12 11

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 18 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.

Opgave 19 Verwerk dit in een PSD en test het. Opgave 20 Maak een PSD dat de laatste twee cijfers van een ingevoerd getal geeft. Controleer je programma met: 156, 3458910, 12500, 12 en 5. 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 21 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 22 Maak een PSD dat achtereenvolgens 10, 20, 30 t/m 100 keer 'met een dobbelsteen gooit' en voor ieder van deze aantallen dat aantal afdrukt, met daarnaast het gemiddelde van de in die serie geworpen ogen. Heb je hierbij een(of meerdere) arrays nodig?

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

{array maken}

voor i:=1 tm 11

getallenrij(i) := int(4*random)

Page 12: Lesbrief Struktograaf 2012

Programmastructuurdiagrammen MHC

25-09-12 12

§10 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 Pietersen". 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

"Piet". Met de functie LEN kan je het aantal karakters van een string te weten komen: LEN(naam) heeft de waarde 13. Opgave 24 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 25 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). 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.

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

Opgave 26 Maak een PSD dat een ingelezen woord 'achterstevoren' weer afdrukt.

{voorbeeld concatenatie}

naam:="abcdefghijklmnopqrstuvwxyz"

nieuw:="" {lege string}

i:=1 {beginwaarde tellertje}

ZOLANG i<=26

nieuw:=nieuw + naam[i]

i:=i+3

schrijf "De gemaakte string is: ", nieuw

Page 13: Lesbrief Struktograaf 2012

Programmastructuurdiagrammen MHC

25-09-12 13

Opgave 27

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.

§11 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. 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.

Opgave 28 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.

woord:="tabel"

i:=1

ZOLANG i<=5

schrijf asc(woord[i])

i:=i+1

nieuw:=""

voor i:=0 tm 9

nieuw:=nieuw + chr(65+i)

schrijf nieuw

Page 14: Lesbrief Struktograaf 2012

Programmastructuurdiagrammen MHC

25-09-12 14

Opgave 29

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 ae, bf, ko en pt. 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. Opgave 30 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 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.