Referentiell transparens. Programmeringsmetodik DV1 Programkonstruktion 1. Moment 10 Om sidoeffekter In/utmatning och imperativ programmering
|
|
- Maj Emilia Olofsson
- för 8 år sedan
- Visningar:
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.
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 merProgramkonstruktion. 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" 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 merSI-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 merProgramkonstruktion. 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 merProgrammeringsmetodik 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 merProgramkonstruktion. 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 merProgramkonstruktion. 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 merProgrammeringsmetodik 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 merFormer 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 merDD1361 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 merProgrammeringsmetodik 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 merProgrammeringsmetodik 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 merProgrammera 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 merProgramkonstruktion 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 merSummera godtyckligt antal tal. Programkonstruktion. Moment 4 Om rekursion. Fullständigt resonemang för summeringen. Analys av summeringsproblemet
Summera godtyckligt antal tal Programkonstruktion Moment 4 Om rekursion Pre: n >=, n
Läs merSå 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 merOmtentamen (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 merFö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 merTabeller. 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 merDatatyper 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 merLabb 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 merProgramkonstruktion 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 merIntroduktion 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 merTabeller. 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 meri 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 merLÖ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 merErfarenheter 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 merKompilering 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 merString [] 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 merFunktionell 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 merKlassdeklaration. 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 merPython. 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 merDatastrukturer. 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 merPython. 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 merInstruktioner - 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 merFö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 merFö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 merProgrammering, 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 merInledande 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
(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 merBerä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 merSCB :-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 merAtt 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 merFö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 merkl 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 merWebbsidor 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 merImperativ 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 merTypsystem. 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 merProgramkonstruktion 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 merTypsystem. 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 merEDAA20 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 merTentamen 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 merImperativ 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 merRepetition 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
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 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 merSprå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 merKorsordlö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 mer732G 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 merVisual 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 merTDIU01 - 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 merAlla 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 merExempeltenta 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 merFö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 merDatorlä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 merProgrammering 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 merUppgifter 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 merIdag. 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 merEDAA20 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 merGrundlä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 merProgrammering 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 merDeklarationer/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 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 merDatalogi 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 merTDDE44 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 merAtt 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 merUniversitetet 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 merTentamen. 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 merTentamen *: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 merDatalogi 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 merDagens 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 merBakgrund. 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 mer732G 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 merObjektorienterad 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 merFö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 merLite 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 merLaboration: 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 merOmgivningar. 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 merHur 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 merF6: 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 merIntroduktion 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 merFö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 merkl 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 merFö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 merJohan 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 mer4 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 mer6 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 merC++ 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 merAnvä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