Referentiell transparens. Programmeringsmetodik DV1 Programkonstruktion 1. Moment 10 Om sidoeffekter In/utmatning och imperativ programmering

Storlek: px
Starta visningen från sidan:

Download "Referentiell transparens. Programmeringsmetodik DV1 Programkonstruktion 1. Moment 10 Om sidoeffekter In/utmatning och imperativ programmering"

Transkript

1 Programmergsmetodik DV1 Programkonstruktion 1 Moment 10 Om sidoeffekter In/utmatng och imperativ programmerg Referentiell transparens I ren funktionell programmerg kan man byta lika mot lika utan att programmets funktion ändras. Detta kallas referentiell transparens. Orsaken är att en beräkng te har någon effekt annat än att beräkna ett värde (om man bortser från tids/mnesåtgång). f x*g y kan bytas mot g y*f x. f x ^ f x kan bytas mot val fx = f x fx^fx end Det sista bytet lönar sig resursmässigt om beräkngen av f x tar lång tid eller har ett stort objekt som värde. Ett sådant byte kan t.o.m. göras automatiskt av ML-systemet. PK1&PM1 HT-04 moment 10 Sida 1 Uppdaterad PK1&PM1 HT-04 moment 10 Sida 2 Uppdaterad Inmatng Hittills har all /utmatng av data gått via ML-systemets användargränssnitt. I praktiken räcker te det programmen måste själva kunna mata /ut data t.ex. till/från filer. Låt oss anta att det fns en funktion readle med spec.: readle x TYPE : unit -> strg SIDE-EFFECTS: En rad läses från termalfönstret. POST: en sträng med den rad som lästs. EXAMPLE: readle() = "Hej\n" om man skriver raden "Hej\n" på tangentbordet. Körexempel: - readle(); Hej, hopp. > val it = "Hej, hopp.\n" : strg Sidoeffekter Vad blir readle()^readle()? Låt oss anta att användaren först skriver raden "Hej" sedan "hopp". (Varför slutar strängarna med \n?) readle()^readle() > "Hej\n"^readle() > "Hej\n"^"hopp\n" > "Hej\nhopp\n" Observera att readle()!readle()! Man kan alltså te byta readle()^readle() mot val rl = readle() rl^rl end Det beror på att readle te bara beräknar ett värde utan också läser en ny rad från termalen vid varje anrop readle har en sidoeffekt. Anta anrop och deras bördes ordng blir viktig. PK1&PM1 HT-04 moment 10 Sida 3 Uppdaterad PK1&PM1 HT-04 moment 10 Sida 4 Uppdaterad Sekvenserg När sidoeffekter fns blir beräkngsordngen mycket viktig. Tänk på att ML beräknar uttryck från vänster till höger (och ifrån och ut). Ibland kan man vilja beräkna flera uttryck efter varandra endast för deras sidoeffekter utan att bry sig om värdet. För detta ändamål fns ML-konstruktionen e1 ; e2 ;... ; en-1 ; en vars värde är värdet av en, men som dessutom först beräknar e1 t.o.m. en-1. e1;e2;...;en-1;en är mengsfull bara om beräkngen av e1 t.o.m. en-1 har sidoeffekter. (Obs att ; även avslutar uttryck som man matar till ML. ; som sekvensoperator måste stå om parenteser,..end eller dylikt.) PK1&PM1 HT-04 moment 10 Sida 5 Uppdaterad Utmatng prt x : strg -> unit SIDE-EFFECTS: x skrivs ut på termalfönstret. EXAMPLE: prt "Hej\n" = () och skriver samtidigt raden "Hej\n" på termalfönstret. prt "Hej\n";prt "Hej\n" > ();prt"hej\n" (och "Hej\n" skrivs ut.) > ();() (och "Hej\n" skrivs ut.) > () Alltså prt "Hej\n" = prt "Hej\n" trots det kan man te byta prt "Hej\n";prt "Hej\n" mot val ph = prt "Hej\n" ph;ph end prt beräknar te bara ett värde utan skriver också på termalen. En ny rad skrivs vid varje anrop prt har en sidoeffekt. Anta anrop och deras bördes ordng blir viktig. PK1&PM1 HT-04 moment 10 Sida 6 Uppdaterad

2 In/utmatng i ML TextIO För /utmatng (I/O) fns olika bibliotek i ML, bl.a. biblioteket TextIO för - och utmatng av text. För att slippa skriva TextIO. före alla namn på funktioner och värden i detta bibliotek kan man använda deklarationen open TextIO; i sitt program. Den gör att ML automatiskt söker i biblioteket TextIO efter namn den te känner igen annars. (Detta fungerar med alla bibliotek, även t.ex. Strg och List.) Man kan använda flera open-deklarationer. Jag förutsätter i fortsättngen att man använt deklarationen open TextIO. (Obs! open är gen ersättng för load.) PK1&PM1 HT-04 moment 10 Sida 7 Uppdaterad Strömmar Vid I/O krävs omfattande admistration, bl.a. skall filer lokaliseras och man behöver hålla reda på hur långt i en fil man har läst/skrivit. Läspekare frithiof.txt: Der växte uti Hildgs gård två plantor under fostrarns vård. Ej Norden förr sett två så sköna, de växte härligt i det gröna. TextIO fns abstrakta datatyper stream och outstream kallade strömmar. All formation rörande I/O fns i strömmarna. För I/O till termalfönster fns i TextIO två fördefierade strömmar stdin av typ stream och stdout av typ outstream. PK1&PM1 HT-04 moment 10 Sida 8 Uppdaterad Skapa strömmar openin s TYPE: strg -> stream PRE: s skall vara namnet på en fil som fns. POST: En stream kopplad till filen s. SIDE-EFFECTS: Olika anrop till openin ger olika strömmar. EXAMPLE : openin "frithiof.txt" openout s : strg -> outstream PRE: s skall vara namnet på en fil som går att skriva/skapa. POST: En outstream kopplad till filen s. SIDE-EFFECTS: Filen s skapas om den te fns. Olika anrop till openout ger olika strömmar. EXAMPLE : openout "nyfil" PK1&PM1 HT-04 moment 10 Sida 9 Uppdaterad Ett urval funktioner för matng (1) putle is TYPE: stream -> strg POST: Nästa rad från strömmen is (kl. \n), eller tom sträng om get kunde läsas (t.ex. filslut) SIDE-EFFECTS: Läspekaren för is flyttas fram. Exempelfunktionen readle kan defieras så här: fun readle() = putle stdin; put1 is TYPE: stream -> char option POST: SOME c om nästa tecken i strömmen är c, NONE om get kunde läsas (t.ex. filslut). SIDE-EFFECTS: Läspekaren för is flyttas fram. closein is TYPE: stream -> unit. SIDE-EFFECTS: Avslutar användngen av strömmen is PK1&PM1 HT-04 moment 10 Sida 10 Uppdaterad Ett urval funktioner för matng (2) putall is TYPE: stream -> strg POST: Resterande text i strömmen is till filslut. SIDE-EFFECTS: Läspekaren för is flyttas fram. endofstream is TYPE: stream -> bool POST: true om läsngen av strömmen is har nått till slutet av filen, false annars. SIDE-EFFECTS: ga. PK1&PM1 HT-04 moment 10 Sida 11 Uppdaterad Exempel på läsng från ström (* readtolist f TYPE: strg -> strg list PRE: f är namnet på en fil som kan läsas POST: En lista av raderna i filen *) fun readtolist f = (* readtolistaux is TYPE: Stream -> strg list POST: En lista av återstående rader i is *) (* VARIANT: återstående rader i is *) fun readtolistaux is = if endofstream is then (closein is; []) putle is :: readtolistaux is readtolistaux (openin f) PK1&PM1 HT-04 moment 10 Sida 12 Uppdaterad

3 Termerg av rekursion vid läsng När man läser data från en ström i ett rekursivt program så bryts i allmänhet rekursionen av filslut. Man kan te veta i förväg hur många rekursiva anrop som skall ske utan att veta hur strömmen ser ut. Det vet man normalt te nan den är läst! Desutom är det prciellt omöjligt om man läser från en ström som skapas successivt (t.ex. en ström som läser från ett tangentbord.) Som rekursionsvariant kan man ange t.ex. (* VARIANT: oläst längd på strömmen is *) Om funktionen läser från is och rekursionen avslutas vid filslut. PK1&PM1 HT-04 moment 10 Sida 13 Uppdaterad Två vanliga fel... (* readtolist f TYPE: strg -> strg list PRE: f är namnet på en fil som kan läsas POST: En lista av raderna i filen *) (* VARIANT: återstående rader i f *) fun readtolist f = val is = openin f if endofstream is then [] putle is :: readtolist f) readtolist öppnar en ny ström vid varje anrop och läser därför första raden i filen om och om igen. Inga strömmar stängs någons. PK1&PM1 HT-04 moment 10 Sida 14 Uppdaterad Ett urval funktioner för utmatng (1) output(os,s) TYPE: outstream*strg -> unit SIDE-EFFECTS: Strängen s skrivs ut på strömmen os. Ett urval funktioner för utmatng (2) output1(os,c) TYPE: outstream*char -> unit SIDE-EFFECTS: Tecknet c skrivs ut på strömmen os. flushout os TYPE: outstream -> (). SIDE-EFFECTS: Skriver ut bufferten för strömmen os closeout os TYPE: outstream -> unit. SIDE-EFFECTS: Avslutar användngen av strömmen os Den byggda funktionen prt skulle kunnat defieras så här: fun prt s = (output(stdout,s);flushout stdout); PK1&PM1 HT-04 moment 10 Sida 15 Uppdaterad PK1&PM1 HT-04 moment 10 Sida 16 Uppdaterad Tillägg till beftliga filer openout skapar en ny fil eller skriver över en beftlig fil. Man kan också vilja lägga till ny formation i slutet av en beftlig fil. openappend s TYPE: strg -> outstream PRE: s skall vara namnet på en fil som går att skriva elller skapa. POST: En outstream kopplad till filen s. SIDE-EFFECTS: Filen s skapas om den te fns. Skrivngen börjar i slutet av filen. Olika anrop till openappend ger olika strömmar. Tillägg till filer "exempel Om vi har en fil testut.txt, med nehåll: Hej, Hopp I det gröna och gör: - val x = openappend "testut.txt"; > val x = <outstream> : outstream - output(x,"sade Frithiof\n"); - closeout x; så kommer testut.txt att nehålla: Hej, Hopp I det gröna sade Frithiof PK1&PM1 HT-04 moment 10 Sida 17 Uppdaterad PK1&PM1 HT-04 moment 10 Sida 18 Uppdaterad

4 I/O av annat än text Vill man mata /ut data av annan typ än strg måste man omvandla den till till/från strängar först. Omvandlgen måste man programmera själv om te byggd funktion fns (t.ex. Int.toStrg) Konverterg från strängar är besvärligt. I allmänhet har strängen olika typer av formation blandade efter varandra, t.ex: "beräkna 1+23*4 slut". Ur denna sträng skulle man vilja få: strängen "beräkna", ta 1, tecknet +, ta 23, tecknet *, ta 4, och strängen "slut". Dessutom vill man kanske ha 1+23*4 representerat som ett träd! Detta problem kallas syntaxanalys eller parsng. Parsng behandlas i senare kurser. PK1&PM1 HT-04 moment 10 Sida 19 Uppdaterad Metodik för utvecklg av program med i/o Tänk noga på i vilken ordng saker och tg utförs Försök dela upp programmet i en del som utför all /utmatng och en annan del som te alls utför någon i/o. Testa alla data som läses lita te på att de är riktiga! För teraktiva program (program som arbetar i dialog med en användare) bör man dessutom tänka på: Programmet får te kunna avbrytas pga fel så att användaren förlorar data. Tänk igenom dialogen med användaren strukturera programmet efter den. PK1&PM1 HT-04 moment 10 Sida 20 Uppdaterad En kalkylator i ML Skriv en enkel fyrfunktionskalkylator i ML! Den skall läsa ett tal, en operation och ett tal till och visa resultatet. Därefter skall man kunna utföra kedjeräkng med nya operationer och tal. Skriv ett tal: 3 Skriv ett tal: 3.5 Skriv en operation: + Skriv en operation: d Skriv ett tal: 4 Felaktig operation! Resultatet är: 7.0 Skriv en operation: / Skriv en operation: + Skriv ett tal: 0 Skriv ett tal: 5.2 Fel! Resultatet är: 12.2 Skriv ett tal: 0 Skriv en operation: c Skriv en operation: q Skriv ett tal: abc Felaktigt tal! PK1&PM1 HT-04 moment 10 Sida 21 Uppdaterad Tillståndsdiagram När man planerar programmet kan man göra ett tillståndsdiagram över dialogen. Avsluta Börja Läs ett tal Läs en operation Skriv ut resultatet Läs ett tal och beräkna Programmet skrivs som en tillståndsmask som motsvarar diagrammet. Varje tillstånd motsvaras av en funktion i programmet. PK1&PM1 HT-04 moment 10 Sida 22 Uppdaterad Programstrukturen Programkoden visas i top-down ordng med huvudfunktionerna först och hjälpfunktionerna sist. I programfilen måste funktionerna ligga i motsatt ordng eftersom en funktion måste defieras nan de används. Funktionerna i tillståndsmasken är ömsesidigt rekursiva. Programmet leds med deklarationerna: load "Real"; open TextIO; PK1&PM1 HT-04 moment 10 Sida 23 Uppdaterad Tillståndsmasken (1) (* calc x TYPE: unit -> unit SIDE-EFFECTS: Huvudfunktion i kalkylatorn *) fun calc() = readop(readnum()) (* readop x TYPE: real -> unit SIDE-EFFECTS: Läser en operation i kalkylatorn *) and readop x = (prt "Skriv en operation: " ; case putle stdin of "q\n" => () "c\n" => calc() opr => case selectop opr of SOME f => doop(x,f) NONE => (prt "Felaktig op.\n"; readop x)) PK1&PM1 HT-04 moment 10 Sida 24 Uppdaterad

5 Tillståndsmasken (2) (* doop(x,f) TYPE: real*(real*real -> real) -> unit SIDE-EFFECTS: Läser en tal och utför en operation i kalkylatorn *) and doop(x,f) = (prtresult(f(x,readnum())) handle _ => (prt "Fel!\n"; calc())) (* prtresult x TYPE: real -> unit SIDE-EFFECTS: Skriver resultat i kalkylatorn *) and prtresult x = (prt ("Resultatet är: " ^ Real.toStrg x ^ "\n"); readop x); Välj operation (* selectop x TYPE: strg -> (real*real -> real) option POST: Om x är namnet på en känd operation returneras SOME f, där f är en funktion som utför operationen. NONE annars. EXAMPLE: selectop "+\n" = SOME (op +) *) fun selectop "+\n" = SOME (op +) selectop "-\n" = SOME (op -) selectop "*\n" = SOME (op * ) selectop "/\n" = SOME (op /) selectop _ = NONE; PK1&PM1 HT-04 moment 10 Sida 25 Uppdaterad PK1&PM1 HT-04 moment 10 Sida 26 Uppdaterad Läs tal (* readnum x TYPE: unit -> real SIDE-EFFECTS: Läser från termalen POST: Ett läst flyttal *) fun readnum () = (prt("skriv ett tal: "); case Real.fromStrg (putle stdin) of SOME x => x NONE => (prt "Felaktigt tal\n"; readnum ())); PK1&PM1 HT-04 moment 10 Sida 27 Uppdaterad Återblick: gentg ändras... I ren funktionell programmerg kan man aldrig ändra någontg bara skapa nytt. Detta är en förutsättnig för att byta lika mot lika. - val x = [1,2,3,4]; > val x = [1, 2, 3, 4] : t list - rev x; > val it = [4, 3, 2, 1] : t list - x; x är oförändrad efter > val it = [1, 2, 3, 4] : t list anropet av rev x! - val y = 1; > val y = 1 : t - fun f x = x+y; > val f = fn : t -> t - val y = 2; > val y = 2 : t - f 2; f använder den gamla > val it = 3 : t bdngen av y! PK1&PM1 HT-04 moment 10 Sida 28 Uppdaterad Modifierbara celler ML ger möjlighet att skapa datastrukturer som verkligen kan ändras. ref är en datatypskonstruktor som nästan beter sig som datatype 'a ref = ref of 'a; ref 3 kallas en referens till värdet 3. (Kallas också cell, box, låda). För att komma åt refererade värden använder man funktionen! fun! (ref x) = x;!x kallas derefererg av x. Referenser kan ändras med den fixa funktionen :=: r := v TYPE: 'a ref*'a -> unit SIDE-EFFECTS: Värdet i r ändras till v. EXAMPLE: val x = ref 3;!x = 3 x := 2; Nu är!x = 2 Ingentg är säkert längre... Använder man referenser så kan man i allmänhet te längre byta lika mot lika. - val y = ref 1; > val y = ref 1 : t ref y är nu bunden till en referens till ett heltal. - val =!y; > val = 1 : t - fun f x = x+!y; Obs. blank mellan +! > val f = fn : t -> t - y := 2; - =!y; y är nu ändrad > val it = false : bool - f 2; f använder det nya > val it = 4 : t värdet! PK1&PM1 HT-04 moment 10 Sida 29 Uppdaterad PK1&PM1 HT-04 moment 10 Sida 30 Uppdaterad

6 Ändrgar kan ske bakom ryggen Anrop av funktioner med sidoeffekter kan förändra data beräkngsordngen blir kritisk. (* bump x TYPE: t ref -> t SIDE-EFFECTS: Ökar nehåller i cellen x med 1. POST: Det nya värdet av x. *) fun bump x = (x :=!x + 1;!x); - val x = ref 1; > val x = ref 1 : t ref - bump x; > val it = 2 : t -!x; > val it = 2 : t Obs att (bump x)+!x och!x+(bump x) beräknar olika värden! PK1&PM1 HT-04 moment 10 Sida 31 Uppdaterad Bdngsomgivngar och lagret Defitioner (val, fun) bder identifierare till värden. Bdngar kan aldrig ändras. Bdngsomgivngar är en samlg bdngar. Bdngsomgivngar kan skapas och försvna. Dessutom har ML ett lager (eng. store) som är en samlg celler. ref skapar celler som nehåller ett värde Innehål i celler kan ändras Lagret är en samlg celler Det fns bara ett lager och det försvner aldrig. - val y = ref 1; > val y = ref 1 : t ref y 1 PK1&PM1 HT-04 moment 10 Sida 32 Uppdaterad Likhet och olikhet hos celler - val y = ref 1; > val y = ref 1 : t ref - val y' = y; > val y' = ref 1 : t ref - y := 2; - val = ref 2; > val = ref 2 : t ref - y = y'; > val it = true : bool - y = ; > val it = false : bool y y' 2 y 1 y y' y y' PK1&PM1 HT-04 moment 10 Sida 33 Uppdaterad Referenser från celler till celler - val x = ref 1; > val x = ref 1 : t ref - val y = ref 2; x 1 > val y = ref 2 : t ref - val = ref x; y 2 x 1 > val = ref ref 1 : t ref ref x 1 - val u = ref (!x); > val u = ref 1 : t ref y 2 u 1 y 2 får typ t ref ref en pekare till en annan cell! x 1 PK1&PM1 HT-04 moment 10 Sida 34 Uppdaterad Referenser från celler till celler (forts.) x 1 -! := 3; u 1 y 2 x 3 - := y; u 1 - := ref 4; u 1 u 1 y 2 x 3 y 2 x 3 y 2 4 PK1&PM1 HT-04 moment 10 Sida 35 Uppdaterad := u; Skräpsamlg u 1 u 1 x 3 x 3 y 2 4 y 2 Cellen med värdet 4 är te åtkomlig längre den har blivit skräp. Skräp tas bort automatiskt med skräpsamlg (garbage collection). Alla sorters data i ML kan bli skräp te bara celler utan t.ex. listor men fenomenet märks kanske tydligast med celler. Tack vare skräpsamlgen fungerar det att ML-program arbetar med att ständigt konstruera nya objekt utan att någons ta bort gamla. PK1&PM1 HT-04 moment 10 Sida 36 Uppdaterad

7 Imperativ programmergsstil I imperativ programmergsstil arbetar man med att ändra nehål i celler snarare än bda identifierare. utföra beräkngar i steg (satser) som har sidoeffekter, snarare än som uttryck. (Enkla uttryck är ofta delar av satser.) utföra upprepngar med loopar snarare än rekursion. Imperativ programmergsstil är det normala i programspråk som Pascal, C, Java... Det som kallas variabler i dessa språk är normalt namngivna ref-celler. Uttryck av ref-typ i ML motsvarar Lvalues i C alltså något som kan tilldelas ett värde. C och andra imperativa språk derefererar (utför!-operationen på) variabler automatiskt när det behövs. PK1&PM1 HT-04 moment 10 Sida 37 Uppdaterad Ett imperativt program (* abssqrt x TYPE: real->real POST: Kvadratroten av absolutbeloppet av x. *) fun abssqrt(x) = val x' = ref x if!x' < 0.0 then x' := ~ (!x') () ; < ; skiljer uttryck som fungerar som satser. Math.sqrt(!x') PK1&PM1 HT-04 moment 10 Sida 38 Uppdaterad Loopar En loop upprepar ett uttryck (sats). while e1 do e2 Uttrycket e2 beräknas upprepade gånger så länge uttrycket e1 beräknas till true. Värdet av while är alltid (). Utan sidoeffekter är detta mengslöst eftersom e1 och e2 alltid skulle ge samma värden! Detta uttryck nehåller en loop som skriver ut Hej igen! 10 gånger: val i = ref 1 while!i<=10 do (prt "Hej igen!\n"; i :=!i + 1) PK1&PM1 HT-04 moment 10 Sida 39 Uppdaterad Analys av summergsproblemet (repris) Start. Låt summan vara 0. Är n=0? Nej. Ja. Addera n till summan. Subtrahera 1 från n. Stopp. Konstruktionen kallas för en loop. (Det spelar gen roll om vi adderar n eller n) PK1&PM1 HT-04 moment 10 Sida 40 Uppdaterad Imperativ summergsfunktion (* sumupto TYPE: t -> t PRE: x >= 0 POST: x *) fun sumupto x = val n = ref x val sum = ref 0 while!n > 0 do (sum :=!sum +!n; n :=!n - 1);!sum Samma funktion i funktionell variant: fun sumupto n = if n = 0 then 0 n + sumupto(n-1); PK1&PM1 HT-04 moment 10 Sida 41 Uppdaterad Imperativ genomgång av listor (* countgreater(x,g) TYPE: t list*t -> t POST: Antal element i x som är större än g *) fun countgreater(x,g) = val l = ref x val n = ref 0 while not (null(!l)) do (if hd(!l) > g then n :=!n + 1 (); l := tl(!l));!n PK1&PM1 HT-04 moment 10 Sida 42 Uppdaterad

8 countgreater imperativ och funktionell fun countgreater(x,g) = (* imperativ *) val l = ref x val n = ref 0 while not (null(!l)) do (if hd(!l) > g then n :=!n + 1 (); l := tl(!l));!n fun countgreater(l,g) = (* funktionell *) if null l then 0 (if hd l > g then 1 0) + countgreater(tl l,g) PK1&PM1 HT-04 moment 10 Sida 43 Uppdaterad Loopar och svansrekursion (* Med loop *) fun sumupto x = val n = ref x val sum = ref 0 while!n > 0 do (sum :=!sum +!n; n :=!n - 1);!sum (* Med svansrekursion *) fun sumupto x = sumuptoaux(x,0); fun sumuptoaux(n,sum) = if n > 0 then sumuptoaux(n-1,sum+n) sum PK1&PM1 HT-04 moment 10 Sida 44 Uppdaterad Arrayer För att komma åt ett element i en lista eller ett träd krävs en tidsåtgång som ökar när datastrukturen blir större. Man har ibland behov av att komma åt data i konstant tid. Nästan alla datorer har arbetsmne med sekventiellt ordnade celler där olika delar går att komma åt i konstant tid. De flesta programspråk har en datastruktur som direkt motsvarar strukturen hos mnet arrayen (vektor, fält) ~ En flyttalsarray med 6 element och deras dex. Till skillnad från en lista som består av ett antal ::-konstruktorer är en array ett objekt att komma åt alla element går alltså lika fort. Arrayer i ML Arrayer i ML defieras i biblioteket Array och liknar en abstrakt datatyp. Det är dock en likhetstyp. (Men observera att liksom hos ref så kan två arrayer vara olika även om nehål är lika!) ~ Arrayen ovan har i ML typen real array. Liksom ref-celler kan nehål i arrayer ändras. Arrayer skiljer sig från ref i prcip genom att ref är en cell, medan arrayer normalt har flera celler. PK1&PM1 HT-04 moment 10 Sida 45 Uppdaterad PK1&PM1 HT-04 moment 10 Sida 46 Uppdaterad Skapa arrayer Array.fromList x TYPE: 'a list -> 'a array POST: En array av samma längd som listan där cellerna i tur och ordng nehåller elementenn i listan SIDE-EFFECTS: En ny array skapas. Array.array(n,x) TYPE: t*'a -> 'a array PRE: n >= 0 POST: En array av längd n där cellerna nehåller x SIDE-EFFECTS: En ny array skapas. Använda arrayer Array.length a TYPE: 'a array -> t POST: Antal celler i arrayen a Array.sub(a,i) TYPE: 'a array*t -> 'a PRE: 0 <= i < length a POST: Innehål hos cellen med dex i om arrayen a. Array.update(a,i,x) TYPE: 'a array*t*'a -> unit PRE: 0 <= i < Array.length a SIDE-EFFECTS: I arrayen a sätts nehål i cellen med dex i till x. PK1&PM1 HT-04 moment 10 Sida 47 Uppdaterad PK1&PM1 HT-04 moment 10 Sida 48 Uppdaterad

9 Högre ordngens funktioner för arrayer Array.foldr f e a TYPE: ('a*'b->'b)->'b->'a array->'b POST: f(x1,f(x2,...f(xn,e)...)) om arrayen a nehåller elementen x1,x2,...,xn Jämför med specifikationen av foldr för listor: foldr f e l TYPE: ('a*'b->'b)->'b->'a list->'b POST: f(x1,f(x2,...f(xn,e)...)) om l=[x1,x2,...,xn] Array.foldr kan användas för att defiera en funktion tolist som är bra att ha för att se hur arrayer ser ut. (* tolist a TYPE: 'a array -> 'a list POST: En lista av elementen i arrayen a. *) fun tolist a = Array.foldr (op ::) [] a; Exempel på arrayfunktioner - val a = Array.fromList [10,20,30,40]; > val a = <array> : t array - tolist a; > val it = [10, 20, 30, 40] : t list - Array.length a; > val it = 4 : t - Array.sub(a,3); > val it = 40 : t - Array.update(a,2,42); - tolist a; > val it = [10, 20, 42, 40] : t list - val b = Array.array(3,0); > val b = <array> : t array - tolist b; > val it = [0, 0, 0] : t list PK1&PM1 HT-04 moment 10 Sida 49 Uppdaterad PK1&PM1 HT-04 moment 10 Sida 50 Uppdaterad Summera elementen i en flyttalsarray Funktionellt: (* sumarray a TYPE: real array -> real POST: Summan av elementen i a *) fun sumarray a = (* sumarrayaux(a,i) TYPE: real array*t -> real POST: Summan av elementen i a fr.o.m. elementet med dex i *) fun sumarrayaux(a,i) = if i >= Array.length a then 0.0 Array.sub(a,i) + sumarrayaux(a,i+1) sumarrayaux(a,0) PK1&PM1 HT-04 moment 10 Sida 51 Uppdaterad Summera elementen i en flyttalsarray Imperativt: (* sumarray a TYPE: real array -> real POST: Summan av elementen i a *) fun sumarray a = val sum = ref 0.0 val i = ref 0 while!i < Array.length a do (sum :=!sum + Array.sub(a,!i); i :=!i + 1);!sum Bekvämt: fun sumarray a = Array.foldr (op +) 0.0 a PK1&PM1 HT-04 moment 10 Sida 52 Uppdaterad

Referentiell transparens. Programkonstruktion. Moment 10 Om sidoeffekter In/utmatning och imperativ programmering. Sidoeffekter.

Referentiell transparens. Programkonstruktion. Moment 10 Om sidoeffekter In/utmatning och imperativ programmering. Sidoeffekter. Programkonstruktion Moment 10 Om sidoeffekter In/utmatng och imperativ programmerg Referentiell transparens I ren funktionell programmerg kan man byta lika mot lika utan att programmets funktion ändras.

Läs mer

Programkonstruktion. Moment 11 Om sidoeffekter In/utmatning och imperativ programmering. PKD 2011/12 moment 11 Sida 1 Uppdaterad

Programkonstruktion. Moment 11 Om sidoeffekter In/utmatning och imperativ programmering. PKD 2011/12 moment 11 Sida 1 Uppdaterad Programkonstruktion Moment 11 Om sidoeffekter In/utmatning och imperativ programmering PKD 2011/12 moment 11 Sida 1 Uppdaterad 2012-01-30 Referentiell transparens I ren funktionell programmering kan man

Läs mer

"Referentiell transparens"

Referentiell transparens "Referentiell transparens" Hittills har jag beskrivit körningen av ML-program genom att uttryck ersätts med sina värden: fun fact(0) = 1 fact(n) = n*fact(n-1) fact(3) ~> 3*fact(3-1) ~> 3*fact(2) ~> 3*(2*fact(2-1))

Läs mer

SI-möte #10, Programkonstruktion och Datastrukturer

SI-möte #10, Programkonstruktion och Datastrukturer SI-möte #10, Programkonstruktion och Datastrukturer Lösngsförslag Elias Castegren & Kristia Ausmees elca7381@student.uu.se krau6498@student.uu.se 1. (* prtlist(l) TYPE: strg list -> unit PRE: () POST:

Läs mer

Programkonstruktion. Tentamen,

Programkonstruktion. Tentamen, Programkonstruktion (Programmeringsmetodik DV1) Tentamen, 2009-08-24 Lars-Henrik Eriksson Institutionen för informationsteknologi Uppsala Universitet Tid: 14:00-19:00. Börja med att läsa igenom alla frågorna

Läs mer

Programmeringsmetodik DV1, Programkonstruktion del 1 Tentamen,

Programmeringsmetodik DV1, Programkonstruktion del 1 Tentamen, Programmeringsmetodik DV1, Programkonstruktion del 1 Tentamen, 2007-08-21 Lars-Henrik Eriksson Institutionen för informationsteknologi Uppsala Universitet Tid: 0900-14:00. Börja med att läsa igenom alla

Läs mer

Programkonstruktion. Tentamen,

Programkonstruktion. Tentamen, Programkonstruktion (Programmeringsmetodik DV1) Tentamen, 2008-03-10 Lars-Henrik Eriksson Institutionen för informationsteknologi Uppsala Universitet Tid: 0900-14:00. Börja med att läsa igenom alla frågorna

Läs mer

Programkonstruktion. Tentamen,

Programkonstruktion. Tentamen, Programkonstruktion (Programmeringsmetodik DV1) Tentamen, 2008-06-12 Lars-Henrik Eriksson Institutionen för informationsteknologi Uppsala Universitet Tid: 0900-14:00. Börja med att läsa igenom alla frågorna

Läs mer

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 4 Om rekursion. PK1&PM1 HT-06 moment 4 Sida 1 Uppdaterad

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 4 Om rekursion. PK1&PM1 HT-06 moment 4 Sida 1 Uppdaterad Programmeringsmetodik DV1 Programkonstruktion 1 Moment 4 Om rekursion PK1&PM1 HT-06 moment 4 Sida 1 Uppdaterad 2006-10-17 Summera godtyckligt antal tal (* sumupto n Type: int->int Pre: n >= 0, n

Läs mer

Former av rekursion. Programkonstruktion. Moment 5 Mera om rekursion. Fakultetsfunktionen. Största gemensamma delare (repris!

Former av rekursion. Programkonstruktion. Moment 5 Mera om rekursion. Fakultetsfunktionen. Största gemensamma delare (repris! Programkonstruktion Moment 5 Mera om rekursion Former av rekursion enkel rekursion ett rekursivt anrop. fullständig rekursion argumenten (varianten) kan mska olika många steg i det rekursiva anropet. multipel

Läs mer

DD1361 Programmeringsparadigm. Carina Edlund

DD1361 Programmeringsparadigm. Carina Edlund DD1361 Programmeringsparadigm Carina Edlund carina@nada.kth.se Funktionell programmering Grundidéen med funktionell programmering är att härma matematiken och dess funktionsbegrepp. Matematiskt funktionsbegrepp

Läs mer

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 9 Om högre ordningens funktioner. PK1&PM1 HT-06 moment 9 Sida 1 Uppdaterad

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 9 Om högre ordningens funktioner. PK1&PM1 HT-06 moment 9 Sida 1 Uppdaterad Programmeringsmetodik DV1 Programkonstruktion 1 Moment 9 Om högre ordningens funktioner PK1&PM1 HT-06 moment 9 Sida 1 Uppdaterad 2006-09-06 Anonyma funktioner igen En funktion som inte är namngiven kallas

Läs mer

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd Programmeringsmetodik DV1 Programkonstruktion 1 Moment 8 Om abstrakta datatyper och binära sökträd PK1&PM1 HT-06 moment 8 Sida 1 Uppdaterad 2005-09-22 Tabeller En viktig tillämpning är tabellen att ifrån

Läs mer

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära

Läs mer

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2010/11 moment 9 Sida 1 Uppdaterad

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2010/11 moment 9 Sida 1 Uppdaterad Programkonstruktion och datastrukturer Moment 9 Om högre ordningens funktioner PKD 2010/11 moment 9 Sida 1 Uppdaterad 2010-12-02 Anonyma funktioner igen En funktion som inte är namngiven kallas för en

Läs mer

Så fungerar en dator

Så fungerar en dator Så fungerar en dator Mental bild av en dator Hårdvarumodell av en dator 1 (10) Vad är en dator? En dator är en digital elektronisk mask, och består av tre huvudkomponenter: processor,, enheter för - och

Läs mer

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201) Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201) Lars-Henrik Eriksson Fredag 5 april 2013, kl 14:00 17:00, i Polacksbackens skrivsal Hjälpmedel: Inga. Inte heller elektronisk

Läs mer

Föreläsning 6: Introduktion av listor

Föreläsning 6: Introduktion av listor Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.

Läs mer

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen Programkonstruktion Moment 8 Om abstrakta datatyper och binära sökträd Tabeller En viktig tillämpning är tabellen att ifrån en nyckel kunna ta fram ett tabellvärde. Ett typiskt exempel är en telefonkatalog:

Läs mer

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek De åtta primitiva typerna Java, datatyper, kontrollstrukturer Skansholm: Kapitel 2) Uppsala Universitet 11 mars 2005 Typ Innehåll Defaultvärde Storlek boolean true, false false 1 bit char Tecken \u000

Läs mer

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic

Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Inledning Starta Microsoft Visual Studio 2005. Välj create Project Välj VB + Vindows Application och välj ett nytt

Läs mer

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2011/12 moment 9 Sida 1 Uppdaterad

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2011/12 moment 9 Sida 1 Uppdaterad Programkonstruktion och datastrukturer Moment 9 Om högre ordningens funktioner PKD 2011/12 moment 9 Sida 1 Uppdaterad 2012-01-15 Anonyma funktioner igen En funktion som inte är namngiven kallas för en

Läs mer

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Introduktion till formella metoder Programmeringsmetodik 1. Inledning Introduktion till formella metoder Programmeringsmetodik 1. Inledning Fokus på imperativa program (ex. C, Java) program betyder härefter ett imperativt program Program bestäms i en abstrakt mening av hur

Läs mer

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Specifikationer för tabellfunktionerna. Operationer på tabellen Programkonstruktion Moment 8 Om abstrakta datatyper och binära sökträd Tabeller En viktig tillämpning är tabeller att ifrån en nyckel kunna ta fram ett tabellvärde. Ett typiskt exempel är en telefonkatalog:

Läs mer

i LabVIEW. Några programmeringstekniska grundbegrepp

i LabVIEW. Några programmeringstekniska grundbegrepp Institutionen för elektroteknik Några programmeringstekniska grundbegrepp 1999-02-16 Inledning Inom datorprogrammering förekommer ett antal grundbegrepp som är i stort sett likadana oberoende om vi talar

Läs mer

LÖSNINGSFÖRSLAG TENTAMEN PROGRAMMERING I ETT FUNKTIONELLT SPRÅK ML, 5P

LÖSNINGSFÖRSLAG TENTAMEN PROGRAMMERING I ETT FUNKTIONELLT SPRÅK ML, 5P UMEÅ UNIVERSITET Datavetenskap 020321 Betygsgränser 0 19,5 U 20 25,5 3 26 31,5 4 32-40 5 LÖSNINGSFÖRSLAG TENTAMEN 020321 PROGRAMMERING I ETT FUNKTIONELLT SPRÅK ML, 5P Uppgift 1(3+2=5 poäng) I denna uppgift

Läs mer

Erfarenheter från labben

Erfarenheter från labben Erfarenheter från labben Bra Jobbat! Lite ont om plats... Parprogrammering? Skillnad mellan program och funktion! Skillnad mellan uttryck och kommando! Välj bra variabelnamn! Vad göra om det blir fel?

Läs mer

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk

Läs mer

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning Dagens Agenda String [] argv String [] argv Arrayer och Strängar fortsättning Booleska operatorer if, for, while satser Introduktion till algoritmer public static void main(string [] argv) argv är variabelnamnet

Läs mer

Funktionell programmering DD1361

Funktionell programmering DD1361 Funktionell programmering DD1361 Tupler Två eller fler (men ändligt) antal element. Elementen kan vara av olika typer. Ex: (1,2) :: (Integer, Integer) (( 2, hejsan ), True) ::? Tupel med två element ->

Läs mer

Klassdeklaration. Metoddeklaration. Parameteröverföring

Klassdeklaration. Metoddeklaration. Parameteröverföring Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar

Läs mer

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada Datastrukturer Vad är en datastruktur? Vad är en datatyp? Primitiva datatyper i Java Icke-primitiva datatyper i Java Minnesexempel med datastrukturer Vektorer i Java Erik Forslin efo@nada.kth.se Rum 1445,

Läs mer

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python. är, som Scheme, ett interpreterat språk men det finns kompilatorer för. När man interpreterar ett språk tillhandahåller man en interpretator som läser sats för sats och försöker tolka den. När man kompilerar

Läs mer

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2

Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2 Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2 Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok,

Läs mer

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer

Läs mer

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad 1 Datatyper Tobias Wrigstad Det finns flera olika typer av (slags) data Olika datatyper har olika egenskaper. T.ex. är ett personnummer inte ett tal. (Den sista siffran skall stämma enligt den s.k. Luhnalgoritmen

Läs mer

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011,

Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1. Måndagen den 10 januari 2011, Programmering, grundkurs, 8.0 hp HI1024, HI1900 etc., Tentamen TEN1 Måndagen den 10 januari 2011, 8.15 12.15 Tentamen består av två delar, del A och del B. Del A innehåller 10 kryssfrågor på olika teman

Läs mer

Inledande programmering med C# (1DV402) Summera med while"-satsen

Inledande programmering med C# (1DV402) Summera med while-satsen Summera med while"-satsen Upphovsrätt för detta verk Inledande programmering med C# (1DV402) Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får

Läs mer

Övning från förra gången: readword

Övning från förra gången: readword (9 september 2010 T4.1 ) Övning från förra gången: readword /** readword.c * * int readword(char w[], int n) { * * Läser tecken tills en bokstav påträffas. * Läser och lagrar sedan högst n-1 bokstäver

Läs mer

Beräkningsvetenskap föreläsning 2

Beräkningsvetenskap föreläsning 2 Beräkningsvetenskap föreläsning 2 19/01 2010 - Per Wahlund if-satser if x > 0 y = 2 + log(x); else y = -1 If-satsen skall alltid ha ett villkor, samt en då det som skall hända är skrivet. Mellan dessa

Läs mer

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall Rekursiva funktioner Föreläsning 10 (Weiss kap. 7) Induktion och rekursion Rekursiva funktioner och processer Weiss 7.1-3 (7.4, 7.5.3 utgår) Fibonaccital (7.3.4) Exempel: Balansering av mobil (kod se lab

Läs mer

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1) Föreläsning 10 STRING OCH STRINGBUILDER; VARIABLERS SYNLIGHET Att deklarera och att använda variabler När vi deklarerar en variabel, t ex int x; inför vi en ny variabel med ett namn och en typ. När namnet

Läs mer

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Diskutera Vad gör programmet programmet? Föreslå

Läs mer

kl Tentaupplägg

kl Tentaupplägg Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer

Läs mer

Webbsidor och webbservrar

Webbsidor och webbservrar Webbsidor och webbservrar Server HTTP-protokollet Dokument (t.ex. HTML kod) Klient URL (t.ex. länk) Normal funktion hos webben: Användaren klickar på länk eller anger URL på annat sätt. Servern lokaliserar

Läs mer

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur Imperativ programmering konstruktioner i Lisp Imperativ programmering I den imperativa programmeringen skriver vi program satsvist. Datastrukturer (kap.-.) aystruktur poststruktur Iterativa uttryck (avs.)

Läs mer

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Typsystem. Typsystem... Typsystem... Typsystem... 2 * Typsystem Typsystem finns i alla programmeringsspråk. Avsikten med typsystem är att kontrollera att uttryck är säkra i den bemärkelsen att innebörden i operanderna är klar och inte är motsägelsefull och

Läs mer

Programkonstruktion och datastrukturer. Formell verifiering eller hur man bevisar att program gör rätt utan att testa dem

Programkonstruktion och datastrukturer. Formell verifiering eller hur man bevisar att program gör rätt utan att testa dem Programkonstruktion och datastrukturer Formell verifiering eller hur man bevisar att program gör rätt utan att testa dem PKD 2012/13 Formell verifiering Sida 1 Uppdaterad 2008-11-28 Formell verifiering:

Läs mer

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19 Typsystem Typsystem finns i alla programmeringsspråk. Avsikten med typsystem är att kontrollera att uttryck är säkra i den bemärkelsen att innebörden i operanderna är klar och inte är motsägelsefull och

Läs mer

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering. EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.aelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

Läs mer

Tentamen TEN1 HI1029 2014-05-22

Tentamen TEN1 HI1029 2014-05-22 Tentamen TEN1 HI1029 2014-05-22 Skrivtid: 8.15-13.00 Hjälpmedel: Referensblad (utdelas), papper (tomma), penna Logga in med tentamenskontot ni får av skrivvakten. Det kommer att ta tid att logga in ha

Läs mer

Imperativ programmering. Föreläsning 2

Imperativ programmering. Föreläsning 2 Imperativ programmering 1DL126 3p Föreläsning 2 Imperativ programmering Kännetecken för imperativa språk: Programmet består av en serie instruktioner. Olika språk har olika uppsättningar av instruktioner.

Läs mer

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python Repetition i Python 3 Exemplen fac Orginalet I Scheme använde vi rekursion för all slags repetition. Efterom Scheme är ett funktionellt språk återsänder alla språkkonstruktioner ett värde men i Python

Läs mer

Övning2. Variabler. Data typer

Övning2. Variabler. Data typer Vahid 28 okt 2002 prgk02 Övning2 -Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =, ,!=,!) -String hur man

Läs mer

[] Arrayer = Indexerad variabel

[] Arrayer = Indexerad variabel [] Arrayer = Indexerad variabel Lagra många värden i en variabel Jmfr inom matematiken, variabler x 0, x 1, x 2, I detta dokument tas upp hur man skapar och hanterar sådana variabler i java. Dessa kallas

Läs mer

Språket Python - Del 1 Grundkurs i programmering med Python

Språket Python - Del 1 Grundkurs i programmering med Python Hösten 2009 Dagens lektion Ett programmeringsspråks byggstenar Några inbyggda datatyper Styra instruktionsflödet Modulen sys 2 Ett programmeringsspråks byggstenar 3 ETT PROGRAMMERINGSSPRÅKS BYGGSTENAR

Läs mer

Korsordlösare Sara Hedbrandh Strömberg Programkonstruktion VT 10 Inlämninsguppgift

Korsordlösare Sara Hedbrandh Strömberg Programkonstruktion VT 10 Inlämninsguppgift Sara Hedbrandh Strömberg Programkonstruktion VT 10 Inlämninsguppgift 1.Inledning 1.2 Sammanfattning 1.3 Programmet Användarbeskrivning 2.1 Lösa korsordet 2.2 Körexempel Programdokumentation 3.1 Abstrakta

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning Varför? 732G11 Linköpings universitet 2011-02-08 Varför? 1 2 3 Varför? 4 5 Medelvärde av 5000 tal Varför? while-loopen int nrofints = 5000; int [] integers = new int [ nrofints ]; int pos = 0; while (

Läs mer

Visual Basic, en snabbgenomgång

Visual Basic, en snabbgenomgång Visual Basic, en snabbgenomgång Variabler och Datatyper En variabel är som en behållare. Olika behållare passar bra till olika saker. I Visual Basic(härefter VB) finns olika typer av behållare för olika

Läs mer

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner

Läs mer

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata.

Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Att förstå variabler Alla datorprogram har en sak gemensam; alla processerar indata för att producera något slags resultat, utdata. Vad är en variabel? En variabel är en plats att lagra information. Precis

Läs mer

Exempeltenta GruDat 2002/2003

Exempeltenta GruDat 2002/2003 Exempeltenta GruDat 2002/2003 Endast ett svarsalternativ på varje fråga är korrekt. Felaktigt svar eller felaktigt antal ikryssade svarsalternativ ger noll poäng på uppgiften. Obs: Den riktiga tentan kommer

Läs mer

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling metoder Föreläsning 2 Objektorienterad programmering DD1332 Array [modifierare] String metodnamn (String parameter) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String 1 De får man

Läs mer

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv

Datorlära 6. Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv Datorlära 6 Arbeta med strängar Inmatning med tangentbordet Bygga ett program med inmatning, funktioner, osv 1 Arbeta med Strängar Strängar skapas med text inom citattecken, enkla eller dubbla.!>> str=

Läs mer

Programmering I Tobias Wrigstad fredag, 2009 augusti 28

Programmering I Tobias Wrigstad fredag, 2009 augusti 28 Programmering I Tobias Wrigstad tobias@dsv.su.se Vad är programmering? Lågnivåspråk och högnivåspråk Kompilering och interpretering Variabler Notation för flödesschema (flow chart) Kontrollstrukturer (conditionals,

Läs mer

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00

Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00 1 ( 7) Uppgifter till tenta i 729G04 Programmering och diskret matematik. 17 december 2015, kl 14:00-18:00 Tillåtna hjälpmedel: Dator, penna, papper, linjal, suddgummi, godkänd(a) bok/böcker/kompendier

Läs mer

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C. Idag Javas datatyper, arrayer, referenssemantik Klasser Arv, polymorfi, typregler, typkonvertering Strängar Tänker inte säga nåt om det som är likadant som i C. Objectorienterad programmering Sida 1 Ett

Läs mer

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll. EDAA20 Programmering och databaser Mål komprimerat se kursplanen för detaljer Läsperiod 1 7.5 hp anna.axelsson@cs.lth.se http://cs.lth.se/edaa20 Mer information finns på kursens webbsida samt på det utdelade

Läs mer

Grundläggande datalogi - Övning 1

Grundläggande datalogi - Övning 1 Grundläggande datalogi - Övning 1 Björn Terelius October 30, 2008 Python är ett tolkat språk som kan köras interaktivt. tcs-ray:~/grudat08>python >>> 11+3*4 23 >>> a = 15 >>> b=a >>> print "a =", a, "b

Läs mer

Programmering A. Johan Eliasson johane@cs.umu.se

Programmering A. Johan Eliasson johane@cs.umu.se Programmering A Johan Eliasson johane@cs.umu.se 1 Jag Undervisar mest grundläggande programmering på Institutionen för datavetensakap Applikationsutveckling för iphone Applikationsutveckling i Java Datastrukturer

Läs mer

Deklarationer/definitioner/specifikationer

Deklarationer/definitioner/specifikationer Deklarationer/definitioner/specifikationer Konstantdefinitioner innebär att ett namn binds och sätts att referera till ett värde som beräknas vid kompileringen/interpreteringen och som under programmets

Läs mer

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java (Man brukar säga att) Java är... Denna föreläsning Allmänt om Java Javas datatyper, arrayer, referenssemantik Klasser Strängar enkelt baserat på C/C++ objekt-orienterat från början dynamiskt utbyggbart

Läs mer

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs

Datalogi I, grundkurs med Java 10p, 2D4112, Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera förs Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Fiktiv tentamen, svar och lösningar och extra kommentarer till vissa uppgifter 1a) Dividera först talet 37 med 2. Använd heltalsdivision. Det ger kvoten

Läs mer

TDDE44 Programmering, grundkurs

TDDE44 Programmering, grundkurs TDDE44 Programmering, grundkurs Föreläsning 5 Jody Foo, jody.foo@liu.se Föreläsning 5 & 6 Laboration 3: En egen pokedex data från webben Ny datatyp: dictionary Mer om dataabstraktion Nästlade datastrukturer

Läs mer

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner Lektion 4, del 1, kapitel 10 Funktioner i JavaScript Inlärningsmål Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner Introduktion

Läs mer

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2 Anders Haraldsson 1 Anders Haraldsson 2 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.) - Iteratorer

Läs mer

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34 Tentamen Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Lördagen den 30 november 2002 kl 9.00 14.00, salar E33, E34 Inga hjälpmedel 30 poäng ger säkert godkänt, 40 poäng ger betyg 4 50 poäng ger

Läs mer

Tentamen *:58/ID100V Programmering i C Exempel 3

Tentamen *:58/ID100V Programmering i C Exempel 3 DSV Tentamen *:58/ID100V Sid 1(5) Tentamen *:58/ID100V Programmering i C Exempel 3 Denna tentamen består av fyra uppgifter som tillsammans kan de ge maximalt 22 poäng. För godkänt resultat krävs minst

Läs mer

Datalogi för E Övning 3

Datalogi för E Övning 3 Datalogi för E Övning 3 Mikael Huss hussm@nada.kth.se AlbaNova, Roslagstullsbacken 35 08-790 62 26 Kurshemsida: http://www.csc.kth.se/utbildning/kth/kurser/2d1343/datae06 Dagens program Att skapa egna

Läs mer

Dagens föreläsning Programmering i Lisp Fö 5

Dagens föreläsning Programmering i Lisp Fö 5 Anders Haraldsson 1 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.3) - Iteratorer - Egenskaper

Läs mer

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige Är varje påstående som kan formuleras matematiskt*) alltid antingen sant eller falskt? *) Inom Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige Exempel: 12 = 13 nej, falskt n! >

Läs mer

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner 732G11 Linköpings universitet 2011-01-21 1 2 3 4 5 6 Skapa program Kompilera: Källkod Kompilator bytekod Köra: Bytekod Virtuell maskin Ett riktigt program Hej.java class Hej { public static void main (

Läs mer

Objektorienterad programmering D2

Objektorienterad programmering D2 Objektorienterad programmering D2 Laboration nr 2. Syfte Att få förståelse för de grundläggande objektorienterade begreppen. Redovisning Källkoden för uppgifterna skall skickas in via Fire. För senaste

Läs mer

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 1 & 2 INTRODUKTION Föreläsning 1 & 2 INTRODUKTION Denna föreläsning Vad händer under kursen? praktisk information Kursens mål vad är programmering? Skriva små program i programspråket Java Skriva program som använder färdiga

Läs mer

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList. Institutionen för Datavetenskap Göteborgs universitet HT2009 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Föreläsning 3 Innehåll Lite om felhantering och Exceptions Mer om variabler och parametrar

Läs mer

Laboration: Whitebox- och blackboxtesting

Laboration: Whitebox- och blackboxtesting Tilda11 höstterminen 2011 Laboration: Whitebox- och blackboxtesting Mål med laborationen Du ska lära dig begreppen white-box testing och black-box testing Du ska öva dig på att konstruera testfall Du ska

Läs mer

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem. Omgivningar Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem. (define (sqrroot c) (define (fixpoint guess c eps) (define

Läs mer

Hur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Hur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap Hur man programmerar TDDC66 Datorsystem och programmering Föreläsning 3 Peter Dalenius Institutionen för datavetenskap 2014-09-05 Översikt Problemlösning: Hur ska man tänka? Datatyper Listor (forsätter

Läs mer

F6: Högre ordningens funktioner. Mönster för rekursion (1) Mönster för rekursion (1b) Mönster för rekursion (2) Högre Ordningens Funktioner

F6: Högre ordningens funktioner. Mönster för rekursion (1) Mönster för rekursion (1b) Mönster för rekursion (2) Högre Ordningens Funktioner F6: Högre ordningens funktioner Mönster för rekursion (1) Mönster för rekursion Partiellt applicerbara funktioner Anonyma funktioner Op HOF på listor Sortering Listreduktion Funktionskomposition Rekursivt

Läs mer

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner Introduktion till programmering D0009E Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner

Läs mer

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER Från laboration 3 till 4 I laboration 3 har du implementerat klasser implementerat metoder i klasserna I laboration 4 kommer du att implementera

Läs mer

kl Tentaupplägg

kl Tentaupplägg Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer

Läs mer

Föreläsning 13. Rekursion

Föreläsning 13. Rekursion Föreläsning 13 Rekursion Rekursion En rekursiv metod är en metod som anropar sig själv. Rekursion används som alternativ till iteration. Det finns programspråk som stödjer - enbart iteration (FORTRAN)

Läs mer

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen Tentamen för teknisk kemi, 10p, moment 1 29 november 1999 Skrivtid 9-15 Hjälpmedel: av följande böcker. - U. Bilting och J. Skansholm: Vägen till C - A. Kelley & I. Pohl: A Book on C Maxpoäng: Gräns för

Läs mer

4 Sammansatta datatyper

4 Sammansatta datatyper 4 Sammansatta datatyper De enkla datatyper som vi hittills använt är otillräckliga när man ska hantera stora datamängder. Vill man exempelvis läsa in 100 reella mätvärden, som man tillfälligt vill spara

Läs mer

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom: 6 Rekursion 6.1 Rekursionens fyra principer Problem löses genom: 1. förenkling med hjälp av "sig själv". 2. att varje rekursionssteg löser ett identiskt men mindre problem. 3. att det finns ett speciellt

Läs mer

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen C++ Funktioner 1 Teori När programmen blir större och mer komplicerade är det bra att kunna dela upp programmet i olika delar som gör specifika saker, vilket kan göra programmet mer lättläst. Ett sätt

Läs mer

Användarhandledning Version 1.2

Användarhandledning Version 1.2 Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...

Läs mer