College I/O
|
|
- Christel Kuiper
- 5 jaren geleden
- Aantal bezoeken:
Transcriptie
1 College I/O Doaitse Swierstra Verteld door Jurriaan Hage Utrecht University
2 Input en Output Tot dusverre: een module bevat een aantal functiedefinities GHCi drukt de waarde af van een ingetikte expressie 2
3 Input en Output Tot dusverre: een module bevat een aantal functiedefinities GHCi drukt de waarde af van een ingetikte expressie We willen ook echte programa s schrijven, zoals: Galaxy Life, Minecraft en Habbo Hotel Haskell compilers Programmeeromgevingen Webservers, Wiki s... 2
4 Wat is het probleem? Haskell s belangrijkste eigenschap is referential transparency, d.w.z. dat elke variabele door zijn definiërende expressie vervangen kan worden en omgekeerd dat aan elke deelexpressie een naam gegeven kan worden zonder dat dat de betekenis van het programma verandert: 3
5 Wat is het probleem? Haskell s belangrijkste eigenschap is referential transparency, d.w.z. dat elke variabele door zijn definiërende expressie vervangen kan worden en omgekeerd dat aan elke deelexpressie een naam gegeven kan worden zonder dat dat de betekenis van het programma verandert: Dus let x = <expr > in... x... x... is dus altijd equivalent met:... < expr >... <expr >... 3
6 Wat is het probleem? Haskell s belangrijkste eigenschap is referential transparency, d.w.z. dat elke variabele door zijn definiërende expressie vervangen kan worden en omgekeerd dat aan elke deelexpressie een naam gegeven kan worden zonder dat dat de betekenis van het programma verandert: Dus let x = <expr > in... x... x... is dus altijd equivalent met:... < expr >... <expr >... En ook: (\ x <expr1>) < expr2 > is per definitie equivalent met: 3 let x = <expr2 > in < expr1 >
7 Wat is dan het voordeel? volgorde van evaluatie blijkt dan niet meer van belang, omdat evaluatie van een expressie geen effect kan hebben op een andere de compiler kan dan zijn eigen volgorde kiezen lazy evaluation is zonder referential transparency praktisch onmogelijk parallelliseren wordt ook gemakkelijker: waar of wanneer een expressie dan ook uitgerekend wordt er komt altijd hetzelfde uit En λ s zijn daar ook heel handig voor: Java Maar...we kunnen niet helemaal zonder 4
8 Side-effects Stel er bestaat een functie random, dan zouden let x = random in x == x en random == random dus ook dezelfde betekenis moeten hebben. 5
9 Side-effects Stel er bestaat een functie random, dan zouden en let x = random in x == x random == random dus ook dezelfde betekenis moeten hebben.en dan voldoet de functie niet aan zijn specificatie. Deze functie bestaat dus niet! 5
10 Neveneffecten Iets soortgelijks gebeurt als we karakter inlezen met bijv. een functie getchar: en let x = getchar in x == x getchar == getchar zouden ook weer hetzelfde moeten zijn, en ook dat is weer moeilijk in te zien. 6
11 Hoe zit dan met deze paradox? Eigenlijk is hier sprake van een extra verborgen argument het filesysteem het toetsenbord de door de random functie al gegenereerde waarden Die bepalen mede de komende toestand en de uitvoer van functies De wereld om ons heen is het impliciete argument dat ervoor zorgt dat dezelfde aanroep verschillende gevolgen heeft Monads zorgen ervoor dat deze wereld impliciet is, en daarom ook niet dupliceerbaar 7
12 We modelleren eerst output We modelleren output door een berekening een resultaat op te laten leveren van type String. We maken dit expliciet d.m.v. een type declaratie: type Output = String 8
13 We modelleren eerst output We modelleren output door een berekening een resultaat op te laten leveren van type String. We maken dit expliciet d.m.v. een type declaratie: type Output = String Functies die een output actie representeren doen dit door de tot dusverre opgebouwde output te veranderen, en dus definiëren we: type O = Output > Output 8
14 We modelleren eerst output We modelleren output door een berekening een resultaat op te laten leveren van type String. We maken dit expliciet d.m.v. een type declaratie: type Output = String Functies die een output actie representeren doen dit door de tot dusverre opgebouwde output te veranderen, en dus definiëren we: type O = Output > Output De functie putchar krijgt verder de Char waarde die afgedrukt moet worden als parameter: 8 putchar :: Char > O putchar c output = output ++ [c]
15 Het combineren van twee output commando s Stel nu dat we de string "ab" aan de output willen toevoegen, gebruik makend van putchar a en putchar b. Hoe stellen we deze commandos dan samen?... putchar a... putchar b... 9
16 Het combineren van twee output commando s Stel nu dat we de string "ab" aan de output willen toevoegen, gebruik makend van putchar a en putchar b. Hoe stellen we deze commandos dan samen?... putchar a... putchar b... Een eerste poging: putab output = putchar b (putchar a output) of zelfs: putab = putchar b. putchar a 9
17 Het combineren van twee output commando s Stel nu dat we de string "ab" aan de output willen toevoegen, gebruik makend van putchar a en putchar b. Hoe stellen we deze commandos dan samen?... putchar a... putchar b... Een eerste poging: putab output = putchar b (putchar a output) of zelfs: putab = putchar b. putchar a Maar deze volgorde van schrijven in niet erg intuïtief. 9
18 Een natuurlijkere schrijfwijze We gaan nu monad-notatie inzetten voor het stroomlijnen van I/O code. type O = Output > Output (>>) :: O > O > O (>>) p q output = q (p output) -- Als je dat liever hebt: (>>) = flip (.) flip f x y = f y x Nu kunnen we schrijven: putab = putchar a >> putchar b 10
19 Een natuurlijkere schrijfwijze We gaan nu monad-notatie inzetten voor het stroomlijnen van I/O code. type O = Output > Output (>>) :: O > O > O (>>) p q output = q (p output) -- Als je dat liever hebt: (>>) = flip (.) flip f x y = f y x Nu kunnen we schrijven: putab = putchar a >> putchar b 10 Een ; zou een goed alternatief voor >> zijn geweest, maar die is al bezet.
20 Voorbeeldje Met deze operator is het nu makkelijk een hele string af te drukken: putstr "" = id putstr (s : ss) = putchar s >> putstr ss 11
21 Over naar input Als we een Char van de input lezen krijgen we eigenlijk twee resultaten: 1. het element op kop van de huidige input 2. het overblijvende stuk van de input, waar we later verder van kunnen lezen: 12
22 Over naar input Als we een Char van de input lezen krijgen we eigenlijk twee resultaten: 1. het element op kop van de huidige input 2. het overblijvende stuk van de input, waar we later verder van kunnen lezen: Dus definiëren we: type Input = String type I a = Input > (a, Input) -- een paar van waarden getchar :: I Char getchar (x : xs) = (x, xs) 12
23 Over naar input Als we een Char van de input lezen krijgen we eigenlijk twee resultaten: 1. het element op kop van de huidige input 2. het overblijvende stuk van de input, waar we later verder van kunnen lezen: Dus definiëren we: type Input = String type I a = Input > (a, Input) -- een paar van waarden getchar :: I Char getchar (x : xs) = (x, xs) 12 Maar deze kunnen we niet samenstellen zoals putchar; wat te doen met de waarde die we net ingelezen hebben?
24 De bind operator: >>= We besluiten deze waarde door te geven als argument aan de rest van de berekening ; deze rest representeren we dus als een functie: (>>=) :: I b > (b > I a) > I a (p >>= q) input = let (v, input ) = p input in (q v) input De waarde v selecteert de volgende input operatie. 13
25 getline Gebruikmakend van >>= en getchar kunnen we een regel inlezen die eindigt met een newline karakter: getline :: I String getline = getchar >>= (\ c if c == \n then (\ inp ("", inp)) else getline >>= (\ cs inp (c : cs, inp)) ) 14
26 Combineren van I en O Stel we willen nu een functie echo schrijven die een karakter inleest en weer afdrukt, gebruik makend van putchar en getchar. echo = getchar >>= (\ c putchar c) Of zelfs korter: echo = getchar >>= putchar 15
27 IO In de toestand die we nu willen bijhouden zit zowel de nog te lezen Input als de al geproduceerde Output. type World = (Input, Output) -- de twee stromen karakters type IO a = World > (a, World) putchar :: Char > IO () putchar o (ii, oo) = ((), (ii, oo ++ [o])) getchar :: IO Char getchar ((i : ii), oo) = (i, (ii, oo )) 16
28 IO In de toestand die we nu willen bijhouden zit zowel de nog te lezen Input als de al geproduceerde Output. type World = (Input, Output) -- de twee stromen karakters type IO a = World > (a, World) putchar :: Char > IO () putchar o (ii, oo) = ((), (ii, oo ++ [o])) getchar :: IO Char getchar ((i : ii), oo) = (i, (ii, oo )) echo :: IO () echo = getchar >>= putchar 16
29 >>= en >> veranderen mee type World = (Input, Output) -- de twee stromen karakters type IO a = World > (a, World) (>>=) :: IO b > (b > IO a) > IO a (iob >>= b2ioa) w = let (bval, w ) = iob w in b2ioa bval w (>>) :: IO b > IO a > IO a Aan het type van (>>) kun je zien dat deze sterk op (>>=) lijkt, maar het resultaat van de eerste berekening alleen niet doorgeeft. Dit kan als de tweede operatie het resultaat van de eerste niet nodig heeft. 17
30 De function main De Haskell main functie heeft type World > World, en je kan bij de aanroep van de functie main door het systeem denken aan iets als: run :: IO () > Input > Output run main input = main (input, "") >>= (\ () state > snd state) We beginnen met de lege output "" en als we klaar zijn leveren we het output gedeelte van de state op. 18
31 putchar Vergelijk: Prelude> a a Prelude> :t putchar putchar :: Char -> IO () Prelude> putchar a a 19
32 putchar Vergelijk: Prelude> a a Prelude> :t putchar putchar :: Char -> IO () Prelude> putchar a a Als we een expressie intikken in GHCi dan wordt er gekozen: 1. als het type van de expressie geen IO.. is: converteer het resultaat naar een String en druk die af 19
33 putchar Vergelijk: Prelude> a a Prelude> :t putchar putchar :: Char -> IO () Prelude> putchar a a Als we een expressie intikken in GHCi dan wordt er gekozen: 1. als het type van de expressie geen IO.. is: converteer het resultaat naar een String en druk die af 2. het type is IO (): voer de rij IO-acties uit (een imperatief programma) 19
34 De do-notatie maakt het weer leesbaarder Om de volgorde waarin de IO acties worden uitgevoerd helder in het programma naar voren te laten komen gebruiken we weer de do-notatie: zeggedag :: IO () zeggedag = do putchar H putchar i zeggedag = putchar H >> putchar i 20
35 De do-notatie maakt het weer leesbaarder Om de volgorde waarin de IO acties worden uitgevoerd helder in het programma naar voren te laten komen gebruiken we weer de do-notatie: zeggedag :: IO () zeggedag = do putchar H putchar i zeggedag = putchar H >> putchar i Indentatie doet er weer toe! 20
36 Recursieve acties De meeste functies die een lijst gebruiken zijn recursief: putstr :: String > IO () putstr (x : xs) = do putchar x putstr xs 21
37 Recursieve acties putstr :: String > IO () putstr (x : xs) = do putchar x putstr xs putstr [ ] = return () Hier staat return () voor een lege lijst van IO-acties. return :: a > IO a 21
38 Vervangen van >>= door do-notatie We kunnen in do-notatie ook een naam geven aan het resultaat van een actie: echo :: IO () echo = do x < getchar putchar x 22
39 Vervangen van >>= door do-notatie We kunnen in do-notatie ook een naam geven aan het resultaat van een actie: echo :: IO () echo = do x < getchar putchar x Test> :t getchar getchar :: IO Char Test> echo a a Test> 22
40 ... Wat zou het resultaat van het volgende programma zijn? sayhi :: IO () sayhi = do putchar H return "does nothing" putchar i 23
41 ... Wat zou het resultaat van het volgende programma zijn? sayhi :: IO () sayhi = do putchar H return "does nothing" putchar i Test> sayhi Hi Test> 23
42 ... Wat zou het resultaat van het volgende programma zijn? sayhi :: IO () sayhi = do putchar H return "does nothing" putchar i Test> sayhi Hi Test> Dus return krijgt hier een argument, dat teruggegeven wordt en vervolgens wordt weggegooid. 23
43 Iets explicieter sayhi :: IO () sayhi = do < putchar H < return "does nothing" putchar i 24
44 Iets explicieter sayhi :: IO () sayhi = do < putchar H < return "does nothing" putchar i De return aanroep levert weliswaar een waarde op, maar die krijgt geen naam, en is verderop dus niet beschikbaar. 24
45 Vergelijk dit met... sayhi :: IO () sayhi = do putchar H text < return ", FP students" putchar i putstr text 25
46 Vergelijk dit met... sayhi :: IO () sayhi = do putchar H text < return ", FP students" putchar i putstr text Test> sayhi Hi, FP students Test> 25
47 Enigszins ontsuikerd is dat... sayhi :: IO () sayhi = do < putchar H text < return ", FP students" < putchar i < putstr text 26
48 IO waarden zijn gewoon waarden! printlater = do < putchar H pr text < return (putstr ", FP students") < putchar i pr text 27
49 IO waarden zijn gewoon waarden! printlater = do < putchar H pr text < return (putstr ", FP students") < putchar i pr text De types zijn: return :: a > IO a 27
50 IO waarden zijn gewoon waarden! printlater = do < putchar H pr text < return (putstr ", FP students") < putchar i pr text De types zijn: return :: a > IO a putstr ", FP students" :: IO () 27
51 IO waarden zijn gewoon waarden! printlater = do < putchar H pr text < return (putstr ", FP students") < putchar i pr text De types zijn: return :: a > IO a putstr ", FP students" :: IO () return (putstr ", FP students") :: IO (IO ()) 27
52 IO waarden zijn gewoon waarden! printlater = do < putchar H pr text < return (putstr ", FP students") < putchar i pr text De types zijn: return :: a > IO a putstr ", FP students" :: IO () return (putstr ", FP students") :: IO (IO ()) pr text :: IO () 27
53 getline De functie getline :: IO String leest een regel: greeting :: IO () greeting = do putstr "What is your name? " name < getline putstrln ("Hello, " ++ name) 28
54 getline De functie getline :: IO String leest een regel: greeting :: IO () greeting = do putstr "What is your name? " name < getline putstrln ("Hello, " ++ name) Test> greeting What is your name? Doaitse Hello, Doaitse De functie putstrln zet een extra \n aan het eind. 28
55 Eenvoudige IO uit de Prelude (1) print :: Show a => a > IO () print e = putstrln (show e) -- of print = putstrln. show getline :: IO String getline = do x < getchar if c == \n then return "" else do xs < getline return (x : xs) 29
56 Eenvoudige IO uit de Prelude (1) print :: Show a => a > IO () print e = putstrln (show e) -- of print = putstrln. show getline :: IO String getline = do x < getchar if c == \n then return "" else do xs < getline return (x : xs) Merk op dat beide takken van de if... then... else... type IO... hebben. Vergelijk deze getline eens met de eerdere versie: de input buffer is verborgen in de monad. 29
57 Eenvoudige IO uit de Prelude (2) De basis IO acties return :: a > IO a putchar :: Char > IO () putstr :: String > IO () putstrln :: String > IO () print :: Show a => a > IO () getline :: IO String writefile :: FilePath > String > IO () readfile :: FilePath > IO String 30
58 Nog even over types Als monads een mode representeren waarin je evalueert. Dan representeert IO Int een berekening die I/O kan doen en uiteindelijk een Int oplevert (bv. de grootte van een bestand). Maar niet alle I/O operaties die je hiervoor doet hoeven van type IO Int te zijn: je kunt een file openen, IO () karakters uitlezen IO Char en nog veel meer Het type geeft dus aan wat je uiteindelijk oplevert in welke mode de gehele functie opereerde Die eerste kan variëren, de tweede is constant 31
59 Nieuwe control structures Omdat iets van type IO... een waarde heeft, kunnen we ze dus opleveren als resultaat van een functie, of als parameter meegeven: sequence sequence :: [IO a] > IO [a] 32
60 Nieuwe control structures Omdat iets van type IO... een waarde heeft, kunnen we ze dus opleveren als resultaat van een functie, of als parameter meegeven: sequence sequence :: [IO a] > IO [a] sequence [ ] = return [ ] sequence (s : ss) = do x < s xs < sequence ss return (x : xs) 32
61 Nieuwe control structures Omdat iets van type IO... een waarde heeft, kunnen we ze dus opleveren als resultaat van een functie, of als parameter meegeven: sequence sequence :: [IO a] > IO [a] sequence [ ] = return [ ] sequence (s : ss) = do x < s xs < sequence ss return (x : xs) 32 De functie sequence krijgt een lijst van commando s, voert deze uit, en levert de lijst van corresponderende resultaten op.
62 sequence sequence sequence :: [IO a] > IO () sequence [ ] = return () sequence (s : ss) = do s sequence ss 33
63 sequence sequence sequence :: [IO a] > IO () sequence [ ] = return () sequence (s : ss) = do s sequence ss En nu: putstr str = sequence (map putchar str) 33
64 sequence sequence sequence :: [IO a] > IO () sequence [ ] = return () sequence (s : ss) = do s sequence ss En nu: putstr str = sequence (map putchar str) Of korter: putstr = sequence. map putchar 33
65 Een Real World Program We schijven een number guessing programma: "Pick a number between 1 and 100. Is it 50? (g = greater, l = less, c = correct) g Is it 75? (g = greater, l = less, c = correct) l Is it 62? (g = greater, l = less, c = correct) g Is it 68? (g = greater, l = less, c = correct) l Is it 65? (g = greater, l = less, c = correct) c Guessed 34
66 Het hoofdprogramma main main :: IO () main = do putstrln "Pick a number between 1 and 100" guess
67 De functie guess guess :: Int > Int > IO () guess lower upper = let mid = (upper + lower) div 2 in do putstr ("Is it " ++ showint mid ++ "? ") putstrln "(g = greater, l = less, c = correct)" (v: ) < getline case v of g guess (mid + 1) upper l guess lower (mid 1) c putstrln "Guessed" do putstrln "Please type (g/l/c)!" guess lower upper 36
68 Samenvatting IO het type IO a representeert een rij neveneffecten 37
69 Samenvatting IO het type IO a representeert een rij neveneffecten gebruik makend van een do constructie kunnen we dergelijke commando s samenstellen; een sequentiële bewerkstelliging van deze side-effects 37
70 Samenvatting IO het type IO a representeert een rij neveneffecten gebruik makend van een do constructie kunnen we dergelijke commando s samenstellen; een sequentiële bewerkstelliging van deze side-effects met de x < expr constructie kunnen we het opgeleverde resultaat beschikbaar maken in de rest van het programma main heeft type IO () 37
71 Veel voorkomende structuren in een Haskell programma De functie main heeft type IO () 38
72 Veel voorkomende structuren in een Haskell programma De functie main heeft type IO () Op top-niveau hebben we te maken met de executie van een rij commandos (IO.. waarden) die de control aan elkaar doorgeven. Dit is gepresenteerd door het onder water doorgeven van de World, waarvan er maar één is. 38
73 Veel voorkomende structuren in een Haskell programma De functie main heeft type IO () Op top-niveau hebben we te maken met de executie van een rij commandos (IO.. waarden) die de control aan elkaar doorgeven. Dit is gepresenteerd door het onder water doorgeven van de World, waarvan er maar één is. Dit doorgeven van het stokje maakt dat de input/output actions sequentieel worden afgehandeld. 38
74 Voorbeeldprobleem Schijf een functie posequestions: posequestions :: [String] > IO [Bool] die een lijst vragen meekrijgt, die vragen stelt, een yes/no antwoord accepteerd, and tenslotte de verzamelde antwoorden afdrukt: 39
75 Voorbeeldprobleem Schijf een functie posequestions: posequestions :: [String] > IO [Bool] 39 die een lijst vragen meekrijgt, die vragen stelt, een yes/no antwoord accepteerd, and tenslotte de verzamelde antwoorden afdrukt: Test> posequestion Is it Sunday? (y) of (n)? n Is your name Doaitse? (y) of (n)? y [False,True] Test> ["Is it Sunday?", "Is your name Doaitse?"]
76 Oplossing posequestions :: [String] > IO [Bool] Let the types do the work 40
77 Oplossing posequestions :: [String] > IO [Bool] Let the types do the work posequestions qs = sequence (map posequestion qs) 40
78 Oplossing posequestions :: [String] > IO [Bool] Let the types do the work posequestions qs = sequence (map posequestion qs) posequestion q = do putstrln q putstrln "(y) of (n)?" (v: ) < getline if v == y then return True else if v == n then return False else posequestion q 40
79 Oplossing posequestions :: [String] > IO [Bool] Let the types do the work posequestions qs = sequence (map posequestion qs) posequestion q = do putstrln q putstrln "(y) of (n)?" (v: ) < getline if v == y then return True else if v == n then return False else posequestion q 40 demo qs = do answers < posequestions qs print answers
80 Nogmaals getline We lezen een karakter, gaan in de recusie, en bouwen een resultaat: getline1 = do x < getchar if x == \n then return [ ] else do xs < getline1 return (x : xs) 41
81 Nogmaals getline De meeste mensen hebben de drang het resultaat al te bouwen tijdens het inlezen; daar is de accumulerende parameter weer: getline2 = getline2 [ ] where getline2 r = do x < getchar if x == \n then return r else getline2 (r ++ [x]) 41
82 Nogmaals getline getline3 = getline3 [ ] where getline3 r = do x < getchar if x == \n then return (reverse r) else getline3 (x : r) 41
83 Tot besluit Als je kunt omgaan met file I/O dan ook met globale muteerbare variabelen (MVars) de random functie Hoe kom je van de monad af? Operaties in de IO monad vind je vooral toplevel, want als je I/O functies gebruikt, doe je zelf ook I/O. Maar je kunt eruit ontsnappen met unsafeperformio unsafe in de naam suggereert: use with extreme caution, not during this course 42
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 informatieCollege 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 informatieCollege 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 informatieinleiding 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 informatie1 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 informatieInleiding 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 informatieEen 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 informatieVerzamelingen, 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 informatieHaskell: 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 informatieWat 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 informatieControle 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 informatieProgrammeermethoden. 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 informatieVerzamelingen, 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 informatieVerzamelingen, 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 informatieInleiding 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 informatieNiet-numerieke data-types
Intern wordt een karakter voorgesteld als een rij van acht bits, Niet-numerieke data-types string de letter a 01100001 0110 0001 0x61 97 Bij interpretatie van de inhoud van een byte als een geheel getal,
Nadere informatieUNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS
UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS Laatste aanpassing: 15 oktober 2003 Inhoudsopgave 1 Bestandsnamen 3 2 Organizatie Bestanden 3 3 Indentatie
Nadere informatieEen 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 informatieSemantiek (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 informatieAls 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 informatieProgrammeermethoden. 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 informatieModelleren 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 informatieKorte uitleg: Wat doet de shell met mijn commandoregel?
Korte uitleg: Wat doet de shell met mijn commandoregel? Het onderstaande is heel erg Bash gericht, maar geldt i.h.a. ook voor andere shells. Vooral als het om "begrip" gaat. Iedere regel die aan de shell
Nadere informatieProgrammeren 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 informatieFUNCTIONEEL PROGRAMMEREN WEEK 1
FUNCTIONEEL PROGRAMMEREN WEEK 1 T. Busker Bron: Kris Luyten en Jo Vermeulen - Expertise Centrum voor Digitale Media - Universiteit Hasselt Functioneel programmeren? Alles via functies Alles via expressies
Nadere informatieModelleren 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 informatieDatastructuren 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 informatiestart -> 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 informatieHOGESCHOOL 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 informatieImplementatie 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 informatieVakgroep 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 informatie4 Invoer en uitvoer. 4.1 Toegang tot de standaardbibliotheek
4 Invoer en uitvoer Strikt genomen maken invoer- en uitvoerfaciliteiten geen deel uit van de taal C, zoals dat in FORTRAN wel het geval is, waar de statements READ en WRITE als deel van de taal zijn gedefinieerd.
Nadere informatieHOOFDSTUK 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 informatieZelftest 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 informatieProgrammeermethoden 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 informatie7 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 informatieHet 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 informatiePersistentie via bestanden. Bestanden
programma is transient Persistentie via bestanden Administratieve gegevens zijn verzameld in het file-object: o.a. waar ergens op de disk de data van het bestand te vinden is. invoer van de gebruiker programma
Nadere informatieProgrammeermethoden 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 informatieLogisch 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 informatieUitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur
Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, 13.00-15.00 uur 1. De situatie die ontstaat door class A : B C D; kan beschreven worden door (a) B is een A (b)
Nadere informatieArrays. 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 informatieModelleren 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 informatieFaculteit Economie en Bedrijfskunde
Faculteit Economie en Bedrijfskunde Op dit voorblad vindt u belangrijke informatie omtrent het tentamen. Voordat u met het tentamen t: lees dit voorblad! Tentamen: V&O IV: Programmeren Tentamendatum &
Nadere informatieProgrammeren A. Genetisch Programma voor het Partitie Probleem. begeleiding:
Programmeren A Genetisch Programma voor het Partitie Probleem begeleiding: Inleiding Het Partitie Probleem luidt als volgt: Gegeven een verzameling van n positieve integers, vindt twee disjuncte deelverzamelingen
Nadere informatieCursus Algoritmiek - - - najaar 2005
Cursus Algoritmiek - - - najaar 2005 Practicumopdracht 4 : werken met kale gegevensbestanden 1. Achtergrond In de 2 e en de 3 e practicumopdracht heb je al kennis gemaakt met het via het toetsenbord laten
Nadere informatieInleiding Programmeren 2
Inleiding Programmeren 2 Gertjan van Noord November 19, 2018 Overzicht Grafische programma s en tekstgebaseerde programma s Stijladviezen (Jeff Knupp, Writing Idiomatic Python) File Processing (Zelle 5.9.2)
Nadere informatieTentamen 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 informatieOpgave 5 Equationeel programmeren
Opgave 5 Equationeel programmeren Haskell, Monads en Monadïsch parsen Atze van der Ploeg, Jörg Endrullis December 1, 2009 1 Inleiding Haskell We gaan nu programmeren in de puur functionele taal Haskell.
Nadere informatieSyntax- (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 informatieModelleren 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 informatieInleiding 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 informatieModelleren 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 informatieTurbo Pascal (deel 1)
Turbo Pascal (deel 1) MSX CLUB MAGAZINE 34 Erik van Bilsen Scanned, ocr ed and converted to PDF by HansO, 2001 Erik van Bilsen leert u het klappen van de Turbo Pascal zweep. Turbo Pascal toepassen Deze
Nadere informatieProgrammeermethoden NA. Week 6: Lijsten
Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Getal opbouwen Stel je leest losse karakters (waaronder cijfers) en je moet daar een getal
Nadere informatieProgrammeren in C# Samenvatting van C#
Programmeren in C# Samenvatting van C# Proceduraal Programmeren Functies (O: void + return, I: referentie of value) Arrays, Lijsten Lussen (for, while, do while) Condities, if-else, switch Variabelen,
Nadere informatieWeek 2 : Hoofdstukken 2 en 6; extra stof: inleiding pointers
Week 2 : Hoofdstukken 2 en 6; extra stof: inleiding pointers Hoofdstuk 6: Beslissingen: if-statement en switch-statement. Inleiding: Condities zijn waar (true) of onwaar (false) In C staat het int-getal
Nadere informatieAccelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368
Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368 Handleiding bij het gebruik van een microcontroller in het Accelerometerproject (Project II) Er zijn speciaal voor het Accelerometerproject
Nadere informatieZelftest Programmeren in PL/I
Zelftest Programmeren in PL/I Document: n0830test.fm 26/03/2012 ABIS Training & Consulting P.. Box 220 B-3000 Leuven Belgium TRAINING & CNSULTING INLEIDING BIJ DE ZELFTEST PRGRAMMEREN IN PL/I m de voorkennis
Nadere informatieRecursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40
Recursion Introductie 37 Leerkern 37 5.1 Foundations of recursion 37 5.2 Recursive analysis 37 5.3 Applications of recursion 38 Terugkoppeling 40 Uitwerking van de opgaven 40 Hoofdstuk 5 Recursion I N
Nadere informatieVariabelen 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 informatieVoorbeeldtentamen 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 informatieProgrammeermethoden. 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 informatieProgrammeermethoden NA
Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Getal opbouwen Stel je leest losse karakters (waaronder
Nadere informatieDeel 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 informatieZoemzinnen. Algemene info. Functies met een variabel aantal argumenten
Zoemzinnen Functies met een variabel aantal argumenten Bij het definiëren van een functie leg je in principe vast hoeveel argumenten er aan de functie moeten doorgegeven worden. Dit aantal correspondeert
Nadere informatiePYTHON 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 informatieEen 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 informatieII. ZELFGEDEFINIEERDE FUNCTIES
II. ZELFGEDEFINIEERDE FUNCTIES In Excel bestaat reeds een uitgebreide reeks van functies zoals SOM, GEMIDDELDE, AFRONDEN, NU enz. Het is de bedoeling om functies aan deze lijst toe te voegen door in Visual
Nadere informatieDerde college algoritmiek. 23 februari Complexiteit Toestand-actie-ruimte
Algoritmiek 2018/Complexiteit Derde college algoritmiek 2 februari 2018 Complexiteit Toestand-actie-ruimte 1 Algoritmiek 2018/Complexiteit Tijdcomplexiteit Complexiteit (= tijdcomplexiteit) van een algoritme:
Nadere informatieConstanten. 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 informatieZelftest TSO/E REXX. Document: n0167test.fm 25/01/2017. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium
Zelftest TSO/E REXX Document: n0167test.fm 25/01/2017 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST TSO/E REXX Deze test is een hulpmiddel
Nadere informatie[15] Variabelen in functies (of: een woordje over scope)
[15] Variabelen in functies (of: een woordje over scope) In de vorige leerfiche hebben we geleerd over functies. We leerden dat functies parameters hebben en dat ze return-waarden kunnen teruggeven aan
Nadere informatieOpgaven Registers Concurrency, 29 nov 2018, Werkgroep.
Opgaven Registers Concurrency, 29 nov 2018, Werkgroep. Gebruik deze opgaven om de stof te oefenen op het werkcollege. Cijfer: Op een toets krijg je meestal zes tot acht opgaven. 1. Safe Integer: Van een
Nadere informatiecontinue in een for, while of do lus herhaalt de lus vroegtijdig. De volgende herhaling wordt onmiddellijk begonnen.
Hoofdstuk 3: controlestructuren instructies en blokken Naar elke instructie staat een ; Instructies worden door de haakjes {} in een block samengevat. if else if ( expression) statement1; else statement2;
Nadere informatieZelftest Programmeren in COBOL - deel I
Zelftest Programmeren in CBL - deel I Document: n1290test.fm 05/01/2016 ABIS Training & Consulting P.. Box 220 B-3000 Leuven Belgium TRAINING & CNSULTING INLEIDING BIJ DE ZELFTEST PRGRAMMEREN IN CBL -
Nadere informatieWaarden persistent (blijvend) opslaan gaat in bestanden (files). Lege tekst: eof
Programmeren Blok A Persistente opslag van waarden http://www.win.tue.nl/ wstomv/edu/2ip05/ College 4 Tom Verhoeff Technische Universiteit Eindhoven Faculteit Wiskunde en Informatica Software Engineering
Nadere informatieJe gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.
1 Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python. Voordat je leert programmeren, moet je jouw pc zo instellen dat
Nadere informatieComputerarchitectuur en netwerken. Memory management Assembler programmering
Computerarchitectuur en netwerken 2 Memory management Assembler programmering Lennart Herlaar 10 september 2018 Inhoud 1 Protectie: Hoe het O.S. programma s tegen elkaar kan beschermen modes memory management
Nadere informatieInleiding programmeren
Inleiding programmeren Docent: José Lagerberg Assistenten: Robin de Vries, Jordy Perlee, Dimitri Belfor, Stephen Swatman, Erik Kooistra, Daan Kruis, Daniel Louwrink Cursusinformatie: https://staff.fnwi.uva.nl/j.m.lagerberg
Nadere informatiePracticumopgave 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 informatie10 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 informatiePracticum Ox intro. Practicum Ox intro. VU Numeriek Programmeren 2.5. Charles Bos. Vrije Universiteit Amsterdam. 3 april /18
1/18 VU Numeriek Programmeren 2.5 Charles Bos Vrije Universiteit Amsterdam 3 april 2013 2/18 Overzicht Vlotte intro in Ox Hands on 3/18 Minimale elementen Minimale elementen Ox-programma: voeg de standaard
Nadere informatie2IA05 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 informatieElfde college complexiteit. 23 april NP-volledigheid III
college 11 Elfde college complexiteit 23 april 2019 NP-volledigheid III 1 TSP Als voorbeeld bekijken we het Travelling Salesman/person Problem, ofwel het Handelsreizigersprobleem TSP. Hiervoor geldt: TSP
Nadere informatieDeeltentamen 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 informatieLeren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie
Leren Programmeren met Visual Basic 6.0 Les 3+4 Hoofdstuk 4 : De Selectie Visual Basic 6.0 1 Basisstructuren (herhaling) Sequentie (HK2) : Alle opdrachten gewoon na mekaar uitvoeren. Hier worden geen keuzes
Nadere informatieTentamen 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 informatieLab 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 informatierecursie 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 informatieDOMjudge teamhandleiding
judge DOMjudge teamhandleiding Samenvatting /\ DOM DOM judge Hieronder staat de belangrijkste informatie kort samengevat. Dit is bedoeld om snel aan de slag te kunnen. We raden echter ten zeerste aan dat
Nadere informatieTentamen 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 informatieAPPLICATIEBOUW 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 informatieimport 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 informatieAlgoritmen 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 informatieUitwerking 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 informatiePython. 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 informatieThinking of Development
Thinking of Development College 2 Imperatief programmeren Arjan Scherpenisse arjan.scherpenisse@kmt.hku.nl @acscherp Dit college Programmeren, wat is dat dan? De programmeur als vormgever Pseudocode Scratch
Nadere informatie[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 informatieDOMjudge teamhandleiding
judge DOMjudge teamhandleiding Samenvatting /\ DOM DOM judge Hieronder staat de belangrijkste informatie kort samengevat. Dit is bedoeld om snel aan de slag te kunnen. We raden echter ten zeerste aan dat
Nadere informatie