Föreläsning 11: Rekursion
|
|
- Ellinor Ekström
- för 8 år sedan
- Visningar:
Transkript
1 TDA 545: Objektorienterad programmering Föreläsning 11: Rekursion Magnus Myréen Chalmers, läsperiod 1,
2 Idag Läsanvisning: kap 19, men bara t.o.m. sida 812 rekursion fakulteten exponentiering binary search Fibonacci 91 funktionen men också: jämförelse med iteration att mäta tid i Java roliga problem Nästa gång: problemlösning
3 Att tänka rekursivt Hur långt är tåget? Rekursivt svar: om det inte finns tågvagnar: då är dess längd 0 i övriga fall: längden är 1 + längden av resten av tåget samma fråga som ursprungligen, men med mindre indata (input)
4
5
6 Fakulteten Iterativt n! = 1 if n< n if 1 apple n public static int facit(int n) { int v = 1; for (int i=1; i<=n; i++) { v = v * i; return v; Rekursivt n! = 1 if n<1 n (n 1)! if 1 apple n
7 Induktiva definitioner använder självreferens, t.ex. En kö är antingen tom eller en person följt av en kö. n! är 1, om n är 0 eller 1, eller n (n-1)! om n är större. n! = 1 if n<1 n (n 1)! if 1 apple n Induktiva definitioner består av 1. Ett basfall 2. Ett fall där definitionen (vanligen) minskar problemets storlek och refererar till sig själv.
8 Induktionsbevis och rekusion Induction poof: to prove that a statement P(n) holds for all integers n Base case: Prove P(0) ( or P(small number)) Assumption: assume that P(n-1) is true (or P(n), P(n/2)... is ) Induction step: prove that P(n-1) implies P(n) for all n 0 Recursive computations: Base case: Solve the problem on inputs of size 0 (or 1 or some small instance) Assumption: assume you can solve the problem on input size less than n (n-1, n/2, n/4...) Induction step: Show how you can solve it also on inputs of size n for all n!1. Med stöd av detta kan problemet lösas med
9 Fakulteten (forts) Iterativt n! = 1 if n< n if 1 apple n public static int facit(int n) { int v = 1; for (int i=1; i<=n; i++) { v = v * i; return v; Rekursivt n! = 1 if n<1 n (n 1)! if 1 apple n public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1);
10 Evaluering System.out.println(fac(4)); public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1);
11 Evaluering System.out.println(fac(4)); if (4 < 1) { else { return 4 * fac(3); public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1);
12 Evaluering System.out.println(fac(4)); if (4 < 1) { else { return 4 * fac(3); if (3 < 1) { else { return 3 * fac(2); public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1);
13 Evaluering System.out.println(fac(4)); if (4 < 1) { else { return 4 * fac(3); if (3 < 1) { else { return 3 * fac(2); public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1); if (2 < 1) { else { return 2 * fac(1);
14 Evaluering System.out.println(fac(4)); if (4 < 1) { else { return 4 * fac(3); if (3 < 1) { else { return 3 * fac(2); public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1); if (2 < 1) { else { return 2 * fac(1); if (1 < 1) { else { return 1 * fac(0);
15 Evaluering System.out.println(fac(4)); if (4 < 1) { else { return 4 * fac(3); if (3 < 1) { else { return 3 * fac(2); public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1); if (2 < 1) { else { return 2 * fac(1); if (1 < 1) { else { return 1 * fac(0); 1
16 Evaluering System.out.println(fac(4)); if (4 < 1) { else { return 4 * fac(3); if (3 < 1) { else { return 3 * fac(2); public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1); if (2 < 1) { else { return 2 * fac(1); rekursionen går ner if (1 < 1) { else { return 1 * fac(0); 1
17 Evaluering System.out.println(fac(4)); if (4 < 1) { else { return 4 * fac(3); if (3 < 1) { else { return 3 * fac(2); public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1); if (2 < 1) { else { return 2 * fac(1); rekursionen kommer upp if (1 < 1) { else { return 1 * fac(0); 1
18 Evaluering System.out.println(fac(4)); if (4 < 1) { else { return 4 * fac(3); if (3 < 1) { else { return 3 * fac(2); public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1); if (2 < 1) { else { return 2 * fac(1); rekursionen kommer upp if (1 < 1) { else { return 1 * 1;
19 Evaluering System.out.println(fac(4)); if (4 < 1) { else { return 4 * fac(3); if (3 < 1) { else { return 3 * fac(2); rekursionen kommer upp public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1); if (2 < 1) { else { return 2 * 1;
20 Evaluering System.out.println(fac(4)); if (4 < 1) { else { return 4 * fac(3); if (3 < 1) { else { return 3 * 2; rekursionen kommer upp public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1);
21 Evaluering System.out.println(fac(4)); if (4 < 1) { else { return 4 * 6; rekursionen kommer upp public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1);
22 Evaluering System.out.println( 24 ); rekursionen kommer upp public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1);
23 Sammanfattning av beräkningen System.out.println(fac(4)); fac(4) = 4 * fac(3) = 4 * 3 * fac(2) = 4 * 3 * 2 * fac(1) = 4 * 3 * 2 * 1 * fac(0) = 4 * 3 * 2 * 1 * 1 = 4 * 3 * 2 * 1 = 4 * 3 * 2 = 4 * 6 = 24 public static int fac(int n) { if (n < 1) { else { return n * fac(n- 1); n! = 1 if n<1 n (n 1)! if 1 apple n
24 Ett test program public class Fac { public static int fac(int n) { if (n == 0) { else { return n * fac(n- 1) ; public static void main(string[] args) { System.out.println("fac(1) = " + fac(1)); System.out.println("fac(4) = " + fac(4)); System.out.println("fac(20) = " + fac(20)); Utskrift: fac(1) = 1 fac(4) = 24 fac(20) = umm Vad hände här? svar: värdet blev för stort. Obs. overflow har inget med rekursionen att göra.
25 Vi kan använda BigInteger import java.math.biginteger; public class BigFac { public static BigInteger fac(biginteger n) { if (n.equals(biginteger.zero)) { return BigInteger.ONE; else { return n.multiply(fac(n.subtract(biginteger.one))); public static void main(string[] args) { System.out.println("fac(1) = " + fac(new BigInteger("1"))); System.out.println("fac(4) = " + fac(new BigInteger("4"))); System.out.println("fac(20) = " + fac(new BigInteger("20"))); System.out.println("fac(50) = " + fac(new BigInteger("50"))); Utskrift: fac(1) = 1 fac(4) = 24 fac(20) = fac(50) =
26 Uppgift Skriv ett program som beräknar hur många nollor det finns i ett decimal tal. Idé: I ett negativ tal finns det like många nollor som i motsvarande positiva tal. Om talet är 0, finns det en nolla i talet. Om talet är positivt och < 10, finns det ingen nolla. I övriga fall, dvs. positivt och > 10 om talet mod 10 är 0, då finns det en nolla + nollorna i talet / 10 annars: nollorna i talet / 10
27 Lösning public class Z { public static int k(int n) { if (n < 0) { return k(0 - n); else if (n == 0) { else if (n < 10) { return 0; else if (n % 10 == 0) { return 1 + k(n / 10); else { return k(n / 10); public static void main(string[] args) { System.out.println("nollor(- 1050) = " + k(- 1050));
28 Uppgift Skriv en rekursiv metod som vänder om en sträng, dvs rev( Hello ) bör bli "olleh". public static String rev(string str) { if (str.length() == 0) { return str; else { return rev(str.substring(1)) + str.substring(0,1); Ofta går det att skriva om rekursionen som en iterativa metod men inte alltid.
29 Några animationer h"#://impedagog..com/wp/wp- content/uploads/2014/08/recursionelevator.gif h"#://i.imgbr.com/p1chi6u.gif h"#://media.giphy.com/media/vlng6lokeurfg/giphy.gif
30 Roligt med rekursion Vad räknar McCarthy s funktion m? m(n) = n 10 if n>100 m(m(n + 11)) if n apple 100 Samma i Java: public static int m(int n) { if (n > 100) { return n - 10; else { return m(m(n + 11));
31 McCarthy s funktion public class M { public static int m(int n) { if (n > 100) { return n - 10; else { return m(m(n + 11)); public static void main(string[] args) { for (int j=0; j<100; j++) { System.out.println("m(" + j + ") = " + m(j)); Detta är McCarthy s 91 funktion. h"#://en.wikipedia.org/wiki/mccarphy_91_fbnction Varför blir det 91? Utskrift: m(0) = 91 m(1) = 91 m(2) = 91 m(3) = 91 m(4) = 91 m(5) = 91 m(6) = 91 m(7) = 91 m(8) = 91 m(9) = 91 m(10) = 91 m(11) = 91 m(12) = 91 m(13) = 91 m(14) = 91 m(15) = 91 m(16) = 91 m(17) = 91 m(18) = 91 m(99) = 91
32 Slutar beräkningen? Ibland blir input större inför rekursionen. t(n) = ( 1 if n =1 t(3 n + 1) if n is odd t(n/2) if n is even Samma i Java: public class T { public static int t(int n) { System.out.print(n + " "); if (n < 1) { System.exit(1); if (n == 1) { else if (n % 2 == 1) { return t(3 * n + 1); else { return t(n / 2); public static void main (String[] args) { t(integer.parseint(args[0])); Utskrift: $ javac T.java $ java T Koden var i upp vid 9232!
33 Slutar beräkningen? Ibland blir input större inför rekursionen. t(n) = ( 1 if n =1 t(3 n + 1) if n is odd t(n/2) if n is even Slutar beräkningen för alla utgångsvärden av n? Svar: ingen vet! Det är en open research question Vi kan testa litegrann men hur vet vi att räkningen slutar för alla input? (Bör göras med BigInteger.)
34 Flera animationer h"#s://i.chzbgu.com/maxw500/ /h2e032a91/ h"#://d5lx5634mkgoi.cloud]ont.net/wp- content/uploads/2010/02/slide190.gif h"#://33.media.tbmblr.com/ fc0a ef96e7c_e7/tbmblr_moltlz3owo1qz
35 Lite mera seriöst igen
36 Beräkna exp Att beräkna x n : Iterativt, idé x n = x x... x public static double power1(double x, int n) { double tmp = 1.0; for (int i=1; i<=n; i++) { tmp = tmp * x; return tmp; multiplicerar x in i tmp, n gånger. Rekursivt, idé x n (n 1) = x x public static double power2(double x, int n) { if (n == 0) { return 1.0; else { return x * power2(x,n- 1); gör samma sak. Samma algoritm!
37 Beräkna exp (forts) Bättre rekursion? Obs: x n = x n/2 x n/2 eller ännu bättre: x n =(x x) n/2 Mera precis: x 2 n = (x x) n x 2 n+1 = (x x) n x I Java: public static double power3(double x, int n) { if (n == 0) { return 1.0; else { if (n % 2 == 0) { return power3(x * x, n / 2); else { return power3(x * x, n / 2) * x; heltalsdivision, dvs blir heltal
38 Jämförelse power2(9,3.0) = 3.0 * power2(8,3.0) = 3.0 * 3.0 * power2(7,3.0) = 3.0 * 3.0 * 3.0 * power2(6,3.0) = 3.0 * 3.0 * 3.0 * 3.0 * power2(5,3.0) = 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * power2(4,3.0) = 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * power2(3,3.0) = 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * power2(2,3.0) = 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * power2(1,3.0) = 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * power2(0,3.0) = 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 3.0 * 1.0 = power3(9,3.0) = power3(4,9.0) * 3.0 = power3(2,81.0) * 3.0 = power3(1,6561.0) * 3.0 = power3(0,6561.0) * * 3.0 = 1.0 * * 3.0 = bättre algoritm! men vilken tar längre tid att beräkna?
39 Att mäta tid i Java I java.lang.system finns metoder: static long currenttimemillis() Returns the current time in milliseconds. static long nanotime() Returns the current value of the most precise available system timer, in nanoseconds. Exempel användning: long start = System.currentTimeMillis(); gör arbete long duration = System.currentTimeMillis() - start; System.out.println("Duration: " + duration + " ms");
40 Att mäta tid på power funktionerna public static void main(string[] args) { int reps = 10000; long start, duration; // test power1 start = System.currentTimeMillis(); for (int i = 0; i < reps; i++) { power1(2.0, 5000); duration = System.currentTimeMillis() - start; System.out.println("Duration1: " + duration + " ms"); // test power3 start = System.currentTimeMillis(); for (int i = 0; i < reps; i++) { power3(2.0, 5000); duration = System.currentTimeMillis() - start; System.out.println("Duration3: " + duration + " ms"); $ java Pow Duration1: 77 ms Duration3: 2 ms
41 Hitta element i array Hur kollar man om ett element finns i en array? Enkel kod: public static boolean lookup(int k,int[] arr) { for (int i=0; i<arr.length; i++) { if (arr[i] == k) { return true; return false; om arrayn sorterad går det att göra mycket snabbare!
42 Binärsökning Exempel: Kolla om värdet 5 finns i arrayn? Idé: Inspektera elementet i mitten av arrayn: Är mitten elementet det vi söker? Om mitten elementet är mindre kan vi kasta bort den högra sidan vi vet ju att arrayn är sorterad. och så kan vi upprepa sägen ovan tills arrayn är tom.
43 Binärsökning (forts) Som Java kod: public static boolean bsearch1(int k,int[] arr,int b,int e) { // System.out.println("b,e = " + b + "," + e); if (e <= b) { return false; int i = (b + e) / 2; // mitten if (arr[i] == k) { return true; else if (arr[i] < k) { return bsearch1(k,arr,i+1,e); else /* k < arr[i] */ { return bsearch1(k,arr,b,i); public static boolean bsearch(int k,int[] arr) { return bsearch1(k,arr,0,arr.length);
44 Binärsökning (forts) Samma iterativt: public static boolean bsearchit(int k,int[] arr) { int b = 0; int e = arr.length; while (b < e) { int i = (b + e) / 2; // mitten if (arr[i] == k) { return true; else if (arr[i] < k) { b = i+1; else /* k < arr[i] */ { e = i; return false;
45 Fibonacci En känd rekursiv funktion: fib(n) = ( 0 if n =0 1 if n =1 fib(n 1) + fib(n 2) if 2 apple n Värden: Som bild: fib(0) = 0 fib(1) = 1 fib(2) = 1 fib(3) = 2 fib(4) = 3 fib(5) = 5 fib(6) = 8 fib(7) = 13 fib(8) = 21 fib(9) = 34
46 Fibonacci Rekursion leder inte alltid till bra kod! I Java: public static int fib(int n) { if (n < 2) { return n; else { return fib(n- 1) + fib(n- 2); Flera rekursiva anrop beräknar samma sak: fib(6) fib(5) fib(4) fib(4) fib(3) fib(3) fib(2) fib(3) fib(2) fib(2) fib(1) fib(2) fib(1) fib(1) fib(0) fib(2) fib(1) fib(1) fib(0) fib(1) fib(0) fib(1) fib(0) fib(1) fib(0)
47 Hästen på schackbräde Utmaning: Kan en schackhäst gå till varje ruta på ett schackbräde utan att besöka en enda ruta mera än en gång? Tips: en stilig lösning med rekursion?
48 public class Horse { public static String board[][] = new String[8][8]; public static int totalvisited = 0; public static int currentlyvisited = 0; // L = left // R = right // U = up // D = down public static final String LU = "LU"; public static final String LD = "LD"; public static final String DL = "DL"; public static final String DR = "DR"; public static final String UR = "UR"; public static final String UL = "UL"; public static final String RU = "RU"; public static final String RD = "RD"; public static final String XX = "XX"; public static void printstate() { System.out.println(); System.out.println("Total visited: " + totalvisited); System.out.println("Curr visited: " + currentlyvisited); for (int y=0; y<8; y++) { for (int x=0; x<8; x++) { if (board[x][y] == null) { System.out.print("- - "); else { System.out.print(board[x][y] + " "); System.out.println(); // nånting här public static void main(string[] args) { // nånting här
Föreläsning 1, vecka 7: Rekursion
TDA 548: Grundläggande Programvaruutveckling Föreläsning 1, vecka 7: Rekursion Magnus Myréen Chalmers, läsperiod 1, 2016-2017 Nytt: Extra labbtillfälle för Grupp B (för att grupp Bs labbtider har på senaste
Föreläsning 6: Metoder och fält (arrays)
TDA 545: Objektorienterad programmering Föreläsning 6: Metoder och fält (arrays) Magnus Myréen Chalmers, läsperiod 1, 2015-2016 I (föregående och) denna föreläsning Läsanvisning: kap 2 & 13 meddelanden
Föreläsning 12: Exempel och problemlösning
TDA 545: Objektorienterad programmering Föreläsning 12: Exempel och problemlösning Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Idag Problemlösning, dvs hur man ska tänka för att hitta lösning int mängd/set
Föreläsning 8: Exempel och problemlösning
TDA 545: Objektorienterad programmering Föreläsning 8: Exempel och problemlösning Magnus Myréen Chalmers, läsperiod 1, 2015-2016 De tre senaste föreläsningarna Läsanvisning: kap 2 & 13 meddelanden och
Rekursion och induktion för algoritmkonstruktion
Informationsteknologi Tom Smedsaas, Malin Källén 20 mars 2016 Rekursion och induktion för algoritmkonstruktion Att lösa ett problem rekursivt innebär att man uttrycker lösningen i termer av samma typ av
Föreläsning 2, vecka 8: Repetition
TDA 548: Grundläggande Programvaruutveckling Föreläsning 2, vecka 8: Repetition Magnus Myréen Chalmers, läsperiod 1, 2016-2017 Idag Metoder och terminologi Referensvärden och arrays Interface och ritning
public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }
Rekursion 25 7 Rekursion Tema: Rekursiva algoritmer. Litteratur: Avsnitt 5.1 5.5 (7.1 7.5 i gamla upplagan) samt i bilderna från föreläsning 6. U 59. Man kan definiera potensfunktionen x n (n heltal 0)
Föreläsning 3: Booleans, if, switch
TDA 545: Objektorienterad programmering Föreläsning 3: Booleans, if, switch Magnus Myréen Chalmers, läsperiod 1, 2015-2016 Påminnelse om klasser och objekt Boll boll1 = new Boll(5,12); skapar ett nytt
Instuderingsfrågor, del D
Uppgift 1. Instuderingsfrågor, del D Objektorienterad programmering, Z1 I vilka av nedanstående problem behöver man använda sig av fält för att få en elegant lösning? I vilka problem är det är det onödigt/olämpligt
Rekursion. Koffman & Wolfgang kapitel 5
Rekursion Koffman & Wolfgang kapitel 5 1 Rekursivt tänkande Rekursion reducerar ett problem till en eller flera enklare versioner av samma problem. med enklare menas att underproblemen måste vara mindre,
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
F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander
F11 - Rekursion ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Rekursion Rekursion är en programmeringsteknik En metod anropar sig själv public String reverse (String s) { if (s.length()
Rekursion och induktion för algoritmkonstruktion
Informationsteknologi Tom Smedsaas 22 januari 2006 Rekursion och induktion för algoritmkonstruktion Att lösa ett problem rekursivt innebär att man uttrycker lösningen i termer av samma typ av problem som
Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.
Algoritmanalys Analys av algoritmer används för att uppskatta effektivitet. Om vi t. ex. har n stycken tal lagrat i en array och vi vill linjärsöka i denna. Det betyder att vi måste leta i arrayen tills
Rekursion och induktion för algoritmkonstruktion
Informationsteknologi Tom Smedsaas 22 september 2015 Rekursion och induktion för algoritmkonstruktion Att lösa ett problem rekursivt innebär att man uttrycker lösningen i termer av samma typ av problem
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
Exempel: Förel Rekursion III Nr 14. Uno Holmer, Chalmers,
Exempel: Kappsäcksproblemet Backtracking Dynamisk programmering Föreläsning (Weiss kap..-) Kan man ur en grupp föremål F,,F N med vikterna V,,V N välja ut en delgrupp som väger exakt M kilo? Exempel: föremål
OOP Objekt-orienterad programmering
OOP F6:1 OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList tostring() metoden this Vi vill ofta hantera många objekt i ett program: OOP F6:2 public
Tentamen. Lösningsförslag
Sida 1/8 Tentamen Grundläggande programmering i Java A 5p, DTAA32 2002-03-22 Lösningsförslag Uppgift 1 ( 3p ) Utskriften blir: Skriv in ett tal 24 47 48 intal=471 Uppgift 2 ( 6p ) a.) b.) c.) d.) e.) falskt
Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer
F6 Observera att när man utvecklar program så är inte alla lösningar på vägen korrekta. Speciellt den här gången så finns många OH med program som inte fungerar eftersom det är just det vi skall se på
Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.
Föreläsning 9 Innehåll Mer om rekursion söndra-och-härska-algoritmer dynamisk programmering backtracking Orientering om versionshantering med git Söndra och härska Divide and conquer teknik för att konstruera
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
TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P
UME UNIVERSITET Datavetenskap 981212 TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P Datum : 981212 Tid : 9-15 HjŠlpmedel : Inga Antal uppgifter : 9 TotalpoŠng : 60 (halva pošngtalet kršvs normalt fšr
ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet
ITK:P1 Föreläsning 1 Att programmera i språket Java DSV Peter Mozelius Programmering Olika typer av programmering som t ex: o Imperativ programmering (C, Pascal m fl) o Funktionell programmering (Lisp,
4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &
TelefonKostnad static Math static $ & )&* +,-&. 0 +& + & 3 356+573 ) & & 6 3 3 & 3 * 6 3.:; < = 3 = 6 ; < : & >?.;,;@.A@;0,0,? @B0 C,0 > *. > 5 C D & D 5 * &! ; 66C! * C, 0 E,&! 0 F,G0 >: = = C 3 & HI
Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:
Föreläsning 7 Innehåll Rekursion Rekursivt tänkande: Hur många år fyller du? Ett år mer än förra året! Rekursion Rekursiv problemlösning Binärsökning Generiska metoder Rekursiv problemlösning: Dela upp
Föreläsning 5. Rekursion
Föreläsning 5 Rekursion Föreläsning 5 Algoritm Rekursion Rekursionsträd Funktionsanrop på stacken Binär sökning Problemlösning (möjliga vägar) Algoritm En algoritm är ett begränsat antal instruktioner/steg
OOP Objekt-orienterad programmering
OOP F2:1 OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion Deklaration och tilldelning OOP F2:2 int x; double d; char ch; boolean
Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016
Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016 Algoritmanalys Inledning Exempel 1: x n När vi talade om rekursion presenterade vi två olika sätt att beräkna x n, ett iterativt: x n =
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å
Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254
Rekursion Rekursion är en grundläggande programmeringsteknik M h a rekursion kan vissa problem lösas på ett mycket elegant sätt Avsnitt 11 i kursboken: Att tänka rekursivt Att programmera rekursivt i Java
Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.
Föreläsning 9 Innehåll Mer om rekursion söndra-och-härska-algoritmer dynamisk programmering backtracking Orientering om versionshantering med git Söndra och härska Divide and conquer teknik för att konstruera
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)
Föreläsning 8 Innehåll
Föreläsning 8 Innehåll Orientering om samarbete om Eclipse-projekt med git Orientering om konstruktion av användargränssnitt i Android Mer om rekursion söndra-och-härska-algoritmer dynamisk programmering
Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10
Objektorienterad programmering E Föreläsning 10 Rekursion Länkade datastrukturer Back to Basics Exekvera programmet för hand! public class Param { public static int f(int x) { return x+1; public static
OOP Objekt-orienterad programmering
OOP F4:1 OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder Metoder - subrutiner OOP F4:2 Kod som utför en viss operation. Ligger i olika klasser och anropas via operatorn.
Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling
Göteborg, Magnus Myréen, 2014-10- 15 Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling Fulltentamen vitsord: 3=28p, 4=38p, 5= 48p, max 60p. Max
TENTAMEN OOP
TENTAMEN OOP 2014-01-19 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli
Den som bara har en hammare tror att alla problem är spikar
Introduktion Föreläsning (Weiss kap. -4) Många begrepp blir det Introduktion till kursen Exempel: Datastrukturen mängd Generiska Den som bara har en hammare tror att alla problem är spikar Vilken
Del A (obligatorisk för alla)
Del A (obligatorisk för alla) A1. Ringa in rätt svarsalternativ eller skriv svar i ruta om sådan a) Satsen double x = (int)(1 + 3/2.0) + 3.; resulterar i b) Satsen int x = (int)(1 + 3/2.0) + 3.; resulterar
Institutionen för TENTAMEN CTH VT-15 Datavetenskap 2015-04-18 TDA540. Tentamen för TDA540 Objektorienterad programmering
Institutionen för TENTAMEN CTH VT-15 Datavetenskap 2015-04-18 TDA540 Tentamen för TDA540 Objektorienterad programmering DAG: 15-04-18 TID: 14:00 18:00 Ansvarig: Joachim von Hacht och Christer Carlsson
Föreläsning 6 Innehåll. Rekursion. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursiv problemlösning. Rekursion. Rekursivt tänkande:
Föreläsning 6 Innehåll Rekursion Begreppet rekursion Rekursiv problemlösning Samband mellan rekursion och induktion Söndra-och-härska-algoritmer Dynamisk programmering Undervisningsmoment: föreläsning
D0010E. Hello world! Nedräkning. Sågtand. Övningsuppgifter i Eclipse. Skapa ett program som skriver ut "Hello world" på skärmen.
D0010E Övningsuppgifter i Eclipse Hello world! Skapa ett program som skriver ut "Hello world" på skärmen. package tutorial; public class HelloWorld public static void main(string[] args) System.out.println("Hello
Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2
AID-nummer: Datum: 2014-12-18 Kurskod: 725G61 Provkod: LAB1 Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2 Skrivningstid: 2014-12-18 klockan 8.00-10.00. Hjälpmedel: Inga. För varje fråga
OOP Tenta
Stockholms universitet sid 1 OOP OOP Tenta 2012-01-14 10.00 15.00 Avser kurserna DSK1:OOP och GES:OOP Anvisningar Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt
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
Del A (obligatorisk för alla)
Del A (obligatorisk för alla) A1. Koden följer garanterat namnkonventionerna. Ringa in rätta svar och lämna in tillsammans med dina övriga svar! a) Hur många objekt skapas av följande kod? World w = new
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
Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:
Omtentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-16, TDA540 Dag: 2017-04-12, Tid: 14.00-18.00 Ansvarig: Examinator: Alex Gerdes Carlo A. Furia Förfrågningar:
Tentamen OOP 2015-03-14
Tentamen OOP 2015-03-14 Anvisningar Fråga 1 och 2 besvaras på det särskilt utdelade formuläret. Du får gärna skriva på bägge sidorna av svarsbladen, men påbörja varje uppgift på ett nytt blad. Vid inlämning
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
Föreläsning 1, vecka 8: Att förbereda sig för tentan
TDA 548: Grundläggande Programvaruutveckling Föreläsning 1, vecka 8: Att förbereda sig för tentan Magnus Myréen Chalmers, läsperiod 1, 2016-2017 Idag Idag: talar om tentan, förberedelse, exempel, mm. Inget
Objektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning V: arrayer, metoder, räckvidd (scope), eclipse Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Outline Arrayer Metoder Räckvidd (Scope) Eclipse
Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER
Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER Logiska uttryck datatypen boolean Logiska uttryck kan ha två möjliga värden, true eller false. Variabler av typen boolean kan tilldelas
Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T
Algoritmer och datastrukturer H I 1 0 2 9 HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T Föreläsning 1 Inledande om algoritmer Rekursion Stacken vid rekursion Rekursion iteration Möjliga vägar
Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.
Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java
Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output
Programmering hh.se/db2004 Föreläsning 5: Fält samt Input/Output Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Lite mer om Javas stöd för fält Hur många element har ett fält?
//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.
/*==================================================================== Detta program hör ihop med dokumentet EXEMPEL_AVERAGE_POINTS.PDF där det finns förklaringar. ======================================================================*/
OOP Objekt-orienterad programmering
OOP F2:1 OOP Objekt-orienterad programmering Föreläsning 2 Input/Output Programsatser Selektion Output OOP F2:2 Görs via System.out, anropa antingen print eller println: System.out.print("Hej"); System.out.println(
Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering
Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-6, TDA540 Dag: 207-0-24, Tid: 4.00-.00 Uppgift a) En abstrakt klass kan inte instansieras,
Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel
Idag Ett exempel Undantag Substitutierbarhet, subtyper, subklasser När val av metod beror av typerna hos två objekt Lite om överlagring Exempel, version 2 Notera: för samtliga figurer gäller: arean av
Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering
Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-15, TDA540 Dag: 2016-04-09, Tid: 14.00-18.00 Uppgift 1 Metoden mystery vänder om ett fält.
TENTAMEN OOP
TENTAMEN OOP 2014-03-15 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli
JAVAUTVECKLING LEKTION 4
JAVAUTVECKLING LEKTION 4 2016 Mahmud Al Hakim mahmud.al.hakim@nackademin.se www.alhakim.se AGENDA Iterationer (loopar) Algoritmer Mer om felsökning 1 WHILE-SATSEN String s = JOptionPane.showInputDialog("Talet
Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ
orienterad programmering Föreläsning 3 Exempel: Telefonboken Fält som funktionsresultat Exempel Definiera static double[] vectorsum(double[] a, double[] b) Betrakta sedan följande kodavsnitt:... double[]
Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.
(16 februari 2016 F5.1 ) Dagens text Programmeringsteknik Mer om Scanner-klassen Dialogrutor (klassen JOptionPane) Bubbelsortering ArrayList Omslagsklasser Arbetsexempel (16 februari 2016 F5.2 ) Pokertärningar
Iteration while-satsen
Datatypen double TDA143 I1 Programmerade system Föreläsning 3 (OH-bilder 3) Iteration while-satsen Christer Carlsson I en dator kan man inte lagra hur stora eller hur små tal som helst. De enkla datatyperna,
JAVAUTVECKLING LEKTION 8
JAVAUTVECKLING LEKTION 8 2016 Mahmud Al Hakim mahmud.al.hakim@nackademin.se www.alhakim.se AGENDA Fält (Arrayer) Att skapa och arbeta med fält Indexering Jämförelse av fält Flerdimensionella fält 1 VAD
Föreläsning 2 Datastrukturer (DAT037)
Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-11-02 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Tidskomplexitet
F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander
F2 Datatyper och variabler ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Datatyper Java är ett starkt typat språk Varje slags data har en datatyp Datatyp Javasyntax Exempel Teckensträng
Lösningsförslag till tentamen 150317
Uppgift 1 Lösningsförslag till tentamen 150317 1) Sant 2) Falskt. I ett RAM-minne är åtkomsttiden densamma för alla minnesadresser.) 3) Falskt. Det är TCP som använder sig av en fast kommunikationsförbindelse.)
Att skriva till och läsa från terminalfönstret
Att skriva till och läsa från terminalfönstret Oftast används grafiska komponenter i Java för att kommunicera med användaren (användargränssnitt), men det finns objekt i standardbiblioteken för de tillfällen
1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.
1 Uppgift 1 Klassen Company Banken FinanceTrust som tidigare bara haft privatpersoner som kunder vill nu bygga ut sitt datasystem så att även företag kan registreras som kunder. Skriv klassen Company som
Tentamen , Introduktion till Java, dtaa98, dtea53
Mittuniversitetet 2007-09-01 Institutionen för informationsteknologi och medier Sid:1(3) dtaa98, dtea53 Martin Kjellqvist; Linda Karlsson, Ulf Reiman Lösningsansatser Tentamen 2007-09-01, Introduktion
Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering
Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering Institutionen för Datavetenskap CTH HT-7, TDA540 Dag: 208-0-3, Tid: 4.00-8.00 Uppgift a) class används för en klassdeklaration som
Tentamen i Grundläggande Programvaruutveckling, TDA548
Tentamen i Grundläggande Programvaruutveckling, Joachim von Hacht/Magnus Myreen Datum: 2016-12-20 Tid: 08.30-12.30 Hjälpmedel: Engelskt-Valfritt språk lexikon Betygsgränser: U: -23 3: 24-37 4: 38-47 5
Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet
Programmering hh.se/db2004 Föreläsning 4: Fält samt Input/Output Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Lite om reella tal Vad kan man göra med reella tal? Utöver de
Lektion 1 - Programmeringsteknik F1, ht 2003
Lektion 1 - Programmeringsteknik F1, ht 2003 Daniel Deogun danield@it.uu.se 8 september 2003 Innehåll 1 När är ICA öppet? 3 1.1 Problem................................ 3 1.2 Lösning................................
Föreläsning 3. Iteration while-satsen
Föreläsning 3 Iteration while-satsen Datatypen double I en dator kan man inte lagra hur stora eller hur små tal som helst. De enkla datatyperna, som används för att lagra tal (t.ex. int och double), har
Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10. Skriv bara på framsidan av varje papper.
Tentamen Programmeringsteknik II och NV2 (alla varianter) 2008-12-10 Skrivtid: 0800-1300 Inga hjälpmedel. Tänk på följande Maximal poäng är 40. För betygen 3 krävs 18 poäng. För betygen 4, 5 kommer något
TENTAMEN OOP
TENTAMEN OOP 2013-08-08 ANVISNINGAR Påbörja varje ny uppgift på nytt blad. Skriv endast på ena sidan av bladen. Skriv tydligt - oläsbara svar beaktas ej. BETYGSÄTTNING Max antal poäng är 30. För att bli
Tentamen i Objektorienterad programmering
CHALMERS TEKNISKA HÖGSKOLA Datavetenskap TDA547 Tentamen i Objektorienterad programmering Lördagen 12 mars 2011, 8.30 12.30. Jourhavande lärare: Björn von Sydow, tel 0762/981014. Inga hjälpmedel. Lösningar
SMD 134 Objektorienterad programmering
SMD 134 Objektorienterad programmering Dagens agenda: Typer i Java: primitiva datatyperna, referenstyper Variabler och variabeltilldelningar med primitiva typer Konstanter av de olika typerna. Heltalsräkning
Skillnader mellan Python och Java
Java Utvecklat på SUN Microsystems mitten 1990-talet Ursprungligen för Webprogram Nu mycket spritt Massor med läroböcker Vi använder Lewis&Loftus http://javasuncom/javase/6/docs/api/ Skillnader mellan
Tentamen på kursen DA7351, Programmering 1. 051102, kl 08.15-12.15. Malmö högskola Teknik och samhälle. DA7351, Programmering 1 1 051102
Tentamen på kursen DA7351, Programmering 1 051102, kl 08.15-12.15 Tillåtna hjälpmedel: Valfri bok om Java. Vid bedömning av lösningarna tas hänsyn till om dessa uppfyller de krav på programkvalitet (strukturering,
Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer
Föreläsning 4 Metodanrop switch-slingor Rekursiva metoder Repetition av de första föreläsningarna Inför seminariet Nästa föreläsning Metodanrop - primitiva typer Vid metodanrop kopieras värdet av en variabel
Tentamen Programmeringsteknik II Skrivtid: Hjälpmedel: Java-bok (vilken som helst) Skriv läsligt! Använd inte rödpenna!
Tentamen Programmeringsteknik II 2014-01-09 Skrivtid: 0800-1300 Hjälpmedel: Java-bok (vilken som helst) Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja
Det är principer och idéer som är viktiga. Skriv så att du övertygar rättaren att du har förstått dessa även om detaljer kan vara felaktiga.
Tentamen Programmeringsteknik II 2013-06-05 Skrivtid: 1400-1700 Hjälpmedel: Java-bok (vilken som helst) Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja
Lösningsförslag: Instuderingsfrågor, del D
Uppgift 1. Objektorienterad programmering, Z1 Lösningsförslag: Instuderingsfrågor, del D a) Inget fält behövs. Man kan läsa in ett tal i taget och addera dessa till summan. b) Här behövs ett fält. c) Här
TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Kursinformation Imperativa delen av
Typkonvertering. Java versus C
Typer Objektorienterad programmering E Typkonvertering Typkonvertering Satser: while, for, if Objekt Föreläsning 2 Implicit konvertering Antag att vi i ett program deklarerat int n=3; double x = 5.2; Då
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.
Föreläsning 3. Stack
Föreläsning 3 Stack Föreläsning 3 ADT Stack Stack JCF Tillämpning Utvärdera ett postfix uttryck Stack implementerad med en array Stack implementerad med en länkad lista Evaluate postfix expressions Läsanvisningar
F4. programmeringsteknik och Matlab
Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner
Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12
Grundläggande programmering, STS 1, VT 2007. Sven Sandberg Föreläsning 12 I torsdags: Klassen TelefonKostnad Exemplifierar objektorienterad design, metoder, konstruktorer static Standardklassen Math Matematiska
Sökning och sortering
Sökning och sortering Programmering för språkteknologer 2 Sara Stymne 2013-09-16 Idag Sökning Analys av algoritmer komplexitet Sortering Vad är sökning? Sökning innebär att hitta ett värde i en samling
Lösningsförslag till tentamen
Uppgift 1 Lösningsförslag till tentamen 140423 a) Vad kompilatorn klagar på är att metoden Math.sqrt() inte finns! Detta kan ju verka något mystiskt eftersom vi alla vet att det i klassen Math finns en
Laboration A Objektsamlingar
Laboration A Objektsamlingar Avsikten med laborationen är att du ska träna på att använda ett par objektsamlingar. Uppgift 1 Titta genom föreläsningsunderlaget DA129AFAHT07.pdf och testkör exemplen (se
DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU
DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU lösningsförslag till tentamen 2017-06-09 Tid: 8:30-12:30. Plats: SB. Ansvarig lärare: Fredrik Lindblad,
Tentamen i Programmering
LUNDS TEKNISKA HÖGSKOLA 1(5) Institutionen för datavetenskap Tentamen i Programmering EDAA65/EDA501/EDAA20 M MD W BK L 2018 05 30, 8.00 13.00 Preliminärt ger uppgifterna 7 + 14 + 6 + 9 + 4 = 40 poäng.