INF2810: Funksjonell Programmering

Save this PDF as:
 WORD  PNG  TXT  JPG

Størrelse: px
Begynne med side:

Download "INF2810: Funksjonell Programmering"

Transkript

1 INF2810: Funksjonell Programmering Høyereordens prosedyrer, lambda og lokale variabler Stephan Oepen Universitetet i Oslo 9. februar 2015

2 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens prosedyrer Prosedyrer som parameter lambda

3 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens prosedyrer Prosedyrer som parameter lambda I dag Mer om høyereordens prosedyrer Prosedyrer som returverdi Lokale variabler lambda-uttrykk og let-uttrykk

4 Forrige forelesning: prosedyrer som parameter 3? (define (map proc items) (if (null? items) '() (cons (proc (car items)) (map proc (cdr items)))))? (map square '( )) ( )

5 Forrige forelesning: prosedyrer som parameter? (define (map proc items) (if (null? items) '() (cons (proc (car items)) (map proc (cdr items)))))? (map square '( )) ( )? (define (filter pred items) (cond ((null? items) '()) ((pred (car items)) (cons (car items) (filter pred (cdr items)))) (else (filter pred (cdr items)))))? (filter (lambda (x) (and (> x 2) (< x 8))) '( )) ( ) 3

6 Høyereordens prosedyrer del 2 Vi har så langt sett på prosedyrer som argumenter. Men vi kan øke uttrykkskraften betydelig når vi også tar med prosedyrer som returverdi. Enkelt: alt vi trenger å gjøre er å returnere et lambda-uttrykk.λ4

7 Prosedyrer som returverdi 5? (define (make-interval-test x y) (lambda (z) (and (> z x) (< z y)))) make-interval-test lager et predikat som vil sjekke om dens argument er innenfor et gitt intervall. lambda-uttrykket i kroppen anvendes ikke: Prosedyren som uttrykket evaluerer til er i seg selv returverdien. Så kan vi senere bruke den returnerte prosedyren som vi vil.

8 Prosedyrer som returverdi 5? (define (make-interval-test x y) (lambda (z) (and (> z x) (< z y))))? (make-interval-test 2 7) make-interval-test lager et predikat som vil sjekke om dens argument er innenfor et gitt intervall. lambda-uttrykket i kroppen anvendes ikke: Prosedyren som uttrykket evaluerer til er i seg selv returverdien. Så kan vi senere bruke den returnerte prosedyren som vi vil.

9 Prosedyrer som returverdi 5? (define (make-interval-test x y) (lambda (z) (and (> z x) (< z y))))? (make-interval-test 2 7) #<procedure> make-interval-test lager et predikat som vil sjekke om dens argument er innenfor et gitt intervall. lambda-uttrykket i kroppen anvendes ikke: Prosedyren som uttrykket evaluerer til er i seg selv returverdien. Så kan vi senere bruke den returnerte prosedyren som vi vil.

10 Prosedyrer som returverdi 5? (define (make-interval-test x y) (lambda (z) (and (> z x) (< z y))))? (make-interval-test 2 7) #<procedure>? ((make-interval-test 2 7) 5) make-interval-test lager et predikat som vil sjekke om dens argument er innenfor et gitt intervall. lambda-uttrykket i kroppen anvendes ikke: Prosedyren som uttrykket evaluerer til er i seg selv returverdien. Så kan vi senere bruke den returnerte prosedyren som vi vil.

11 Prosedyrer som returverdi 5? (define (make-interval-test x y) (lambda (z) (and (> z x) (< z y))))? (make-interval-test 2 7) #<procedure>? ((make-interval-test 2 7) 5) #t make-interval-test lager et predikat som vil sjekke om dens argument er innenfor et gitt intervall. lambda-uttrykket i kroppen anvendes ikke: Prosedyren som uttrykket evaluerer til er i seg selv returverdien. Så kan vi senere bruke den returnerte prosedyren som vi vil.

12 Prosedyrer som returverdi 5? (define (make-interval-test x y) (lambda (z) (and (> z x) (< z y))))? (make-interval-test 2 7) #<procedure>? ((make-interval-test 2 7) 5) #t? (filter (make-interval-test 2 7) '( )) make-interval-test lager et predikat som vil sjekke om dens argument er innenfor et gitt intervall. lambda-uttrykket i kroppen anvendes ikke: Prosedyren som uttrykket evaluerer til er i seg selv returverdien. Så kan vi senere bruke den returnerte prosedyren som vi vil.

13 Prosedyrer som returverdi 5? (define (make-interval-test x y) (lambda (z) (and (> z x) (< z y))))? (make-interval-test 2 7) #<procedure>? ((make-interval-test 2 7) 5) #t? (filter (make-interval-test 2 7) '( )) ( ) make-interval-test lager et predikat som vil sjekke om dens argument er innenfor et gitt intervall. lambda-uttrykket i kroppen anvendes ikke: Prosedyren som uttrykket evaluerer til er i seg selv returverdien. Så kan vi senere bruke den returnerte prosedyren som vi vil.

14 Prosedyrer som returverdi (forts.) 6? (define (make-scaler factor)...)? ((make-scaler 0.1) 10) 1.0? (map (make-scaler -1) '( )) ( ) Returnerer en prosedyre som skalerer argumentet sitt med en gitt faktor.

15 Prosedyrer som returverdi (forts.) 6? (define (make-scaler factor) (lambda (x) (* x factor)))? ((make-scaler 0.1) 10) 1.0? (map (make-scaler -1) '( )) ( ) Returnerer en prosedyre som skalerer argumentet sitt med en gitt faktor.

16 Prosedyrer som returverdi (forts.) 7 Enkel søk-og-erstatt, versjon 1:? (define (make-replacer x y) (lambda (z) (if (= z x) y z)))

17 Prosedyrer som returverdi (forts.) 7 Enkel søk-og-erstatt, versjon 1:? (define (make-replacer x y) (lambda (z) (if (= z x) y z)))? (map (make-replacer 42 'towel)) '( ))

18 Prosedyrer som returverdi (forts.) 7 Enkel søk-og-erstatt, versjon 1:? (define (make-replacer x y) (lambda (z) (if (= z x) y z)))? (map (make-replacer 42 'towel)) '( )) (1 towel 2 towel 3)

19 Prosedyrer som returverdi (forts.) 7 Enkel søk-og-erstatt, versjon 1:? (define (make-replacer x y) (lambda (z) (if (= z x) y z)))? (map (make-replacer 42 'towel)) '( )) (1 towel 2 towel 3)

20 Prosedyrer som returverdi (forts.) 7 Enkel søk-og-erstatt, versjon 1:? (define (make-replacer x y) (lambda (z) (if (= z x) y z)))? (map (make-replacer 42 'towel)) '( )) (1 towel 2 towel 3)? (map (make-replacer 42 '(0))) '( ))

21 Prosedyrer som returverdi (forts.) 7 Enkel søk-og-erstatt, versjon 1:? (define (make-replacer x y) (lambda (z) (if (= z x) y z)))? (map (make-replacer 42 'towel)) '( )) (1 towel 2 towel 3)? (map (make-replacer 42 '(0))) '( )) (1 (0) 2 (0) 3)

22 Prosedyrer som returverdi (forts.) 7 Enkel søk-og-erstatt, versjon 1:? (define (make-replacer x y) (lambda (z) (if (= z x) y z)))? (map (make-replacer 42 'towel)) '( )) (1 towel 2 towel 3)? (map (make-replacer 42 '(0))) '( )) (1 (0) 2 (0) 3)

23 Prosedyrer inn, prosedyrer ut 8 Enkel søk-og-erstatt, versjon 2:? (define (make-replacer pred proc) (lambda (z) (if (pred z) (proc z) z)))

24 Prosedyrer inn, prosedyrer ut 8 Enkel søk-og-erstatt, versjon 2:? (define (make-replacer pred proc) (lambda (z) (if (pred z) (proc z) z)))? (map (make-replacer (make-interval-test 40 45) (make-scaler 0.1)) '( ))

25 Prosedyrer inn, prosedyrer ut 8 Enkel søk-og-erstatt, versjon 2:? (define (make-replacer pred proc) (lambda (z) (if (pred z) (proc z) z)))? (map (make-replacer (make-interval-test 40 45) (make-scaler 0.1)) '( )) ( )

26 Prosedyrer inn, prosedyrer ut 8 Enkel søk-og-erstatt, versjon 2:? (define (make-replacer pred proc) (lambda (z) (if (pred z) (proc z) z)))? (map (make-replacer (make-interval-test 40 45) (make-scaler 0.1)) '( )) ( )

27 Prosedyrer inn, prosedyrer ut 8 Enkel søk-og-erstatt, versjon 2:? (define (make-replacer pred proc) (lambda (z) (if (pred z) (proc z) z)))? (map (make-replacer (make-interval-test 40 45) (make-scaler 0.1)) '( )) ( )? (map (make-replacer odd? (lambda (x) (+ 1 x))) '( ))

28 Prosedyrer inn, prosedyrer ut Enkel søk-og-erstatt, versjon 2:? (define (make-replacer pred proc) (lambda (z) (if (pred z) (proc z) z)))? (map (make-replacer (make-interval-test 40 45) (make-scaler 0.1)) '( )) ( )? (map (make-replacer odd? (lambda (x) (+ 1 x))) '( )) ( ) 8

29 Prosedyrer inn, prosedyrer ut Enkel søk-og-erstatt, versjon 2:? (define (make-replacer pred proc) (lambda (z) (if (pred z) (proc z) z)))? (map (make-replacer (make-interval-test 40 45) (make-scaler 0.1)) '( )) ( )? (map (make-replacer odd? (lambda (x) (+ 1 x))) '( )) ( ) 8

30 Prosedyrer inn, prosedyrer ut (forts.) 9? (define (compose proc1 proc2) (lambda (x) (proc1 (proc2 x)))) Et siste eksempel: compose. Setter sammen to prosedyrer til én ny.

31 Prosedyrer inn, prosedyrer ut (forts.) 9? (define (compose proc1 proc2) (lambda (x) (proc1 (proc2 x)))) Et siste eksempel: compose.? (define foo (compose (make-interval-test 5 10) square)) Setter sammen to prosedyrer til én ny. Her lager vi et nytt predikat som for et tall x sjekker om x 2 (5, 10)

32 Prosedyrer inn, prosedyrer ut (forts.) 9? (define (compose proc1 proc2) (lambda (x) (proc1 (proc2 x)))) Et siste eksempel: compose.? (define foo (compose (make-interval-test 5 10) square))? (foo 2) #f? (foo 3) #t Setter sammen to prosedyrer til én ny. Her lager vi et nytt predikat som for et tall x sjekker om x 2 (5, 10)? (foo 4) #f

33 Førsteklasses prosedyrer 10 Prosedyrer er førsteklasses borgere, dvs. at de kan brukes på akkurat samme måte som andre verdier i språket: Kan være anonyme eller bindes til variabler (et prosedyrenavn er bare en vanlig variabel som tilfeldigvis er bundet til en prosedyre). Kan sendes som argument til en høyereordens prosedyre. Kan være returverdi fra en høyereordens prosedyre. Kan lagres i datastrukturer:? (define stuff (list + "zoo" 42 'towel))? stuff

34 Førsteklasses prosedyrer 10 Prosedyrer er førsteklasses borgere, dvs. at de kan brukes på akkurat samme måte som andre verdier i språket: Kan være anonyme eller bindes til variabler (et prosedyrenavn er bare en vanlig variabel som tilfeldigvis er bundet til en prosedyre). Kan sendes som argument til en høyereordens prosedyre. Kan være returverdi fra en høyereordens prosedyre. Kan lagres i datastrukturer:? (define stuff (list + "zoo" 42 'towel))? stuff (#<procedure:+> "zoo" 42 towel)

35 Førsteklasses prosedyrer 10 Prosedyrer er førsteklasses borgere, dvs. at de kan brukes på akkurat samme måte som andre verdier i språket: Kan være anonyme eller bindes til variabler (et prosedyrenavn er bare en vanlig variabel som tilfeldigvis er bundet til en prosedyre). Kan sendes som argument til en høyereordens prosedyre. Kan være returverdi fra en høyereordens prosedyre. Kan lagres i datastrukturer:? (define stuff (list + "zoo" 42 'towel))? stuff (#<procedure:+> "zoo" 42 towel)? ((car stuff) 1 2)

36 Førsteklasses prosedyrer 10 Prosedyrer er førsteklasses borgere, dvs. at de kan brukes på akkurat samme måte som andre verdier i språket: Kan være anonyme eller bindes til variabler (et prosedyrenavn er bare en vanlig variabel som tilfeldigvis er bundet til en prosedyre). Kan sendes som argument til en høyereordens prosedyre. Kan være returverdi fra en høyereordens prosedyre. Kan lagres i datastrukturer:? (define stuff (list + "zoo" 42 'towel))? stuff (#<procedure:+> "zoo" 42 towel)? ((car stuff) 1 2) 3

37 Lokale variabler og lambda 11 Ennå ikke ferdig med lambda for i dag. Nå skal vi se på hvordan vi kan bruke prosedyreapplikasjon med lambda for å få lokale variabler.

38 Prosedyrer og parametre 12? (lambda (x) (if (even? x) "even!" "odd!")) #<procedure> lambda lager prosedyrer, kan være anonyme eller ikke.

39 Prosedyrer og parametre 12? (lambda (x) (if (even? x) "even!" "odd!")) #<procedure> lambda lager prosedyrer, kan være anonyme eller ikke.? ((lambda (x) (if (even? x) "even!" "odd!")) 7) "odd!"

40 Prosedyrer og parametre 12? (lambda (x) (if (even? x) "even!" "odd!")) #<procedure>? ((lambda (x) (if (even? x) "even!" "odd!")) 7) "odd!" lambda lager prosedyrer, kan være anonyme eller ikke. Parametrene til en prosedyre (som x her) er en lokal variabel: navngitt variabel der bindingens rekkevidde er prosedyrekroppen.

41 Prosedyrer og parametre 12? (lambda (x) (if (even? x) "even!" "odd!")) #<procedure>? ((lambda (x) (if (even? x) "even!" "odd!")) 7) "odd!" lambda lager prosedyrer, kan være anonyme eller ikke. Parametrene til en prosedyre (som x her) er en lokal variabel: navngitt variabel der bindingens rekkevidde er prosedyrekroppen. Noen ganger ønsker vi å kunne introdusere flere lokale variabler internt i prosedyren: let.

42 Lokale variabler, let og lambda 13 Et enkelt eksempel? (let ((a 2) (b 3)) (* a b)) 6

43 Lokale variabler, let og lambda 13 Et enkelt eksempel? (let ((a 2) (b 3)) (* a b)) 6 ;; syntaktisk sukker for:? ((lambda (a b) (* a b)) 2 3) 6 let-uttrykk med n variabler. Ekvivalent med å kalle et lambdauttrykk med n parametre: Variabelbindingene gitt ved prosedyreargumentene. Kroppene i uttrykkene ellers like. Navnet gjenspeiler matematisk språkbruk ( Let a be a vector. ).

44 Lokale variabler, let og lambda (forts.) 14 Et mer realistisk eksempel? (percentages '( )) ( )

45 Lokale variabler, let og lambda (forts.) 14 Et mer realistisk eksempel? (percentages '( )) ( ) (define (percentages items) (map (lambda (x) (/ x (/ (reduce + 0 items) 100))) items))

46 Lokale variabler, let og lambda (forts.) 14 Et mer realistisk eksempel? (percentages '( )) ( ) (define (percentages items) (map (lambda (x) (/ x (/ (reduce + 0 items) 100))) items)) (define (percentages items) (let ((sum (/ (reduce + 0 items) 100))) (map (lambda (x) (/ x sum)) items)))

47 Lokale variabler, let og lambda (forts.) 14 Et mer realistisk eksempel? (percentages '( )) ( ) (define (percentages items) (map (lambda (x) (/ x (/ (reduce + 0 items) 100))) items)) (define (percentages items) (let ((sum (/ (reduce + 0 items) 100))) (map (lambda (x) (/ x sum)) items))) (define (percentages items) ((lambda (sum) (map (lambda (x) (/ x sum)) items)) (/ (reduce + 0 items) 100)))

48 Lokale variabler, let og lambda (forts.) 15 Generell form for let Ekvivalent lambda-uttrykk (let (( var1 exp1 ) ( var2 exp2 ). ( varn expn )) body ) ((lambda ( var1 var2... varn ) body ) exp1 exp2... expn ) Rekkevidden til variablene er kroppen til let-uttrykket. Verdiene ( exp 1... exp n ) beregnes utenfor let-uttrykket: Variablene har ikke tilgang til hverandre under bindingen.

49 Vi øver oss på å forstå bindinger 16? (define foo 42)? (let ((x foo) (y 1)) (list x y))

50 Vi øver oss på å forstå bindinger 16? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)

51 Vi øver oss på å forstå bindinger 16? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y foo)) (list x y))

52 Vi øver oss på å forstå bindinger 16? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y foo)) (list x y)) (42 42)

53 Vi øver oss på å forstå bindinger 16? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((x foo) (y x)) (list x y))

54 Vi øver oss på å forstå bindinger? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((x foo) (y x)) (list x y)) error: x undefined 16

55 Vi øver oss på å forstå bindinger? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((foo 7) (y foo)) (list foo y))? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((x foo) (y x)) (list x y)) error: x undefined 16

56 Vi øver oss på å forstå bindinger? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((foo 7) (y foo)) (list foo y)) (7 42)? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((x foo) (y x)) (list x y)) error: x undefined 16

57 Vi øver oss på å forstå bindinger? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((foo 7) (y foo)) (list foo y)) (7 42)? (let ((foo 7)) (let ((y foo)) (list foo y)))? (let ((x foo) (y x)) (list x y)) error: x undefined 16

58 Vi øver oss på å forstå bindinger? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((foo 7) (y foo)) (list foo y)) (7 42)? (let ((foo 7)) (let ((y foo)) (list foo y))) (7 7)? (let ((x foo) (y x)) (list x y)) error: x undefined 16

59 Vi øver oss på å forstå bindinger? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((x foo) (y x)) (list x y)) error: x undefined? (let ((foo 7) (y foo)) (list foo y)) (7 42)? (let ((foo 7)) (let ((y foo)) (list foo y))) (7 7)? (let* ((foo 7) (y foo)) (list foo y)) 16

60 Vi øver oss på å forstå bindinger? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((x foo) (y x)) (list x y)) error: x undefined? (let ((foo 7) (y foo)) (list foo y)) (7 42)? (let ((foo 7)) (let ((y foo)) (list foo y))) (7 7)? (let* ((foo 7) (y foo)) (list foo y)) (7 7) 16

61 Lokale variabler, lambda og let* 17 Generell form for let* Ekvivalent lambda-uttrykk (let* (( var1 exp1 ) ( var2 exp2 ). ( varn expn )) body ) ((lambda ( var1 ) ((lambda ( var2 ) ((lambda ( varn ) body ) expn )) exp2 )) exp1 ) Mens let binder variablene parallelt så gjør let* det sekvensielt. let* er en kortform for flere omsluttende let- eller lambda-uttrykk.

62 18

63 Dataabstraksjon 19 Mye av fokuset så langt har vært på prosedyrer. Modularisering og abstraksjon av prosesser (beregninger). Like viktig er modularisering og abstraksjon av data ( kunnskap ).

64 Dataabstraksjon 19 Mye av fokuset så langt har vært på prosedyrer. Modularisering og abstraksjon av prosesser (beregninger). Like viktig er modularisering og abstraksjon av data ( kunnskap ). Fremover skal vi bruke en del tid på å snakke om data, bl.a: Hvordan definere abstrakte og sammensatte datatyper. Abstraksjonsbarrierer. Hva er egentlig data? Prosedyrer som datastrukturer. Strukturerte data og hierarkiske data (trær)

65 Noen datatyper 20 Hvilke typer data kjenner vi i Scheme så langt?

66 Noen datatyper 20 Hvilke typer data kjenner vi i Scheme så langt? Type Eksempel Tall integer, real, rational 42, , 2/3 Sekvens av tegn string "foo bar" Symbol symbol 'foo, 'hello Sannhetsverdi boolean #t, #f Prosedyrer procedure +, (lambda (x) (* x x)) Par (2-tuple) pair (47. 11) Tom liste null '()

67 Noen datatyper 20 Hvilke typer data kjenner vi i Scheme så langt? Type Eksempel Tall integer, real, rational 42, , 2/3 Sekvens av tegn string "foo bar" Symbol symbol 'foo, 'hello Sannhetsverdi boolean #t, #f Prosedyrer procedure +, (lambda (x) (* x x)) Par (2-tuple) pair (47. 11) Tom liste null '() I tillegg har vi lister: eksempel på en sammensatt datatype, bygget på par og den tomme lista.

68 Noen datatyper 20 Hvilke typer data kjenner vi i Scheme så langt? Type Eksempel Tall integer, real, rational 42, , 2/3 Sekvens av tegn string "foo bar" Symbol symbol 'foo, 'hello Sannhetsverdi boolean #t, #f Prosedyrer procedure +, (lambda (x) (* x x)) Par (2-tuple) pair (47. 11) Tom liste null '() I tillegg har vi lister: eksempel på en sammensatt datatype, bygget på par og den tomme lista. Vi skal definere noen datatyper selv. Skille mellom abstrakte datatyper og deres implementasjon.

69 Dataabstraksjon og komplekse data 21 Ofte behov for å binde sammen en gruppe sammenhengende data. Komplekse datatyper grupperer informasjon som konseptuelt hører sammen (compound data), f.eks. rasjonale tall: 1/3. Dataabstraksjon skjuler en datatypes interne representasjon. Familie av prosedyrer som grensesnitt: konstruktor, selektorer, predikat.

70 Dataabstraksjon og komplekse data 21 Ofte behov for å binde sammen en gruppe sammenhengende data. Komplekse datatyper grupperer informasjon som konseptuelt hører sammen (compound data), f.eks. rasjonale tall: 1/3. Dataabstraksjon skjuler en datatypes interne representasjon. Familie av prosedyrer som grensesnitt: konstruktor, selektorer, predikat. (define (make-rat n d) (cons n d)) (define (rat-numer r) (car r)) (define (rat-denom r) (cdr r)) (define (rat? r) (pair? r)) Her bruker vi cons for å lime sammen to heltall: teller og nevner. Nok for å definere prosedyrer som konseptuelt regner på rasjonale tall.

71 Aritmetikk med rasjonale tall 22 a b an a d bn b d = an bn a d b d (define (mul-rat a b) (make-rat (* (rat-numer a) (rat-numer b)) (* (rat-denom a) (rat-denom b)))) (SICP-eksemplet inneholder litt mer: finner minste felles multiplum, pen utskrift, osv.)

72 Aritmetikk med rasjonale tall 22 a b an a d a+b an a d bn b d = + bn b d an bn a d b d = an b d + b n a d a d b d (define (mul-rat a b) (make-rat (* (rat-numer a) (rat-numer b)) (* (rat-denom a) (rat-denom b)))) (define (add-rat a b) (make-rat (+ (* (rat-numer a) (rat-denom b)) (* (rat-numer b) (rat-denom a))) (* (rat-denom a) (rat-denom b)))) (SICP-eksemplet inneholder litt mer: finner minste felles multiplum, pen utskrift, osv.)...

73 Aritmetikk med rasjonale tall 22 a b an a d a+b an a d bn b d = + bn b d an bn a d b d = an b d + b n a d a d b d Operasjonene på rasjonale tall er uavhengige av intern representasjon: mul-rat bruker rat-numer, ikke car. Datatypen manipuleres gjennom et abstrakt grensesnitt som skjuler implentasjonsdetaljene: abstraksjonsbarrieren. Abstrakt datatype vs konkret datarepresentasjon. (define (mul-rat a b) (make-rat (* (rat-numer a) (rat-numer b)) (* (rat-denom a) (rat-denom b)))) (define (add-rat a b) (make-rat (+ (* (rat-numer a) (rat-denom b)) (* (rat-numer b) (rat-denom a))) (* (rat-denom a) (rat-denom b))))... (SICP-eksemplet inneholder litt mer: finner minste felles multiplum, pen utskrift, osv.)

74 På sidespor: Blanding av datatyper = = 4 3 Scheme gjør det enkelt å definere såkalte polymorfe prosedyrer. Bunnoperasjonene avgjør hvordan vi kombinerer forskjellige typer data. (define (add-rat a b) (let ((a (if (integer? a) (make-rat a 1) a)) (b (if (integer? b) (make-rat b 1) b))) (make-rat (+ (* (rat-numer a) (rat-denom b)) (* (rat-numer b) (rat-denom a))) (* (rat-denom a) (rat-denom b)))))? (add-rat 1 (make-rat 1 3)) (4. 3) Inklusjon av datatyper: integer rational automatisk coercion.

75 Hva er data? 24 Egentlig bare gitt ved grensesnittet sitt: konstruktor og selektorer. Eksempel: Hvordan har vi forholdt oss til datatypen par så langt? Kun gjennom grensesnittet den er definert med: cons, car og cdr. Nøyaktig hvordan par er representert internt er ikke viktig, så lenge grensesnittet oppfyller kontrakten sin. Vi skal implementere en egen alternativ versjon av datatypen par. Skal se at vi kan bruke prosedyrer som lim.

76 Par som prosedyre! 25 (define (cons x y) (lambda (message) (cond ((= message 0) x) ((= message 1) y)))) (define (car proc) (proc 0)) (define (cdr proc) (proc 1))? (cons 1 2) #<procedure> Selv datastrukturer kan implementeres som prosedyrer! Par som prosedyre: Returnerer enten car- eller cdr-verdien, avhengig av hvilken kode den får (0/1). Eksempel på såkalt message passing. car og cdr kaller par-prosedyren (laget med cons) med beskjed om hvilken verdi som ønskes.

77 Par som prosedyre! 25 (define (cons x y) (lambda (message) (cond ((= message 0) x) ((= message 1) y)))) (define (car proc) (proc 0)) (define (cdr proc) (proc 1))? (cons 1 2) #<procedure>? (cdr (cons 1 2)) 2 Selv datastrukturer kan implementeres som prosedyrer! Par som prosedyre: Returnerer enten car- eller cdr-verdien, avhengig av hvilken kode den får (0/1). Eksempel på såkalt message passing. car og cdr kaller par-prosedyren (laget med cons) med beskjed om hvilken verdi som ønskes.

78 Par som prosedyre! 25 (define (cons x y) (lambda (message) (cond ((= message 0) x) ((= message 1) y)))) (define (car proc) (proc 0)) (define (cdr proc) (proc 1))? (cons 1 2) #<procedure>? (cdr (cons 1 2)) 2 Selv datastrukturer kan implementeres som prosedyrer! Par som prosedyre: Returnerer enten car- eller cdr-verdien, avhengig av hvilken kode den får (0/1). Eksempel på såkalt message passing. car og cdr kaller par-prosedyren (laget med cons) med beskjed om hvilken verdi som ønskes.

79 Par som prosedyre! 25 (define (cons x y) (lambda (message) (cond ((= message 0) x) ((= message 1) y)))) (define (car proc) (proc 0)) (define (cdr proc) (proc 1))? (cons 1 2) #<procedure>? (cdr (cons 1 2)) 2 Selv datastrukturer kan implementeres som prosedyrer! Par som prosedyre: Returnerer enten car- eller cdr-verdien, avhengig av hvilken kode den får (0/1). Eksempel på såkalt message passing. car og cdr kaller par-prosedyren (laget med cons) med beskjed om hvilken verdi som ønskes.? (car (cons 1 (cons 2 3))) 1

80 Par som prosedyre! (forts.) 26 (define (cons x y) (lambda (message) (cond ((= message 0) x) ((= message 1) y)))) (define (car proc) (proc 0)) (define (cdr proc) (proc 1))? (cons 1 2) #<procedure>? (cdr (cons 1 2)) 2? (car (cons 1 (cons 2 3))) 1 Prosedyren som cons returnerer brukes bare som en container for å huske parameterbindingene: car- og cdr-verdiene (x og y) gjemmes via såkalt innkapsling. Via prosedyren som returneres av cons får vi tilgang til variablene utenfor det som ellers ville være rekkevidden av dens binding (prosedyrekroppen til cons)! Eksempel på konseptuelt interessant teknikk vi skal jobbe mer med senere!

81 Par som prosedyre: versjon (define (cons x y) (lambda (z) (z x y))) (define (car p)...) (define (cdr p)...)? (define foo (cons 42 '()))? (car foo) 1? (cdr foo) '()

82 Par som prosedyre: versjon (define (cons x y) (lambda (z) (z x y))) (define (car p)...) (define (cdr p)...)? (define foo (cons 42 '()))? (car foo) 1? (cdr foo) '() Å skrive ferdig car og cdr her blir del av oblig 2a.

83 Par som prosedyre: versjon (define (cons x y) (lambda (z) (z x y))) (define (car p)...) Å skrive ferdig car og cdr her blir del av oblig 2a. (define (cdr p)...)? (define foo (cons 42 '()))? (car foo) 1? (cdr foo) '() Prosedyrerepresentasjonene våre er mindre effektive enn vanlige par. Men gode eksempler på hvor mye man kan gjøre med bare prosedyrer. Senere i kurset skal vi se flere praktiske eksempler på prosedyrer som datastrukturer!

84 Neste uke 28 Mer om dataabstraksjon Hierarkiske strukturer: Trær som lister av lister. Rekursjon på trær. Praktisk eksempel: representasjon av mengder.

INF2810: Funksjonell Programmering. Eksamensforberedelser

INF2810: Funksjonell Programmering. Eksamensforberedelser INF2810: Funksjonell Programmering Eksamensforberedelser Stephan Oepen & Erik Velldal Universitetet i Oslo 24. mai 2013 I dag 2 Kort oppsummering Praktisk om eksamen Hvem vant konkurransen om flest oblig-poeng

Detaljer

INF2810: Funksjonell Programmering. Huffman-koding

INF2810: Funksjonell Programmering. Huffman-koding INF2810: Funksjonell Programmering Huffman-koding Stephan Oepen Universitetet i Oslo 1. mars 2016 Tema 2 Sist Trær som lister av lister Trerekursjon Mengder som trær I dag Hierarkisk og symbolsk data Eksempel:

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF2810, Funksjonell Programmering Eksamensdag: Fredag 10. juni 2016 Tid for eksamen: 14.30 Oppgavesettet er på 5 sider (ekskl.

Detaljer

23.09.2015. Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

23.09.2015. Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert. Grunnkurs i objektorientert programmering Introduksjon til objektorientert programmering INF1000 Høst 2015 Siri Moe Jensen INF1000 - Høst 2015 uke 5 1 Siri Moe Jensen INF1000 - Høst 2015 uke 5 2 Kristen

Detaljer

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder. Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo 1 Innledning Dette notatet beskriver noe av det som foregår i primærlageret når et Javaprogram utføres.

Detaljer

Par og Lister (først et par sider fra forrige uke) Par er byggestener for lister og trær og sammensatte datatyper.

Par og Lister (først et par sider fra forrige uke) Par er byggestener for lister og trær og sammensatte datatyper. Par og Lister (først et par sider fra forrige uke) Par er byggestener for lister og trær og sammensatte datatyper. Par kan representeres grafiske slik: Som vi ser kan vi bruke cons til å lage par hvis

Detaljer

Kap.4 Funksjoner. Tre viktig ting ifm. funksjoner: parameter (input) oppskrift (body) for å beregne resultat (output)

Kap.4 Funksjoner. Tre viktig ting ifm. funksjoner: parameter (input) oppskrift (body) for å beregne resultat (output) 1 Kap.4 Funksjoner Tre viktig ting ifm. funksjoner: navn parameter (input) oppskrift (body) for å beregne resultat (output) Syntaks: = Deklarerte funksjoner kan brukes i uttrykk

Detaljer

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn? Dagens tema: 12 gode råd for en kompilatorskriver Hva skal gjøres med navn? Sjekking av navn Hvordan sjekke navn? Testutskrifter 12 gode råd En kompilator må også sjekke riktig navnebruk: Det må ikke forekomme

Detaljer

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1

Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1 Delkapittel 3.1 Grensesnittet Liste Side 1 av 11 Algoritmer og datastrukturer Kapittel 3 - Delkapittel 3.1 3.1 En beholder 3.1.1 En beholder En pappeske er en beholder En beholder er noe vi kan legge ting

Detaljer

Kapittel 5: Objektkommunikasjon

Kapittel 5: Objektkommunikasjon Kapittel 5: Objektkommunikasjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk

Detaljer

Løse reelle problemer

Løse reelle problemer Løse reelle problemer Litt mer om løkker, metoder med returverdier og innlesing fra fil INF1000, uke4 Geir Kjetil Sandve Repetisjon fra forrige uke: while Syntaks: while (condition) do1; do2;... Eksempel:

Detaljer

Shellscripting I. Innhold

Shellscripting I. Innhold Avdeling for informatikk og e-læring, Høgskolen i Sør-Trøndelag Shellscripting I Tor Halsan 19.08.2010 Lærestoffet er utviklet for faget LN199D Scripting av Servere Resymé: Leksjonen er første innføring

Detaljer

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs

BOKMÅL Side 1 av 7. KONTINUASJONSEKSAMEN I FAG TDT4100 Objektorientert programmering / IT1104 Programmering, videregående kurs BOKMÅL Side 1 av 7 NTNU Norges teknisk-naturvitenskapelige universitet Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap KONTINUASJONSEKSAMEN

Detaljer

INF1000 Metoder. Marit Nybakken marnybak@ifi.uio.no 16. februar 2004

INF1000 Metoder. Marit Nybakken marnybak@ifi.uio.no 16. februar 2004 INF1000 Metoder Marit Nybakken marnybak@ifi.uio.no 16. februar 2004 Motivasjon Når man begynner å skrive store programmer, vil man fort oppleve at programmene blir uoversiktlige. Det blir vanskeligere

Detaljer

PG4200 Algoritmer og datastrukturer Forelesning 7

PG4200 Algoritmer og datastrukturer Forelesning 7 PG4200 Algoritmer og datastrukturer Forelesning 7 Lars Sydnes, NITH 19. mars 2014 I. TERMINOLOGI FOR TRÆR TRÆR Lister: Lineære Trær: Hierarkiske Modell / Språk: Bestanddeler: Noder, forbindelser. Forbindelse

Detaljer

TDT4102 - Prosedyre- og objektorientert programmering

TDT4102 - Prosedyre- og objektorientert programmering Eksamensoppgave i TDT4102 - Prosedyre- og objektorientert programmering Lørdag 6. juni 2009 Kontaktperson under eksamen: Trond Aalberg (97631088) Eksamensoppgaven er utarbeidet av Trond Aalberg og kvalitetssikret

Detaljer

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays Oversikt C programmering 1 C programmering Introduksjon Kildekode Kompilering Hello world Hello world med argumenter 2 Funksjoner 3 Datatyper 4 Pekere og arrays 5 Kontrollstrukturer Lars Vidar Magnusson

Detaljer

Beskrivelse av programmeringsspråket Simpila INF5110 - Kompilatorteknikk Våren 2012

Beskrivelse av programmeringsspråket Simpila INF5110 - Kompilatorteknikk Våren 2012 Beskrivelse av programmeringsspråket Simpila INF5110 - Kompilatorteknikk Våren 2012 Her beskrives syntaksen og den statiske semantikken (hva som skal sjekkes av kompilatoren) til språket Simpila. Den dynamiske

Detaljer

AlgDat 12. Forelesning 2. Gunnar Misund

AlgDat 12. Forelesning 2. Gunnar Misund AlgDat 12 Forelesning 2 Forrige forelesning Følg med på hiof.no/algdat, ikke minst beskjedsida! Algdat: Fundamentalt, klassisk, morsomt,...krevende :) Pensum: Forelesningene, oppgavene (pluss deler av

Detaljer

ML (kap 5 og 6) INF3110/4110. Variable i ML. Nye datatyper. Currying. Avanserte listeoperatorer. Typeanalyse

ML (kap 5 og 6) INF3110/4110. Variable i ML. Nye datatyper. Currying. Avanserte listeoperatorer. Typeanalyse ML (kap 5 og 6) Variable i ML Nye datatyper Currying Avanserte listeoperatorer Typeanalyse Dag Langmyhr,Ifi,UiO: Forelesning 25. oktober 2004 Ark 1 av 22 Variable Man kan bruke variable i ML - val x =

Detaljer

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering

Kompilering Statiske Syntaksanalyse Feilsjekking Eksempel Oppsummering Dagens tema Hva er kompilering? Hvordan foreta syntaksanalyse av et program? Hvordan programmere dette i Java? Statiske metoder og variabler Hvordan oppdage feil? Kildekode Hva er kompilering? Anta at

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Bokmål UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Torsdag 4. desember 2014 Tid for eksamen: 14.30 (4 timer)

Detaljer

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

if-tester Funksjoner, løkker og iftester Løkker og Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS Løkker og if-tester Gløer Olav Langslet Sandvika VGS 29.08.2011 Informasjonsteknologi 2 Funksjoner, løkker og iftester Læreplansmål Eleven skal kunne programmere med enkle og indekserte variabler eller

Detaljer

INF1010 - Seminaroppgaver til uke 3

INF1010 - Seminaroppgaver til uke 3 INF1010 - Seminaroppgaver til uke 3 Oppgave 1 I denne oppgaven skal vi lage et klassehiearki av drikker. Alle klassene i hiearkiet skal implementere følgende grensesnitt p u b l i c i n t e r f a c e Drikkbar

Detaljer

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl. 09.00 13.

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl. 09.00 13. BOKMÅL Side 1 av 5 NTNU Norges teknisk-naturvitenskapelige universitet Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap KONTERINGSEKSAMEN

Detaljer

Dagens tema: Mer av det dere trenger til del 1

Dagens tema: Mer av det dere trenger til del 1 Dagens tema Dagens tema: Mer av det dere trenger til del 1 Hvilke klasser trenger vi? Uttrykk Typer Testutskrifter 12 gode råd Dagens tema Prosjektet Utifra dette AlboC-programmet: int pot2 (int x) { int

Detaljer

TDT4100 Objektorientert programmering

TDT4100 Objektorientert programmering Eksamensoppgave i TDT4100 Objektorientert programmering Tirsdag 2. juni 2009, kl. 09:00-13:00 Oppgaven er utarbeidet av faglærer Hallvard Trætteberg og kvalitetssikrer Trond Aalberg. Kontaktperson under

Detaljer

Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.1

Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.1 Delkapittel 2.1 Plangeometriske algoritmer Side 1 av 7 Algoritmer og datastrukturer Kapittel 2 - Delkapittel 2.1 2.1 Punkter, linjesegmenter og polygoner 2.1.1 Polygoner og internett HTML-sider kan ha

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Side 1 UNIVERSITETET I OSLO Kandidatnr Det matematisk-naturvitenskapelige fakultet LØSNINGSFORSLAG Eksamen i: PRØVEEKSAMEN INF1000 Eksamensdag: Prøveeksamen 22.11.2011 Tid for eksamen: 12:15-16:15 Oppgavesettet

Detaljer

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN!

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN! Å lage sikre klasser Unntaksklassene i Java-API-et Unntakshåndtering i databasesammenheng try-catch-finally-setningen Trelagsarkitektur; egen databaseklasse Transaksjonshåndtering LC191D Videregående programmering

Detaljer

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyre og Objektorientert programmering Vår 2014 Øving 1 Frist: DD.MM.YYYY Mål for denne øvinga:

Detaljer

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I Universitetet i Bergen Det matematisk naturvitenskapelige fakultet Institutt for informatikk Side 1 av 6 Bokmål Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert

Detaljer

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl. 23.59 Formål Formålet med denne oppgaven er å gi trening i hele pensum og i å lage et større program. Løsningen du lager skal være

Detaljer

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller. Dagens forelesning Java 13 Design av større programmer : fordeling av roller INF 101-13. mars 2003 Flere eksempler på bruk av objekter MVC-prinsippet MVC-prinsippet Flere eksempler på programmer med objekter

Detaljer

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes.

Dagens tema. C-programmering. Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes. Dagens tema Dagens tema C-programmering Nøkkelen til å forstå C-programmering ligger i å forstå hvordan minnet brukes. Adresser og pekere Parametre Vektorer (array-er) Tekster (string-er) Hvordan ser minnet

Detaljer

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1

Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1 Delkapittel 5.1 Binære trær side 1 av 71 Algoritmer og datastrukturer Kapittel 5 - Delkapittel 5.1 5.1 Binære trær 5.1.1 Binære trærs egenskaper Binære trær (eng: binary tree), og trær generelt, er en

Detaljer

TDT4110 IT Grunnkurs Høst 2014

TDT4110 IT Grunnkurs Høst 2014 TDT4110 IT Grunnkurs Høst 2014 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap Auditorieøving 1 Navn: Linje: Brukernavn (blokkbokstaver): Oppgavesettet

Detaljer

Ordliste. Obligatorisk oppgave 1 - Inf 1020

Ordliste. Obligatorisk oppgave 1 - Inf 1020 Ordliste. Obligatorisk oppgave 1 - Inf 1020 I denne oppgaven skal vi tenke oss at vi vil holde et register over alle norske ord (med alle bøyninger), og at vi skal lage operasjoner som kan brukes til f.

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato: 15.desember 2004 Varighet: Fagnummer: Fagnavn: Klasse(r): 3 timer LO116D Programmering i Visual Basic FU

Detaljer

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket Programmeringsspråk for nybegynnere Krav til språket Hva om vi laget vårt eget språk til INF1000? Programmeringsspråket må være så enkelt som mulig. (Programmering er vanskelig nok som det er.) Hvilke

Detaljer

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1 Delkapittel 9.1 Generelt om balanserte trær Side 1 av 13 Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1 9.1 Generelt om balanserte trær 9.1.1 Hva er et balansert tre? Begrepene balansert og

Detaljer

I Kapittel 3 så vi på hvordan data, som hele tall og reelle tall, kan representeres som bitsekvenser

I Kapittel 3 så vi på hvordan data, som hele tall og reelle tall, kan representeres som bitsekvenser Forelesning 5 Logikk Dag Normann - 28. januar 2008 Oppsummering av Kapittel 3 I Kapittel 3 så vi på hvordan data, som hele tall og reelle tall, kan representeres som bitsekvenser i en datamaskin. Stoffet

Detaljer

INF1000 Prøveeksamen Oppgave 7 og 9

INF1000 Prøveeksamen Oppgave 7 og 9 INF1000 Prøveeksamen Oppgave 7 og 9 Høst 2015 Siri Moe Jensen 7a) Skriv en klasse Gave med to variabler som forteller hva som er i gaven, og hvor mye den har kostet. Klassen skal ha en konstruktør med

Detaljer

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000 Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000 Leveringsfrist Innleveringsfristen er fredag 14. november kl 16.00. Viktig: se side 4 for detaljerte leveringskrav. Formål Formålet med denne oppgaven

Detaljer

Spesifikasjon av Lag emne

Spesifikasjon av Lag emne Dagens forelesning o Kort repetisjon av kravspesifikasjon med UML Fra krav til objekter Hva skal systemet gjøre? UML: Bruksmønstermodeller (Use Cases) o Objektdesign Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Kandidatnr Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Prøveeksamen tirsdag 23. november 2010 Tid for eksamen:

Detaljer

TDT4102 Prosedyreog objektorientert programmering Vår 2016

TDT4102 Prosedyreog objektorientert programmering Vår 2016 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyreog objektorientert programmering Vår 2016 Øving 4 Frist: 2016-02-12 Mål for denne øvingen:

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Side 1 Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1010 Objektorientert programmering Eksamensdag: Tirsdag 12. juni 2012 Tid for eksamen: 9:00 15:00 Oppgavesettet er

Detaljer

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

TDT4102 Prosedyre og Objektorientert programmering Vår 2015 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyre og Objektorientert programmering Vår 2015 Øving 1 LF LØSNINGSFORSLAG Mål for denne øvinga:

Detaljer

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL. 09.00 13.00

EKSAMEN I FAG TDT4100 Objekt-orientert programmering. Fredag 3. juni 2005 KL. 09.00 13.00 Side 1 av 6 NTNU Norges teknisk-naturvitenskapelige universitet BOKMÅL Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap EKSAMEN I FAG

Detaljer

NB!!!! VIKTIG ANGÅENDE DATAFILA:

NB!!!! VIKTIG ANGÅENDE DATAFILA: INF1000, Oblig2, H2006, Tolkning av oppgaven NB!!!! VIKTIG ANGÅENDE DATAFILA: For å fastholde både leietagernes saldi og hyblenes utgifter, må hver linje i datafila ha to (ikke bare ett) tilsvarende tall

Detaljer

Kapittel 12: Rekursjon

Kapittel 12: Rekursjon Kapittel 12: Rekursjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag,

Detaljer

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i. Skilpaddeskolen Steg 1: Flere firkanter Nybegynner Python Åpne IDLE-editoren, og åpne en ny fil ved å trykke File > New File, og la oss begynne. Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell'

Detaljer

Kapittel 3: Litt om representasjon av tall

Kapittel 3: Litt om representasjon av tall MAT1030 Diskret Matematikk Forelesning 3: Litt om representasjon av tall, logikk Roger Antonsen Institutt for informatikk, Universitetet i Oslo Kapittel 3: Litt om representasjon av tall 20. januar 2009

Detaljer

TDT4102 Prosedyre og Objektorientert programmering Vår 2015

TDT4102 Prosedyre og Objektorientert programmering Vår 2015 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyre og Objektorientert programmering Vår 2015 Øving 3 Frist: 2014-02-07 Mål for denne øvinga:

Detaljer

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først

Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først Køer Hva er en kø? En lineær datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn først Et nytt element legges alltid til sist i køen Skal vi ta ut et element, tar vi alltid

Detaljer

Utførelse av programmer, metoder og synlighet av variabler i JSP

Utførelse av programmer, metoder og synlighet av variabler i JSP Utførelse av programmer, metoder og synlighet av variabler i JSP Av Alf Inge Wang 1. Utførelse av programmer Et dataprogram består oftest av en rekke programlinjer som gir instruksjoner til datamaskinen

Detaljer

Kapittel 7: Mer om arv

Kapittel 7: Mer om arv Kapittel 7: Mer om arv Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag,

Detaljer

Abaris-notat Teknisk beskrivelse av kodeverkskomponent for ICPC-2

Abaris-notat Teknisk beskrivelse av kodeverkskomponent for ICPC-2 Tittel: Dato: 16.03.04 Forfatter: Lars Tungen : 000 Sider/bilag: 5/0 Versjon: A Filnavn: E:\PROSJEKTER\KITH\ICPC\2004\DOKUMENTER\TEKNISK BESKRIVELSE AV KODEVERKSKOMPONENT FOR ICPC.DOC Innhold: 1. Teknisk

Detaljer

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen. Hver gang funksjonen printhallo kalles utføres instruksjonene spesifisert i den. [Kurssidene] [ ABI - fagsider bibin ] Webprogrammering høsten 2015 //funksjonskall printhallo(); //enda en gang printhallo();

Detaljer

Visuell Programmering: Kom i gang med Processing

Visuell Programmering: Kom i gang med Processing Visuell Programmering: Kom i gang med Processing Et enkelt program: Syntaks introdusert: Kommentarer, print(), println(), size(). + Start opp processing + Skriv en åpningskommentar på toppen av programmet

Detaljer

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk IT1101 Informatikk basisfag I dag Programmeringsspråk Problemer med maskinspråk I dag: 5.1-5.3 Fra lavnivå til høynivå programmeringsspråk - utvikling Kompilator / tolker Programmeringsparadigmer Tradisjonelle

Detaljer

HØGSKOLEN I SØR-TRØNDELAG

HØGSKOLEN I SØR-TRØNDELAG HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato: 16.desember 2005 Varighet: Fagnummer: Fagnavn: 3 timer LO116D Programmering i Visual Basic Klasse(r): FU

Detaljer

Læringsmål for forelesningen

Læringsmål for forelesningen Læringsmål for forelesningen Objektorientering Delegeringsteknikken Delegering vs. arv 1 Dagens forelesning Introduksjon og motivasjon Hvorfor forelese om standardteknikker, såkalte patterns? Hva slags

Detaljer

KAPITTEL 3 Litt logikk og noen andre småting

KAPITTEL 3 Litt logikk og noen andre småting KAPITTEL 3 Litt logikk og noen andre småting Logikk er sentralt både i matematikk og programmering, og en innføring i de enkleste delene av logikken er hovedtema i dette kapitlet I tillegg ser vi litt

Detaljer

Lynkurs i shellprogrammering under Linux

Lynkurs i shellprogrammering under Linux Lynkurs i shellprogrammering under Linux Interaktiv bruk av shell Shell/skall er en applikasjon som lar bruker taste inn tekstlige kommandoer til Linux en og en linje om gangen (leser linjer fra stdin).

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Forelesning 4: Logikk Dag Normann Matematisk Institutt, Universitetet i Oslo 27. januar 2010 (Sist oppdatert: 2010-01-27 12:47) Kapittel 4: Logikk (fortsettelse) MAT1030 Diskret

Detaljer

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE. Antall sider (Inkl forsiden): 8. Alle trykte og håndskrevne

AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE. Antall sider (Inkl forsiden): 8. Alle trykte og håndskrevne I EKSAMENSOPPGA VE Side av 8 AVDELING FOR INGENIØRUTDANNING EKSAMENSOPPGAVE Emne: PROGRAMMERING Grupper: laa, 1AB, lac, lia Eksamensoppgaven av: Tillatte hjelpemidler: best~r Antall sider (Inkl forsiden):

Detaljer

Debugging. Tore Berg Hansen, TISIP

Debugging. Tore Berg Hansen, TISIP Debugging Tore Berg Hansen, TISIP Innhold Innledning... 1 Å kompilere og bygge et program for debugging... 1 Når debugger er i gang... 2 Symbolene i verktøylinjen... 3 Start på nytt... 3 Stopp debugging...

Detaljer

Mer om C programmering og cuncurrency

Mer om C programmering og cuncurrency Mer om C programmering og cuncurrency Lars Vidar Magnusson September 23, 2011 Lars Vidar Magnusson () Forelesning i Operativsystemer 20.09.2011 September 23, 2011 1 / 19 Oversikt Mer om C programmering

Detaljer

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid:

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid: EKSAMENSOPPGA VE Side l av 5 Bokmålstekst Emne: PROGRAMMERINGSSPRÅK i II Grupper: loa, ldb Emnekode LO 112 A Dato: 14.12.2005 Faglig veileder: Mark Burgess, Eva Vihovde, Frode Sandnes og Ulf uttersrud

Detaljer

BOKMÅL Side 1 av 12. Fakultet for informasjonsteknologi,

BOKMÅL Side 1 av 12. Fakultet for informasjonsteknologi, BOKMÅL Side 1 av 12 NTNU Norges teknisk-naturvitenskapelige universitet Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap TENTATIVT LØSNINGSFORSLAG

Detaljer

og bevegelse funksjoner som blir aktivert av hendelser Keyboard Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS

og bevegelse funksjoner som blir aktivert av hendelser Keyboard Informasjonsteknologi 2 Læreplansmål Gløer Olav Langslet Sandvika VGS Keyboard og bevegelse Gløer Olav Langslet Sandvika VGS 12.09.2012 Informasjonsteknologi 2 funksjoner som blir aktivert av hendelser Læreplansmål Eleven skal kunne programmere med enkle og indekserte variabler

Detaljer

TDT4102 Prosedyreog objektorientert programmering Vår 2016

TDT4102 Prosedyreog objektorientert programmering Vår 2016 Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap TDT4102 Prosedyreog objektorientert programmering Vår 2016 Øving 2 Frist: 2016-01-29 Mål for denne øvingen:

Detaljer

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus

Eksekveringsrekkefølgen (del 1) Oppgave 1. Eksekveringsrekkefølgen (del 2) Kommentar til oppgave 1. } // class Bolighus // class Bygning Oppgave 1 System.out.println( Bolighus ); // class Bolighus Hva blir utskriften fra dette programmet? class Blokk extends Bolighus{ // class Blokk IN105subclassesII-1 Eksekveringsrekkefølgen

Detaljer

OPPGAVE 5b og 8b Java Kode

OPPGAVE 5b og 8b Java Kode OPPGAVE 5b og 8b Java Kode public class Kant boolean behandlereturavbil() BehandleReturAvBil behandler = new BehandleReturAvBil(this); String regnr; int kmstand, tanknivaa; boolean erskadet; // 1: Få verdiene

Detaljer

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I)

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Universitetet i Bergen Matematisk naturvitskapleg fakultet Institutt for informatikk Side 1 av 7 Nynorsk Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) Fredag 10. desember 2004 Tid:

Detaljer

Legg bort skilpaddene dine, i dag skal vi lære hvordan vi kan sende hemmelige beskjeder!

Legg bort skilpaddene dine, i dag skal vi lære hvordan vi kan sende hemmelige beskjeder! Level 1 Hemmelige koder All Code Clubs must be registered. Registered clubs appear on the map at codeclubworld.org - if your club is not on the map then visit jumpto.cc/ccwreg to register your club. Legg

Detaljer

Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå

Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå Vedlegg A.1 Filbehandling på bit-nivå Side 1 av 9 Algoritmer og datastrukturer A.1 Filbehandling på bit-nivå A.1 Filbehandling på bit-nivå A.1.1 Sammendrag Klassen BitInputStream gjør det mulig å lese

Detaljer

Informasjonsteori og entropi

Informasjonsteori og entropi Informasjonsteori og entropi Termen entropi tilhører i utgangspunktet termodynamikken, der den, svært forenklet, betegner reduksjon av energipotensialet innenfor et system der det foregår enerigutveksling

Detaljer

TDT4100 Objektorientert programmering

TDT4100 Objektorientert programmering Eksamensoppgave i TDT4100 Objektorientert programmering Mandag 6. august 2012, kl. 15:00-19:00 Oppgaven er utarbeidet av faglærer Hallvard Trætteberg og kvalitetssikrer Rune Sætre. Kontaktperson under

Detaljer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer Eksamen i Algoritmer og Datastrukturer IAI 21899 Høgskolen i Østfold Avdeling for informatikk og automatisering Torsdag 3. november 2, kl. 9. - 14. Hjelpemidler: Alle trykte og skrevne hjelpemidler. Kalkulator.

Detaljer

Python: Oppslagslister (dictionaries) og mengder 3. utgave: Kapittel 9

Python: Oppslagslister (dictionaries) og mengder 3. utgave: Kapittel 9 Python: Oppslagslister (dictionaries) og mengder 3. utgave: Kapittel 9 TDT4110 IT Grunnkurs Professor Guttorm Sindre Læringsmål og pensum Mål Forstå prinsippene for, og kunne bruke i praksis Mengder (sets)

Detaljer

Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer

Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer Fra krav til objekter Ansvarsdrevet OO: CRC og UML Sekvensdiagrammer INF1050--1 Dagens forelesning o Kort repetisjon av kravspesifikasjon med UML Hva skal systemet gjøre? UML: Bruksmønstermodeller (Use

Detaljer

INF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012

INF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012 INF1000 - Uke 10 Ukesoppgaver 10 24. oktober 2012 Vanlige ukesoppgaver De første 4 oppgavene (Oppgave 1-4) handler om HashMap og bør absolutt gjøres før du starter på Oblig 4. Deretter er det en del repetisjonsoppgaver

Detaljer

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program Oversikt INF1000 Uke 1 time 2 Variable, enkle datatyper og tilordning Litt repetisjon Datamaskinen Programmeringsspråk Kompilering og kjøring av programmer Variabler, deklarasjoner og typer Tilordning

Detaljer

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din.

Om oppgaveteksten på noe punkt er uklar eller upresis, kan du gjøre egne presiseringer. Formulér i så fall disse tydelig i oppgavebesvarelsen din. UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i IN 211 Programmeringsspråk Eksamensdag: 6. desember 2001 Tid for eksamen: 9.00 15.00 Oppgavesettet er på 9 sider. Vedlegg: Ingen

Detaljer

Løsningsforslag EKSAMEN

Løsningsforslag EKSAMEN 1 Løsningsforslag EKSAMEN Emnekode: ITF20006 000 Dato: 18. mai 2012 Emne: Algoritmer og datastrukturer Eksamenstid: 09:00 til 13:00 Hjelpemidler: 8 A4-sider (4 ark) med egne notater Faglærer: Gunnar Misund

Detaljer

Mattespill Nybegynner Python PDF

Mattespill Nybegynner Python PDF Mattespill Nybegynner Python PDF Introduksjon I denne leksjonen vil vi se litt nærmere på hvordan Python jobber med tall, og vi vil lage et enkelt mattespill. Vi vil også se hvordan vi kan gjøre ting tilfeldige.

Detaljer

Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin.

Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin. Oppgaver uke 35: Oppgavene 1, 2, 4, 5, 6, 9, 12 og 13 passer best til å løses ved en datamaskin. Oppgave 1. Skriv et C-program som leser mål i tommer og skriver det ut i fot og tommer. (Det er 12 tommer

Detaljer

INF1000 HashMap. Marit Nybakken marnybak@ifi.uio.no 2. november 2003

INF1000 HashMap. Marit Nybakken marnybak@ifi.uio.no 2. november 2003 INF1000 HashMap Marit Nybakken marnybak@ifi.uio.no 2. november 2003 Dette dokumentet skal tas med en klype salt og forfatteren sier fra seg alt ansvar. Dere bør ikke bruke definisjonene i dette dokumentet

Detaljer

. Ved sensur vl1 ahe bokstaverte deloppgaver (a, b, c,...) telle like mye.

. Ved sensur vl1 ahe bokstaverte deloppgaver (a, b, c,...) telle like mye. ~KSAMENSOPPGA VE Les gjennom hele oppgavesettet før du begynner A besvare deloppgavene.. Hold deg til de identifikator-navnene som er brukt i oppgaveteksten, dog med unntak av metodenes parametemavn som

Detaljer

EKSAMEN I FAG TDT4100 Objektorientert programmering. Fredag 2. juni 2006 Kl. 09.00 13.00

EKSAMEN I FAG TDT4100 Objektorientert programmering. Fredag 2. juni 2006 Kl. 09.00 13.00 Side 1 av 13 NTNU Norges teknisk-naturvitenskapelige universitet BOKMÅL Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap EKSAMEN I FAG

Detaljer

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk MAT1030 Diskret matematikk Plenumsregning 3: Ukeoppgaver fra kapittel 2 & 3 Roger Antonsen Matematisk Institutt, Universitetet i Oslo 31. januar 2008 Oppgave 2.7 - Horners metode (a) 7216 8 : 7 8+2 58

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Bokmål UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Fredag 4. desember 2015 Tid for eksamen: 14.30 (4 timer)

Detaljer

Databaser & objektorientering.

Databaser & objektorientering. Databaser & objektorientering. Noen grunnbegreper innen objektorientering. Klasser og forekomster klasser beskriver strukturen for noe. Beskrivelsen inneholder: et navn attributter /egenskaper / tilstander

Detaljer

Eksamen i TDT4165 Programmeringsspråk (med rette- eller løsningsforslag) Fredag 18 Desember 2009

Eksamen i TDT4165 Programmeringsspråk (med rette- eller løsningsforslag) Fredag 18 Desember 2009 Norges Teknisk-Naturvitenskapelige Universitet Fakultet for Informasjonsteknologi, Matematikk og Elektroteknikk Institutt for Datateknikk og Informasjonsvitenskap Eksamen i TDT4165 Programmeringsspråk

Detaljer

Læringsmål for forelesningen

Læringsmål for forelesningen Læringsmål for forelesningen Objektorientering Bruk av grensesnitt og implementasjoner i Collection-klasser Java-prog, kap. 14-16 i Big Java Og side 990-997 i Appendix D Collection-rammeverket og iterasjon

Detaljer

TEMA: Kommunikasjon med Bruker INF1000 Plenumsgruppe 1, 08.09.02. -formatert utskrift

TEMA: Kommunikasjon med Bruker INF1000 Plenumsgruppe 1, 08.09.02. -formatert utskrift TEMA: Kommunikasjon med Bruker INF1000 Plenumsgruppe 1, 08.09.02 - terminal-i/o (bruker-i/o) - innlesing av ulike typer data - pakken easyio - klassene In og Out In in = new In(); Out ut = new Out(); int

Detaljer

Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015

Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015 Oppgaver til kodegenerering etc. INF-5110, 12. mai, 2015 Oppgave 1: Vi skal se på koden generert av TA-instruksjonene til høyre i figur 9.10 i det utdelte notatet, side 539 a) (repetisjon fra forelesningene)

Detaljer