Download - cursus algoritmen

Transcript

Algoritmen met ExcelHoofdstuk 1: algoritmen en deelalgoritmen1.1. Inleiding Ondertussen heb je al heel wat mogelijkheden van de computer leren kennen. We hebben de computer gebruikt om teksten mee in te tikken, te verbeteren en de lay-out ervan te verzorgen. We hebben de computer ook ingeschakeld als hulpmiddel om berekeningen uit te voeren, als communicatiemiddel (e-mail) en als informatiebron via het Internet. Een computer is nochtans een dom ding. Uit zichzelf weet of kan een computer niets. Alles moet hem van naaldje tot draadje uitgelegd worden. Voor alles wat de computer moet doen, moet een opdracht of instructie gegeven worden. Een reeks instructies wordt een programma genoemd. Voor elke klus die we door de computer willen laten klaren, moeten we dus een geschikt programma hebben. In dit laatste deel gaan we eens bekijken hoe we een computer een aantal nieuwe taken kunnen leren. Het is niet de bedoeling om hier een cursus programmeren te geven. De klemtoon wordt gelegd op hoe we een probleem opsplitsen in kleinere deelproblemen om zo tot een juiste oplossing te komen. Hiervoor gebruiken we Visual Basic for Applications, kortweg VBA, een programmeertaal die kan gebruikt worden om bijvoorbeeld Excel een aantal nieuwe opdrachten te leren. Om het niet nodeloos moeilijk te maken en om het van buiten leren van programmacode te vermijden heb ik voor jullie voor de meest voorkomende taken kant-en-klaar-instucties gemaakt. Wil je thuis kunnen oefenen, dan zal je ervoor moeten zorgen dat je thuis ook die elementaire opdrachten op je computer zet. Anders verstaat Excel de opdrachten die wij hem geven niet!! Voor de andere programmacode zullen we macros opnemen. Zoals de naam van dit cursusdeel zegt, gaat het dus niet zozeer om het aanleren van een programmeertaal op zich, maar wel om het ontwerpen van algoritmen. 1.2. Het begrip algoritme Tot op zekere hoogte kun je een computerprogramma vergelijken met een recept uit een kookboek, met een montagevoorschrift uit een bouwpakket, met de handleiding voor een videorecorder, ... Telkens wordt er uitgelegd hoe je een niet-gekende taak moet uitvoeren. Zon voorschrift dat je van je probleem (bijvoorbeeld hoe stel ik mijn video in) bij de oplossing van het probleem brengt wordt algemeen een algoritme genoemd. Een algoritme is een voorschrift met al de handelingen die men moet verrichten om vanuit een gegeven beginsituatie een bepaald resultaat te bereiken.

Algoritmen met Excel

-1-

Tom Van Houdenhove

Hoofdstuk 1 algoritmen en deelalgoritmen

Een computerprogramma beschrijft de handelingen die de computer moet verrichten om een bepaalde opdracht uit te voeren. Een computerprogramma is dus ook een algoritme. De bedoeling van dit stuk cursus is dat je de algemene principes leert voor het opstellen van algoritmen. Dit is een heel belangrijke fase in het maken van een programma. Later kan je dan eventueel de stap zetten naar het leren van een volledige programmeertaal. Het echte programmeerwerk wordt hier tot een minimum beperkt. Een algoritme is meestal te ingewikkeld om in n geheel te beschrijven. Daarom gaan we een probleem opsplitsen in deelproblemen. Om een algoritme op te bouwen maken we daarom gebruik van deelalgoritmen. Een deelalgoritme is eigenlijk niets anders dan een gewoon algoritme dat gebruikt wordt in een ander algoritme. Er moet altijd iets (of iemand) zijn die het algoritme uitvoert. Anders heeft je algoritme geen zin. De uitvoerder van het algoritme wordt de processor genoemd. Wat zijn het algoritme en de processor in de volgende gevallen ? Probleem Instellen van het uur en het alarm van een klokradio Het bakken van een lekkere taart Het spelen van een muziekstuk op een piano Het berekenen van het gemiddelde van een reeks getallen in Excel Het hangt er nu van af wie de processor is, of die een opdracht al dan niet begrijpt. Je kan je broer vragen om voor jou eens de CD, die je zonet van een vriend in bruikleen kreeg, over te nemen op een cassette. Voor je broer geeft dit waarschijnlijk weinig problemen. Voor hem is NeemCDop een concreet deelalgoritme . Vraag je hetzelfde aan je oma dan kan het gerust zijn dat je haar eerst goed zal moeten uitleggen hoe ze het juist moet doen. Voor haar is NeemCDop een abstract deelalgoritme . Een deelalgoritme is een concreet deelalgoritme voor een processor als deze het zonder bijkomende uitleg kan uitvoeren. Het is een abstract deelalgoritme voor de processor als er nog bijkomende uitleg nodig is. Als je een algoritme opstelt kan je gerust gebruik maken van abstracte deelalgoritmen. Het is zelfs aangewezen om dat te doen. Zo kan je een probleem opsplitsen in deelproblemen. Deze Algoritme Processor

Algoritmen met Excel

-2-

Tom Van Houdenhove

Hoofdstuk 1 algoritmen en deelalgoritmen

deelproblemen moeten dan wel verder uitgewerkt worden. We zeggen dat het deelalgoritme nog verder verfijnd moet worden. Die uitwerking wordt een verfijning genoemd. Bijvoorbeeld: Als we algoritmen zullen maken en we willen aan de gebruiker een getal vragen, dan zullen we gebruik maken van de opdracht LEES(Geef een getal) Probeer je dit op je computer thuis, dan heb je heel veel kans dat je computer niets doet of een foutmelding geeft. Voor je computer is de opdracht LEES een abstracte opdracht. Omdat dit toch een redelijk logische naam is voor die opdracht zullen wij toch de opdracht LEES gebruiken. Daarom werd in de oefeningen ervoor gezorgd dat de opdracht LEES verfijnd is.Sub LEES(tekst_in_het_venster) OpgevraagdGegeven = InputBox(tekst_in_het_venster, "Invoer van gegevens...") If OpgevraagdGegeven "" Then ActiveCell.FormulaR1C1 = OpgevraagdGegeven End If End Sub

Voor de computer is dit nu volledig duidelijk. Het is met andere woorden een concrete opdracht geworden. Voor jou is dit misschien alles behalve duidelijk, maar er is geen enkel probleem. Als jij de opdracht LEES geeft, wordt dit door Visual Basic toch begrepen, want er werd bijkomende uitleg gegeven. Het is dan ook zo dat, als je thuis wil oefenen, je van alle basisbevelen die we zullen gebruiken, de verfijningen zal moeten hebben. Die kan je gerust op school vragen. Alle basisbevelen zijn ondergebracht in een sjabloon. Als je je oefeningen op dit sjabloon baseert worden de concrete deelalgoritmen uit deze cursus begrepen. In het verdere verloop van deze cursus zal de klemtoon vooral liggen op het maken en het gebruiken van zon verfijningen. 1.3. Enkele voorbeelden van algoritmen 1.3.1 Het recept van een Sultana CakeBenodigdheden: 125 g boter; 125 g suiker; pakje vanillesuiker; snuifje zout; 3 eieren; 200 g bloem vooraf gemengd met 1 koffielepel bakpoeder; 5 eetlepels zure room; snuifje kruidnagelpoeder; snuifje kaneel; 500 g sultanarozijnen; paneermeel klop de boter zo los en romig mogelijk voeg er de suiker bij al kloppend roer er nu de vanillesuiker onder vervolgens het snuifje zout n voor n de eieren telkens kloppend in het mengsel verwerken afwisselend bloem en zure room - lepel per lepel - bij mengen en goed kloppen. Doe er wat kruidnagelpoeder en een snuifje kaneel bij bestuif de rozijnen met bloem en meng ze in het deeg de bakvorm met boter besmeren; dan met paneermeel bestrooien; verder losjes vullen met het deeg in een voorverwarmde over (200 C) op halve hoogte 50 minuten laten bakken

1. 2. 3. 4. 5. 6. 7. 8. 9.

Algoritmen met Excel

-3-

Tom Van Houdenhove

Hoofdstuk 1 algoritmen en deelalgoritmen

10. HERHAAL de controle op het einde door er een stokje dwarsdoor te steken TOTDAT er geen nat deeg meer aankleeft 11. Haal de cake uit de vorm en laat op een rooster snel afkoelen 12. Zet de oven af

1.3.2 De morgenstond van een leerling Een algoritme wordt normaal niet met cijfertjes aangeduid, zoals in het vorig voorbeeld. Normaal wordt een algoritme in een of ander schema voorgesteld. We zullen dit jaar vooral gebruik maken van Nassi-Schneidermann-diagrammen, kortweg NS-diagrammen. Hieronder vind je een algoritme dat beschrijft hoe je van een bepaalde beginsituatie (de wekker loop af) tot een eindresultaat (ga ik vandaag wel naar school ??) gaat. Dit algoritme is in zon NSdiagram voorgesteld. -- Begin de morgenstond -ZetDeWekkerAf Kreun DraaiNogEven StapUitBed NogDonker ja SteekLichtAan Koud ja neen ZetVerwarming Aan GaJeWassen Ontbijt GromtDeHond ja neen LaatHondBuiten VandaagDST ja neen ToonJeZiek Moeder Vertrek Overtuigd NaarSchool ja neen TerugIn Vertrek Bed NaarSchool neen

Algoritmen met Excel

-4-

Tom Van Houdenhove

Hoofdstuk 1 algoritmen en deelalgoritmen

1.4 Wat je moet kennen en kunnen De begrippen algoritme, deelalgoritme en processor kunnen omschrijven Het verschil kunnen aangeven tussen een concreet en een abstract deelalgoritme Inzien dat een computerprogramma een bijzondere vorm is van een algoritme. De computer vervult hierbij de rol van processor In een aantal concrete situaties uit het alledaagse leven kunnen aangeven wat het algoritme is en wie of wat de processor is

Algoritmen met Excel

-5-

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning2.1 Het gegevensverwerkend proces Vorig jaar kwam het gegevensverwerkend proces al ruimschoots aan bod. verwerkend proces kan je opsplitsen in 3 grote fasen:

Elk gegevens-

Aangezien het nu juist de bedoeling wordt om algoritmen op te stellen die gegevens verwerken, zullen deze drie stappen in elk algoritme zeker moeten voorkomen. 2.2 Stappen voor het oplossen van een probleem Om een probleem efficint op te lossen moet je een aantal fasen doorlopen. Bij eenvoudige problemen kan je misschien een of andere stap overlaten, maar toch maken we er een gewoonte van om bij elk probleem alle stappen te doorlopen. 2.2.1 Probleemdefinitie In een eerste fase, de probleemdefinitie, ga je duidelijk na wat het probleem is en wat het resultaat is. Het is belangrijk om na te gaan welke gegevens je nodig hebt en waar ze vandaan (moeten) komen. Bij de informatie is het belangrijk om na te gaan welke resultaten er juist gevraagd worden en in welke vorm die moeten staan. 2.2.2 Probleemanalyse Als je duidelijk weet wat de gegevens zijn en welke informatie je daaruit moet verkrijgen, kan je met het middelste blok van het gegevensverwerkend proces beginnen: de v erwerking. Nu is het voor ingewikkelde problemen niet haalbaar om dit allemaal ineens te doen. Je doet er goed aan om een probleem op te splitsen in deelproblemen, die op hun beurt weer verder verfijnd kunnen worden. Dit principe wordt een stapsgewijze verfijning genoemd. 2.2.3 Schema Eens je weet in welke deelproblemen je je probleem zal opsplitsen, kan je beginnen nadenken welke basisstructuren (of controlestructuren) je best gebruikt. De verschillende controlestructuren (sequentie, selectie, iteratie) komen verder aan bod. Om alles overzichtelijk te houden wordt gebruik gemaakt van een schema. Er bestaan verschillende soorten schema's. Wij beperken ons tot Nassi-Schneidermann-diagrammen, kortweg NSdiagrammen. Een goed schema bevat alle logica van de oplossing, zonder dat die teveel aan een of andere programmeertaal vasthangt.

Algoritmen met Excel

-6-

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

2.2.4 Programmeren Nu begint datgene waar we al zo lang op wachten. Eens we definitief weten hoe we alles zullen oplossen kunnen we ons schema in een echte programmeertaal vertalen. Welke instructies daar juist voor gebruikt moeten worden hangt af van de programmeertaal die je gekozen hebt. We gebruiken Visual Basic for Applications, afgekort met VBA, om ons algoritme te testen. We zullen ons schema dan ook vertalen naar een pseudo-code die wat van VBA meeheeft. Pseudo-code is eigenlijk een soort nepprogrammeertaal die vrij duidelijk is en weinig kennis rond de syntax vereist. Vandaar dat je het sjabloon Algoritmen.xlt nodig hebt om deze cursus te kunnen gebruiken. Ze vertalen een aantal begrijpbare opdrachten zoals DRUK, LEES, CELOMHOOG, SELECTEER, ... in VBA. Beginnende programmeurs slaan de eerste drie fasen soms over en stoppen al hun energie in het programmeren en testen. Hierdoor gaat achteraf dikwijls veel tijd verloren. De meer ervaren programmeurs beginnen bij het begin. Als je iets op een computerscherm wil toveren, moeten daar een hele hoop instructies, de broncode, voor gegeven worden. Bij sommige zaken, zoals programmas in VBA, is die eenvoudig op te vragen. Bij andere programmas, zoals uitvoerbare programmas, werd die omgezet naar een doelprogramma: een programma dat op zichzelf kan werken. Het omzetten van een broncode naar een doelprogramma wordt compileren genoemd. Een programma in VBA moet niet gecompileerd worden. Het maakt gebruik van bijvoorbeeld Excel om te kunnen werken. In dit geval wordt Excel een interpreter genoemd: het interpreteert de code.

i

Een ander voorbeeld waar broncode gemakkelijk zichtbaar te maken is, is op Internet. Een Internetpagina wordt gemaakt met een bepaalde programmeertaal, die men HTML (HyperText Markup Language) noemt. Om Internetpaginas te kunnen opvragen heb je een browser nodig zoals Internet Explorer of Netscape. In feite zijn die programmas niets anders dan interpreters voor HTML. Een pagina komt niet binnen zoals je ze ziet. Ze wordt ter plaatse op je computer opgebouwd aan de hand van de broncode. Naast HTML, dat enkel gebruikt wordt voor de layout van de paginas op Internet, wordt ook soms gebruik gemaakt van JAVA-scripts. Ook JAVA-script is een programmeertaal die door je browser genterpreteerd kan worden. In deze cursus gaan we niet verder in op HTML en JAVA-scripts. Je kan de broncode van een Internetpagina eenvoudig opvragen door met de rechtermuisknop te klikken op die pagina en in het snelmenu te kiezen voor Bron weergeven.

Broncode kan je uiteraard gewoon intikken. Dit vereist een grondige kennis van de programmeertaal. In de praktijk maakt men ook soms gebruik van programmageneratoren. Dit zijn hulpprogrammas die in staat zijn om broncode voor jou te schrijven. Voor Internetpaginas wordt vaak gebruik gemaakt van een HTML-editor zoals bijvoorbeeld FrontPage of Dreamweaver. Voor VBA zullen we de macrorecorder gebruiken als programmagenerator. Hiermee kan heel wat van de broncode automatisch gemaakt worden. Het is wel goed om iets van Algoritmen met Excel -7Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

die code te begrijpen. Een programmagenerator zet er dikwijls veel overbodige zaken in, die je achteraf dan ook best verwijdert. Zo is een elementaire kennis van HTML wel vereist als je een homepagina op Internet wil zetten. Er is ook een elementaire kennis van VBA nodig om efficint met VBA te kunnen werken. Trouwens: niet alles is mogelijk met programmageneratoren. Wij zullen in deze cursus de moeilijke code overlaten aan een programmagenerator. De eenvoudigere dingen kunnen we zelf. Het komt erop neer dat we een aantal opdrachten met de macrorecorder zullen opnemen. Deze kunnen we dan als verfijningen gebruiken in een groter geheel dat we zelf ontwerpen. 2.2.5 Testen Het is heel belangrijk om je programma, eens het af is, goed te testen. Doet het in alle gevallen wat het moet doen? Als er iets fout loopt kan je nog de laatste verbeteringen aanbrengen. Dit zou eerder uitzondering dan regel moeten zijn. 2.2.6 Documenteren Tot slot doe je er goed aan om in je programma wat commentaarlijnen op te nemen die achteraf duidelijk maken wat je met een bepaalde lijn bedoelt, waarvoor een deelalgoritme juist dient, wat je juist nodig hebt om een deelalgoritme te kunnen gebruiken, ... Deze stap noemen we het documenteren. Een programma dat goed gedocumenteerd is, kan achteraf eenvoudiger aangepast worden. 2.3 Waaraan voldoet een goed algoritme Elk goed algoritme voldoet aan een aantal voorwaarden. Bij elk algoritme is er invoer vereist Elk algoritme voorziet uitvoer in een eindig aantal stappen Elke stap moet eenduidig en ondubbelzinnig zijn Een algoritme moet zo algemeen mogelijk gemaakt worden. Dat wil zeggen dat je een en hetzelfde algoritme zodanig moet ontwerpen dat je het in verschillende situaties kan gebruiken. Een programma om een n-de machtswortel van een getal te berekenen is maar goed als je het zowel voor vierkantswortels, als voor derdemachtswortels, als voor tiendemachtswortels, als voor ... kan gebruiken Zorg dat je algoritme juist en betrouwbaar is. En dit in alle denkbare situaties. Desnoods moet je een vangnet voorzien. Als het de helft van de keren niet werkt is je algoritme niets waard. Robuustheid: je algoritme mag niet van zijn pluimen verliezen bij vreemde situaties. In het algoritme voor het berekenen van de n-de machtswortels zal je er moeten op letten dat je geen wortel kan nemen uit een negatief getal, als de exponent even is. Je zal er ook moeten voor zorgen dan de wortelexponent alleen een natuurlijk getal kan zijn. Anders moet je programma dat beleefd opvangen, zonder dat het blokkeert.

Algoritmen met Excel

-8-

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

2.4 De methode van de stapsgewijze verfijning 2.4.1 Het principe Je kan een complex probleem maar efficint aanpakken als je het uiteenrafelt in kleinere, los van elkaar staande deelproblemen. Deze deelproblemen kan je dan nog verder opsplitsen enz. Dit principe noemt men de methode van de stapsgewijze verfijning. Je combineert al deze deelalgoritmen dan tot n geheel en je hebt je algoritme. We beginnen steeds met een beschrijving in grote lijnen, zonder ons om de details te bekommeren. We noemen dit de grofstructuur. 2.4.2 Voorbeeld Je wil het 7 uur journaal van TV1 op video opnemen. Je bent niet thuis en vraagt je broer dit te doen. Die heeft dit nog nooit gedaan, dus leg je hem de zaak uit: Dit wordt in het volgende NS-diagram voorgesteld: -- Opnemen van 7 uur journaal -Wacht tot vijf voor zeven Zet de TV aan Zet de video aan Zet de video op TV1 Zet de band juist Wacht tot het nieuws begint Neem op Wacht tot het nieuws gedaan is Zet de video en de TV weer uit

grofstructuur = diepte 0

Dit zou je als de grofstructuur kunnen aanzien. Het probleem Opnemen van 7 uur jounaal werd uiteengerafeld in een aantal deelproblemen. Een aantal van die deelproblemen zijn misschien concreet, zoals Wacht tot vijf voor zeven, maar sommige andere misschien niet. Zo kan je de opdracht Zet de band juist verder verfijnen met de volgende opdrachten: -- Zet de band juist -PLAATS de cassette DRUK op play Is de opgenomen film nog bezig Ja SPOEL een beetje VERDER Neen SPOEL een beetje TERUG

eerste verfijning = diepte 1

TOTDAT film is op het einde

Algoritmen met Excel

-9-

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

Op een gelijkaardige manier kan je ook nog de andere abstracte deelalgoritmen die in de grofstructuur voorkomen verder verfijnen. We zeggen dat dit opdrachten zijn die voorkomen op diepte 1. Het zijn verfijningen van opdrachten uit de grofstructuur. Ook dit kan nog verder verfijnd worden. bijvoorbeeld als volgt kunnen verfijnen: Zo zou je de opdracht PLAATS de cassette

-- Plaats de cassette -DRUK op de knop eject NEEM de vorige cassette uit de videorecorder LEG de cassette op de woonkamertafel NEEM cassette met etiket vrije opname van de woonkamertafel DUW de cassette met het ene etiket omhoog en het ander etiket naar je toe in de gleuf van de videorecorder Deze opdrachten zijn een verfijning van een abstract deelalgoritme uit diepte 1. We zeggen dat dit deelalgoritme zich op diepte 2 bevindt. Hoe groter de diepte, hoe gedetailleerder de omschrijvingen, maar ook hoe kleiner het deel van het probleem dat aangepakt wordt.

2.4.3 Wat is daar nu het voordeel van? Dit lijkt in het begin fantastisch ingewikkeld. Toch heeft deze methode van werken enkele serieuze voordelen. Veronderstel dat je op reis wil gaan naar de Azurenkust. Dan zou je je reisroute kunnen voorbereiden en gedetailleerd opstellen. rijd tot het einde van de straat draai naar links volg de straat tot op het einde draai naar rechts rijd tot op het einde draai linksaf draai aan de derde verkeerslichten linksaf .... parkeer je wagen ga naar de receptie van het hotel. Dit zou een mogelijkheid zijn. Maar wat als je n foutje hebt gemaakt en op n plaats links hebt gezet in plaats van rechts? Of wat als ergens op je reisweg er een wegomlegging is? Hoe zou je in zon geval weten waar het juist is misgelopen en wat je dan moet doen. Het zou veel meer aangewezen zijn om eerst in heel grote lijnen de reisroute vast te leggen Rijd naar de E17 Neem de E17 tot in Rijsel Rijd naar Reims Rijd naar Troyes Algoritmen met Excel - 10 Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

Rijd naar Langres Rijd naar Lyon Volg de Autoroute du soleil tot aan Marseille Rijd tot slot door naar Nice

Dan kan je deze 8 algoritmen, die op zich misschien nog abstract zijn, afzonderlijk verder verfijnen. Allereerst is deze methode van werken veel overzichtelijker dan alle opdrachten zo maar achter elkaar te plaatsen. Daarenboven is het eenvoudiger om op deze manier een betrouwbare oplossing te bedenken. Je kan je aandacht besteden aan de grote lijnen. Als dit op punt staat kan je deel per deel afzonderlijk afwerken. Ten derde is het met deze manier van werken vrij eenvoudig om fouten te lokaliseren. Kortom: de voordelen van de stapsgewijze verfijning: betrouwbaarheid overzichtelijkheid en duidelijkheid mogelijkheid om fouten te lokaliseren 2.5 naamgeving van algoritmen Elk deelalgoritme moet een naam hebben. Die namen moeten aan enkele voorwaarden voldoen. Je gebruikt best dezelfde namen in je NS-diagram als deze die je in je eigenlijk programma zal gebruiken. We maken de volgende afspraken om ons programma duidelijk leesbaar te maken: De concrete deelalgoritmen komen volledig in hoofdletters. Voorbeeld LEES De abstracte deelalgoritmen krijgen een naam die bestaat uit n woord. De naam van een abstract deelalgoritme wordt zoveel mogelijk in de gebiedende wijs geschreven, want het gaat tenslotte om een bevel voor de computer. De naam bestaat uit afwisselend hoofdletters en kleine letters . De eerste letter van elk woord is een hoofdletter, de andere letters z kleine letters. Zo kan je opdracht toch uit ijn meerdere woorden bestaan en blijft alles leesbaar. Voorbeeld: KleurAchtergrondRood De naam van je deelalgoritme moet logisch gekozen zijn. Aan de hand van de naam moet je al kunnen vermoeden wat het deelalgoritme gaat doen, zonder dat je zelf de verfijningen bekijkt. 2.6 Werken met macros 2.6.1 Wat zijn macros Een macro is een reeks opeenvolgende opdrachten die een toepassingsprogramma zoals Excel onthoudt, zodat je dit in de toekomst automatisch kan laten uitvoeren. Macros worden gemaakt in VBA en zijn dus geschikt om te gebruiken in onze algoritmen. Op die manier moeten we namelijk niet veel code van buiten leren. We voeren de handelingen die we willen programmeren uit, en laten die registreren door de macrorecorder. De macrorecorder is een programmagenerator en schrijft er zelf de nodige broncode voor.

Algoritmen met Excel

- 11 -

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

We kunnen de laatste stap van onze verfijningen opnemen met de macrorecorder. Willen we bijvoorbeeld de opdracht KleurAchtergrondRood maken, dan kunnen we dit door een macro op te nemen die de achtergrond van de cellen rood kleurt. Een macro die je met de macrorecorder opgenomen hebt, is dus in feite niets anders dan een opeenvolging van instructies die hetzelfde doen als wat jij in Excel hebt uitgevoerd. Daarom wordt zon macro ook een opdrachtmacro genoemd. 2.6.2 Een macro opnemen Om een opdrachtmacro te maken kies je in het menu Extra voor Macro opnemen. In het deelmenu kies je dan voor Nieuwe macro opnemen. Je kan het opnemen van macros een stuk eenvoudiger maken als je de werkbalk Visual Basic weergeeft. Kies daarvoor in het menu Beeld voor Werkbalken en vink Visual Basic aan. Je kan dan een nieuwe macro opnemen door op de knop met de bol te klikken.

Je kan deze werkbalk ook naar de bovenrand van je scherm slepen, zodat hij naast n van de bestaande knoppenbalken staat. Voor het invoeren van algoritmen is het aangewezen deze werkbalk zichtbaar te houden. Hij staat het minst in de weg als je hem naast bijvoorbeeld de opmaakwerkbalk zet. Als je een macro opneemt krijg je een dialoogkader waar je de macronaam kan ingeven. Houd er wel rekening mee dat je enkel letters, cijfers en het onderlijningsteken ( _ ) mag gebruiken. Spaties zijn niet toegestaan. We gebruiken de naam die ons deelalgoritme moet krijgen. Houd je dus aan de afspraken voor de naamgeving van deelalgoritmen. Vermijd in elk geval ook om een naam te gebruiken die dezelfde is als de bestandsnaam of de naam is van een van je werkbladen of grafiekbladen. In dat geval kan Excel in de problemen komen en wordt je macro wellicht niet goed uitgevoerd. Je mag ook geen naam gebruiken die al als functie bestaat binnen Excel (zoals bijvoorbeeld GEMIDDELDE).

Algoritmen met Excel

- 12 -

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

Eventueel kan je een sneltoets definiren, maar in de oefeningen voor algoritmen is dat nergens voor nodig. Aangezien je macros enkel binnen je oefening beschikbaar moeten zijn, kies je bij Macro opslaan in voor Deze werkmap. Normaal staat dit al zo. Er verschijnt een werkbalk met 2 knoppen. De linkerknop (het blauwe vierkantje) dient om de opname te stoppen. Met de rechterknop kan je kiezen of de verwijzingen absoluut (knop uit) of relatief (knop ingedrukt) gebeuren. Al de handelingen die je nu uitvoert, zullen door Excel geregistreerd worden en worden bij het oproepen van de macro letterlijk opnieuw uitgevoerd. Zorg dus dat je op voorhand goed weet wat je moet doen. Heb je alle opdrachten die je wilde opnemen uitgevoerd, klik dan op de knop Opname stoppen die daarnet verschenen is. De knop Opname stoppen staat ook op de Visual Basic-werkbalk op de plaats waar eerst de knop Macro opnemen stond. Het maakt niet uit welke je gebruikt. De handelingen worden nu niet verder geregistreerd.

2.6.3 Een macro aan een knop verbinden. Een macro is maar efficint als hij gemakkelijk opgeroepen kan worden. Doorgaans zal een macro opgeroepen worden in een algoritme, maar dat algoritme moet ook gestart kunnen worden. Dat gaat het gemakkelijkst door een knop op het blad te voorzien. Een knop gebruiken we enkel om de grofstructuur mee op te starten. Al de rest gebeurt in het algoritme zelf. Om zon knop te plaatsen kies je in het menu Beeld voor Werkbalken. Daar klik je de werkbalk Formulieren aan. Je krijgt een werkbalk zoals hiernaast afgebeeld. Staat die in de weg dan kan je ze verslepen. Sleep je ze tot aan de rand van het werkblad dan wordt het een gewone knoppenbalk (geen zwevende knoppenbalk meer). Als je dat wenst kan je ze achteraf weer op het werkbald slepen zodat de knoppenbalk weer zwevend wordt. Van deze werkbalk hebben we maar n knop nodig: (Knop). Klik op deze knop en je ziet dat je muiscursor in een fijn kruis verandert. Teken nu de knop op de gewenste plaats. Bij het loslaten van de muisknop krijg je een venster met de beschikbare macros. Als je tijdens het tekenen van de knop de Alt-toets ingedrukt houdt, zal de knop perfect op de randen van een cel komen.

Algoritmen met Excel

- 13 -

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

Kies de macro eruit die je met de gemaakte knop wil opstarten en klik op OK. Nu kan je nog de tekst in de knop veranderen, door de gewenste naam in te tikken en daarna buiten de knop te klikken. Door op ENTER te drukken neem je een nieuwe alinea binnen de knop. De tekst binnen deze knop is totaal onafhankelijk van de macro. Het is enkel een hulpmiddel naar de gebruiker toe. Wil je achteraf de eigenschappen van de knop veranderen (ander lettertype, kleur, formaat, andere plaats, tekst of macro,...) dan volstaat het om de knop met de secundaire muisknop aan te klikken. In het snelmenu kan je de eigenschappen veranderen, met de handvatten kan je de grootte veranderen en door in de knop te klikken kan je de tekst veranderen. ONTHOUD: KNOP AANPASSEN = RECHTSKLIKKEN OP DE KNOP

:Opdracht 1: Begin een nieuwe algoritmenwerkmap. Kies daarvoor in het menu Bestand voor Nieuw... Kies hier het sjabloon Algoritmen. Vul het hoofd van de oefening in. Bij Oefening plaats je bladzijde en nummer van de oefening, met een korte omschrijving (hier: macros opnemen) Verander de naam van de tab door erop te dubbelklikken in Opdracht 1. Neem een macro op die de achtergrond van de actieve cel in het rood plaatst. Neem een tweede macro op die de achtergrond van de actieve cel weer transparant maakt Maak voor elke macro een knop op het blad. Kies zelf een geschikte tekst voor in de knoppen. Test de knoppen uit Bewaar de map met als naam Macro

Algoritmen met Excel

- 14 -

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

2.6.4 Een macro verwijderen of verbeteren Werkt een macro niet zoals je had gehoopt, dan zijn er twee mogelijkheden. Ofwel ga je hem manueel verbeteren. Gaat het om een eenvoudige opdrachtmacro dan zal je vlugger geholpen zijn om de verkeerde macro eerst te verwijderen. Neem de macro daarna opnieuw op. Een macro verbeteren kan wel handig zijn om er overtolloge broncode uit te verwijderen. De programmagenerator plaatst dikwijls overbodige code in de macro, wat de uitvoering vertraagt. Om een macro te verbeteren of te verwijderen kies je in het menu Extra voor Macro. Kies in het deelmenu voor werkbalk gebruiken. . Je kan ook de knop met het driehoekje uit de Visual Basic -

Je krijgt een venster met alle macros die beschikbaar zijn. Klik de gewenste macro aan en klik op Verwijderen om de macro te verwijderen of op de knop Bewerken om hem aan te passen. De Visual Basic editor wordt opgestart. Je ziet nu de code van de macro. Een dosis gezond verstand is dikwijls voldoende om te begrijpen wat die code eigenlijk gaat doen. Je kan nu alle overtollige code verwijderen en de bestaande code eventueel aanpassen.

:Opdracht 2 Maak blad 2 van Macro actief en noem dat blad Opdracht 2 Vul het hoofd van het blad verder in (opdracht invullen) Neem een nieuwe macro op, en geef die de volgende naam: Geef3decimalen. Selecteer cel A5, tik hierin het getal 5 en druk op ENTER Selecteer opnieuw A5 en stel met de knop cijfers na de komma. Stop de opname ( ) uit de Visual Basic -werkbalk. de getalopmaak in voor een weergave met 3

Bekijk de broncode. Klik daarvoor op de knop

Algoritmen met Excel

- 15 -

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

Je krijgt de onderstaande code. Schrijf bij elke lijn wat de betekenis van het resultaat van deze lijn is.Sub Geef3decimalen() ' ' Geef3decimalen Macro ' De macro is opgenomen op 13/01/2002 door Tom Van Houdenhove. ' ' Range("A5").Select ActiveCell.FormulaR1C1 Range("A5").Select Selection.NumberFormat Selection.NumberFormat Selection.NumberFormat End Sub = "5" = "0.0" = "0.00" = "0.000"

Doorstreep hierboven de lijnen die overbodig zijn in deze macro. De bedoeling van de macro is om de actieve cel met 3 cijfers na de komma weer te geven. Verwijder de overbodige lijnen ook effectief uit de macro. Schakel over naar je werkblad en maak een knop om je macro op te starten Test je macro uit op verschillende cellen. Bewaar de werkmap opnieuw.

2.7 Modules, procedures en functies Een macro is een stukje programmacode dat een aantal opdrachten uitvoert. Zon macro kan op zijn beurt in een groter geheel opgenomen worden. Het komt er op neer dat de macro een deelalgoritme kan zijn van een ander algoritme. Een procedure is niets anders dan een deelalgoritme. In feite is een macro dus een procedure. Maar een procedure kan ook ontstaan door zelf programmacode in te tikken. Een procedure is dus een groepering van een aantal opdrachten, die samen een deelalgoritme vormen. Het resultaat van een procedure is dat er iets wordt uitgevoerd, meer niet. Bijvoorbeeld Kleur de achtergrond van de cel rood of Stel het aantal cijfers na de komma in op 3. Een functie is, net zoals een procedure, ook een deelalgoritme. Maar nu geeft dat deelalgoritme een antwoord of uitkomst. Een procedure doet alleen maar het een en het ander. We hebben al functies gebruikt in Excel . Zo was de functie GEMIDDELDE( ) een groepering van een aantal opdrachten om het gemiddelde uit een aantal getallen te berekenen. Dit algoritme geeft ons een antwoord: het gemiddelde. Omdat dit een antwoord geeft, noemen we het een functie. Ook een algoritme dat een antwoord geeft op de vraag Hoeveel schijfruimte is er nog vrij? zal een functie zijn, want het geeft een antwoord. De verzamelnaam van procedures en functies wordt een module genoemd. Een module is dus in feite een groepering van functies en/of procedures.

Algoritmen met Excel

- 16 -

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

Om functies en/of procedures te maken, gebruiken we de Visual Basic editor. Die hebben we daarnet eigenlijk ook al gebruikt om de procedure Geef3decimalen te bewerken. De vlotste methode om de editor te starten is met de knop uit de Visual Basic werkbalk.

In het linkerdeelvenster zie je de structuur van je werkmap (bij modules (bij )

) en zie je de

De module Basisbevelen bevat alle concrete deelalgoritmen die in deze cursus gebruikt worden. Verder heb je ook nog de module Procedures en de module Functies. Deze modules zijn eigen aan het sjabloon Algoritmen. Deze twee laatste zijn nog leeg. Om een module te openen moet je op die module dubbelklikken. Als je een macro opneemt, komt die automatisch in een nieuwe module terecht, met als naam Module1. Bewaar je de werkmap en open je ze later opnieuw, dan zullen nieuwe macros in de module Module2 komen, enz. Als je niet oplet, vind je op de duur je procedures niet meer terug. Daarom nemen we de gewoonte aan om alle procedures (eventueel na aanpassing) te verplaatsen naar de module Procedures (met knippen en plakken) en alle functies onmiddellijk in de module Functies te schrijven. Het lege moduleblad ModuleX verwijderen we dan door er met de secundaire muisknop op te klikken en in het snelmenu te kiezen voor ModuleX verwijderen...

Algoritmen met Excel

- 17 -

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

Op de volgende vraag antwoord je met nee.

:Opdracht 3 Start vanuit de werkmap Macro de Visual Basic editor. Let er op dat de volledige module wordt weergegeven. Daarvoor moet de rechtse knop onderaan het rechterdeelvenster ingedrukt zijn.

Wat staat er in de module Procedures? ............................................................................ Wat staat er in de module Functies? .................................................................................. Wat staat er in de module ModuleX (met X een cijfer) ....................................................... .......................................................................................................................................... Verplaats de inhoud van ModuleX volledig naar Procedures. Controleer of alle macros nu in de module Procedures staan. Verwijder de module ModuleX. Bewaar de werkmap.

2.8 Eenvoudige algoritmen schrijven. Eerst zorgen we ervoor dat we goed weten wat we allemaal zullen nodig hebben. Daarvoor zullen we ons probleem eerst uiteenrafelen in deelproblemen en onze oplossing voorstellen in een NS-diagram. Hoe noemt men dit principe? .......................................................................................................... Hieruit kunnen we al afleiden of er macros opgenomen moeten worden. Op die manier moeten we weinig code van buiten kennen. We willen bijvoorbeeld een algoritme ontwerpen dat het getal in een cel op een rode achtergrond plaatst en dat getal weergeeft op 3 cijfers na de komma. We kunnen dit probleem opsplitsen in twee deelproblemen:

-- StelWeergaveIn --

Algoritmen met Excel

- 18 -

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

De oplossing die h gegeven werd, staat in een NS-diagram. Bovenaan staat de titel (tussen ier streepjes, in een afwijkend kleur of op een gekleurde achtergrond). Deze titel is eigenlijk de naam van ons algoritme. Beide deelalgoritmen zijn abstract, maar kunnen met de macrorecorder opgenomen worden. Nu moet dit gecodeerd worden. Daarvoor starten we de Visual Basic editor. In het moduleblad Procedures kunnen we onder de bestaande procedures een nieuwe procedure maken. Dat kan door ze gewoon in te typen. Een procedure begint altijd met Sub gevolgd door de naam van het algoritme en twee haakjes. Ze eindigt altijd met End Sub. Alle code komt hier tussen. De beide deelalgoritmen moeten eerst opgenomen worden met de macrorecorder. Je kan dan je programma schrijven door tussen de sleutelwoorden Sub en End Sub de naam van de deelalgoritmen (zonder de haakjes) over te nemen. Om alles overzichtelijk te houden, laat je de opdrachten een beetje inspringen door op de TAB-toets te drukken. In dit voorbeeld wordt het dus: Sub StelWeergaveIn() ................................................................. ................................................................. End Sub

:Opdracht 4 Keer terug naar de Visual Basic editor. Als die al opgestart was kan dit met de knop op de taakbalk. Plaats de cursor op de eerste lijn na de laatste procedure. Tik Sub StelWeergaveIn( ) en druk op ENTER. Blader even met je pijltjestoetsen omlaag. Wat stel je vast? ............................................................................ Tik de twee opdrachten op hun plaats schakel via de taakbalk weer over naar Excel Verander de naam van Blad3 in Opdracht 4. Vul het hoofd van dt blad verder aan. Plaats in dat blad een knop die je algoritme start. Plaats enkele getallen in willekeurige cellen en test je programma uit. Bewaar de werkmap en sluit ze af.

Algoritmen met Excel

- 19 -

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

2.9 Oefeningen 2.9.1 Opnemen en aanpassen van macros a) Begin een nieuwe algoritmenwerkmap. Noem die Kleuren. Maak een werkblad met 6 knoppen. De eerste knop beslaat K6:K7, de tweede K9:K10, de derde K12:K13, ... De randen van deze knoppen moeten perfect op de randen van de cellen liggen. Hoe doe je dat? .................................................................................................................................... Ze hebben als opschrift respectievelijk zwart, grijs, blauw, rood, geel, groen. Als je op zon knop klikt moet de celinhoud van de actieve cel in dat kleur verschijnen. Plaats alle opgenomen macros achteraf in de module Procedures en documenteer je procedure . Doe dit ook telkens voor de volgende opdrachten. Bewaar de werkmap, test uit en sluit af. b) Begin een nieuwe algoritmenwerkmap. Noem die Kolombreedte . Maak een knop die de kolombreedte van de actieve cel zodanig aanpast dat het langste gegeven uit deze kolom er net in past. Wat stel je vast als je je macro test in een andere kolom? ............................................................... ...................................................................................................................................................... Bekijk de broncode van de macro. Hoe komt dat? ........................................................................ ...................................................................................................................................................... Is dit bijgevolg een goed deelalgoritme? Verklaar. ......................................................................... ...................................................................................................................................................... Bewaar de werkmap, test uit en sluit af. c) Begin een nieuwe algoritmenwerkmap. Noem die Kolombreedte . Maak een werkblad met 10 knoppen, geschikt zoals de cijfers op een telefoontoestel. In elke knop staat een cijfer (van 0 tot en met 9). Klik je op knop 1 dan wordt de inhoud van de actieve cel weergegeven met 1 cijfer na de komma. Klik je op knop 5 dan zijn dat 5 cijfers na de komma, ... Bewaar de werkmap, test uit en sluit af.

Algoritmen met Excel

- 20 -

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

2.9.2 Eenvoudige algoritmen schrijven Begin een nieuw algoritmenblad en noem het Slotoefening Hoofdstuk 2. Stel een algoritme op dat celinhoud in blauwe cijfers, in het vet plaatst. De achtergrond van de cel moet in het lichtgeel komen. De cel wordt met een dubbele rand omkaderd. Het getal wordt zonder cijfers na de komma getoond, maar de cijfers worden wel per 3 gegroepeerd, zoals de BIN-normen het verlangen (vb. 1 236 741 658). Zorg ervoor dat de kolombreedte aangepast wordt aan het langste gegeven in die kolom. Werk met de stapsgewijze verfijning en stel eerst een NS-diagram van je grofstructuur op. Probeer gebruik te maken van reeds bestaande deelalgoritmen. Noem je algoritme Grofstructuur. Zorg voor een knop die je algoritme kan opstarten en plaats er een passende tekst in. Plaats alle deelalgoritmen in de module Procedures en documenteer je algoritme.

GTips bij deze opgave: Neem voor elk deelalgoritme een macro op. Bekijk de inhoud van de macros en verwijder de overtollige lijnen. De macro voor de kolombreedte werkte alleen voor 1 kolom, namelijk deze die gebruikt werd tijdens het opnemen. De broncode bevat de volgende lijn: Columns("G:G").EntireColumn.AutoFit Met wat gezond verstand kan je deze lijn ontleden: van de kolom G (Columns("G:G")) moet de volledige kolom (EntireColumn) een gepaste breedte krijgen (AutoFit). Het is het eerste deel van die lijn dat ervoor zorgt dat enkel kolom G aangepast kan worden (dit kan ook een andere kolomletter zijn). Daardoor is ons deelalgoritme dus niet algemeen. Pas de macro aan zodat de macro wel algemeen wordt. In de plaats van de kolom G best passend te maken zullen we de kolom van de actieve cel (= van de selectie) best passend maken. Pas daarom deze lijn aan tot Selection.EntireColumn.AutoFit De betekenis wordt nu: van de geselecteerde cel (Selection) moet de volledige kolom (EntireColumn) een gepaste breedte krijgen (AutoFit). Zon aanpassingen moet je niet uit jezelf kunnen maken. Als die nodig zijn, dan worden ze gegeven.

Algoritmen met Excel

- 21 -

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

2.10 Probleem bij het openen van bestanden die macros bevatten Als je een document dat macros bevat opent, zal Excel bij het openen ervan volgende vraag stellen:

Aangezien je met macros kan programmeren, kunnen er ook virussen mee gemaakt worden. Let op met Exceldocumenten met macros die je niet zelf gemaakt hebt. Klik op de knop Macros inschakelen. Aangezien we enkel met eigen geschreven macros werken is er geen gevaar op macrovirussen. Wil je deze melding in het vervolg niet meer krijgen, open dan Excel en klik in de Visual Basic werkbalk de knop .

Kies in het dialoogvenster Beveiliging voor Laag.

Let op met deze instelling!! Je wordt niet meer gewaarschuwd als er macros in het document zitten. Doe dit enkel als je een degelijke en recente virusscanner staan hebt.

Algoritmen met Excel

- 22 -

Tom Van Houdenhove

Hoofdstuk 2: methode van de stapsgewijze verfijning

2.11 Wat je moet kennen en kunnen De stappen kunnen geven die nodig zijn voor het efficint oplossen van een probleem De stappen nodig voor het oplossen van een probleem kunnen uitleggen De stappen nodig voor het oplossen van een probleem kunnen gebruiken bij een gegeven probleem De begrippen broncode en compileren kunnen uitleggen Inzien dat Excel fungeert als interpreter voor VBA en dat er dus niet gecompileerd moet worden Weten wat een programmagenerator is en enkele voorbeelden kunnen noemen De eisen kunnen geven waaraan een goed algoritme moet voldoen De begrippen grofstructuur en verfijning kunnen uitleggen De voordelen van de stapsgewijze verfijning kunnen geven Een probleem kunnen opdelen in deelproblemen en dit kunnen voorstellen in een Nassi-Schneidermann-diagram (NS-diagram) Een macro kunnen opnemen Een knop kunnen maken om er een macro mee te starten Een knop kunnen aanpassen (andere macro aan koppelen, tekst in de knop aanpassen, ...) Een (verkeerde) macro kunnen verwijderen Een macro kunnen aanpassen (overtollige lijnen verwijderen, broncode aanpassen) Het verschil tussen functies, procedures en modules kunnen aangeven Een opgenomen macro naar de module Procedures kunnen verplaatsen Een module kunnen verwijderen Een algoritme kunnen invoeren, gebaseerd op de methode van de stapsgewijze verfijning, waar de verfijningen bestaan uit opgenomen macros.

Algoritmen met Excel

- 23 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling3.1 De sequentie Algoritmen worden opgebouwd met een aantal controlestructuren. Dit zijn hulpmiddelen om onze oplossing te beschrijven. Het woord controle wordt hier gebruikt in de betekenis van besturen, niet in de betekenis van nagaan of iets in orde is. Een eerste controlestructuur die we ter beschikking hebben is de sequentie. Een sequentie of opeenvolging is een reeks opdrachten die elk nmaal, in een opgegeven volgorde worden uitgevoerd. Een sequentie bestaat bijgevolg altijd minstens uit 2 bevelen. We leren nu onze algoritmen in een overzichtelijke vorm te noteren. Dat gebeurt met een Nassi-Schneidermann-diagram. In een sequentie bestaat zon NS-diagram uit een aantal onder elkaar getekende rechthoeken, die allen even breed zijn. Elke rechthoek bevat n opdracht. Bovenaan wordt de naam van het algoritme genoteerd. Om duidelijk te maken dat het de naam is van een algoritme en geen opdracht, wordt deze tussen streepjes gezet en wordt die op een gekleurde achtergrond geplaatst. In je schriftelijke voorbereiding van de oefeningen kan dit eenvoudig met bijvoorbeeld een fluostift, of door de rechthoek met de titel te kleuren met een potlood. Voorbeeld: We maken een algoritme dat het dubbel van een gevraagd getal berekent en afdrukt. Dit is een elementair voorbeeld van een gegevensverwerkend proces.

invoer

verwerking

uitvoer

Deze stappen moeten hoe dan ook terug te vinden zijn in ons algoritme. Aangezien we onze algoritmen met een werkblad oplossen zullen we bij het opstellen van ons algoritme hiermee rekening moeten houden. Het algoritme zou als volgt kunnen zijn:

-- BerekenDubbel -SELECTEER cel E8 LEES getal x getal in de cel dubbel 2x Zak6Cellen DRUK dubbel

Algoritmen met Excel

- 24 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

Met deze sequentie wordt in de cel E8 een getal gevraagd en het dubbel komt zes cellen daaronder terecht. Wat zal er gebeuren als we er het volgende van maken? Er werden net dezelfde opdrachten gebruikt, maar de volgorde werd licht veranderd.

-- BerekenDubbel -LEES getal SELECTEER cel E8 x getal in de cel dubbel 2x DRUK dubbel Zak6Cellen Wat loopt er fout? ...................................................................................................................................................... ...................................................................................................................................................... Waaraan is dit te wijten? ..................................................................................................................................................... 3.2 De basisbevelen Om algoritmen te kunnen opstellen moeten we een aantal instructies kennen. Hier wordt een onderscheid gemaakt tussen abstracte en concrete deelalgoritmen. Wat was het onderscheid ? concreet deelalgoritme: ........................................................................................................... ................................................................................................................................................ abstract deelalgoritme: ............................................................................................................ ................................................................................................................................................

Om het programmeren niet nodeloos moeilijk te maken, werden een aantal opdrachten in het sjabloon Algoritmen reeds verfijnd. We beschouwen ze als concrete deelalgoritmen. Het voordeel hiervan is dat je geen echte programmacode zal moeten van buiten leren en dat je op deze manier de kans op syntaxfouten een heel stuk verkleint. Met syntaxfouten worden fouten tegen de syntax bedoeld, met andere woorden: fouten tegen de juiste schrijfwijze van de broncode. Bovendien krijg je op deze manier verkrijg een aantal bevelen die duidelijk herkenbaar zijn en die een minimale kennis van de syntax vereisen. Het zijn bevelen voor invoer en uitvoer, en bevelen voor het verplaatsen van de celcursor. We spreken af dat deze concrete deelalgoritmen steeds met hoofdletters genoteerd worden. Als je aan het programmeren bent zal VBA ze trouwens automatisch in hoofdletters omzetten.

Algoritmen met Excel

- 25 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

Gebruik deze namen dan ook nooit voor eigen abstracte deelalgoritmen. In dit laatste geval zou de processor (in dit geval Excel) niet weten welk deelalgoritme nu bedoeld wordt. Je vindt deze basisbevelen ook terug op de kaart met concrete deelalgoritmen. Houd deze best in de buurt als je oefeningen oplost. Bevelen voor invoer en uitvoer Concreet deelalgoritme Gebruik van dit deelalgoritme LEES ("tekst die afgedrukt moet worden") Er wordt een invoervenster weergegeven met daarin de tekst die tussen de haakjes voorkomt. Als je op Annuleren klikt blijft de celinhoud ongewijzigd. Het resultaat van deze LEESopdracht komt in de actieve cel. DRUK ("tekst die afgedrukt moet worden") De tekst (of de waarde van de variabele) die of tussen de haakjes voorkomt wordt in de actieve DRUK(variabele) cel geplaatst. TEKSTINCEL voorbeeld: naam = TEKSTINCEL Aan de variabele naam wordt de inhoud van de actieve cel toegekend. Het resultaat is een alfanumeriek gegeven. voorbeeld: aantal = GETALINCEL Aan de variabele aantal wordt de inhoud van de actieve cel toegekend. Het resultaat is een numeriek gegeven. Bevelen voor het verplaatsen van de celcursor Concreet deelalgoritme Gebruik van dit deelalgoritme SELECTEER(celverwijzing) voorbeeld: SELECTEER("A1") De cel of het bereik dat als parameter wordt opgegeven wordt geselecteerd. De celverwijzing moet tussen aanhalingstekens staan. Plaatst de celcursor 1 cel hoger Plaatst de celcursor 1 cel lager Plaatst de celcursor 1 cel naar links Plaatst de celcursor 1 cel naar rechts

GETALINCEL

CELOMHOOG CELOMLAAG CELLINKS CELRECHTS

Bevel voor het wissen van cellen Concreet deelalgoritme Gebruik van dit deelalgoritme WIS(celbereik) voorbeeld: WIS("A1:B10") De cellen A1:B10 worden leeggemaakt Het celbereik moet tussen aanhalingstekens staan.

Algoritmen met Excel

- 26 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

Afspraken : tekst moet altijd tussen aanhalingstekens staan een celverwijzing moet ook altijd tussen aanhalingstekens staan Het algoritme dat we daarnet aan de hand van een NS-diagram ontworpen hebben kunnen we nu vertalen naar een programma. De broncode van ons programma wordt: Sub BerekenDubbel() ................................. ................................. ................................. ................................. ................................. ................................. End Sub Op n opdracht na is dit algoritme nu volledig bepaald. Enkel de abstracte opdracht Zak6Cellen moet nog verfijnd worden. NS-diagram Broncode Sub Zak6Cellen() .................. .................. .................. .................. .................. .................. End Sub

-- Zak6Cellen --

Algoritmen met Excel

- 27 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

:Opdracht 5 Open de werkmap Sequentie Ga naar de VBA editor en open het moduleblad Procedures Tik de broncode voor de grofstructuur en voor de verfijning in Test het programma uit Wat gebeurt er als je in de plaats van een getal tekst invoert? .............................................. .......................................................................................................................................... Klik op de knop Stop. Probeer je programma opnieuw, maar nu weer met een getal. Bewaar de werkmap

3.3 Gebruik van variabelen Om berekeningen te kunnen maken, moeten we variabelen gebruiken. In det voorbeeld daarnet werden al variabelen gebruikt. Een variabele is in feite niets anders dan een naam waar we een waarde aan toekennen. Die naam kan bestaan uit n enkele letter, maar kan ook uit meerdere letters en/of cijfers bestaan. Je moet wel met een letter beginnen. Om de oppervalkte van een cirkel te berekenen heb je de straal en nodig. De straal kan aan de gebruiker gevraagd worden, dus is het aangewezen om hier een variabele voor te gebruiken. Wanneer je de variabele straal de waarde 3 geeft schrijf je: straal krijgt als waarde 3. In een NS-diagram wordt een pijltje gebruikt om aan een variabele een waarde toe te kennen. Voorbeelden: straal 3 pi 3,14159265 oppervlakte pi x straal school Spes Nostra straal krijgt als waarde 3 pi krijgt als waarde 3,14159265 oppervlakte krijgt als waarde het resultaat van de berekening pi x straal, dus 3,14159265 x 3 school krijgt als waarde Spes Nostra. Tekst moet altijd tussen aanhalingstekens staan

Opmerking: In de broncode van VBA wordt een waarde aan een variabele toegekend met een =-teken en niet met een pijltje. Toch gebruikt men dit niet in een NS-diagram, omdat niet alle programmeertalen hiervoor een =-teken gebruiken. Door met variabelen te werken wordt ons programma algemeen bruikbaar. Met de instructie LEES kunnen we een gegeven opvragen en de waarde ervan toekennen aan een variabele. Hiermee kunnen we dan verder werken binnen ons programma. Welke variabelen werden gebruikt in ons programma BerekenDubbel? ..................................

Algoritmen met Excel

- 28 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

3.4 Werken met functies 3.4.1 Functies ontwerpen Een functie is, net zoals een procedure, een stukje programma dat op zichzelf gebruikt kan worden. We hebben al gebruik gemaakt van procedures. de macros die we opnamen waren procedures: het waren stukjes programma die een deel van het probleem voor hun rekening namen. Bijvoorbeeld KleurAchtergrondRood. binnen de grofstructuur maken we gebruik van een aantal deelalgoritmen. Zon deelalgoritme was ook een voorbeeld van een procedure. Bijvoorbeeld: Zak6Cellen.

Een procedure is dus niets anders dan een programma dat binnen een ander programma gebruikt kan worden. Een procedure wordt ook soms een subroutine genoemd, vandaar de sleutelwoorden Sub en End Sub in het begin en op het einde van een procedure. Een funcite is dat in feite ook. Tot op zekere hoogte zijn een functie en een procedure dus aan elkaar gelijk. Het essentile verschil tussen de twee zit hem in het resultaat. Een procedure doet iets, terwijl een functie een antwoord op een vraag geeft. Zijn de volgende deelalgoritmen procedures of functies? Verklaar. TekenKader

BepaalLeeftijd

CentreerTitel

GaNaarBegin

TelOp

BepaalVrijeSchijfruimte

Het principe om een functie te maken is hetzelfde als om een procedure te maken. Er moet enkel nog gezorgd worden dat het antwoord gegeven wordt. Daarvoor wordt in die functie het antwoord aan een variabele toegekend die dezelfde naam heeft als de functie zelf. Daarbij worden de nodige gegevens om met deze functie te kunnen werken tussen haakjes geplaatst bij de titel.

Algoritmen met Excel

- 29 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

Voorbeeld: we willen de n machtswortel van een geral berekenen, maar daar bestaat binnen -de Excel geen functie voor. Daarom maken we er zelf een. De gegevens die we daarvoor nodig hebben zijn de wortelexponent en het grondtal. De functie zelf bestaat nu maar uit n stap meer, namelijk de berekening van de wortel. Uiteraard kan een functie, net als een procedure, ook uit een sequentie bestaan.

-- nWortel (exponent, grondtal) -nWortel grondtal^(1/exponent) Het resultaat van nWortel(4, 16) zal dus de vierdemachtswortel uit 16 zijn, of 2. Om een functie te programmeren gebruiken we hetzelfde principe als bij een procedure, maar we plaatsen ze tussen de sleutelwoorden Function en End Function. Function nWortel(exponent, grondtal) nWortel = grondtal ^ (1 / exponent) End Function Een functie kan geprogrammeerd worden binnen een moduleblad. In het sjabloon Algoritmen.xlt werd echter een afzonderlijk moduleblad Functies voorzien. We nemen de gewoonte aan om alle functies hier in te programmeren. Een functie moet altijd een variabele bevatten met dezelfde naam als de functie. Het is via deze variabele dat het antwoord doorgegeven wordt!! Is de concrete opdracht LEES een procedure of een functie? Verklaar. ........................................ ...................................................................................................................................................... Dat wil zeggen dat we het algoritme BerekenDubbel in feite kunnen vereenvoudigen.

-- BerekenDubbel --

Algoritmen met Excel

- 30 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

Sub BerekenDubbel() ................................. ................................. ................................. ................................. ................................. End Sub

Afspraak:

In een NS-diagram zetten we vanaf nu niet meer maar kortweg ...................................................................

..................................... De essentie is dat we een waarde opvragen voor de variabele x. Welke tekst daarvoor gebruikt wordt is niet zo belangrijk, dus dit moet niet in het NS-diagram komen. In de broncode van VBA zal het wel een toekenning worden. 3.4.2 Een zelfgemaakte functie gebruiken in je werkblad Het principe is net hetzelfde als het werken met een functie uit Excel. Je begint de lijn met een gelijkheidsteken, tikt dan de naam van je functie, en geeft de argumenten op door middel van celverwijzingen. De argumenten worden hier ook gescheiden door een puntkomma, niet door een komma zoals bij het programmeren in VBA .A B 1 wortelexponent grondtal 2 4 16 3 3 8 4 2 81 C wortel =nwortel(A2;B2) =nwortel(A3;B3) =nwortel(A4;B4)

:Opdracht 6 Open de werkmap Functies Programmeer de functie voor het berekenen van de n-de machtswortel Gebruik deze functie om in het blad Functie in een werkblad de n-de machtswortel van de getallen in de eerste (gele) tabel te berekenen. Maak de functies dubbel, helft en kwadraat en gebruik ze om de groene tabel verder aan te vullen. Maak de functies OppCirkel en OmtrCirkel. Bereken hiermee de oppervlakte en de omtrek van een cirkel als de straal gegeven is. Stel eerst het NS-diagram op. Gebruik een variabele pi (=3,14159265).

Algoritmen met Excel

- 31 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

-- OppCirkel(

) --

-- OmtrCirkel(

) --

Gebruik een komma als decimaal teken. Wat stel je vast? .................................................. .......................................................................................................................................... Verander de komma in een punt. Tegen de gewoonte in wordt in VBA een punt gebruikt als decimaal teken bij getallen. De komma dient als scheiding tussen argumenten van een functie. Gebruik de functies in de blauwe tabel en voer ze door voor de volledige tabel (vulgreep gebruiken) Bewaar je werkmap

3.4.3 Functies gebruiken in een procedure Functies kunnen ook als deelalgoritme gebruikt worden in een procedure. Daarvoor moet je het resultaat van deze functie toekennen aan een variabele. Bijvoorbeeld: oppervlakteOppCirkel(straal) Stel dat we een algoritme moeten opstellen om de oppervlakte en de omtrek van een cirkel te berekenen. Uiteraard is er invoer en uitvoer nodig, dus zullen we in onze grofstructuur zeker de opdrachten LEES en DRUK nodig hebben. Maar voor de berekening van de oppervlakte en de omtrek kunnen we gebruik maken van de gemaakte functies.

-- OppervlakteEnOmtrek -SELECTEER juiste cel LEES straal oppervlakte OppCirkel(straal) omtrek OmtrCirkel(straal) CELOMLAAG DRUK oppervlakte DRUK omtrek De verfijningen die in deze grofstructuur nodig zijn, zijn de gebruikte functies, maar deze werden al gemaakt.

Algoritmen met Excel

- 32 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

De broncode wordt: Sub OppervlakteEnOmtrek() SELECTEER ("C7") straal = LEES ("Wat is de straal van de cirkel?") oppervlakte = OppCirkel(straal) omtrek = OmtrCirkel(straal) CELOMLAAG DRUK (oppervlakte) CELOMLAAG DRUK (omtrek) End Sub

:Opdracht 7 Selecteer het blad Functie in procedure in de map Functies Maak een programma dat de straal van de cirkel vraagt en deze noteert in de cel C7. De oppervlakte komt dan in C8 en de omtrek in C9. Maak op de voorziene plaats een knop om je algoritme te starten. De randen van de knop laat je perfect samenvallen met de randen van de cellen. De broncode vind je hierboven. Maak een tweede algoritme dat de wortelexponent en het grondtal vraagt en hieruit de n-de machtswortel berekent. Gebruik de functie die je gemaakt hebt. Voorzie een knop om je programma op te starten. Kijk zelf hoe je alles schikt. Vul je broncode aan: Sub ........................ ........................ ........................ ........................ ........................ ........................ ........................ ........................ End Sub Bewaar de werkmap en sluit ze af.

Algoritmen met Excel

- 33 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

3.5 De begrensde herhaling 3.5.1 Het principe: het werken met een teller Tot nu toe hebben we enkel met sequenties gewerkt. Hiermee kunnen we al een aantal problemen aanpakken, maar het is niet altijd de meest efficinte manier. We nemen er een nieuwe controlestructuur bij: de herhaling of iteratie. In ons algoritme BerekenDubbel kwam een deelalgoritme Zak6Cellen voor. Dat laatste werd als volgt verfijnd:

-- Zak6Cellen -CELOMLAAG CELOMLAAG CELOMLAAG CELOMLAAG CELOMLAAG CELOMLAAG Hierin zit dus in feite maar n enkele opdracht CELOMLAAG. Diezelfde opdracht moest zes keer uitgevoerd worden, dus hebben we hem zes keer ingevoerd. Nu bestaat er een handige controlestructuur die speciaal ontworpen werd om een deelalgoritme een vast aantal keren uit te voeren. We noemen deze controlestuctuur de begrensde herhaling, omdat het aantal herhalingen door een gegeven getal begrensd is.

-- Zak6Cellen -Herhaal 6 keer CELOMLAAG

De processor zal met behulp van de begrensde herhaling tellen hoe dikwijls de opdracht al is uitgevoerd. Om te kunnen tellen hebben we een variabele nodig, al is het maar om te onthouden hoe dikwijls de opdracht al werd uitgevoerd. We zullen deze variabele als teller gebruiken. Dikwijls wordt hiervoor de letter i gebruikt, naar analogie met de wiskunde, maar in feite kan je die vrij kiezen. De broncode voor onze verfijning wordt nu: Sub Zak6Cellen() For i = 1 To 6 CELOMLAAG Next i End Sub Hierbij zal i de waarde 1 krijgen (For i = 1) en de opdracht CELOMLAAG wordt uitgevoerd. Door de instructie Next i (volgende waarde voor i) wordt i gelijkgesteld aan 2 en de

Algoritmen met Excel

- 34 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

opdracht CELOMLAAG wordt opnieuw uitgevoerd. Dit blijft zo verder gaan tot i gelijk is aan 6 (To 6). Met To 6 wordt wel bedoeld tot en met 6. De variabele i wordt in dit voorbeeld dus niet gebruikt om mee te rekenen. Ze dient enkel als teller om te weten hoe dikwijls de opdracht al werd uitgevoerd.

?Syntaxregelshier is een beperkte kennis van de syntax (juiste schrijfwijze) nodig: For variabele = kleinste To grootste komt op 1 lijn. Er komt niets voor of achter opdracht te herhalen opdracht(en) komen op de volgende lijn(en) Next variabele woord Next gevolgd door de naam van de tellervariabele. Deze komt op de lijn volgend op deze met de laatste te herhalen opdracht. Om het geheel overzichtelijk te houden laten we de opdracht die herhaald moet worden wat meer inspringen.

:Opdracht 8 Open de werkmap Begrensde herhaling Vul de verfijning Zak6Cellen verder aan. De grofstructuur werd al gemaakt. De woorden For en Next worden sleutelwoorden genoemd. Wat stel je vast als je de lijn waar je het sleutelwoord in geplaatst hebt verlaat? .............................................................. .......................................................................................................................................... Daarom staan ze in deze cursus in het vet. Als je zelf programmacode neerschrijft, neem dan voor je sleutelwoorden ook een afwijkende kleur. Test je programma uit Bewaar de werkmap opnieuw

3.5.2. Een praktisch voorbeeld: tekenen van zebrapaden.

a) ProbleemdefinitieMaak een algoritme dat een zebrapad tekent in de kolom B. De beginsituatie staat al op schijf in het bestand Zebrapad. De knoppen zijn al voorzien en de knop Wis zebrapaden werkt. De knop Teken Zebrapaden is al gekoppeld aan de (nog lege) grofstructuur. Dit programma is een voorbereiding op een ruimere opgave, waar meerdere zebrapaden naast elkaar zullen moeten komen. Zorg dat je programma eenvoudig aanpasbaar is. Bestaande zebrapaden moeten niet gewist worden in de uitvoering van het programma.

Algoritmen met Excel

- 35 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

Na de uitvoering van je algoritme staat de celcursor in de cel C7 (achter de knop).

b) ProbleemanalyseWe trekken het probleem uiteen in een aantal deelproblemen. Eerst en vooral moeten we ..................................op de ................................................................. Vervolgens .....................................we het .............................................. . Tot slot plaatsen we ..................................................................

c) SchemaGrofstructuur:

-- Zebrapaden --

Algoritmen met Excel

- 36 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

Verfijningen diepte 1

Herhaal .... keer

Verfijning diepte 2

Herhaal .... keer

Opgenomen macro

d) ProgrammerenNu het echte denkwerk gedaan is, kunnen we aan het programmeren beginnen. Het komt er op neer dat we ons NS-diagram in VBA moeten ingeven. Hiervoor kunnen we gebruik maken van de concrete deelalgoritmen (zie vroeger in deze cursus), van eigen gemaakte procedures en functies en van macros. In dit algoritme komen zelfgedefinieerde functies voor. We zullen hier deelalgoritme per deelalgoritme vertalen.

Algoritmen met Excel

- 37 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

grofstructuur:

-- Zebrapaden -GaNaarStartpositie Teken1zebrapad VerbergCelcursor Om een deelalgoritme in onze programmacode op te nemen volstaat het om de naam van dat deelalgoritme in te tikken. Als we dit vertalen in VBA krijgen we:Sub TekenZebrapaden() GaNaarStartpositie Teken1Zebrapad VerbergCelcursor End Sub

:Opdracht 9 Open de werkmap Zebrapad Start de VBA -editor op. Dat kan met de knop uit de werkbalk Visual Basic Open de module Procedures, als dat nog niet het geval zou zijn. Je ziet dat er al commentaarregels in staan. Maak er een gewoonte van om uitleg te geven bij je algoritme (documenteren) en geef aan waar de grofstructuur begint. Commentaarlijnen beginnen altijd met een enkel aanhalingsteken! In deze opgave is dit al voor jou gebeurd. Voer de code van de grofstructuur in. Zorg dat alles mooi onder elkaar staat (let op de insprongpositie).

De horizontale lijnen worden ook automatisch ingevoegd. Ze dienen om de verschillende deelalgoritmen van elkaar te scheiden. Je moet je daar tijdens het programmeren in feite niets van aantrekken.

Algoritmen met Excel

- 38 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

Verfijningen diepte 1

-- GaNaarStartpositie -SELECTEER cel B10 Als we dit coderen zullen we het omzetten als volgt: Sub GaNaarStartpositie() ..................... End Sub Op dezelfde manier zullen we ook de volgende verfijning vertalen:

-- Teken1Zebrapad -Herhaal 6 keer KleurAchtergrondWit Zak2Cellen

Deze wordt dan: Sub Teken1Zebrapad() For ......... To ..... ....................... ....................... Next .... End Sub

en tot slot:

-- VerbergCelcursor -SELECTEER cel B10 zullen we coderen als: Sub VerbergCelcursor() ....................... End Sub

Algoritmen met Excel

- 39 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

:Opdracht 9 (vervolg) Vul de programmacode aan. Bewaar je bestand. Het is trouwens aangewezen om je bestanden geregeld te bewaren. Met programmeren weet je nooit. Bewaar zeker vr je test!!

Verfijning diepte 2

-- Zak2Cellen -Herhaal 2 keer CELOMLAAG

Dit zullen we als volgt schrijven: Sub Zak2Cellen() For ...... To .... ............... Next .... End Sub

Tot slot zullen we nog een macro moeten opnemen. Welke? ..........................................................

:Opdracht 9 (vervolg) Vul de programmacode aan. Neem de macro op. Bewaar je bestand nogmaals.

e) Testen

:Opdracht 9 (vervolg) Start je programma op en kijk of het werkt. Als er fouten in staan, probeer die te lokaliseren en verbeter ze.

f) documenterenDit hebben we in feite al gedaan toen we aan het programmeren waren. Maar misschien zijn er nog een aantal aanvullingen die je wil maken. Werk de documentatie van je programma af. Nu is het klaar. Bewaar je werkmap nu definitief.

Algoritmen met Excel

- 40 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

3.6 Oefeningen 1. Zebrapad Maak een algoritme dat 10 zebrapaden naast elkaar tekent, met een afstand van 4 cellen tussen twee zebrapaden. Je baseert je best op de voorbeeldoefening. Breid die verder uit. Bestaande zebrapaden moeten niet gewist worden in de uitvoering van het programma. Na de uitvoering van je algoritme staat de ccelcursor in de cel C7 (achter de knop). Maak een volledige analyse en doorloop alle stappen (analyse, NS-diagram maken, programmeren, testen, documenteren). Noteer alles opnieuw!! Bewaar je algoritme met dezelfde naam (Zebrapad)

Uitbreiding: Vraag de gebruiker hoeveel zebrapaden hij wil laten tekenen. Let wel dat de leesinstructie het ingevoerde getal in de actieve cel noteert. Zorg dan ook dat je algoritme dat getal weer wist. Laat het algoritme de bestaande zebrapaden eerst weer wissen.

Algoritmen met Excel

- 41 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

2. Dambordpatroon Maak een algoritme dat een dambordpatroon tekent. Bewaar het met als naam Dambord

Het dambord is een vierkant van 6 bij 6 vakjes. De achtergrond van je werkblad is lichtgeel, zodat je het dambord goed ziet liggen. De linkerbovenhoek van het dambord ligt op de actieve cel op het moment dat je het algoritme start. Het speelt geen rol waar de celcursor staat op het einde. Voorzie in de titelruimte van je werkblad een knop om het algoritme te starten. Voorzie ook een knop om het dambordpatroon weer te wissen (hiermee worden alle cellen in het werkblad lichtgeel gekleurd). Het vorige patroon moet niet automatisch gewist worden als het programma gestart wordt. Het dambord bestaat uit zwarte en witte vakjes. En vakje op het dambord beslaat 3 onder elkaar liggende cellen. Uitbreiding voor de bollebozen: Laat het programma aan de gebruiker vragen uit hoeveel rijen en hoeveel kolommen het dambord moet bestaan. Dit aantal moet een even aantal zijn. We gaan ervan uit dat de gebruiker het programma juist gebruikt dus is het nie nodig om de invoer hierop te controleren (dat hebben we trouwens nog niet gezien). Let op: bij het gebruik van de leesinstructie wordt in de actieve cel de invoer geplaatst. Zorg dat het algoritme dit weer wist.

Algoritmen met Excel

- 42 -

Tom Van Houdenhove

Hoofdstuk 3: de sequentie en de begrensde herhaling

3.7 Wat je moet kennen en kunnen Het begrip sequentie (opeenvolging) kunnen uitleggen Een probleem opsplitsen in deelproblemen (stapsgewijze verfijning) Een probleem analyseren en de oplossing in een NS-diagram voorstellen De stappen nodig om een probleem gestructureerd op te lossen kunnen toepassen op een opgave. Een algoritme van een NS-diagram kunnen omzetten in broncode De VBA -editor kunnen opstarten en gebruiken De eisen waaraan een goed algoritme voldoet moet je blijven kennen (vorig hoofdstuk) en moet je kunnen toepassen Deelalgoritmen een zinnige naam geven die aan de eisen uit het vorig hoofdstuk voldoet Een knop maken om een algoritme te kunnen starten Je algoritmen uitvoerig kunnen documenteren en structureren De concrete deelalgoritmen kunnen gebruiken. Die moet je niet van buiten kennen. Je kan er de snelzoekkaart bij deze cursus voor gebruiken. Weten wat variabelen zijn en variabelen kunnen gebruiken Het verschil kennen tussen procedures en functies Een functie kunnen maken Een zelfgemaakte functie kunnen gebruiken in een werkblad Een zelfgemaakte functie kunnen gebruiken in een deelalgoritme Het begrip begrensde herhaling kunnen uitleggen Een begrensde herhaling in een NS-diagram kunnen voorstellen Een begrensde herhaling in VBA kunnen invoeren Een probleem dat verschillende controlestructuren bevat kunnen oplossen met behulp van de stapsgewijze verfijning. Patronen in een opgave kunnen herkennen om op die manier efficint van de begrensde herhaling gebruik te kunnen maken Fouten in een algoritme kunnen lokaliseren en verbeteren

Algoritmen met Excel

- 43 -

Tom Van Houdenhove

Hoofdstuk 4: de selectie4.1 De selectie of keuzestructuur Tot nu toe lagen alle opdrachten die in het algoritme uitgevoerd zouden worden, op voorhand vast. Het kan nu ook zijn dat, afhankelijk van bijvoorbeeld de invoer, of afhankelijk van verkregen informatie, er andere opdrachten genomen moeten worden. Daarvoor gebruiken we een nieuwe controlestructuur: de selectie of keuzestructuur. Bijvoorbeeld: Je hebt 15 en je wil een CD kopen. Het zal afhankelijk zijn van hoeveel de gewenste CD kost of je hem al dan niet zal kunnen kopen.

-- CD-speurtocht -prijs 15 WAAR Koop de CD Verlaat de winkel De selectie werkt dus in feite als een wissel op een spoorweg: ze bepaalt in welke richting een programma verdergaat. Het verloop van het programma kan je op deze manier afhankelijk maken van een ingevoerde waarde of van het resultaat van een berekening. NIET WAAR

4.2 Eenzijdige en tweezijdige selectie 4.2.1 Eenzijdige selectie In het voorbeeld van de CD-speurtocht spreken we van een eenzijdige (of enkelzijdige) selectie. Het is een selectie waar enkel een opdracht uitgevoerd wordt als er aan de voorwaarde voldaan is. Is er niet aan de voorwaarde voldaan, dan wordt er niets uitgevoerd en gaat de sequentie waarin de selectie stond gewoon verder. Dit is de eenvoudigste vorm van de keuzestructuur. In sommige eenvoudige programmeertalen is het enkel mogelijk om met eenzijdige selecties te werken. Een eenzijdige selectie wordt in een Nassi-Schneidermann-diagram als volgt voorgesteld: voorwaarde WAAR Opdrachten NIET WAAR

De opdrachten bij een eenzijdige selectie worden altijd in het blok WAAR gezet, nooit in NIET WAAR. Desnoods moet je je voorwaarde maar wat aanpassen.

Algoritmen met Excel

- 44 -

Tom Van Houdenhove

Hoofdstuk 4: de selectie

:Opdracht 12 Je krijgt korting op je aankoop als je meer dan 10 exemplaren van eenzelfde artikel koopt. Schrijf een programma dat vraagt hoeveel exemplaren je van een (niet nader bepaald) artikel hebt gekocht. Als dat er meer dan 10 zijn moet het programma daar naast schrijven Je krijgt korting. De celcursor komt onder het ingevoerde aantal.

Maak het NS-diagram van dit algoritme. Deze opgave is zo eenvoudig dat verfijnen niet nodig is.

-- Eenzijdige selectie --

WAAR

NIET WAAR

De broncode wordt dan:

Sub EenzijdigeSelectie() ........................................................ ......................... ................. .......................... ................. .............. .............. End Sub Begin een nieuw algoritme, voer de broncode in, test en documenteer je algoritme. Geef de tab van het werkblad als naam Eenzijdige selectie en bewaar het met als naamSelectie

Algoritmen met Excel

- 45 -

Tom Van Houdenhove

Hoofdstuk 4: de selectie

4.1.2 Tweezijdige selectie Het is ook mogelijk om in het blok onder NIET WAAR een reeks opdrachten te zetten. Dan spreken we van een tweezijdige selectie. Het NS-diagram is hetzelfde als bij een eenzijdige selectie, alleen wordt het blok NIET WAAR nu ook ingevuld.

:Opdracht 13 Kijk of een ingevoerd getal positief of negatief is. Nul wordt als een positief getal aanzien. Rechts van het getal wordt geschreven of het getal positief of negatief is. De celcursor komt onder het laatst ingevoerde getal.

Maak het NS-diagram van dit algoritme. Ook hier is verfijnen niet nodig.

-- Tweezijdige selectie --

WAAR

NIET WAAR

De broncode wordt dan zoals op de volgende bladzijde:

Algoritmen met Excel

- 46 -

Tom Van Houdenhove

Hoofdstuk 4: de selectie

Sub TweezijdigeSelectie() ......................... ................... ....................... ......................... .......... ......................... .......... ................... ................... End Sub Geef de broncode in in de werkmap Selectie. Documenteer duidelijk waar dit algoritme begint. Verander de tab van blad2 in tweezijdige selectie. Maak in dit tweede blad een knop om je algoritme op te starten Test je algoritme uit. Bewaar het met de bestaande naam (Selectie)

Een eenzijdige en tweezijdige selectie lijken dus sterk op elkaar, zowel in NS-diagram als in het programmeren zelf. In feite is een tweezijdige selectie gewoon een uitbreiding van een eenzijdige. Het is belangrijk dat je je aan de juiste schrijfwijze (syntax) houdt. Daarom wordt de juiste syntax van de selectie in VBA hieronder nog eens samengevat:

?SyntaxregelsOok hier is een beperkte kennis van de syntax (juiste schrijfwijze) nodig: Eenzijdige selectie: If voorwaarde Then opdracht(en ) indien waar End If Tweezijdige selectie: If voorwaarde Then opdracht(en) indien waar Else opdracht(en) indien niet waar End If komt op 1 lijn. Er komt niets voor of achter uit te voeren opdracht(en) als aan de voorwaarde voldaan is Met End If wordt de keuzestructuur afgesloten komt op 1 lijn. Er komt niets voor of achter uit te voeren opdracht(en) als aan de voorwaarde voldaan is Else geeft aan dat hierachter de opdrachten voor n i e t w a a r komen uit te voeren opdracht(en) als n i e t aan de voorwaarde voldaan is Met End If wordt de keuzestructuur afgesloten

Om het geheel overzichtelijk te houden laten we de opdrachten binnen de keuzestructuur wat meer inspringen.

Algoritmen met Excel

- 47 -

Tom Van Houdenhove

Hoofdstuk 4: de selectie

4.2 Formuleren van een voorwaarde 4.2.1 Enkelvoudige voorwaarde Om een keuzestructuur te kunnen gebruiken moet je dus een vraag bedenken die enkel met ja of nee kan beantwoordt worden. Deze vraag wordt geformuleerd als een voorwaarde. Om een voorwaarde te formuleren wordt een variabele vergeleken met een waarde of met een andere variabele. Dat vergelijken gebeurt met logische operatoren. Hiermee bedoelt men de volgende operatoren: relationele operator > < = = betekenis groter dan kleiner dan gelijk aan niet gelijk aan kleiner of gelijk aan groter of gelijk aan

Voorbeelden If getal < 0 Then DRUK(Er kan geen vierkantswortel genomen worden van een negatief getal) End If If ingelezen_tekst wachtwoord Then DRUK(Verkeerd wachtwoord) End If If getal >= 0 Then AbsoluteWaarde=getal Else AbsoluteWaarde=-1*getal End If

4.2.2 Samengestelde voorwaarde Je kan ook twee voorwaarden met elkaar combineren. Dit gebeurt met de logische operatoren logische operator betekenis And aan beide voorwaarden moet voldaan zijn, om een WAAR op te leveren Or aan minstens n van de voorwaarden moet voldaan zijn om een WAAR op te leveren Not Aan de voorwaarde mag niet voldaan zijn om een WAAR op te leveren Vooral de eerste twee zijn belangrijk. De Not-operator kan je dikwijls omzeilen door je voorwaarde op een andere manier te formuleren.

Algoritmen met Excel

- 48 -

Tom Van Houdenhove

Hoofdstuk 4: de selectie

Voorbeeld Jongeren van minder dan 25 jaar en mensen vanaf 65 jaar krijgen op een manifestatie 25% korting. De anderen moeten de volle pot betalen. Je kan een algoritme maken dat op basis van de leeftijd automatisch zegt of de persoon in kwestie korting krijgt of niet. Enkel de keuzestructuur werd hieronder weergegeven. Aangezien je hier twee voorwaarden hebt, zal je met een samengestelde voorwaarde moeten werken. Je kan deze samengestelde voorwaarde zowel met de And-operator als met de Or-operator oplossen. Beide mogelijkheden worden hieronder gegeven. Ga zelf na dat de relationele operatoren anders zijn als je And gebruikt, dan als je Or gebruikt. Ga ook na dat de opdrachten na Then en na Else van plaats omwisselen, naargelang je de And- of de Or-operator gebruikt. If leeftijd >= 25 And leeftijd < 65 Then DRUK(Je krijgt geen korting) Else DRUK(Je krijgt 25% korting) End If If leeftijd < 25 Or leeftijd >= 65 Then DRUK(Je krijgt 25% korting) Else DRUK(Je krijgt geen korting) End If

Je zou eventueel ook met de Not-operator kunnen werken, maar dit maakt de formulering in feite alleen maar ingewikkelder If Not leeftijd >= 25 Or Not leeftijd < 65 Then DRUK(Je krijgt 25% korting) Else DRUK(Je krijgt geen korting) End If 4.3 Geneste selectie Hebben we binnen de opdrachtenreeks van WAAR of VALS nog een keuzestructuur, dan spreken we over een geneste keuzestructuur of een geneste selectie. Voorbeeld: We bepalen het aantal oplossingen van een vierkantsvergelijking. D > 0 WAAR DRUK 2 opl. NIET WAAR D = 0 WAAR VALS DRUK DRUK 1 oplgeen opl

Algoritmen met Excel

- 49 -

Tom Van Houdenhove

Hoofdstuk 4: de selectie

4.4 Oefeningen 1. Berekenen van de vierkantswortel van een getal Maak een algoritme dat een getal vraagt en er de vierkantswortel uit berekent. Als het ingevoerde getal negatief is moet er een melding afgedrukt worden dat de vierkantswortel uit een negatief getal niet berekend kan worden. Is het getal positief, dan komen onder dat getal de positieve en de negatieve vierkantswortel. In de eerste cel onder het getal komt positieve vierkantswortel: gevolgd door de positieve vierkantswortel en in de cel daaronder negatieve vierkantswortel: gevolgd door de negatieve vierkantswortel

Maak een NS-diagram, voer het in in Excel en controleer en documenteer je algoritme. Zorg voor een knop om je programma op te starten. Bewaar het met als naam Wortel1

Ter herinnering:

a = a2

Algoritmen met Excel

- 50 -

Tom Van Houdenhove

Hoofdstuk 4: de selectie

2. Euro-calculator Maak een Euro-calculator. Open daarvoor het bestand Eurocalculator. Vraag eerst of je een omzetting van BEF naar EUR wil of omgekeerd. Maak duidelijk aan de gebruiker hoe hij moet kiezen. Bijvoorbeeld Voor een omzetting van BEF naar EUR kies je 1, voor een omzetting van EUR naar BEF kies je 2. Als de gebruiker iets anders ingeeft geef je in de cel C9 de melding Verkeerde invoer en wordt het programma niet uitgevoerd. Zorg dat deze tekst in het rood verschijnt. Is de invoer wel juist, dan wordt (in D8) het bedrag gevraagd dat omgerekend moet worden. In de cel ernaast (E8) komt BEF of EUR, naargelang de invoer. Op de lijn eronder (D9:E9) wordt het omgerekend bedrag gemeld, ook gevolgd door de munteenheid. In cel C9 komt de tekst komt overeen met, in het geel. Na de uitvoering staat de celcursor achter de knop (cel H8)

Algoritmen met Excel

- 51 -

Tom Van Houdenhove

Hoofdstuk 4: de selectie

3. Oplossen van vierkantsvergelijkingen Schrijf een programma om vierkantsvergelijkingen op te lossen. De layout is beschikbaar in het bestand Vkv. Er is ook al een knop voorzien. Zorg voor een invoer in de daarvoor voorziene vakken. Laat de discriminant uitrekenen en plaats hem op de voorziene plaats. Bepaal het aantal oplossingen van deze vierkantsvergelijking. Schrijf in de daarvoor voorziene plaats geen oplossingen in R, 1 oplossing of 2 verschillende oplossingen, naargelang de waarde van de discriminant. Als er oplossingen zijn noteer je die in de voorziene cellen. Zijn er geen oplossingen, dan mag slechts de eerste van de twee oplossingen ingevuld worden. De tweede moet leeg blijven. Zijn er geen oplossingen, dan moeten beide vakken leeg blijven. Maak een NS-diagram van je oplossing en programmeer het in de werkmap. Test je algoritme uit en documenteer het. Er staan een aantal voorbeelden van oplossingen op het werkblad, om te controleren of je programma juist werkt. Enkele voorbeelden:

Algoritmen met Excel

- 52 -

Tom Van Houdenhove

Hoofdstuk 4: de selectie

4.5 Wat je moet kennen en kunnen Kunnen omschrijven wat een selectie of keuzestructuur is Het verschil tussen een eenzijdige en een tweezijdige keuzestructuur kunnen uitleggen Een selectie in een NS-diagram kunnen voorstellen Een selectie in VBA kunnen invoeren De verschillende relationele operatoren kunnen toepassen Een samengestelde voorwaarde opstellen met bebulp van de logische operatoren Kunnen uitleggen wat er bedoeld wordt met een geneste selectie Een geneste selectie in een NS-diagram kunnen voorstellen Een geneste selectie in VBA kunnen invoeren Oefeningen waar selecties in voorkomen kunnen oplossen

Algoritmen met Excel

- 53 -

Tom Van Houdenhove

Hoofdstuk 5: de voorwaardelijke herhalingMoet een bepaalde sequentie een aantal keer herhaald worden, dan doen we dat met een begrensde herhaling. Maar wat als we niet op voorhand weten hoe dikwijls er moet herhaald worden? In dat geval zullen we werken met een voorwaardelijke herhaling. We zeggen niet dat de sequentie n keer herhaald moet worden, maar we zeggen dat de sequentie zolang herhaald moet worden totdat aan een of andere voorwaarde voldaan wordt. Die voorwaarde kan aan het begin van de herhaling gecontroleerd worden. In dit geval spreken we van een voorwaardelijke herhaling met aanvangsvoorwaarde. We kunnen de voorwaarde ook op het einde van de herhaling plaatsen. We spreken dan van een voorwaardlijke herhaling met afbreekvoorwaarde. In dit laatste geval wordt de sequentie dus zeker minstens n keer uitgevoerd, ook al is van in het begin niet aan de voorwaarde voldaan. Let goed op bij het opstellen van de voorwaarde. Als je algoritme de voorwaarde niet be nvloedt dan zal er nooit aan de voorwaarde voldaan zijn en krijgen we een oneindige lus . In sommige gevallen zit er niets anders op dan Excel af te sluiten of zelfs je computer opnieuw op te starten. Zorg er nu dus zeker voor dat je je werk bewaart elke keer vr je je programma test! Zo gaat niet al je werk verloren als je programma in een oneindige lus verzeild geraakt. 5.1 De voorwaardelijke herhaling met aanvangsvoorwaarde De voorwaarde kan op twee plaatsen voorkomen: ofwel vr de te herhalen sequentie, ofwel erna. Komt de controle vr de te herhalen sequentie, dan spreken we van een voorwaardelijke herhaling met aanvangsvoorwaarde. NS-diagram: Zolang voorwaarde OPDRACHTEN

Syntax: While voorwaarde opdracht(en) Wend Zolang aan de voorwaarde voldaan is zal de opdrachtenreeks uitgevoerd worden. Hoe dikwijls wordt de sequentie dus minstens uitgevoerd? .............................................................. ...................................................................................................................................................... ......................................................................................................................................................

Algoritmen met Excel

Tom Van Houdenhove

Hoofdstuk 5: de voorwaardelijke herhaling

Voorbeeld: We maken een programma dat getallen vraagt tot je het woord stop intikt. Alle getallen worde