College Notatie, Recursie, Lijsten

Maat: px
Weergave met pagina beginnen:

Download "College Notatie, Recursie, Lijsten"

Transcriptie

1 College Notatie, Recursie, Lijsten Doaitse Swierstra (Jeroen Bransen) Utrecht University September 13, 2016

2 Functieapplicatie functieapplicatie associeert naar links: als x in f x y moet kiezen bij wie hij hoort, kiest hij voor f : lees dus als (f x) y 2

3 Functieapplicatie functieapplicatie associeert naar links: als x in f x y moet kiezen bij wie hij hoort, kiest hij voor f : lees dus als (f x) y eigenlijk neemt elke functie precies één argument en levert dan eventueel een functie die het volgende argument neemt, etc. functieapplicatie bindt sterker dan alle operatoren Dat scheelt in de haakjes 2

4 Functieapplicatie functieapplicatie associeert naar links: als x in f x y moet kiezen bij wie hij hoort, kiest hij voor f : lees dus als (f x) y eigenlijk neemt elke functie precies één argument en levert dan eventueel een functie die het volgende argument neemt, etc. functieapplicatie bindt sterker dan alle operatoren Voorbeeld: Dat scheelt in de haakjes f x y z 1 + g 4 <=> (((f x) y) z) 1 + (g 4) 2

5 Patronen Je kunt een functie definiëren met verschillende patronen als formele parameter: som [ ] = 0 som [x] = x som [x, y] = x + y som [x, y, z] = x + y + z 3

6 Patronen Je kunt een functie definiëren met verschillende patronen als formele parameter: som [ ] = 0 som [x] = x som [x, y] = x + y som [x, y, z] = x + y + z Bij aanroep van de functie kijkt de interpreter of de parameter past op een van de definities; de aanroep som [3, 4] past bijvoorbeeld op de derde regel van de definitie (en op geen andere). 3

7 Patronen Je kunt een functie definiëren met verschillende patronen als formele parameter: som [ ] = 0 som [x] = x som [x, y] = x + y som [x, y, z] = x + y + z Bij aanroep van de functie kijkt de interpreter of de parameter past op een van de definities; de aanroep som [3, 4] past bijvoorbeeld op de derde regel Let op: van als de definitie het argument (en opeen geen lijst is andere). met meer dan 3 elementen gaat dit niet goed! 3

8 Syntax Diagram (ter referentie!) 4

9 Soorten van patronen O.a. de volgende constructies zijn toegestaan als patroon: Getallen (bijvoorbeeld 3) De constanten, zoals True en False; Namen (bijvoorbeeld x); Lijsten, waarvan de elementen ook weer patronen zijn (bijvoorbeeld [1, x, y]); De operator : met patronen links en rechts (bijvoorbeeld (x : y));... 5

10 Voorbeelden uit de Prelude Met behulp van patronen zijn een aantal belangrijke functies te definiëren: True && True = True && = False 6

11 Voorbeelden uit de Prelude Met behulp van patronen zijn een aantal belangrijke functies te definiëren: True && True = True && = False Met de operator : kunnen lijsten worden opgebouwd. Hiermee kunnen twee nuttige standaardfuncties geschreven worden: head (x : y) = x tail (x : y) = y Werken geen van beide voor lege lijsten! 6

12 Over pure talen, en iteratie Pure talen (zonder zijeffecten, waaronder ook assignments als x = x + 1) zijn eenvoudiger om over te redeneren, en te parallelliseren Maar hoe schrijf je dan iteratieve algoritmen? Met functies als map De voorvader van de bekendere foreach Maar map voldoet niet voor alle gevallen, en hoe definiëren we map zelf? Met recursie! 7

13 Faculteit met expliciete recursie Recursieve definities van de faculteit-functie zijn: fac n n == 0 = 1 n > 0 = n fac (n 1) 8

14 Faculteit met expliciete recursie Recursieve definities van de faculteit-functie zijn: fac n n == 0 = 1 n > 0 = n fac (n 1) fac 0 = 1 fac n = n fac (n 1) 8

15 Recursie, en daar gaat het om... Recursieve functies (d.w.z. functies die zichzelf aanroepen) zijn normaalgesproken alleen zinvol onder de volgende twee voorwaarden: de parameter van de recursieve aanroep is eenvoudiger (bijvoorbeeld: numeriek kleiner, of een kortere lijst) dan de parameter van de te definiëren functie; voor een basis-geval is er een niet-recursieve definitie. 9

16 Recursie, en daar gaat het om... Recursieve functies (d.w.z. functies die zichzelf aanroepen) zijn normaalgesproken alleen zinvol onder de volgende twee voorwaarden: de parameter van de recursieve aanroep is eenvoudiger (bijvoorbeeld: numeriek kleiner, of een kortere lijst) dan de parameter van de te definiëren functie; voor een basis-geval is er een niet-recursieve definitie. Terug naar het voorbeeld: fac 0 = 1 fac n = n fac (n 1) 9

17 Recursie gaat goed met lijsten samen.. Vrijwel alle functies op lijsten hebben het volgende patroon: som :: [Int] > Int som [ ] = 0 som (kop : staart) = kop + som staart 10

18 Recursie gaat goed met lijsten samen.. Vrijwel alle functies op lijsten hebben het volgende patroon: som :: [Int] > Int som [ ] = 0 som (kop : staart) = kop + som staart Tip: als je zelf zo n functie schrijft, begin dan altijd met het lege geval, controleer het type, en kijk of dat je aanstaat. 10

19 Niet alle recursie gaat goed... De volgende functie is niet erg zinvol: f x = f x 11

20 Niet alle recursie gaat goed... De volgende functie is niet erg zinvol: f x = f x Gaat zoiets altijd fout? 11

21 Niet alle recursie gaat goed... De volgende functie is niet erg zinvol: f x = f x Gaat zoiets altijd fout? Belangrijk in geval van zo n identieke aanroep is dat een functie productief is, d.w.z. dat er iets geproduceerd is voordat er dieper in een expressie een recursieve aanroep plaatsvindt: 11

22 Niet alle recursie gaat goed... De volgende functie is niet erg zinvol: f x = f x Gaat zoiets altijd fout? Belangrijk in geval van zo n identieke aanroep is dat een functie productief is, d.w.z. dat er iets geproduceerd is voordat er dieper in een expressie een recursieve aanroep plaatsvindt: repeat repeat x = x : repeat x 11

23 repeat is zinvol In tegenstelling tot wat je zou kunnen denken is repeat niet onzinnig: head :: [a] > a head (x : xs) = x head (repeat 3) => head (3 : repeat 3) => 3 In Haskell wordt een expressie niet verder uitgerekend dan nodig is! Voor de pattern match (in head) is het voldoende om de definitie van repeat één keer uit te vouwen, en zo : zichtbaar te maken, zodat pattern matching slaagt. 12

24 repeat is zinvol In tegenstelling tot wat je zou kunnen denken is repeat niet onzinnig: head :: [a] > a head (x : xs) = x head (repeat 3) => head (3 : repeat 3) => 3 In Haskell wordt een expressie niet verder uitgerekend dan nodig is! Voor de pattern match (in head) is het voldoende om de definitie van repeat één keer uit te vouwen, en zo : zichtbaar te maken, zodat pattern matching slaagt. Het is de pattern matching in Haskell die de evaluatie aandrijft. 12

25 Eisen aan recursie (heroverweging) Recursieve functies zijn zinvol onder de volgende voorwaarden: de parameter van de recursieve aanroep is eenvoudiger (bijvoorbeeld: numeriek kleiner, of een kortere lijst) dan de parameter van de te definiëren functie; voor een basis-geval is er een niet-recursieve definitie. of: de functie is productief! Dit laatste is uniek voor lazy geëvalueerde talen. 13

26 Aansluiten bij bekende notatie De wiskundige definitie van machtsverheffen kan vrijwel letterlijk als Haskell-functie worden gebruikt: xˆ0 = 1 xˆn = x xˆ(n 1) 14

27 Aansluiten bij bekende notatie De wiskundige definitie van machtsverheffen kan vrijwel letterlijk als Haskell-functie worden gebruikt: xˆ0 = 1 xˆn = x xˆ(n 1) Een recursieve definitie waarin voor het gevalsonderscheid patronen worden gebruikt (in plaats van Boolese expressies) wordt daarom ook wel een inductieve definitie genoemd (over het type van het patroon). 14

28 Tussendoortje: meer dan één manier We kunnen schrijven: som lijst null lijst = 0 otherwise = head lijst + som (tail lijst) 15

29 Tussendoortje: meer dan één manier We kunnen schrijven: som lijst null lijst = 0 otherwise = head lijst + som (tail lijst) Maar meestal schrijven we: som [ ] = 0 som (kop : staart) = kop + som staart omdat we dit duidelijker vinden. 15

30 Anonieme waarden De standaardfunctie length, die het aantal elementen in een lijst bepaalt, kan ook inductief worden gedefinieerd: length [ ] = 0 length (kop : staart) = 1 + length staart 16

31 Anonieme waarden De standaardfunctie length, die het aantal elementen in een lijst bepaalt, kan ook inductief worden gedefinieerd: length [ ] = 0 length (kop : staart) = 1 + length staart Als kop niet nodig is, mag het teken gebruikt worden: length [ ] = 0 length ( : staart) = 1 + length staart 16

32 Anonieme waarden DeOp standaardfunctie deze manier wordt length, ervoor die het gezorgd aantal dat elementen iets wat in je een nietlijst wilt bepaalt, gebruiken, kan ook inductief niet kuntworden gebruiken. gedefinieerd: length [ ] = 0 length (kop : staart) = 1 + length staart Als kop niet nodig is, mag het teken gebruikt worden: length [ ] = 0 length ( : staart) = 1 + length staart 16

33 Layout is belangrijk Anders dan in de meeste andere programmeertalen is een regelovergang niet helemaal zonder betekenis. Bekijk bijvoorbeeld de volgende twee where-constructies: where v = f x y w = g z where v = f x y w = g z 17

34 Layout is belangrijk Anders dan in de meeste andere programmeertalen is een regelovergang niet helemaal zonder betekenis. Bekijk bijvoorbeeld de volgende twee where-constructies: where v = f x y w = g z where v = f x y w = g z De plaats van de regelovergang (tussen x en y, of tussen y en w) maakt nogal wat uit. 17

35 Layout regels (zo ongeveer) In een rij definities gebruikt Haskell de volgende methode om te bepalen wat bij elkaar hoort: een regel die precies even ver is ingesprongen als de vorige, wordt als nieuwe definitie beschouwd; is de regel verder ingesprongen, dan hoort hij bij de vorige regel; is de regel minder ver ingesprongen, dan hoort hij niet meer bij de huidige lijst definities. 18

36 Layout regels (zo ongeveer) In een rij definities gebruikt Haskell de volgende methode om te bepalen wat bij elkaar hoort: een regel die precies even ver is ingesprongen als de vorige, wordt als nieuwe definitie beschouwd; is de regel verder ingesprongen, dan hoort hij bij de vorige regel; is de regel minder ver ingesprongen, dan hoort hij niet meer bij de huidige lijst definities. Dat laatste is van belang als een where-constructie binnen een andere where-constructie voorkomt. Bijvoorbeeld in 18 f x y = g (x + w) where g u = u + v where v = u u w = 2 + y

37 In de praktijk volstaat meestal: In de praktijk gaat alles vanzelf goed als je één ding in het oog houdt: gelijkwaardige definities moeten even ver worden ingesprongen Dit betekent ook dat alle globale functiedefinities even ver moeten worden ingesprongen (bijvoorbeeld allemaal nul posities). 19

38 Commentaar Er zijn in Haskell twee soorten commentaar: met de symbolen -- begint commentaar dat tot het eind van de regel doorloopt; met de symbolen {- begint genest commentaar dat doorloopt tot de symbolen -}. Maar wie hoort bij wie: {- allemaal even niet nodig...code... {- code commentaar -}...code... -} 20

39 Commentaar Er zijn in Haskell twee soorten commentaar: met de symbolen -- begint commentaar dat tot het eind van de regel doorloopt; met de symbolen {- begint genest commentaar dat doorloopt tot de symbolen -}. Maar wie hoort bij wie: {- allemaal even niet nodig...code... {- code commentaar -}...code... -} 20 Maar wat als -- deel uitmaakt van een operator zoals <-->?

40 Syntactische fouten Als een functie-definitie niet aan de vorm-eisen voldoet, krijg je daarvan een melding zodra deze functie geanalyseerd wordt: isnul x = x = 0 Wat is er fout? 21

41 Syntactische fouten Als een functie-definitie niet aan de vorm-eisen voldoet, krijg je daarvan een melding zodra deze functie geanalyseerd wordt: isnul x = x = 0 Wat is er fout? Bij de analyse van deze functie meldt de ghci interpreter: Prelude> let isnul x = x = 0 interactive:1:16: parse error on input = 21

42 Typering en type inferentie Typerings-fouten treden bijvoorbeeld op bij het toepassen van de functie length op iets anders dan een lijst, zoals in length 3: Prelude> length 3 interactive:1:7: No instance for (Num [a]) arising from the literal 3 at... Possible fix: add an instance declaration for (Num [a]) In the first argument of length, namely

43 Typering en type inferentie Typerings-fouten treden bijvoorbeeld op bij het toepassen van de functie length op iets anders dan een lijst, zoals in length 3: Prelude> length 3 interactive:1:7: No instance for (Num [a]) arising from the literal 3 at... Possible fix: add an instance declaration for (Num [a]) In the first argument of length, namely 3... Foutmeldingen van de type checker kunnen wat cryptisch zijn, omdat ze teveel van de onderliggende mechanismen laten zien. 22

44 Opvragen van het type van een expressie Het type van een expressie kan bepaald worden met de interpreter-opdracht :t (afkorting van type ). Achter :t staat de expressie die getypeerd moet worden. Bijvoorbeeld:? :t True && False True && False :: Bool Het symbool :: kan gelezen worden als heeft het type. De expressie wordt met de :type-opdracht niet uitgerekend; alleen het type wordt bepaald. 23

45 De basistypes Er zijn aantal basis-types: Int: het type van de gehele getallen (integer numbers of integers), tot een maximum van ruim 2 miljard; Integer: het type van gehele getallen, zonder praktische begrenzing Float: het type van de floating-point getallen; Bool: het type van de Boolese waardes True en False; Char: het type van letters, cijfers en symbolen op het toetsenbord (characters) 24

46 Lijsten kunnen verschillende types hebben? :t [ a, b, c ] [ a, b, c ] :: [Char]? :t [True,False] [True,False] :: [Bool]? :t [ [1,2], [3,4,5] ] [[1,2],[3,4,5]] :: [[Int]] 25

47 Lijsten kunnen verschillende types hebben? :t [ a, b, c ] [ a, b, c ] :: [Char]? :t [True,False] [True,False] :: [Bool]? :t [ [1,2], [3,4,5] ] [[1,2],[3,4,5]] :: [[Int]] Alle waarden in een lijst moeten hetzelfde type hebben. 25

48 Zo niet... Zo niet, dan verschijnt er een melding van een typerings-fout: Prelude> :t [2,True] No instance for (Num Bool) arising from the literal 2 at... Possible fix: add an instance declaration for (Num Bool)... 26

49 Zo niet... Zo niet, dan verschijnt er een melding van een typerings-fout: Prelude> :t [2,True] No instance for (Num Bool) arising from the literal 2 at... Possible fix: add an instance declaration for (Num Bool)... Ook voor deze cryptische melding is er een reden. De 2 kan namelijk heel veel verschillende dingen betekenen. 26

50 Ook functies hebben een type Het type van een functie wordt bepaald door het type van de parameter en het type van het resultaat:? :t sum sum :: [Int] -> Int 27

51 Ook functies hebben een type Het type van een functie wordt bepaald door het type van de parameter en het type van het resultaat:? :t sum sum :: [Int] -> Int De functie sum neemt als argument een lijst van integer waarden (dat is de [Int]) en levert een enkele integer op. 27

52 En dit kan ook Je mag alles in een lijst zetten, dus ook functies:? :t [sin,cos,tan] [sin,cos,tan] :: [Float -> Float] 28

53 Expliciet types opgeven Een functiedefinitie met een expliciet opgegeven type: sum :: [Int] > Int sum [ ] = 0 sum (x : xs) = x + sum xs 29

54 Voordelen: er wordt gecontroleerd of de functie inderdaad het type heeft dat je ervoor hebt gedeclareerd; de declaratie maakt het voor een menselijke lezer eenvoudiger om een functie te begrijpen. als je alle types aan het begin zet heb je een soort inhoudsopgave je kunt het type gebruiken om een functie in Hoogle op te zoeken 30

55 Parametrische polymorfie Voor sommige functies op lijsten maakt het niet uit wat het type van de elementen van die lijst is. Het type van de functie length wordt dan ook als volgt genoteerd: length :: [a] > Int 31

56 Parametrische polymorfie Voor sommige functies op lijsten maakt het niet uit wat het type van de elementen van die lijst is. Het type van de functie length wordt dan ook als volgt genoteerd: length :: [a] > Int Het type van deze elementen wordt aangegeven door een typevariabele, in het voorbeeld a. Typevariabelen worden, in tegenstelling tot de vaste types als Int en Bool, met een kleine letter geschreven. NB: deze polymorfie noemt men vaak generics in de OO wereld. 31

57 Typering door beperking Het type van een definitie wordt bepaald door de beperkingen die worden opgelegd door de expressie: id x = x legt geen beperking op aan het argument, dat dan willekeurig mag zijn. Dus id :: a >?, en omdat het argument wordt opgeleverd is het dan id :: a > a. Bij eenbijeerste [ ] = 1 eenbijeerste (x : xs) = x bepaalt het patroon dat het argument een lijst is, en de rechterkanten dat het resultaat een Int is, en dat x ook een integer is. Alles bij elkaar: [Int] > Int.

58 Voorbeelden head :: [a] > a tail :: [a] > [a] 33

59 Voorbeelden head :: [a] > a tail :: [a] > [a] Polymorfe functies, zoals length en head, hebben met elkaar gemeen dat ze alleen de structuur van de lijst gebruiken. Een niet-polymorfe functie, zoals sum, gebruikt ook eigenschappen van de elementen van de lijst, zoals optelbaarheid. 33

60 Exploiteer polymorfie Niet alleen functies op lijsten kunnen polymorf zijn. De eenvoudigste polymorfe functie is de identiteits-functie (de functie die zijn parameter onveranderd oplevert): id :: a > a id x = x De functie id kan op elementen van willekeurig type werken (en het resultaat is dan van hetzelfde type). 34

61 Exploiteer polymorfie Niet alleen functies op lijsten kunnen polymorf zijn. De eenvoudigste polymorfe functie is de identiteits-functie (de functie die zijn parameter onveranderd oplevert): id :: a > a id x = x De functie id kan op elementen van willekeurig type werken (en het resultaat is dan van hetzelfde type). De functie kan zelfs worden toegepast op functies, zoals in id sqrt. 34

62 Quizvraag Wat denk je van: id id (id id) (id id id) 35

63 Quizvraag Wat denk je van: id id (id id) (id id id) Vraag je het type van beide aan ghci dan krijg je b > b (of a > a, of c > c,...). Zoals het type al aangeeft kan id worden toegepast op parameters van een willekeurig type, dus ook zichzelf. 35

64 Quizvraag Wat denk je van: id id (id id) (id id id) Vraag je het type van beide aan ghci dan krijg je b > b (of a > a, of c > c,...). Zoals het type al aangeeft kan id worden toegepast op parameters van een willekeurig type, dus ook zichzelf. Welke functies zijn dit? 35

65 Meer dan één parameter De functie abcformule heeft drie floating-point getallen als parameter en een lijst met floating-point getallen als resultaat. De type-declaratie luidt daarom: abcformule :: Float > Float > Float > [Float] 36

66 Meer dan één parameter De functie abcformule heeft drie floating-point getallen als parameter en een lijst met floating-point getallen als resultaat. De type-declaratie luidt daarom: abcformule :: Float > Float > Float > [Float] En de functie map map :: (a > b) > [a] > [b] 36 De eerste parameter van map is een functie tussen willekeurige types (a en b), die dus niet eens hetzelfde hoeven te zijn. De tweede parameter van map is een lijst, waarvan de elementen hetzelfde type (a) moeten hebben als de parameter van de functie-parameter. En idem voor b.

67 Quizvraag Denk je dat de volgend expressie goed getypeerd is, en zo ja wat is dan het type: [sin, id] 37

68 Quizvraag Denk je dat de volgend expressie goed getypeerd is, en zo ja wat is dan het type: [sin, id] Antwoord: Prelude> :t sin sin :: Float -> Float Prelude> :t id id :: a -> a Prelude> :t [sin, id] [sin, id] :: [Float -> Float] 37

69 Quizvraag Denk je dat de volgend expressie goed getypeerd is, en zo ja wat is dan het type: [length, head] 38

70 Quizvraag Denk je dat de volgend expressie goed getypeerd is, en zo ja wat is dan het type: [length, head] Antwoord: Prelude> :t length length :: [a] -> Int Prelude> :t head head :: [a] -> a Prelude> :t [length,head] [length,head] :: [[Int] -> Int] Prelude> 38

71 Operator naar functie en terug een operator tussen haakjes wordt gebruikt als een functie: Prelude> Prelude> (+)

72 Operator naar functie en terug een operator tussen haakjes wordt gebruikt als een functie: Prelude> Prelude> (+) andersom: een functie tussen back quotes gedraagt zich als de overeenkomstige operator. Prelude> div Prelude> 8 div 4 2 Prelude> (1 abcformule 2)

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

Functioneel Programmeren

Functioneel Programmeren Functioneel Programmeren ii c Copyright 1992 2003 Informatica-instituut, Universiteit Utrecht Deze tekst mag voor educatieve doeleinden gereproduceerd worden op de volgende voorwaarden: de tekst wordt

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

Functioneel Programmeren

Functioneel Programmeren Functioneel Programmeren ii c Copyright 1992 2002 Informatica-instituut, Universiteit Utrecht Deze tekst mag voor educatieve doeleinden gereproduceerd worden op de volgende voorwaarden: de tekst wordt

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

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

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

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

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

2IA05 Functioneel Programmeren

2IA05 Functioneel Programmeren 2IA05 Functioneel Programmeren wk1: Introductie Rik van Geldrop, Jaap van der Woude Declaratieve programmeerstijl 2/20 2 H C H = A A H I JE A 1 F A H = JEA B, A? = H = JEA B D A M = J. K? JE A A C EI?

Nadere informatie

College I/O

College I/O College 2016-2017 I/O Doaitse Swierstra Verteld door Jurriaan Hage Utrecht University Input en Output Tot dusverre: een module bevat een aantal functiedefinities GHCi drukt de waarde af van een ingetikte

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

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, 8.30-10.30 uur Schrijf op elk ingeleverd blad je naam. Schrijf op het eerste blad ook je studentnummer en het aantal ingeleverde

Nadere informatie

Een korte samenvatting van enkele FORTRAN opdrachten

Een korte samenvatting van enkele FORTRAN opdrachten Een korte samenvatting van enkele FORTRAN opdrachten Inhoud 1 Introductie 3 2 De structuur van een FORTRAN programma 3 3 Datatypen, variabelen en declaraties 3 4 Expressies-volgorde van uitwerking 4 5

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

Functioneel programmeren met Helium

Functioneel programmeren met Helium NIOC 2004 Functioneel programmeren met Helium Bastiaan Heeren en Daan Leijen {bastiaan,daan}@cs.uu.nl Universiteit Utrecht NIOC 2004, Groningen, 3 november. Overzicht Overzicht 1 Functioneel programmeren

Nadere informatie

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object.

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object. een symbolische naam voor een object. Variabelen Constanten Variabelen Expressies naam : geeft de plaats in het geheugen aan waarde : de inhoud van het object identifier : een rij van letters en/of cijfers

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

Functioneel Programmeren

Functioneel Programmeren Functioneel Programmeren ii c Copyright 1992 1998 Informatica-instituut, Universiteit Utrecht Deze tekst mag voor educatieve doeleinden gereproduceerd worden op de volgende voorwaarden: de tekst wordt

Nadere informatie

Leeswijzer Functioneel Programmeren

Leeswijzer Functioneel Programmeren Leeswijzer Functioneel Programmeren Jeroen Fokker 23 oktober 2000 Dit artikel beschrijft in het kort welke onderwerpen behandeld worden in het kollege Functioneel Programmeren en het gelijknamige diktaat.

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

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Informatie. Voorbeeld. Voorbeeld: toegangsprijs

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Informatie. Voorbeeld. Voorbeeld: toegangsprijs 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

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

Imperatief programmeren. Introductie 9. Leerkern 10. Zelftoets 15. Terugkoppeling 16. Inhoud leereenheid 16

Imperatief programmeren. Introductie 9. Leerkern 10. Zelftoets 15. Terugkoppeling 16. Inhoud leereenheid 16 Inhoud leereenheid 16 Imperatief programmeren Introductie 9 Leerkern 10 1 Sleutelbegrippen 10 2 Pragmatisme 10 3 Case study: C 10 4 Case study: Ada 11 5 Overzicht van concepten in C en Ada 14 Zelftoets

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 26, 2018 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te

Nadere informatie

[8] De ene 1 is de andere niet

[8] De ene 1 is de andere niet [8] De ene 1 is de andere niet Volg mee via 08_Types.py In de volgende leerfiche gaan we rekenen met Python. Dat kan je in een programma doen, maar dat kan je ook gewoon vanuit het Shell-venster doen.

Nadere informatie

10 Meer over functies

10 Meer over functies 10 Meer over functies In hoofdstuk 5 hebben we functies uitgebreid bestudeerd. In dit hoofdstuk bekijken we drie andere aspecten van functies: recursieve functies dat wil zeggen, functies die zichzelf

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

FP-theorie. 2IA50, Deel B. Inductieve definities 1/19. / department of mathematics and computer science

FP-theorie. 2IA50, Deel B. Inductieve definities 1/19. / department of mathematics and computer science FP-theorie 2IA50, Deel B Inductieve definities 1/19 Inductieve definitie Definitie IL α, (Cons-)Lijsten over α Zij α een gegeven verzameling. De verzameling IL α van eindige (cons-)lijsten over α is de

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

Functioneel programmeren

Functioneel programmeren Functioneel programmeren Practicumopgave 2: Mastermind Het doel van deze opgave is het implementeren van het spel Mastermind; zie http://nl.wikipedia.org/wiki/mastermind voor een uitleg. Het spel is klein

Nadere informatie

2IA05 Functioneel Programmeren

2IA05 Functioneel Programmeren 2IA05 Functioneel Programmeren wk1: Introductie Rik van Geldrop, Jaap van der Woude Declaratieve programmeerstijl 2/13 2 H C H = A A H I JE A 1 F A H = JEA B, A? = H = JEA B D A M = J. K? JE A A C EI?

Nadere informatie

Inleiding tot Func.oneel Programmeren les 3

Inleiding tot Func.oneel Programmeren les 3 Inleiding tot Func.oneel Programmeren les 3 Kris Luyten, Jo Vermeulen {kris.luyten,jo.vermeulen}@uhasselt.be Exper.secentrum voor Digitale Media Universiteit Hasselt Currying Currying: een func.e met meerdere

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

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

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 3 feb. 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd

Nadere informatie

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

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser 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

Nadere informatie

Functioneel Programmeren met Helium

Functioneel Programmeren met Helium Functioneel Programmeren met Helium Bastiaan Heeren en Daan Leijen Instituut voor Informatica en Informatiekunde, Universiteit Utrecht {bastiaan, daan}@cs.uu.nl Moderne functionele talen zijn mathematisch

Nadere informatie

Reguliere Expressies

Reguliere Expressies Reguliere Expressies Een reguliere expressie (regexp, regex, regxp) is een string (een woord) die, volgens bepaalde syntaxregels, een verzameling strings (een taal) beschrijft Reguliere expressies worden

Nadere informatie

Functioneel Programmeren met Clean

Functioneel Programmeren met Clean Functioneel Programmeren met Clean J.M. Jansen NLDA Oktober 2011 Functioneel Proggrammeren met Clean 2 1. EXPRESSIES... 5 1.1 EXPRESSIES EN HERSCHRIJVINGEN... 5 1.2 REGELS VOOR EXPRESSIES... 5 1.3 BEREKENEN

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

Objective-C Basis. 23 april 2005, Eindhoven Patrick Machielse

Objective-C Basis. 23 april 2005, Eindhoven Patrick Machielse Objective-C Basis 23 april 2005, Eindhoven Patrick Machielse patrick@hieper.nl Algemeen // extensies Objective-C code in bestanden met.m extensie // commentaar moet! /* Alles hiertussen wordt genegeerd

Nadere informatie

SQL datadefinitietaal

SQL datadefinitietaal SQL datadefinitietaal We kunnen er het schema van de database mee bepalen: metadata toevoegen, wijzigen en verwijderen uit een database. Basiscommando's: CREATE : toevoegen van metagegevens DROP : verwijderen

Nadere informatie

Controle structuren. Keuze. Herhaling. Het if statement. even1.c : testen of getal even of oneven is. statement1 statement2

Controle structuren. Keuze. Herhaling. Het if statement. even1.c : testen of getal even of oneven is. statement1 statement2 Controle structuren De algemene vorm: 1 bloks door middel van indentatie Keuze Herhaling if expressie :...... In de volgende vorm is het else gedeelte weggelaten: if expressie :... Het if keuze- of conditioneel

Nadere informatie

APPLICATIEBOUW 2E COLLEGE: ONTWERPEN, GEBRUIKERSINTERFACES, VARIABELEN & EXPRESSIES. Onderdeel van SmartProducts

APPLICATIEBOUW 2E COLLEGE: ONTWERPEN, GEBRUIKERSINTERFACES, VARIABELEN & EXPRESSIES. Onderdeel van SmartProducts APPLICATIEBOUW 2E COLLEGE: ONTWERPEN, GEBRUIKERSINTERFACES, VARIABELEN & EXPRESSIES Onderdeel van SmartProducts INHOUD COLLEGE 2 module4.io.utwente.nl/applicatiebouw Software ontwerpen Gebruikersinterfaces,

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 OEFENINGEN PYTHON REEKS 1 Vraag 1: Python als een eenvoudige rekenmachine Python maakt gebruik van enkele vaak voorkomende (data)types. Zo zijn er integers die behoren tot de gehele getallen (VB: 3) en

Nadere informatie

EE1400: Programmeren in C BSc. EE, 1e jaar, , 2e college

EE1400: Programmeren in C BSc. EE, 1e jaar, , 2e college EE1400: Programmeren in C BSc. EE, 1e jaar, 2012-2013, 2e college Arjan van Genderen, Computer Engineering 20-11-2012 Delft University of Technology Challenge the future Agenda A.s. woensdagmiddag 14.00

Nadere informatie

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur

Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, uur Uitwerking Tweede deeltentamen Mobiel programmeren - versie 1 Vrijdag 2 februari 2018, 8.30-10.30 uur 1. Een Intent-object wordt gebruikt voor communicatie (a) van een Activity naar een bijbehorende View

Nadere informatie

Logisch en Functioneel Programmeren voor Wiskunde D

Logisch en Functioneel Programmeren voor Wiskunde D Logisch en Functioneel Programmeren voor Wiskunde D Wouter Swierstra Doaitse Swierstra Jurriën Stutterheim Technical Report UU-CS-2011-033 Sept 2011 Department of Information and Computing Sciences Utrecht

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

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

Opgaven. Python Assessment

Opgaven. Python Assessment Opgaven Python Assessment Nijmegen - Utrecht www.atcomputing.nl Copyright 2015,2016 Versie: 1a Inleiding Met dit assessment kun je controleren of je voldoende parate kennis over Python hebt om te beginnen

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

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

Kennismaken Greenfoot

Kennismaken Greenfoot HOOFDSTUK 1 Kennismaken met Greenfoot onderwerpen: de interface van Greenfoot, omgaan met objecten, methodes aanroepen, een scenario uitvoeren concepten: object, klasse, methode-aanroep, parameter, retourwaarde

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

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

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

3. Structuren in de taal

3. Structuren in de taal 3. Structuren in de taal In dit hoofdstuk behandelen we de belangrijkst econtrolestructuren die in de algoritmiek gebruikt worden. Dit zijn o.a. de opeenvolging, selectie en lussen (herhaling). Vóór we

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

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

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/prna2016/ Functies Vorige week bekeken we functies: def bereken(a, x): return a * (x

Nadere informatie

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax, Deel 1: Arduino kennismaking Wat is een microcontroller, structuur van een programma, syntax, Wat is een microcontroller Wat is een microcontroller? Microcontroller = kleine dedicated computer. - Beperkt

Nadere informatie

7 Omzetten van Recursieve naar Iteratieve Algoritmen

7 Omzetten van Recursieve naar Iteratieve Algoritmen 7 Omzetten van Recursieve naar Iteratieve Algoritmen Het lijkt mogelijk om elke oplossings-algoritme, die vaak in eerste instantie recursief geformuleerd werd, om te zetten in een iteratieve algoritme

Nadere informatie

Verzamelingen. Hoofdstuk 5

Verzamelingen. Hoofdstuk 5 Hoofdstuk 5 Verzamelingen In de meest uiteenlopende omstandigheden kan het handig zijn om een stel objecten, elementen, of wat dan ook, samen een naam te geven. Het resultaat noemen we dan een verzameling.

Nadere informatie

Programmeren en Wetenschappelijk Rekenen in Python. Wi1205AE I.A.M. Goddijn, Faculteit EWI 22 april 2014

Programmeren en Wetenschappelijk Rekenen in Python. Wi1205AE I.A.M. Goddijn, Faculteit EWI 22 april 2014 Programmeren en Wetenschappelijk Rekenen in Python Wi1205AE, 22 april 2014 Inleiding Cursus coördinator e-mail Docent e-mail : Jacco Hoekstra : J.M.Hoekstra@TUDelft.nl : Ingeborg Goddijn : I.A.M.Goddijn@TUDelft.nl

Nadere informatie

REEKS II. Zaterdag 6 november 2010, 11u

REEKS II. Zaterdag 6 november 2010, 11u TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR 2010-2011 REEKS II Zaterdag 6 november 2010, 11u NAAM :... VRAAG 1: AFSTAND [5 PUNTEN] In deze oefening gaan we opzoek naar identieke

Nadere informatie

HOE TEKEN IK EEN OMGEVINGSMODEL

HOE TEKEN IK EEN OMGEVINGSMODEL HOE TEKEN IK EEN OMGEVINGSMODEL MATTIAS DE WAEL 1. Inleiding Om de allereenvoudigste Scheme expressies te begrijpen volstaat het substitutiemodel. Het substitutiemodel verondersteld het bestaan van een

Nadere informatie

maplev 2012/5/1 15:47 page 469 #471 Procedures (vervolg)

maplev 2012/5/1 15:47 page 469 #471 Procedures (vervolg) maplev 2012/5/1 15:47 page 469 #471 Module 30 Procedures (vervolg) Onderwerp Voorkennis Expressies Procedures: Bereik van lokale variabelen, call by evaluated name, level-1-evaluatie van lokale variabelen,

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

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

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 28, 2016 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te

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

Maak automatisch een geschikte configuratie van een softwaresysteem;

Maak automatisch een geschikte configuratie van een softwaresysteem; Joost Vennekens joost.vennekens@kuleuven.be Technologiecampus De Nayer We zijn geïnteresseerd in het oplossen van combinatorische problemen, zoals bijvoorbeeld: Bereken een lessenrooster die aan een aantal

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

Arrays. Complexe datastructuren. Waarom arrays. Geen stijlvol programma:

Arrays. Complexe datastructuren. Waarom arrays. Geen stijlvol programma: Geen stijlvol programma: Complexe datastructuren Arrays vijf verschillende variabelen voor iets dat als één rij getallen bestempeld wordt; onbruikbaar wanneer het over meer getallen (bijvoorbeeld ) gaat.

Nadere informatie

Berekenbaarheid 2016 Uitwerkingen Tentamen 26 januari 2017

Berekenbaarheid 2016 Uitwerkingen Tentamen 26 januari 2017 erekenbaarheid 2016 Uitwerkingen Tentamen 26 januari 2017 1. Geef een standaard Turing-machine M 1 die de volgende taal herkent door eindtoestand: L 1 := {w {a, b, c} w a + w b = w c } Hierin is w a een

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 5 april 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code

Nadere informatie

Implementatie van Programmeertalen (IPT) 4 mei 2001

Implementatie van Programmeertalen (IPT) 4 mei 2001 Informatica Instituut, Faculteit Wiskunde en Informatica, UU. In elektrosche vorm beschikbaar gemaakt door de TBC van A Eskwadraat. Het college IPT werd in 2000/2001 gegeven door Drs. A. Dijkstra en Drs.

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

SQL Aantekeningen 3. Maarten de Rijke mdr@science.uva.nl. 22 mei 2003

SQL Aantekeningen 3. Maarten de Rijke mdr@science.uva.nl. 22 mei 2003 SQL Aantekeningen 3 Maarten de Rijke mdr@science.uva.nl 22 mei 2003 Samenvatting In deze aflevering: het selecteren van tuples, operaties op strings, en aggregatie functies. Verder kijken we naar iets

Nadere informatie

Ontwerp van Algoritmen: opgaven weken 3 en 4

Ontwerp van Algoritmen: opgaven weken 3 en 4 0 Ontwerp van Algoritmen: opgaven weken 3 en 4 Voor alle volgende opgaven over programmaatjes geldt de spelregel: formuleer altijd eerst alle bewijsverplichtingen. selectie 45. (tail distribution)(prima

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 25 november 2015 Herhaling Meer herhaling Recursie Mutuele recursie Objecten Herhaling Fibonacci class Fibonacci { public static void fibonaccitot(int bovengrens)

Nadere informatie

Propositielogica Het maken van een waarheidstabel

Propositielogica Het maken van een waarheidstabel Informatiekunde naam datum Propositielogica Het maken van een waarheidstabel Eindhoven, 4 juni 2011 De propositielogica Zoekopdrachten met de operatoren AND, OR en zijn zogenaamde Booleaanse expressies.

Nadere informatie

Programmeermethoden NA. Week 3: Controlestructuren

Programmeermethoden NA. Week 3: Controlestructuren Programmeermethoden NA Week 3: Controlestructuren Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Inleveren opdracht 1 Lever digitaal sxxxxxxx-syyyyyyy-opdr1.py

Nadere informatie

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println("Hallo!

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println(Hallo! Voorbeeld Java-programma import java.io.*; één klasse...met één functie...met één opdracht public class Hallo { public static void main (String[] a) { System.out.println("Hallo!"); accolades begrenzen

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

2. Syntaxis en semantiek

2. Syntaxis en semantiek 2. Syntaxis en semantiek In dit hoofdstuk worden de begrippen syntaxis en semantiek behandeld. Verder gaan we in op de fouten die hierin gemaakt kunnen worden en waarom dit in de algoritmiek zo desastreus

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

De keuzestructuur. Versie DD

De keuzestructuur. Versie DD De keuzestructuur Versie DD Tot nu toe Programma in rechte lijn = sequentie of opeenvolging Nieuw Vertakking in parcours = selectie of keuzestructuur Controlestructuren Opeenvolging = sequentie Keuze =

Nadere informatie

Functies. Huub de Beer. Eindhoven, 4 juni 2011

Functies. Huub de Beer. Eindhoven, 4 juni 2011 Functies Huub de Beer Eindhoven, 4 juni 2011 Functies: je kent ze al Je hebt al verschillende PHP functies gebruikt: pi() om het getal π uit te rekenen. sin( 0.453 ) om het de sinus van het getal 0.453

Nadere informatie

TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR

TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR TEST INFORMATICA 1STE BACHELOR IN DE INGENIEURSWETENSCHAPPEN - ACADEMIEJAAR 2011-2012 Zaterdag 5 november 2011, 9u30 NAAM :... VRAAG 1: EVEN VEEL [5 PUNTEN] Schrijf een methode evenveel(), met twee argumenten,

Nadere informatie

Opgave 1. (4 punten) Inleiding: Vraag: Hints: (maximaal 2 bonuspunten) Herkansingstentamen Algoritmiek voor Biologen

Opgave 1. (4 punten) Inleiding: Vraag: Hints: (maximaal 2 bonuspunten) Herkansingstentamen Algoritmiek voor Biologen Opgave 1. (4 punten) Elk jaar verliest een boom al z'n bladeren. Een boom begint op dag D met B bladeren. Op de eerste dag is voor elk blad dat aan de boom zit de kans op afvallen 0.03. Voor elke volgende

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Faculteit EWI Tentamen Programmeren in C (EE1400) 28 jan 2011, 9.00 12.00 - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd

Nadere informatie

2. Syntaxis en semantiek

2. Syntaxis en semantiek 2. Syntaxis en semantiek In dit hoofdstuk worden de begrippen syntaxis en semantiek behandeld. Verder gaan we in op de fouten die hierin gemaakt kunnen worden en waarom dit in de algoritmiek zo desastreus

Nadere informatie

[14] Functies. Volg mee via 14_Functies-1.py. We beginnen met een eenvoudig voorbeeldje:

[14] Functies. Volg mee via 14_Functies-1.py. We beginnen met een eenvoudig voorbeeldje: [14] Functies Een goede programmeur doet altijd zijn best om zoveel mogelijk aan hergebruik van code te doen. Je probeert in je programma code te gebruiken die iemand anders heeft gemaakt, of code die

Nadere informatie

Tijdens het tentamen mag het cursusmateriaal niet geraadpleegd worden.

Tijdens het tentamen mag het cursusmateriaal niet geraadpleegd worden. Eindtoets I N T R O D U C T I E Deze eindtoets is bedoeld als voorbereiding op het schriftelijk tentamen van de cursus Concepten van programmeertalen en is te beschouwen als proeftentamen. Het is belangrijk

Nadere informatie

Lab Webdesign: Javascript 25 februari 2008

Lab Webdesign: Javascript 25 februari 2008 H4: FUNCTIES We zullen in dit hoofdstuk zien hoe we functies moeten maken, aanroepen, argumenten doorgeven en waarden retourneren. Ook zullen we het hebben over het begrip "recursie", en laten zien hoe

Nadere informatie

10. Controleopdrachten

10. Controleopdrachten Computeralgebra met Maxima 10. Controleopdrachten 10.1. Functies en operatoren voor lijsten/vectoren/arrays Een van de eenvoudigste maar belangrijkste lusachtige functies is de makelist opdracht. Voor

Nadere informatie