colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

Maat: px
Weergave met pagina beginnen:

Download "colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser"

Transcriptie

1 colleges recursieve datastructuren college 9 interpreteren: waarde van bomen bepalen transformeren: vorm van bomen veranderen parseren herkennen van expressie in de tekst herkennen van functies onderwerp van vorig college onderwerpen van dit college interpreteren waarde van expressie berekenen voor gegeven x en y transformeren de expressies zelf veranderen 1 2 prioriteit in recursive descent parser prioriteit van operatoren versleutel de prioriteit in de syntax b.v.: expr = term + expr term term = fact * term fact fact = var int ( expr ) var ( args ) args = ε arg2 arg2 = expr expr, arg2 kun je hier met look ahead 1 steeds de juiste keuze maken? gaat dit ook goed als je operator toevoegt? los dit op in de regels van de grammatica i.p.v. E -> E * E E + E ( E ) num schrijven we E -> E + T T T -> T * F F F -> ( E ) num helaas is dit weer linksrecursief, maar we weten hoe we dit moeten aanpakken let ook op bindingsrichting = ( 3 2 ) 1 = 0 maar 3 ( 2 1 ) = 3 1 = 2 voor sommige operatoren is dit geen probleem 4 1

2 parser voor factor Knoop* parsef () E -> E + T T T -> T * F F Knoop* n = scanner. token (); F -> num switch ( n -> id ) case Int: scanner. volgendetoken (); return n; case Einde: return n; default: Error ( "parse error: integer, of einde verwacht" ); return n; 5 parser voor term Knoop* parset ( ) Knoop* f = parsef ( ); Knoop* o = scanner.token ( ); switch ( o -> id ) case Op: if ( o -> soort[0] == '*') o -> child ( 0 ) = f; scanner. volgendetoken (); o -> child ( 1 ) = parset ( ); return o; else return f; case Einde: return f; default: Error ( "parse error: * of einde verwacht" ); return f; E -> E + T T T -> T * F F F -> num E -> T (+ E)? T -> F (* T)? F -> num hoewel het een operator is, kunnen we o->op niet gebruiken 6 parser voor expressie Knoop* parsee ( ) Knoop* t = parset ( ); Knoop* o = scanner.token ( ); switch ( o -> id ) case Op: if ( o -> soort[0] == '+' ) o -> child ( 0 ) = t; scanner. volgendetoken ( ); o -> child ( 1 ) = parsee ( ); return o; else return t; case Einde: return t; default: Error ( "parse error: + of einde verwacht" ); return t; E -> E + T T T -> T * F F F -> num E -> T (+ E)? T -> F (* T)? F -> num 7 statische tests je kunt niet alles met een parser voor een CFG controleren wat kun je nog meer controleren? hele input gelezen operatoren zijn bekend variabelen zijn bekend functies zijn bekend operatoren hebben juiste aantal argumenten functies hebben juiste aantal argumenten types? 8 2

3 syntax sequents ϕ 1 ϕ n o ψ 1 ψ m met ϕ i en ψ j logische formules bedenk een handig symbool voor o, dat niet botst met namen van variabelen en operatoren ϕ, ψ = p, p, p q, p q, p q, p q, (p) ook hier hoort volgens de standaard interpretatie een prioriteit bij operatoren bindt sterker dan en : p q = ( p) q sterker dan : p q r = (p q) r (volg de standaard logica regels) het is handig als variabelen namen langer dan 1 letter mogen zijn twee aanpakken 1: interpretatie expressies evalueren we beperken ons tot interpretatie pak direct de syntax boom en bepaal waarde expressies relatief eenvoudig, maar niet erg efficient geen aparte compilatie nodig 2: vertalen (compileren) genereer code die waarde expressie bepaalt ingewikkelder, maar circa 10 keer sneller dan interpretatie er bestaan ook mengvormen b.v. Java byte-code of.net genereer hoog niveau code (platform onafhankelijk) interpreteer die code 9 10 interpretatie basis: denotationele semantiek geeft betekenis aan expressies ingrediënten: syntax operatie pattern-match op syntax Scott brackets: geeft match op syntax aan E [[ a 1 + a 2 ]] = E [[ a 1 ]] + E [[ a 2 ]] E [[ a 1 * a 2 ]] = E [[ a 1 ]] * E [[ a 2 ]] E [[ n ]] = n voor getallen functie die binding van variabelen kent state :: Var -> Int we nemen altijd aan dat het een juiste boom is: bindingen kloppen 11 binding van variabelen wiskundig: state is functie van variabelen naar waarde state :: Var -> Int b.v. s = x 1, y 2 dan s x = 1 en s y = 2 mooi voor semantische regeltjes lastig te maken in C++ maak een datastructuur voeg wat functies toe 12 3

4 syntax n numeral x variable a expression a = n x a 1 + a 2 a 1 * a 2 semantiek basis semantiek A [[ a 1 + a 2 ]] s = A [[ a 1 ]] s + A [[ a 2 ]] s A [[ a 1 * a 2 ]] s = A [[ a 1 ]] s * A [[ a 2 ]] s A [[ n ]] s = n A [[ x ]] s = s x voorbeeld met s = x 1, y 2 A [[ x + 3 ]] s = A [[ x ]] s + A [[ 3 ]] s = s x + 3 = getal = 4 syntax context geeft verschil aan 13 syntax booleans b = True False a 1 == a 2 a 1 < a 2 b 1 /\ b 2 semantiek B [[ True ]] s B [[ False ]] s B [[ a 1 == a 2 ]] s B [[ a 1 < a 2 ]] s B [[ b 1 /\ b 2 ]] s syntax = true echte vergelijking = false syntax = A [[ a 1 ]] s == A [[ a 2 ]] s = A [[ a 1 ]] s < A [[ a 2 ]] s = if ( B [[ b 1 ]] s ) B [[ b 2 ]] s else false voorbeeld met s = x 1, y 2 logische waarde luiheid zit hier ingebakken B [[ x + 3 < y ]] s = A [[ x + 3 ]] s < A [[ y ]] s = A [[ x ]] s + A [[ 3 ]] s < s y = s x + 3 < 2 = < 2 = 4 < 2 = false 14 expressies we hebben dus 2 semantische functies A [[ a ]] s levert een getal B [[ b ]] s levert een logische waarde hoe implementeren we dat? twee aparte evaluatie functies één functie met getypeerd resultaat gebruik de C-truc: 0 false, 1 true alle methoden hebben voor- en nadelen kies wat in gegeven situatie het beste past implementatie context in moderne talen kan dat direct in C++ is het handiger A [[ x ]] s = s x te vervangen door A [[ x ]] s = lookup x s ook het binden van een variabele doen we met een functie

5 context in C++ maak een lijst van bindingen class ENV public: char * naam; int val; ENV * next; met deze expressies geen update nodig ENV ( char s [], int n, ENV* p = NULL ) : val ( n ), next ( p ) naam = new char [ strlen ( s )+1 ]; strcpy ( naam, s ); ; context in C++ 2 int lookup ( ENV* env, char s [] ) had de checker if ( env == NULL ) moeten zien Error ( "Naam niet gevonden" ); else if ( strcmp ( s, env->naam ) == 0 ) return env -> val; else return lookup ( env -> next, s ); ENV*& bind ( char s [], int n, ENV* e ) return e = new ENV ( s, n, e ); implementatie A [[ a ]] s minstens 3 mogelijkheden: overloaded functies functie die gevalsonderscheid doet methode eval bij knopen we zullen de mogelijkheden verder bekijken 19 A [[ a ]] s met overloaded functie int eval ( Getal * g ) return g->waarde ( ); int eval ( Operator *o ) int x = eval ( o -> child ( 0 )); int y = eval ( o -> child ( 1 )); switch ( o->op ) case '+': return x+y; case '*': return x*y; compiler wil hier statisch de juiste kiezen, maar dat kan niet dynamic binding bij methoden had de parser moeten zien default: Error ( "Onbekende operator in eval" ); 20 5

6 A [[ a ]] s met gevalsonderscheid int eval ( Knoop *k ) switch ( k -> id ) case Num: return k -> waarde ( ); case Op: switch ( k -> op ) case '+': int x = eval ( k -> child ( 0 )); int y = eval ( k -> child ( 1 )); return x+y; case '*': compiler ziet niet dat dit goed gaat, mag dus niet default: Error ( "Onbekende operator in eval" ); 21 A [[ a ]] s met gevalsonderscheid 2 int eval ( Knoop *k ) switch ( k -> id ) case Op: Operator * o = static_cast <Operator*> ( k ); switch ( o -> op ) case '+': int x = eval ( o -> child ( 0 )); int y = eval ( o -> child ( 1 )); return x+y; case '*': expliciete type conversie nu kan dit wel je kunt alles naar alles casten, foutgevoelig default: Error ( "Onbekende operator in eval" ); 22 class Knoop protected: Knoop** children; int stap; char * soort; public: KnoopType id; int arity; A [[ a ]] s met methode eval alleen als er variabelen zijn Knoop (.) : arity ( a ), stap ( 3 ), id ( kt ) virtual int eval ( ENV* e ) Error ( "Kan de basisklasse Knoop niet evalueren" ); ; nieuwe methode eval getal class Getal : public Knoop int w; public: Getal ( int n ) : w ( n ), Knoop ( "Getal", Int, 0 ) int waarde ( ) return w; int eval ( ENV* e ) return w; ; nieuwe methode

7 int Var :: eval ( ENV* e ) if ( arity==0 ) return lookup ( e, name ); else Error ( ) ; pas op: eval variabele met argumenten is het een functie had de checker moeten zien eigenlijk moet je verschil maken tussen x + 1 x () + 1 functies en variabelen kunnen eigenlijk dus niet zo maar in zelfde klasse eval operator int Operator :: eval ( ENV* e ) int x = child ( 0 ) -> eval ( e ); int y = child ( 1 ) -> eval ( e ); switch ( op ) case '+': return x+y; case '*': return x*y; default: Error ( "Onbekende operator in eval" ); had de checker moeten zien syntax keuze n numeral x variable a expression a = n x a 1 + a 2 a 1 * a 2 if b then a 1 else a 2 semantiek A [[ a 1 + a 2 ]] s = A [[ a 1 ]] s + A [[ a 2 ]] s A [[ a 1 * a 2 ]] s = A [[ a 1 ]] s * A [[ a 2 ]] s A [[ n ]] s = n A [[ x ]] s = s x A [[ if b then a 1 else a 2 ]] s = if ( B [[ b ]] s ) A [[ a 1 ]] s A [[ a 2 ]] s zorg dat A 1 of A 2 wordt geëvalueerd moet het zo? door het aannemen van een bovengrens voor aantal variabelen wordt de implementatie iets eenvoudiger rij i.p.v. lijst lijsten mogen echter geen probleem meer zijn

8 moet het echt zo? transformaties kunnen we niet zonder environment? idee: vervang alle variabelen door waarde in boom uitrekenen kan zonder environment nadelen je moet ook kopie van expressie maken voor substitutie heb je toch een environment nodig werkt zo iets ook bij functies? ook hier bedenken we eerst wat we willen bijvoorbeeld optimalisatie: T [[ 0 + x ]] = T [[ x ]] T [[ x + 0 ]] = T [[ x ]] T [[ 0 * x ]] = T [[ 0 ]] T [[ x * 0 ]] = T [[ 0 ]] T [[ 1 * x ]] = T [[ x ]] T [[ x * 1 ]] = T [[ x ]] T [[ n * m ]] = n * m T [[ n + m ]] = n + m simpele wiskunde regeltjes wat als die recursief zijn? 29 geen environment nodig 30 implementatie mogelijkheden nieuwe methoden Knoop overloaded functie kan niet, want je kunt niet statisch de juiste kiezen gevalsonderscheid daarvoor heeft Knoop een enum KnoopType Int, Op,.. ; er zijn dan type_casts nodig, niet leuk nieuwe methode toevoegen dynamic binding gebruiken vaak de mooiste oplossing we hoeven alleen te weten of een Knoop een getal is, indien dat zo is willen we ook de waarde 31 class Knoop.. public: virtual bool waarde ( int& v) return false; virtual void opti ( Knoop *& root ); ; waarom die? T [[ 0 + x ]] = T [[ x ]] T [[ x + 0 ]] = T [[ x ]] T [[ 0 * x ]] = T [[ 0 ]] T [[ x * 0 ]] = T [[ 0 ]] T [[ 1 * x ]] = T [[ x ]] T [[ x * 1 ]] = T [[ x ]] T [[ n * m ]] = n * m T [[ n + m ]] = n + m 32 8

9 waarde voor getallen class Getal : public Knoop int w; public: bool waarde ( int & v ) v = w; return true; ; voor alle andere knopen voldoet de default dit moet bottum-up: optimalisatie knopen void Knoop :: opti (Knoop *& root) for ( int i=0; i<arity; i+=1 ) child ( i ) -> opti ( child ( i )); maf, maar nodig als er voor deze knoop niets speciaals te doen is, optimaliseer dan in ieder geval de kinderen optimalisatie operatoren void Operator :: opti ( Knoop *& root ) for ( int i=0; i<arity; i+=1 ) child ( i ) -> opti ( child ( i )); int x, y; if ( child ( 0 ) -> waarde ( x )) if ( child ( 1 ) -> waarde ( y )) switch (op).. case '+': root = new Getal ( x + y ); return; case '*': root = new Getal ( x * y ); return; default: return; root nodig eigenlijk delete nodig bottum up 2 getallen, reken uit T [[ 0 + x ]] = T [[ x ]] T [[ x + 0 ]] = T [[ x ]] T [[ 0 * x ]] = T [[ 0 ]] T [[ x * 0 ]] = T [[ 0 ]] T [[ 1 * x ]] = T [[ x ]] T [[ x * 1 ]] = T [[ x ]] T [[ n * m ]] = n * m T [[ n + m ]] = n + m 35 optimalisatie operatoren 2 else // x is getal, y niet switch ( op ) case '+': if ( x == 0 ) root = child ( 1 ); return; case '*': switch ( x ) case 0: root = new Getal ( 0 ); return; case 1: root = child ( 1 ); return; default: return; default: return;.. 1 * x 0 + x 0 * x T [[ 0 + x ]] = T [[ x ]] T [[ x + 0 ]] = T [[ x ]] T [[ 0 * x ]] = T [[ 0 ]] T [[ x * 0 ]] = T [[ 0 ]] T [[ 1 * x ]] = T [[ x ]] T [[ x * 1 ]] = T [[ x ]] T [[ n * m ]] = n * m T [[ n + m ]] = n + m 36 9

10 voorbeeld optimalisatie resultaat optimalisatie int main ( ) invoer = new stringinvoer ( "1*x*1 + 3* ( 0*tmp + 4 )" ); scanner. volgendetoken ( ); Knoop* k = parsee ( ); k -> drukaf ( ); k -> opti ( k ); cout << "---- optimized ----\n"; k -> drukaf ( ); system("pause"); return EXIT_SUCCESS; 37 1*x*1 + 3* ( 0*tmp + 4 ) tmp * 0 * * x * optimized x vindt dit alles? T [[ 0 + x ]] = T [[ x ]] T [[ x + 0 ]] = T [[ x ]] T [[ 0 * x ]] = T [[ 0 ]] T [[ x * 0 ]] = T [[ 0 ]] T [[ 1 * x ]] = T [[ x ]] T [[ x * 1 ]] = T [[ x ]] T [[ n * m ]] = n * m T [[ n + m ]] = n + m 38 gevalsonderscheid subtypen het helpt om een attribuut in de klasse te stoppen dat het (sub)type aangeeft om hier echt gebruik van te maken heb je vaak een type_cast nodig, niet zo mooi dus overloaded functies werken meestal niet goed te gebruiken regel wordt statisch bepaald een extra methode is meestal de beste oplossing maak de methode virtual geef nieuwe implementatie als er iets speciaals moet gebeuren in die subklasse zou ook het probleem met operator namen beter oplossen dan soort[0] semantiek algemeen assignments: pas waarde van variabele in environment aan evaluatie levert dus waarde + nieuwe environment C++ is lastig omdat environment kan veranderen tijdens evaluatie globale objecten: zitten ook in de environment moeten er weer uitgehaald worden als de scope stopt andere vormen van semantiek: behalve deze denotationele semantiek zijn er nog vele anderen: operational, natural, axiomatic, maken redeneren over programma's mogelijk

11 herschrijven voor sequents gebruik de gegeven regeltjes regeltjes veranderen expressie i.t.t. de interpretatie van numerieke expressies besluit of je de afleidingsboom wil bouwen of niet je kunt strategie kiezen eerst een kant alles herschrijven probeer regels in de gegeven volgorde bedenk iets slims onthouden waar je bent pointer bewerkte deel bevat alleen variabelen, die kun je ook speciaal bewaren weet waar je aan begint kopieren van expressies zelfs als je geen boom bouwt moet je sequents kopieren b.v. Φ ο α β, Ψ R : Φ ο α, Ψ Φ ο β, Ψ maak een goede copy operator vergeet niet te veranderen wat nodig is bedenk hoe je de te evalueren sequents beheert bedenk hoe je resultaten combineert denotationele semantiek sequents ook hier kun je semantiekregeltjes opstellen geven transformaties + strategie gebruik verzameling variabelen als environment strategie: b.v. maak eerst linkerkant leeg door volgorde van semantische regels S [[ ϕ, Φ ο Ψ ]] e = S [[ Φ ο ϕ, Ψ ]] e S [[ α β, Φ ο Ψ ]] e = S [[ α, Φ ο Ψ ]] e S [[ β, Φ ο Ψ ]] e S [[ v, Φ ο Ψ ]] e = S [[ Φ ο Ψ ]] ( e v ) S [[ ο ϕ, Ψ ]] e = S [[ ϕ ο Ψ ]] e S [[ ο α β, Ψ ]] e = S [[ ο α, Ψ ]] e S [[ ο β, Ψ ]] e S [[ ο v, Ψ ]] e = Closed, if v e 43 terminatie van het herschrijven we hoeven niet altijd het hele tableau uit te werken bij zelfde variabele links en rechts is sequent gesloten bij één tegenvoorbeeld is de bewering al ongeldig bewering is gesloten als alle sequents gesloten zijn 44 11

12 correctheid wanneer is je implementatie correct? als hij voor alle mogelijke sequents het goede antwoord geeft hoe kun je dat nagaan? kijk naar de code voor alle regeltjes test de juiste implementatie met minstens 1 voorbeeld test open en gesloten tableaus gebruik b.v. unittest voor het uitvoeren van deze tests volgende week toets over lijsten en bomen telt als 2 practicumopgaven gesloten boek pen en papier individueel opgave mag een week later ingeleverd worden Sjaak Smetsers geeft college wat hebben we gedaan interpreteren basis is semantiek + goede parse tree nauwelijks of niet in boek en dictaat veel literatuur over imperatief: heel T3 gaat over semantiek in vertalerbouw maak je een programma dat code genereert die expressies evalueert 47 12

templates: het probleem recursieve datastructuren college 10 gebruik template wat zouden we willen templates exceptions type-parameters!

templates: het probleem recursieve datastructuren college 10 gebruik template wat zouden we willen templates exceptions type-parameters! templates: het probleem recursieve datastructuren college 10 templates exceptions typedef... El; class Knoop El head; Knoop* tail; ; void swap ( El& x, El& y ) const EL t = x; x = y; y = t; er is maar

Nadere informatie

software constructie recursieve datastructuren college 15 5 stappen plan ontwerpen de software bestaat uiteindelijk uit datatypen functies

software constructie recursieve datastructuren college 15 5 stappen plan ontwerpen de software bestaat uiteindelijk uit datatypen functies software constructie recursieve datastructuren college 15 software engineering highlights 1 de software bestaat uiteindelijk uit datatypen functies verbindingen geven gebruik aan main is de top van het

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde

Nadere informatie

Overerving & Polymorfisme

Overerving & Polymorfisme Overerving & Polymorfisme Overerving Sommige klassen zijn speciaal geval van andere klasse Docent is een speciaal geval van werknemer, dwz. elke docent is ook werknemer Functionaliteit van docent = functionaliteit

Nadere informatie

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken

compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken compileren & interpreteren - compileren: vertalen (omzetten) - interpreteren: vertolken - belangrijkste punten: - ontleden van de programmatekst - bijhouden van de datastructuren Data Structuren en Algoritmen

Nadere informatie

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk. HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een

Nadere informatie

Datastructuren Programmeeropdracht 3: Expressies. 1 Expressies. Deadline. Dinsdag 8 december 23:59.

Datastructuren Programmeeropdracht 3: Expressies. 1 Expressies. Deadline. Dinsdag 8 december 23:59. Datastructuren 2015 Programmeeropdracht 3: Expressies Deadline. Dinsdag 8 december 23:59. Inleiding. Deze opdracht is losjes gebaseerd op Opdracht 5.13.2 in het boek van Drozdek. U wordt gevraagd expressies

Nadere informatie

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int

Nadere informatie

PYTHON REEKS 1: BASICS. Mathias Polfliet

PYTHON REEKS 1: BASICS. Mathias Polfliet PYTHON REEKS 1: BASICS Mathias Polfliet mpolflie@etrovub.be EENVOUDIGE REKENMACHINE 2 soorten getallen Getallen Z -> integers (gehele getallen) Getallen R -> floating points (reële getallen) Door beperkte

Nadere informatie

Practicumopgave 3: SAT-solver

Practicumopgave 3: SAT-solver Practicumopgave 3: SAT-solver Modelleren en Programmeren 2015/2016 Deadline: donderdag 7 januari 2016, 23:59 Introductie In het vak Inleiding Logica is onder andere de propositielogica behandeld. Veel

Nadere informatie

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet

Nadere informatie

Het omzetten van reguliere expressies naar eindige automaten, zie de vakken Fundamentele Informatica 1 en 2.

Het omzetten van reguliere expressies naar eindige automaten, zie de vakken Fundamentele Informatica 1 en 2. Datastructuren 2016 Programmeeropdracht 3: Patroonherkenning Deadlines. Woensdag 23 november 23:59, resp. vrijdag 9 december 23:59. Inleiding. Deze opdracht is gebaseerd op Hoofdstuk 13.1.7 in het boek

Nadere informatie

Semantiek (2IT40) Bas Luttik. HG 7.14 tel.: Hoorcollege 8 (7 juni 2007)

Semantiek (2IT40) Bas Luttik.  HG 7.14 tel.: Hoorcollege 8 (7 juni 2007) Bas Luttik s.p.luttik@tue.nl http://www.win.tue.nl/~luttik HG 7.14 tel.: 040 247 5152 Hoorcollege 8 (7 juni 2007) Functionele talen Idee: een programma definieert reeks (wiskundige) functies. Programma

Nadere informatie

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin: Java Les 2 Theorie Beslissingen Algemeen Net als in het dagelijks leven worden in software programma s beslissingen genomen, naast het toekennen van waarden aan variabelen zijn beslissingen één van de

Nadere informatie

Logica voor Informatici najaar 2000 Opgaven en Oplossingen Hoofdstuk 3

Logica voor Informatici najaar 2000 Opgaven en Oplossingen Hoofdstuk 3 Logica voor Informatici najaar 2000 Opgaven en Oplossingen Hoofdstuk 3 3.1 Stel ϕ, ψ α, β γ, en ψ, α, γ χ. Indien nu bovendien bekend wordt dat χ onwaar is, maar ψ en β waar, wat weet u dan over ϕ? oplossing:

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 13 november 2015 Expressies Functies Ingebouwde functies Variabelenbereik Inleveropgave 1 Terugblik Programma is een lijst van opdrachten Terugblik Programma is

Nadere informatie

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10 CPP 1 van 10 ADSdt 1-2009 TENTAMENVOORBLAD Voor aanvang van het tentamen s.v.p. de tentamengegevens goed doorlezen om eventuele misverstanden te voorkomen!! Naam student : Studentnummer : Groep : Studieonderdeel

Nadere informatie

Datastructuren: stapels, rijen en binaire bomen

Datastructuren: stapels, rijen en binaire bomen Programmeermethoden Datastructuren: stapels, rijen en binaire bomen week 12: 23 27 november 2015 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Inleiding In de informatica worden Abstracte DataTypen (ADT s)

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 9 december 2015 Foreach String arrays Boomstructuren Interfaces Ingebouwde datastructuren Quiz Foreach Foreach Speciale versie van for om iets voor alle elementen

Nadere informatie

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Syntax- (compile), runtime- en logische fouten Binaire operatoren Inhoud Syntax- (compile), runtime- en logische fouten Binaire operatoren Operaties op numerieke datatypen Evaluatie van expressies, bindingssterkte Assignment operaties en short-cut operatoren Controle

Nadere informatie

Vakgroep CW KAHO Sint-Lieven

Vakgroep CW KAHO Sint-Lieven Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 13 december 2013 Terugblik Fibonacci public class Fibonacci { public static void main(string[] args) { // Print het vijfde Fibonaccigetal System.out.println(fib(5));

Nadere informatie

Datastructuren college 10

Datastructuren college 10 we hadden Backtracking verbetering i i Datastructuren college 0 0: : : 0: : : P r r r r r b r b r P r r r b r b r backtracking we hoeven vaak de kandidaat niet helemaal af te maken om hem te kunnen verwerpen

Nadere informatie

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten

Nadere informatie

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld

Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld Tentamen Objectgeorienteerd Programmeren IN1205 Voorbeeld Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag u gebruik maken van: Barnes, Object-Oriented Programming with Java en de Notitie Algoritmiek

Nadere informatie

College Notatie, Recursie, Lijsten

College Notatie, Recursie, Lijsten College 2016-2017 2. Notatie, Recursie, Lijsten Doaitse Swierstra (Jeroen Bransen) Utrecht University September 13, 2016 Functieapplicatie functieapplicatie associeert naar links: als x in f x y moet kiezen

Nadere informatie

Objectgericht programmeren 1.

Objectgericht programmeren 1. Objectgericht programmeren 1 joost.vennekens@kuleuven.be http://www.cs.kuleuven.be/~joost/dn Objectgericht ontwerpen 35% Objectgericht ontwerpen 65% OP1 Informatiesystemen 50% Databanken 50% OP1 Evaluatie

Nadere informatie

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c Een Minimaal Formalisme om te Programmeren We hebben gezien dat Turing machines beschouwd kunnen worden als universele computers. D.w.z. dat iedere berekening met natuurlijke getallen die met een computer

Nadere informatie

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. week 11: november kosterswa/pm/ Programmeermethoden Recursie week 11: 21 25 november 2016 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Derde programmeeropgave 1 Het spel Gomoku programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

Een typisch programma in C en C++ bestaat uit een aantal onderdelen:

Een typisch programma in C en C++ bestaat uit een aantal onderdelen: Eerste stappen in C. Een typisch programma in C en C++ bestaat uit een aantal onderdelen: /* Alles wat op meerdere lijnen staat zoals hier is commentaar. */ // Dit is commentaar op 1 lijn. Geldig tot einde

Nadere informatie

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf

Nadere informatie

Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft

Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Tentamen Object Georiënteerd Programmeren TI1200 30 januari 2013, 9.00-12.00 Afdeling SCT, Faculteit EWI, TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit

Nadere informatie

Programmeren in Java les 3

Programmeren in Java les 3 4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een

Nadere informatie

Deeltentamen Grammatica s en ontleden 22 december 2005

Deeltentamen Grammatica s en ontleden 22 december 2005 Tentamen Grammatica s en ontleden 22 december 2005 1 Deeltentamen Grammatica s en ontleden 22 december 2005 Let op: opgave 1 t/m 4 tellen voor (slechts) 5 punten mee, opgave 5 voor maar liefst 50 punten,

Nadere informatie

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Vrijdag 22 januari 2010 Toelichting Dit is een open boek tentamen. Communicatie en het gebruik van hulpmiddelen zijn niet toegestaan.

Nadere informatie

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur

Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, uur Aanvullende toets Gameprogrammeren (INFOB1GP) Woensdag 24 december 2014, 13.30-15.30 uur Naam: Studentnummer: Het tentamen bestaat uit 4 opgaven. Opgaven 1 levert 8 punten op, opgave 2 levert 12 punten

Nadere informatie

Recursive-Descent Parsing

Recursive-Descent Parsing Week 2 Recursive-Descent Parsing PRACTICUM Tijdens dit practicum wordt een eenvoudige one-pass recursive-descent vertaler ontwikkeld in Java. We volgen daarbij hoofdstuk 4 van Watt & Brown. De te ontwikkelen

Nadere informatie

Logica voor Informatica

Logica voor Informatica Logica voor Informatica 10 Predikatenlogica Wouter Swierstra University of Utrecht 1 Vorige keer Syntax van predikatenlogica Alfabet Termen Welgevormde formulas (wff) 2 Alfabet van de predikatenlogica

Nadere informatie

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft

Tentamen Objectgeorienteerd Programmeren TI februari Afdeling ST Faculteit EWI TU Delft I ' Tentamen Objectgeorienteerd Programmeren TI 1200 1 februari 2012 9.00-12.00 Afdeling ST Faculteit EWI TU Delft Bij dit tentamen mag je geen gebruik maken van hulpmiddelen zoals boek of slides. Dit

Nadere informatie

Datastructuren: stapels, rijen en binaire bomen

Datastructuren: stapels, rijen en binaire bomen Programmeermethoden : stapels, rijen en binaire bomen Walter Kosters week 12: 26 30 november 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 en Vierde programmeeropgave Othello programmeren we als volgt:

Nadere informatie

Let op dat de scoping regels gerespecteerd blijven; het volgende voorbeeld mag geen fout melden.

Let op dat de scoping regels gerespecteerd blijven; het volgende voorbeeld mag geen fout melden. Vrije Universiteit Brussel Faculteit Wetenschappen Vakgroep Computerwetenschappen Academiejaar 2009 2010: tweede examenzittijd Interpretatie van Computerprogrammaʼs I schriftelijke test Voorafgaandelijk:

Nadere informatie

Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/

Programmeermethoden. Pointers. Walter Kosters. week 10: november kosterswa/pm/ Programmeermethoden Pointers Walter Kosters week 10: 13 17 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Introductie Een pointer is in feite gewoon een geheugenadres. Het geheugen kun

Nadere informatie

Modelleren en Programmeren: Prolog

Modelleren en Programmeren: Prolog Modelleren en Programmeren: Prolog Marijn Schraagen 8 januari 2016 Introductie Basiselementen Rekenen Recursie Introductie Prolog vs. Java Java is procedureel en imperatief Code beschrijft stap voor stap

Nadere informatie

Variabelen en statements in ActionScript

Variabelen en statements in ActionScript Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 6 december 2013 Terugblik Programma en geheugen Opdrachten Variabelen Methoden Objecten Klasse Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in

Nadere informatie

Kwis (3) class X { public void a() { System.out.println("x"); public static void main(string[] args) { X x = new X();

Kwis (3) class X { public void a() { System.out.println(x); public static void main(string[] args) { X x = new X(); Kwis (3) class X { public void a() { System.out.println("x"); class Y extends X { public void a() { System.out.println("y"); class Z extends Y { public void a() { System.out.println("z"); public static

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 27 november 2015 Recursie Objecten Constructors Aanpassen variabelen this keyword Recursie Recursie Recursieve functie roept zichzelf (direct of indirect) aan

Nadere informatie

OEFENINGEN PYTHON REEKS 1

OEFENINGEN PYTHON REEKS 1 Vraag 1: Expressies & Types OEFENINGEN PYTHON REEKS 1 Python maakt gebruik van enkele vaak voorkomende (data)types. Zo zijn er integers die behoren tot de gehele getallen (VB: 3), zijn er float s die behoren

Nadere informatie

College Introductie

College Introductie College 2016-2017 Introductie Doaitse Swierstra (Jeroen Bransen) Utrecht University September 13, 2016 Waarom is FP anders? in plaats van opdrachten die na elkaar moeten worden uitgevoerd, definiëren we

Nadere informatie

Datastructuren Programmeeropdracht 2: Expressies. 1 Expressies. Deadlines. Woensdag 12 oktober 23:59, resp. woensdag 2 november 23:59.

Datastructuren Programmeeropdracht 2: Expressies. 1 Expressies. Deadlines. Woensdag 12 oktober 23:59, resp. woensdag 2 november 23:59. Datastructuren 2016 Programmeeropdracht 2: Expressies Deadlines. Woensdag 12 oktober 23:59, resp. woensdag 2 november 23:59. Inleiding. Deze opdracht is losjes gebaseerd op Opdracht 5.13.2 in het boek

Nadere informatie

Algoritmen en Datastructuren 1. Functies

Algoritmen en Datastructuren 1. Functies Algoritmen en Datastructuren 1 Functies Rad van Fortuin score = 0 huidigespeler++ draai rad bankroet verlies beurt joker huidigespeler++ jokers++ rad else score += bedrag * k rad/klinker toon gok medeklinker

Nadere informatie

Verzamelingen, Lijsten, Functioneel Programmeren

Verzamelingen, Lijsten, Functioneel Programmeren Verzamelingen, Lijsten, Functioneel Programmeren Jan van Eijck jve@cwi.nl Stage Ignatiuscollege, 17 mei 2010 Samenvatting In deze lezing gaan we in op de overeenkomsten en verschillen tussen verzamelingen

Nadere informatie

Zelftest Inleiding Programmeren

Zelftest Inleiding Programmeren Zelftest Inleiding Programmeren Document: n0824test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST INLEIDING PROGRAMMEREN Deze

Nadere informatie

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double. Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort

Nadere informatie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk

Nadere informatie

voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is

voegtoe: eerst methode bevat gebruiken, alleen toevoegen als bevat() false is PROEF-Tentamen Inleiding programmeren (IN1608WI), X januari 2010, 9.00-11.00, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Open boek tentamen: bij het tentamen mag alleen gebruik worden gemaakt

Nadere informatie

Een eenvoudig algoritme om permutaties te genereren

Een eenvoudig algoritme om permutaties te genereren Een eenvoudig algoritme om permutaties te genereren Daniel von Asmuth Inleiding Er zijn in de vakliteratuur verschillende manieren beschreven om alle permutaties van een verzameling te generen. De methoden

Nadere informatie

Programmeren met Arduino-software

Programmeren met Arduino-software Programmeren met Arduino-software De software waarin we programmeren is Arduino IDE. Deze software is te downloaden via www.arduino.cc. De programmeertaal die hier gebruikt wordt, is gebaseerd op C en

Nadere informatie

OEFENINGEN PYTHON REEKS 1

OEFENINGEN PYTHON REEKS 1 Vraag 1: Expressies & Types OEFENINGEN PYTHON REEKS 1 Python maakt gebruik van enkele vaak voorkomende (data)types. Zo zijn er integers die behoren tot de gehele getallen (VB: 3), zijn er float s die behoren

Nadere informatie

De Leidsche Flesch Studievereniging voor Natuurkunde, Sterrenkunde, Wiskunde en Informatica sinds DLF Pointerworkshop

De Leidsche Flesch Studievereniging voor Natuurkunde, Sterrenkunde, Wiskunde en Informatica sinds DLF Pointerworkshop DLF Pointerworkshop Opgaven 2 maart 2016 XKCD # 371 In dit document staan een aantal oude tentamenopgaven om te oefenen voor het hertentamen PR Bij de selectie is rekening gehouden met de opgaven die het

Nadere informatie

Tweede college algoritmiek. 12 februari Grafen en bomen

Tweede college algoritmiek. 12 februari Grafen en bomen College 2 Tweede college algoritmiek 12 februari 2016 Grafen en bomen 1 Grafen (herhaling) Een graaf G wordt gedefinieerd als een paar (V,E), waarbij V een eindige verzameling is van knopen (vertices)

Nadere informatie

ALGORITMIEK: antwoorden werkcollege 5

ALGORITMIEK: antwoorden werkcollege 5 ALGORITMIEK: antwoorden werkcollege 5 opgave 1. a. Brute force algoritme, direct afgeleid uit de observatie: loop v.l.n.r. door de tekst; als je een A tegenkomt op plek i (0 i < n 1), loop dan van daaruit

Nadere informatie

Succes! Theo DʼHondt 13 juni 2010

Succes! Theo DʼHondt 13 juni 2010 Vrije Universiteit Brussel Faculteit Wetenschappen Vakgroep Computerwetenschappen Academiejaar 2009 2010: eerste examenzittijd Interpretatie van Computerprogrammaʼs I schriftelijke test Voorafgaandelijk:

Nadere informatie

Tentamen Kunstmatige Intelligentie (INFOB2KI)

Tentamen Kunstmatige Intelligentie (INFOB2KI) Tentamen Kunstmatige Intelligentie (INFOB2KI) 30 januari 2014 10:30-12:30 Vooraf Mobiele telefoons dienen uitgeschakeld te zijn. Het tentamen bestaat uit 7 opgaven; in totaal kunnen er 100 punten behaald

Nadere informatie

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/ Programmeermethoden Functies vervolg Walter Kosters week 5: 1 5 oktober 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Files manipuleren 1 Deze void-functie telt niet-lege regels in een file invoer: void

Nadere informatie

Lab Webdesign: Javascript 3 maart 2008

Lab Webdesign: Javascript 3 maart 2008 H5: OPERATORS In dit hoofdstuk zullen we het hebben over de operators (of ook wel: operatoren) in JavaScript waarmee allerlei rekenkundige en logische bewerkingen kunnen worden uitgevoerd. Daarbij zullen

Nadere informatie

Kleine cursus PHP5. Auteur: Raymond Moesker

Kleine cursus PHP5. Auteur: Raymond Moesker Kleine cursus PHP5 Auteur: Raymond Moesker Kleine cursus PHP PHP is platform en CPU onafhankelijk, open source, snel, heeft een grote userbase, het is object georiënteerd, het wordt omarmd door grote bedrijven

Nadere informatie

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN Onderdeel van SmartProducts INHOUD COLLEGE 3 Scope van variabelen {3.9} Class ontwerpen en maken,

Nadere informatie

Verzamelingen, Lijsten, Functioneel Programmeren

Verzamelingen, Lijsten, Functioneel Programmeren Verzamelingen, Lijsten, Functioneel Programmeren Jan van Eijck jve@cwi.nl Stage Ignatiuscollege, 20 mei 2008 Samenvatting In deze lezing gaan we in op de overeenkomsten en verschillen tussen verzamelingen

Nadere informatie

Compilers.

Compilers. Compilers joost.vennekens@denayer.wenk.be Job van een compiler Job van een compiler 68: newarray int int grens = min + (max - min) / 2; int[] kleiner = new int[n]; int[] groter = new int[n]; int k = 0;

Nadere informatie

Programmeren 1 20 januari 2012 Prof. T. Schrijvers

Programmeren 1 20 januari 2012 Prof. T. Schrijvers Programmeren 1 20 januari 2012 Prof. T. Schrijvers Instructies Schrijf al je antwoorden op deze vragenbladen (op de plaats die daarvoor is voorzien). Geef ook je kladbladen af. Bij heel wat vragen moet

Nadere informatie

Compilers (2IC25) docent: G. Zwaan, HG 5.41, tel. ( )4291, webpagina:

Compilers (2IC25) docent: G. Zwaan, HG 5.41, tel. ( )4291,   webpagina: Compilers (2IC25) docent: G. Zwaan, HG 5.41, tel. (040 247)4291, e-mail: G.Zwaan@tue.nl webpagina: http://www.win.tue.nl/~wsinswan/compilers/ compileren compilatie vertalen (een werk) bijeenbrengen door

Nadere informatie

1 Inleiding in Functioneel Programmeren

1 Inleiding in Functioneel Programmeren 1 Inleiding in Functioneel Programmeren door Elroy Jumpertz 1.1 Inleiding Aangezien Informatica een populaire minor is voor wiskundestudenten, leek het mij nuttig om een stukje te schrijven over een onderwerp

Nadere informatie

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces.

Hoofdstuk 1: Inleiding. Hoofdstuk 2: Klassen en objecten Datahiding: afschermen van implementatiedetails. Naar de buitenwereld toe enkel interfaces. Hoofdstuk 1: Inleiding Objectoriëntatie: 1. Objecten & klassen: samenwerking van componenten om bepaald doel te bereiken; herbruikbaarheid. 2. Encapsulation: afschermen gedragingen en kenmerken van de

Nadere informatie

Haskell: programmeren in een luie, puur functionele taal

Haskell: programmeren in een luie, puur functionele taal Haskell: programmeren in een luie, puur functionele taal Jan van Eijck jve@cwi.nl 5 Talen Symposium, 12 juli 2010 Samenvatting In deze mini-cursus laten we zien hoe je met eindige en oneindige lijsten

Nadere informatie

REEKS I. Zaterdag 6 november 2010, 9u

REEKS I. Zaterdag 6 november 2010, 9u TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR 2010-2011 REEKS I Zaterdag 6 november 2010, 9u NAAM :... VRAAG 1: MINSTENS [5 PUNTEN] Schrijf een methode minstens(), met twee

Nadere informatie

Java Programma structuur

Java Programma structuur Java Programma structuur public class Bla // div. statements public static void main(string argv[]) // meer spul Voortgezet Prog. voor KI, week 4:11 november 2002 1 Lijsten Voorbeelden 2, 3, 5, 7, 13 Jan,

Nadere informatie

Tentamen Compilers (2IC25) 21 juni 2010, 9.00u-12.00u

Tentamen Compilers (2IC25) 21 juni 2010, 9.00u-12.00u Tentamen Compilers (2IC25) 21 juni 2010, 9.00u-12.00u 1. Beschouw de reguliere expressie e = (a (a b) ) c (Er mag geen materiaal worden geraadpleegd.) (De TL-interpretator is als bijlage toegevoegd.) Faculteit

Nadere informatie

ALGORITMIEK: antwoorden werkcollege 5

ALGORITMIEK: antwoorden werkcollege 5 1 ALGORITMIEK: antwoorden werkcollege 5 opgave 1. a. Brute force algoritme, direct afgeleid uit de observatie: loop v.l.n.r. door de tekst; als je een A tegenkomt op plek i (0 i < n 1), loop dan van daaruit

Nadere informatie

ALGORITMIEK: antwoorden werkcollege 5

ALGORITMIEK: antwoorden werkcollege 5 ALGORITMIEK: antwoorden werkcollege 5 opgave 1. a. Brute force algoritme, direct afgeleid uit de observatie: loop v.l.n.r. door de tekst; als je een A tegenkomt op plek i (0 i < n 1), loop dan van daaruit

Nadere informatie

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing

Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing Beginselen van programmeren Practicum 1 (Doolhof) : Oplossing Introductie In dit document geven we een mogelijke oplossing voor het eerste practicum. Deze oplossing gebruikt verschillende klassen en overerving,

Nadere informatie

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies

17 Operaties op bits. 17.1 Bitoperatoren en bitexpressies 17 Operaties op bits In hoofdstuk 1 is gezegd dat C oorspronkelijk bedoeld was als systeemprogrammeertaal om het besturingssysteem UNIX te implementeren. Bij dit soort toepassingen komt het voor dat afzonderlijke

Nadere informatie

Verzamelingen, Lijsten, Functioneel Programmeren

Verzamelingen, Lijsten, Functioneel Programmeren Verzamelingen, Lijsten, Functioneel Programmeren Jan van Eijck jve@cwi.nl Lezing 4e Gymnasium, 19 november 2015 Samenvatting In deze lezing gaan we in op de overeenkomsten en verschillen tussen verzamelingen

Nadere informatie

Tentamen Compilers (2M220) 19 maart 2002, 9.00u-12.00u

Tentamen Compilers (2M220) 19 maart 2002, 9.00u-12.00u 12/k Tentamen Compilers (2M220) 19 maart 2002, 9.00u-12.00u 1. Beschouw de volgende deelverzameling van de ASCII-karakters V = { 0, 1,..., 9, A, B,..., Y, Z, a, b,..., y, z } De karakters in V staan vermeld

Nadere informatie

Samenvatting hst. 3 sec. 1-3

Samenvatting hst. 3 sec. 1-3 Samenvatting hst. 3 sec. 1-3 infixr 4 (< >) :: Parser a b! Parser a b! Parser a b (p < > q) xs = p xs ++ q xs infixl 6 () :: Parser a (b!c)! Parser a b! Parser a c (p q) xs = [(f b,zs) (f,ys)"p

Nadere informatie

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/ Programmeermethoden Recursie Walter Kosters week 11: 20 24 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Vierde programmeeropgave 1 De Grote getallen programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

inleiding theoretische informatica practicum 1 deadline woensdag 20 februari 2008 om uur

inleiding theoretische informatica practicum 1 deadline woensdag 20 februari 2008 om uur 1 Inleiding inleiding theoretische informatica 2007-2008 practicum 1 deadline woensdag 20 februari 2008 om 14.00 uur Dit practicum is een kennismaking met functioneel programmeren. Twee belangrijke functionele

Nadere informatie

Elementary Data Structures 3

Elementary Data Structures 3 Elementary Data Structures 3 Ferd van Odenhoven Fontys Hogeschool voor Techniek en Logistiek Venlo Software Engineering 29 september 2014 ODE/FHTBM Elementary Data Structures 3 29 september 2014 1/14 Meer

Nadere informatie

9 Meer over datatypen

9 Meer over datatypen 9 Meer over datatypen We hebben al gezien dat het gebruik van symbolische constanten de leesbaarheid van een programma kan verbeteren. Door een geschikte naam (identifier) voor een constante te definiëren,

Nadere informatie

http://www.liacs.nl/home/kosters/java/

http://www.liacs.nl/home/kosters/java/ sheets Programmeren 1 Java college 2, Walter Kosters De sheets zijn gebaseerd op de hoofdstukken 2 tot en met 6 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/

Nadere informatie

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Functies Vorige week bekeken we functies: def

Nadere informatie

Reguliere talen: overzicht

Reguliere talen: overzicht Reguliere talen!!reguliere grammatica: versimpelde Contextvrije grammatica!!finite-state Automaton: andere manier om een taal te beschrijven!!reguliere Expressie nog een andere manier Alle drie kunnen

Nadere informatie

oefening JavaScript - antwoorden

oefening JavaScript - antwoorden oefening JavaScript - antwoorden De antwoorden op deze opgaven zijn meestal wat aan de brede kant voor een Word document. Het is daarom handig om ze in Notepad++ te kopiëren en ze dan te bekijken. opgave

Nadere informatie

Inhoud leereenheid 4. Inleiding JavaScript. Introductie 99. Leerkern 100. Zelftoets 108. Terugkoppeling 109

Inhoud leereenheid 4. Inleiding JavaScript. Introductie 99. Leerkern 100. Zelftoets 108. Terugkoppeling 109 Inhoud leereenheid 4 Inleiding JavaScript Introductie 99 Leerkern 100 1 Leren programmeren in JavaScript 100 2 Chapter 1: Introduction 101 3 Chapter 2, paragrafen 1 t/m 5 102 4 Chapter 2, paragrafen 6

Nadere informatie

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN

INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCAPPEN voorbeeldexamen NAAM :... OPMERKINGEN VOORAF Je krijgt 3 uur de tijd om de opdrachten voor dit examen uit te voeren. Verder werken aan je oplossing

Nadere informatie

Ingebouwde klassen & methodes

Ingebouwde klassen & methodes Ingebouwde klassen & methodes Statische methodes Methodes die bij een klasse horen ipv. bij een object public class Docent { public static Docent departementshoofd() { return new Docent("Jan Ivens"); private

Nadere informatie

Javascript oefenblad 1

Javascript oefenblad 1 Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de

Nadere informatie

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14 Python Vraag 1: Expressies en types Integrated Development Environment (IDE): Ø Wing 101 (gratis te downloaden op www.wingware.com) Oefeningen in de shell >> noemen we de prompt Python commando s = expressies

Nadere informatie

Tentamen Imperatief Programmeren

Tentamen Imperatief Programmeren Tentamen Imperatief Programmeren Maandag 22 oktober 2001 Toelichting Dit is een open boek tentamen, d.w.z. het cursusboek mag gebruikt worden. N.B.: Het tentamen is individueel: voor het maken van de opgaven

Nadere informatie

Wat is FP? The Haskell School of Expression. Functies. Types 1+1=2. Iedere expressie (en waarde) heeft een type.

Wat is FP? The Haskell School of Expression. Functies. Types 1+1=2. Iedere expressie (en waarde) heeft een type. Wat is FP? The Haskell School of Expression Functioneel Programmeren Een andere manier om tegen programmeren aan te kijken Gebaseerd op het uitrekenen van expressies 1+1=2 Eenvoudig maar krachtig (modulair,

Nadere informatie