Algoritmiek Van probleem tot code Hoorcollege 1 - Ma. 4 sept. 2006 L.M. Bosveld-de Smet Het probleem Correcte spelling van samenstellingen rode(n)kool linze(n)moes druive(n)tros asperge(n)soep pere(n)sap studente(n)taal knarse(n)tanden geruchte(n)circuit gerste(n)nat spinne(n)wiel page(n)kapsel weide(n)vogel Moeten we –e of –en aan het linkerdeel van de samenstelling toevoegen? G. Polya: “how to solve it” 4 fasen ‘Understanding the problem’ ‘Devising a plan’ ‘Carrying out the plan’ ‘Looking back’ De regel Nederlandse Taalunie: “We schrijven de tussenklank als –en als het linkerdeel van de samenstelling een zelfstandig naamwoord is dat een meervoud heeft op –en, maar geen meervoud op –es. In andere gevallen schrijven we –e.” Algoritme: definitie Een algoritme is een stapsgewijze beschrijving om van een probleem (bijv. hoe bak ik een cake?) tot een oplossing (goed resultaat) te komen. Brookshear: “An algorithm is an ordered set of unambiguous, executable steps.” Algoritme: huis-tuin-en-keuken-voorbeeld Amandelen pellen Doe water in een pan Stop er de ongepelde amandelen in Breng het water met de amandelen aan de kook Giet kokend water af en laat de amandelen schrikken Zolang er amandelen in de pan zitten Pak er een Ontvel deze Doe deze in een schaal Algoritme: een getalprobleempje Het bepalen van het kleinste getal uit een rij van 10 getallen Bewaar het eerste getal van de rij Lees het volgende getal uit de rij Vergelijk deze met het eerste getal Als het kleiner is, bewaar dan dit getal en vergeet het eerste getal Herhaal dit tot alle getallen uit de rij aan bod zijn gekomen Algoritme: Spelling samenstellingen Kijk naar het linkerdeel van de samenstelling Is het linkerdeel een zelfstandig naamwoord? NEE: schrijf –e JA: Heeft het linkerdeel een meervoud op -es? NEE: schrijf –en JA: schrijf -e Control flow NEE Is linkerdeel samenstelling een znw.? JA Heeft linkerdeel een mv. op -es? JA NEE Schrijf -en Schrijf -e linze + moes NEE Is linkerdeel samenstelling een znw.? JA Heeft linkerdeel een mv. op -es? JA NEE Schrijf -en Schrijf -e linzenmoes page + kapsel NEE Is linkerdeel samenstelling een znw.? JA Heeft linkerdeel een mv. op -es? JA NEE Schrijf -en Schrijf -e pagekapsel spin + wiel NEE Is linkerdeel samenstelling een znw.? JA Heeft linkerdeel een mv. op -es? JA NEE Schrijf -en Schrijf -e ?spinnewiel ?spinnenwiel Data flow linkerdeel correct gespelde samenstelling rechterdeel Geef correct gespelde samenstelling linkerdeel j/n Controleer op znw. linkerdeel j/n Controleer op mv.=-es Data flow gerst gerstenat nat Geef correct gespelde samenstelling gerst j Controleer op znw. gerst n Controleer op mv.=-es pseudocode vraagInvoer (linker- en rechterdeel van samenstelling) if (isZnw (linkerdeel)) then if (eindigtMVopES (linkerdeel)) then schrijf samenstelling met –e else schrijf samenstelling met -en then schrijf samenstelling met -e Java Programmeertaal Application software Object-oriented programming (OOP) Specifiek object: toestand (state) + gedrag (behavior) Data en Methoden Klasse: een type object; een model van een object in haar algemeenheid Voorbeeld automobiel klasse automobiel object mijnAuto object jouwAuto kleur rood wit fabrikaat Toyota Buick model Celica LeSabre jaar 1995 2001 motor 4-cylinder 6-cylinder benzineverbruik 1 op 14 1 op 4 aantal passagiers 2 5 heeft kofferbak waar waar heeft airco onwaar waar Voorbeeld automobiel Acties geassocieerd aan een automobiel motor starten naar voren rijden naar achteren rijden stoppen versnellen Compound: java klasse public class Compound { // data fields private String compound; // methods // constructor public Compound () { compound = null; } // instance method public void formCompound (String lPart, String rPart) { if (isSubstantive (lPart)) { if (esEndingPlural (lPart)) { compound = lPart + "e" + rPart; } else { compound = lPart + "en" + rPart; } }else { compound = lPart + "e" + rPart; } public String getCompound () { return compound; } Java Virtual Machine model Source code JDK: java development kit www.sun.com Java compiler Byte code Macintosh interpreter java files IBM-PC interpreter class files Sun interpreter JVM Het vak Ba Informatiekunde jaar 1 (propedeuse), semester I Basis- en drempelvak!! Inleiding programmeren Algemene programmeerbegrippen en technieken Specifieke programmeertaal: Java onder Unix Geen voorkennis vereist Datastructuren (vak in Ba jaar 1, semester II) bouwt voort op Algoritmiek N.B. “Programs = Datastructures + Algorithms” (Niklaus Wirth) Website Algoritmiek Literatuur Brookshear: “Computer Science: an Overview ” King: “Java Programming from the Beginning “ Wekelijkse (programmeer)opdrachten http://www.let.rug.nl/~bosveld/hp0607/ Studiehandleiding en Nestor Studiehandleiding Algoritmiek, beschikbaar op website en in Nestor Inleveren van opdrachten op papier in postvak Harmonie 4de verdieping Bosveld electronisch in digital dropbox Nestorcursus Algoritmiek