F2: Algoritmanalys, sökning, sortering, recursive descent Carl Nettelblad
|
|
- Johanna Karlsson
- för 4 år sedan
- Visningar:
Transkript
1 F2: Algoritmanalys, sökning, sortering, recursive descent Carl Nettelblad
2 Repetition Kursmål Felsökning (med debugger) Rekursion
3 Säg vad du vill göra Varför skriver vi kod? För att få datorn att göra det vi vill För att själva läsa koden För att andra ska läsa koden
4 Debugger Vad gör vi när vårt program inte fungerar som det ska? Arbeta vetenskapligt/ingenjörsmässigt! Bilda hypoteser Experiment Lättläst och modulär kod leder till bättre resonemang Gör förändringar Upprepa
5 Vad kan debuggern ge oss? Brytpunkter (breakpoints) Stanna körningen av koden varje gång den kommer till viss kodrad Stega (step into/step over) Kör nästa rad, med/utan att även göra stegning i de metoder som anropas Anropsstack Se vilka metoder som ledde oss hit Watches Titta på variabelvärden, eller andra uttryck Interaktion Ändra variabelvärden, anropa metoder
6 Rekursion Generellt: Dela upp problemet i ett eller flera delproblem av samma slag Lös delproblemen (rekursivt) Sätt ihop lösningarna för delproblemen för att lösa urpsrungsproblemet Utan basfall blir rekursionen oändlig programmet kraschar. Reset-knappen i DrJava kan vara praktisk
7 Hjälpmetoder Blir lätt om vi lägger till en parameter för antal element att kontrollera. Utgångsläget är hela längden, basfallet 0 element. public static int search(int x, int[] a) { } return search(x, a, a.length); private static int search(int x, int[] a, int n) { if (n == 0) { return -1; } else if (x == a[n-1]) { return n-1; } else { return search(x, a, n-1); } }
8 Vid redovisning Kör de automatiska testerna innan du redovisar Testerna hjälper dig att hitta att något är fel, ibland inte en tydlig ledtråd om vad Koden ska följa stilguiden och inte vara onödigt komplicerad Du ska kunna förklara vad olika delar av koden gör, hur de fungerar tillsammans, vad som skulle hända om man ändrade eller tog bort någon del, o.s.v. Vi prioriterar hjälp för nuvarande uppgift, särskilt vid deadline Funkar inte att komma på deadline för OU1 och be om att få redovisa hela OU1-OU5
9 Vilken kurva vinner i längden? Algoritmanalys
10 Algoritmanalys Prestanda för program kan ofta handla om två saker En effektiv algoritm Hur mycket arbete ska utföras? Hur mycket information behöver lagras i minnet? En effektiv implementation Hur utförs det arbetet så effektivt som möjligt? Hur lagras informationen så kompakt som möjligt? Om vi mäter tid eller minne konkret mäter vi kombinationen! Om vi mäter hur det växer med större och större fall mäter vi algoritmens asymptotiska effektivitet
11 Söka efter element Från förra veckan: public static int search(int x, int[] a) { } return search(x, a, a.length); private static int search(int x, int[] a, int n) { if (n == 0) { return -1; } else if (x == a[n-1]) { return n-1; } else { return search(x, a, n-1); } }
12 Hur kan vi söka bättre? Den här algoritmen kan behöva titta på varje element. Precis som i largest i OU1. Om vi vet att listan är sorterad går den att göra mer effektiv: Om talet x < värdet i mitten Fortsätt söka i vänstra halvan annars Fortsätt söka i högra halvan Binärsökning Variant på bisektionsmetoden för att hitta nollställen till kontinuerliga funktioner Går lätt att formulera både rekursivt och iterativt
13 Kod för binärsökning private static int binarysearch(int x, int[] a, int low, int high) { if (high <= low + 1) { if (high > low && a[low] == x) { return low; } else { return -1; } } else { int mid = (low + high) / 2; if (x < a[mid]) { return binarysearch(x, a, low, mid); } else { return binarysearch(x, a, mid, high); } } }
14 Publik metod Samma metodhuvud som tidigare! public static int search(int x, int[] a) { } return binarysearch(x, a, 0, a.length);
15 Effektivitet för binärsökning Vi har n element i första steget. Hur mycket minskar antalet element till anrop k? n n n n n k 1 2 k Basfall när vi når n 2 k = 1 När är det? n = 2 k log 2 n = k Hur många rekursiva anrop krävs det då för att söka i en sorterad array med en miljon (1E6), en miljard (1E9), en biljon (1E12) element? Tips: 2 10 = = 10 3
16 Olika sätt att beräkna x n Enklast, ett steg i taget: x n 1 n = 0 = ቊ x x n 1 n > 0 Två steg i taget: 1 n = 0 x n = ቐ x n = 1 x 2 x n 2 n 2 k steg i taget: 1 n = 0 x n = ቐ 0 < n < k x k x n k n k
17 Olika sätt att beräkna x n Om n jämnt: x n = 1 n = 0 x nτ2 2 n > 0, jämna n Om n udda är n 1 jämnt: 1 n = 0 x n = x nτ2 2 x x n 1 Är detta snabbare? n > 0, jämna n n > 0, udda n
18 Hur många multiplikationer? Om n är exakt en tvåpotens, n = 2 k : Exakt k multiplikationer, halvering varje gång som i binärsökning Om n inte är en jämn 2-potens? Vid varje steg kan det krävas en extra multiplikation (nuvarande n udda) innan man får en halvering, så 2 multiplikationer ber halveringssteg, 2 log n
19 Algoritmanalys Vi vill veta hur tiden för en algoritm beror av indata. Eller minnesanvändning eller någon annan begränsad resurs. Resultat av typen tiden växer proportionellt mot kvadraten på antalet element tiden är konstant oberoende av indata tiden beror exponentiellt på storleken på problemet
20 Asymptotisk notation Asymptotisk notation används för att beskriva hur en funktion t(n) utvecklas för stora värden på n En övergripande trend Definition: En funktion t(n) sägs vara O(f(n)) ( ordo f av n ) om det finns två konstanter c och n 0 sådana att t(n) < c f(n) för alla n > n 0 För ett tillräckligt stort n 0 begränsas t(n) av f(n) skalat med c
21 Asymptotisk notation Exempel: Funktionen f n = 5n n är O n 2 Varför? Om n > 1 gäller f n = 5n n < n n n n n = n 2 Alltså kan vi välja c = 90105, n 0 = 1 I normalfallet bryr vi oss inte om värdena, vi behöver bara visa/veta att det går att hitta dem. Ordonotationen ger en övre gräns för hur snabbt funktionen växer för stora värden på n.
22 Asymptotisk notation Ordonotationen ger en övre begränsning. Exempel: alla funktioner som är O n 2 är också O n 3 Thetanotationen är mer precis: Funktionen är Θ n 2 betyder att den växer just så fort. Omeganotationen är motsatsen till ordo, en undre begränsning. Funktionen är Ω n 2 betyder att den minst växer så fort. (Om man visar ordo och omega med samma argument följer theta.)
23 Den funktion vi är intresserad av är tid, minnesanvändning o.s.v. Asymptotisk notation i Exempel: Antal multiplikation som görs av kvadreringsalgoritmen för x n är Θ(log n). algoritmanalys Borde man inte skriva ut att det är log 2? Nej, omvandling mellan logaritmbaser ger bara konstantfaktor. Ibland säger man ordo fast man borde mena theta.
24 Några typiska exempel Vanliga funktioner i asymptotisk notation kan vara: 1, log n, n, n log n, n 2, 2 n För olika operationer: Θ(1) Θ(log n) Θ(n) Θ(n log n) Indexering i array Binärsökning, x n med kvadreringsalgoritmen add(0, x) i en ArrayList med n värden sedan tidigare Snabba sorteringsmetoder Θ(n 2 ) Enkla sorteringsmetoder
25 Olika fall Det är inte sjävklart att samma algoritm alltid tar lika lång tid för ett visst n. Exempel: Sortering kan bero på hur listan ser ut innan. Finns algoritmer med inbyggd slump!
26 Olika fall Instickssortering (togs upp i Prog1) tar: Θ(n) tid/operationer i bästa fall Θ(n 2 ) tid/operationer i genomsnitt Θ(n 2 ) tid/operationer i värsta fall Obs! Alla är theta, exakta begränsningar.
27 Linjär sökning for (int i=0; i<n; i++) { if (x==a[i]) { return i; } } return -1; Tittar på alla element tills den hittar rätt. Tid för lyckad sökning (elementet finns): Θ 1 i bästa fall Θ n i genomsnitt Θ n i värsta fall Konstantfaktor mellan genomsnitt och värsta fall? Misslyckad linjär sökning alltid Θ(n)
28 Uppskatta tid i praktiken Om du vet att tiden t(n) för en algoritm är Θ(f(n)) kan man för stora värden uppskatta tiden som: t n = c f n Konstanten c kommer att vara beroende av implementation och system (programmerarens kod, dator, programmeringsspråk, operativsystem, ) Man kan uppskatta c genom att mäta praktiskt på ett program som implementerar algoritmen. Ofta mäta på ett ganska stort n för att uppskatta för ett mycket stort n
29 Exempel Θ(n log n) Det har tagit 10 sekunder att köra ett program som implementerar en Θ(n log n)-algoritm när n = Uppskatta tidsanvädningen för n = t n = c log n t 1000 = c 1000 log 1000 = 10 c = = t = log = = 1666 s 27 min Tips! Enkla beräkningar om vi tänker på att vi själva väljer vilken logaritmbas vi arbetar i.
30 Sortering Grundläggande algoritm Vi har sett hur sortera en gång gör senare sökningar billiga (binärsökning) Ibland kan andra algoritmer också förstås som sortering: Välj elproduktion efter viktning av kostnad och koldioxidutsläpp Lösning: Sortera på den viktade kostnaden, välj de n första för att täcka behovet
31 Instickssortering Grundtanke sortera de n första elementen genom att se till att de n-1 första är sorterade och sedan bara hitta rätt plats för det n:te Rekursivt, två algoritmer: Sortera a[0] a[n-1]: Sortera a[0] till a[n-2] Infoga a[n-1] bland de sorterade elementen Infoga x i a[0]...a[m]: Om m = 0 eller x >= a[m-1] Lägg x på plats m Annars Flytta a[m-1] till a[m] Infoga x i a[0] a[m-1] // Plats m antas vara ledig
32 Instickssortering Förloppet för den yttersta nivån av sortering, inklusive infogningen.
33 Rekursiv instickssortering i kod: I /** * Sorts the elements a[0], a[1], a[2],... a[n-1] a the array to be sorted n number of elements to be sorted (starting from index 0) */ public static void sort(int[] a, int n) { if (n > 1) { sort(a, n-1); insert(a[n-1], a, n-1); } }
34 Rekursiv instickssortering i kod: II /** * Inserts x in the array a[0],..., a[m]. * * Precondition: a[0] <= a[1] <=... <= a[m-1] * Postcondition: a[0] <= a[1] <=... <= a[m-1] <= a[m] * The old value of a[m] is destroyed */ public static void insert(int x, int[] a, int m) { assert a.length > m; if (m == 0 x >= a[m-1]) { a[m] = x; } else { a[m] = a[m-1]; insert(x, a, m-1); } }
35 Nya begrepp Förvillkor/precondition: Tillstånd som ska gälla när koden anropas Eftervillkor/postcondition: Tillstånd som ska gälla när koden är klar Kan tydliggöra när kod används rätt/fel utan att man behöver sätta sig in i allt koden gör på vägen.
36 Algoritmanalys för insert Vi kan fokusera på jämförelsen (m == 0 x >= a[m-1]) Låt s(n) representera antalet gånger den raden utförs vid anropet insert(x, a, n) Bästa fall: s(n) = 1 Värsta fall: s(n) = s(n 1) + 1 = s(n 2) = = s(0) + n = 1 + n I genomsnitt? s n 1 + n/2
37 Algoritmanalys för sort Låt t(n) vara antalet gånger jämförelsen inne i insert görs. Då får vi: t n = t n 1 + s n 1 Bästa fall: t(n) = t(n 1) + 1 = t(n 2) = = t(1) + n 1 = n 1 Värsta fall: t n = t n 1 + n = t n 2 + n 1 + n = n n 1 = n 1 = 2 Genomsnitt: t n = n(n 1)/4
38 Konkret exempel Om det tar 1 s att sortera 10 3 slumptal med instickssortering. Hur lång tid tar det då att sortera 10 4, 10 5 eller 10 6 tal? Svar: 10 2, 10 4, 10 6 sekunder sekunder är ungefär 11 dygn
39 Urvalssortering Två delalgoritmer även här, men hitta största elementet före sorteringsrekursionen: Sortera a[0] a[n-1]: Byt plats på a[n-1] och det största elementet i a[0] a[n-1] Sortera a[0] a[n-2] Man kan inte veta vilket det största elementet är i en osorterad lista utan att titta på alla
40 Urvalssortering Måste alltid gå igenom hela listan, så värsta fall = bästa fall = genomsnitt = Θ n 2 jämförelser
41 Kan det gå bättre? Vi såg att kvadreringsalgoritmen vann genom att dela upp i mycket mindre delproblem i varje steg Kan vi göra det för sortering? Ja, flera exempel. Mergesort: 1. Dela mängden i två lika stora delar 2. Sortera dessa båda var för sig 3. Sammanfoga delarna Behöver bara jämföra ett element från vardera listan för att finna nästa
42 Illustration Mergesort
43 Dela upp
44 Sortera
45 Sammanfoga
46 Sammanfoga
47 Klart
48 Algoritmanalys mergesort Problem av storlek n löses genom uppdelning till två problem av storlek n/2, följt av sammanfogning. Tiden för sammanfogning är proportionell mot n. Varje jämförelse leder till ett nytt element i resultatet. Låt t(n) beteckna tiden att sortera n element. Vi får: c, n = 0 t n = ቐ 2t n + dn, n > 0 2 c och d är obekanta konstanter.
49 Algoritmanalys av mergesort Analys enklast om n exakt 2-potens, n = 2 k t(n) = 2t n 2 + dn = 2 2t n 4 + dn 2 + dn = 4t n + dn + dn = = 4 2 k n t + dnk = 2k nt 1 + dn log n d.v.s. tiden är Θ(n log n), mycket bättre än kvadratisk! (Kan visas även för andra n.)
50 Quicksort Idé: Dela upp genom att flytta små element till vänster och stora element till höger. Sortera de två avsnitten var för sig (rekursivt). Skillnaden mot mergesort är att dela upp först. De två avsnitten kan bli olika stora. Nackdel: Arbetsammare att skapa delproblemen. Fördel: Ingen sammanfogning.
51 Quicksort Vad är ett litet element? Välj element på måfå som delningselement p (pivotelement). Grunden är alltså denna partitionering (quicksort kallas också partition sort). Bra om k blir nära n/2 och dåligt om k blir nära 1 eller n. Partitioneringen appliceras rekursivt på de små respektive de stora talen.
52 Illustration av quicksort
53 Kommentarer quicksort Ofta snabb i praktiken! Svårt att välja pivotelement Θ(n log n) i genomsnitt Θ(n log n) i bästa fall Θ(n 2 ) i värsta fall Hur gör man när partitionerna blir små? (Gäller även mergesort.) Inte stabil, två ekvivalenta element kan byta plats Grund för effektiva metoder för att beräkna median, kvartil
54 Hur vet man om en rekursiv lösning är effektiv? Rekursiva lösningar kan vara mycket effektiva, men också ineffektiva Beräkningsarbetet beror på Arbetet att dela upp i delproblem Antalet delproblem Delproblemens storlek (jämför instickssortering och mergesort) Arbetet som krävs för att kombinera delproblemens lösningar till slutresultat Det finns problem som saknar effektiva, exakta lösningar. Att hitta den kortaste vägen som besöker n platser i någon ordning är ett av dem! Grenad rekursion är OK om delproblemen på varje nivå blir klart mindre än ursprungsproblemet.
55 Effektiva algoritmer, effektiva implementationer Datorer och mobiler är enormt snabba. Spelar effektiva algoritmer roll? Större minne gör att man kan ha större n än tidigare På 80-talet var en miljon element en väldigt lång array En miljon intar använder 4 MB Vi såg hur fort Θ n 2 växer, absolut problem om n > På OU1 får ni se fall med Θ 2 n, grenad rekursion med nästan lika stora delproblem, absolut problem om n > 30 Andra problem kan vara Θ n!, absolut problem om n > 12 Effektiva algoritmer behövs
56 Effektiva implementationer Ofta mindre viktigt att koden som implementerar algoritmen är så snabb som möjligt Olika språk kan göra skillnad Undvika att göra saker två gånger Olika ordning som stegen utförs i Särskilt om läsning/skrivning i minnet kan göras effektivare Är tid pengar? Tid är i alla fall ström Viktigt för mobiler eller datacenter (UPPMAX drar 350 kw)
57 Effektiva implementationer Bra om väderprognoser blir klara innan vädret blir av Sätter gränser för simuleringar och dataanalys i biologi, kemi, fysik Realtidssytem: robotar, självkörande bilar, mobilmaster, ljud och video, spel Hård realtid och mjuk realtid fokus på värsta fall eller genomsnitt Robothandel på finansmarknader Jätteboomen i AI kom mycket av att algoritmer som förut var för tunga nu går effektivt att göra på grafikkort, med rätt programvara
58 Algoritmanalys Vilken kurva är vilken? Θ x Θ x log x Θ x 2 För små värden avgör konstanterna helt (här upp till x = 100)
59 Obligatorisk uppgift 2 Numerisk kalkylator 7 * (5 + 9) 7 * (2 + (3 + (4 + (5 + 6)))) 1=x (variabeltilldelning åt höger, inte som Java) x + 3 sin(0.5=x)=y y ans (alltid svaret på föregående operation)
60 Vad ska göras? Läs en rad med ett uttryck Tolka det uttrycket Parsing, vi använder recursive descent som angreppssätt Använd en tokenizer för att dela upp uttrycket i ord Hantera fel systematiskt, med undantag (exceptions) Evaluera uttrycket Med de variabler som finns definierade Spara nya variabeltilldelningar Med avbildningsklasser (Map, TreeMap, HashMap)
61 Evaluering av aritmetiska uttryck a + (b 1) d e (f + g h)/4 Med prioritetsregler (vänster till höger, multiplikation före addition, parenteser har företräde), delas detta upp i följande uttryck: t 1 = b 1 t 2 = t 1 d t 3 = g h t 4 = f + t 3 t 5 = e t 4 t 6 = t 5 /4 t 7 = a + t 2 t 8 = t 7 t 6 Hur ska vi skriva ett program som hittar den ordningen?
62 Recursive descent a + (b 1) d e (f + g h)/4 Beskriv uttrycket utifrån, från lägst prioritet Tre termer a b 1 d e (f + g h)/4 Termerna ska beräknas för sig och adderas/subtraheras
63 Recursive descent Fortsätt nedåt Vi fortsätter att dela upp uttrycket i delar med högre och högre prioritet Nästa steg är faktorer, varje term består av en eller flera Exempel: Termen e (f + g h)/4 Ingående faktorer: e variabel f + g h uttryck 4 konstant Faktorerna beräknas var för sig och multipliceras/divideras sedan tillsammans.
64 Sammanfattning Ett uttryck En sekvens av en eller flera termer, åtskilda med + eller En term En sekvens av en eller flera faktorer, åtskilda med * eller / En faktor Ett tal eller ett uttryck omgivet av parenteser Rekursion!
65 Beskriva syntax BNF (Backus-Naur-form) expression ::= term [( + / - ) term]* Syntaxdiagram
66 Beskriva syntax Pseudokod ( nästan Java) double expression() double sum = term() while ( nästa tecken + eller - ) Läs förbi tecknet if ( det var ett + ) else sum = sum + term() sum = sum - term() Syntaxdiagram return sum Ett uttryck är en sekvens av en eller flera termer, åtskilda med + eller
67 Vad är viktigt här? Metoden term får inte läsa för långt term måste själv veta när den ska sluta Men som vi sett byggs en term av factor som i sin tur kan vara vilket uttryck (expression) som helst inom parentes Löser rekursionen det åt oss?
68 Term Pseudokod double term() double prod = factor() while ( nästa tecken * eller / ) Läs förbi tecknet if ( det var ett * ) else prod = prod*factor() prod = prod/factor() Syntaxdiagram return prod En term är en sekvens av en eller flera faktorer, åtskilda med * eller /
69 Factor Pseudokod double factor() if ( nästa tecken ( ) Läs förbi tecknet result = expression() Syntaxdiagram if ( nästa tecken inte ) ) FEL! return result else return number() En faktor är ett tal eller ett uttryck omgivet av parenteser
70 Kommentarer Det är alltid nästa symbol som avgör vilken väg som ska väljas Inte titta i förväg Vi blandar inläsning av tecken och tal - man vet inte i förväg om man ska läsa ett tecken eller ett tal. Koden skall hoppa över blanktecken Det finns ingen syntaktisk beskrivning av tal Övning: konstruera kod/diagram för number
71 Kommentarer Hur vet man när ett uttryck är slut? Vad är basfallet/basfallen i rekursionen? Vad händer om man ger felaktiga indata? Vilka typer av fel kan förekomma?
72 Dela upp indata Vi vill läsa ord, tal, operatorer strunta i blanksteg 5+3, 5 + 3, 5+ 3, ska se likadana ut för koden En fil eller det du skriver på tangentbordet blir en ström av tecken En tokeniser går från teckenströmmen till en ström av ord, tokens Vi har redan stött på Scanner Vad som är ett giltigt ord beror lite på tillämpningen. Är kod-exempel ett eller två ord?
73 Stokenizer Vi tillhandahåller en färdig klass Stokenizer som är en anpassning av standardklassen StreamTokenizer. Den är anpassad för det vi behöver i den här uppgiften. Följande olika typer av tokens/ord finns: Tal (number): börjar med siffra Ord (word): börjar med bokstav Radslut (EOL, end of line) Slut på strömmen (EOS, slut på infil/insträng) Övriga tecken
74 Stokenizer Tre viktiga konstruktorer: public Stokenizer() Läs från standard input (tangentbordet) public Stokenizer(String line) Läs strängen line public Stokenizer(FileReader r) Läs från den redan öppnade filen som representeras av r Ett objekt som väl skapats användas överallt där ett sådant objekt behövs Oavsett vilken konstruktor som användes
75 Tre huvudfamiljer av metoder int nexttoken() Gå framåt i strömmen boolean isxxx() Är aktuellt token av typen XXX (Number/Word/EOL/EOS) typ getxxx() Returnerar aktuellt tokeninnehåll. Ger fel om det inte matchar aktuell tokentyp. Går inte att ta reda på tal om det är ett ord, o.s.v.
76 Övriga metoder String tostring() Beskriver aktuellt token i textform med diverse information String gettoken() Aktuellt token som sträng String getprevioustoken() Närmast föregående token som sträng
77 Använda Stokenizer Det går lätt att hämta Stokenizer Dokumentation: Källkod: Demonstrationsprogram Med exempel på läsning från tangentbord, sträng och fil
78 Felhantering Olika språk och olika problem har olika filosofi om felhantering Är det viktigaste att programmet fortsätter köra? Kanske en bra idé att bara köra vidare, även om fel inträffar Inte säkert att det går/ger något rimligt resultat Är det viktigaste att programmet ger rätt svar? Se till att fel alltid rapporteras/hanteras Hantering kan innebära låt programmet krascha
79 Hur kan vi hitta ett fel? Metoder kan returnera när något går fel if (x.move()!= STATUS_OK) { return false; } if (x.eat()!= STATUS_OK) { return false; } if (x.sleep()!= STATUS_OK) { } return false; Om vi glömmer att kolla feltillstånd, eller gör det på fel sätt, kan det vara väldigt svårt att hitta grundorsaken Det här sättet att hantera fel är vanligt i lågnivåspråk, som C Många farliga säkerhetsbuggar kommer av felaktig felhantering
80 Varför blir detta svårt? Flera lager av metoder kan anropa varandra Om kalkylatorn är rekursiv i flera led och använder Stokenizer, som använder Java-biblioteken för att läsa från en fil som finns på en USB-sticka som du tog ur datorn Vilken del av koden vet vad som är rätt sak att göra? Felet måste bubbla upp i flera lager av anrop Varje metod skulle behöva kunna returnera en beskrivning av vilka fel som inträffade Bökigt, ändå risk att någon glömmer
81 Javas lösning - Undantag En metod i Java kommunicerar med anroparen genom returvärdet och förändringar av de objekt som skickades in och genom att potentiellt kasta ett undantag (Exception) Eller mer exakt en Throwable (basklass till Exception) Vissa typer av drastiska fel som OutOfMemoryError och StackOverFlowError är Throwable, men inte Exception
82 Vad är då ett undantag? En instans av en klass Egentligen som vilken klass som helst Ärver (direkt/indirekt) från java.lang.exception Man talar om en subklass till Exception Klassens typ och innehåll beskriver ett fel som har inträffat Arv är mycket vanligt i objektorienterad programmering Det viktigaste är att en instans av en subklass kan användas överallt där basklassen används Varje FileNotFoundException är ett Exception. Men varje Exception är inte ett FileNotFoundException.
83 Klasshierarki java.lang.object java.lang.throwable java.lang.exception java.io.ioexception» java.io.filenotfoundexception java.lang.runtimeexception java.lang.error java.lang.virtualmachineerror» Java.lang.StackOverFlowError Naturligtvis många fler Mycket vanligt att skapa egna undantagsklasser
84 Inte vilken klass som helst Det är bra att vi har ett sätt att kategorisera fel Java har inbyggt stöd i språket för att hantera undantag Undantag kan kastas När ett fel inträffar Metoden som kastar slutar köras Undantag propageras Från den metod som kastar, till den metod som anropade den, till den metod som anropade den
85 Fånga undantag Undantag kan fångas Den metod i anropskedjan som begriper sig på felet kan fånga det Slutar propagera Ibland vill man återkasta (vi kunde inte hantera hela felet, men vi städar upp lite på vägen) Då propagerar det vidare Ett undantag som inte fångas någonstans slutar i att hela programmet slutar köras och att ett fel skrivs ut Det har vi sett många gånger
86 Vad gör man när man fångar? Olika svar kan vara rätt Ovanligt: Fånga utan att göra någonting Ger fel som är svåra att felsöka Vanligt: Skriva ut (på skärmen eller i loggfil) att ett fel inträffade Försöka igen Använda någon typ av reservlösning För kalkylatorn: Rapportera felet och låt användaren göra om
87 Tillbaka lite till SpecialStack Vi har redan kastat RuntimeException throw new RuntimeException("Stack is empty."); throw är det nya här, resten är helt vanlig Javakod som vi redan sett Skapa ett nytt objekt, anropa konstruktorn som tar en sträng Många undantagsklasser har konstruktorer som tar emot en sträng som fungerar som felmeddelande
88 Hur borde vi ha gjort? Egen undantagsklass public class SpecialStackException extends RuntimeException { } public SpecialStackException(String msg) { } super(msg); // anropar basklassens konstruktor Inte mer än så! Bara en konstruktor som tar felmeddelandet.
89 Undantag i kalkylatorn I OU2 ska vi ha två egna undantagsklasser: public class SyntaxException extends RuntimeException { } public SyntaxException(String msg) { } super(msg); public class EvaluationException extends RuntimeException { } public EvaluationException(String msg) { } super(msg);
90 RuntimeException eller Exception Java skiljer egentligen på RuntimeException och Exception RuntimeException kan kastas var som helst Andra subklasser till Exception får bara kastas om de fångas eller om metoden anger throws i metodhuvudet Om SyntaxException ärvde från Exception skulle exempelvis metoden term behöva se ut något så här double term(stokenizer t) throws SyntaxException Vi skippar detta och väljer därför att ärva från RuntimeException
91 Var upptäcks syntaxfel i Inte där! kalkylatorn? Inte där heller! Men här! Däremot kan expression sluta för tidigt, om meningen var att läsa en hel rad
92 Vad kan gå fel? Slutparentes saknas Första token är varken startparentes eller ett tal Vad göra? Kasta SyntaxException!
93 Exempel i kod if (tokenizer.getchar()!= ) ) { throw new SyntaxException("Expected ) but found " + tokenizer.gettoken()); } Detta propageras tills det fångas
94 Fånga i kod Om ett uttryck är ogiltigt är det koden som bad om att parsa uttrycket som kan hantera felet I en tänkt main-metod i lösningen while (true) { try { System.out.print("? "); double value = expression(); System.out.println("Value: " + value); } catch (SyntaxException se) { System.out.println("Syntax error: " + se.getmessage(); // Skip to end of line } }... Koden under catch körs bara om ett SyntaxException inträffar. Om inget undantag inträffar, körs den inte. Om ett annat undantag inträffar, fortsätter det att propageras. Varför är det viktigt att ordna Skip to end of line?
95 Fånga undantag Varför skriver vi inte catch (Exception e) i stället? Då hanterar vi alla fel. Men vi vet inte vad felet egentligen är. Är åtgärden att läsa till slutet av raden och sedan frågan efter nästa uttryck rätt i alla situationer?
96 Undantag eller assert Undantag är ett sätt att hantera fel Fel som det går att undvika, som antas kunna hända i normal drift assert är ett sätt att uttrycka saker som alltid ska gälla Kan användas av automatiska verktyg för att analysera koden Om man kör koden med vissa inställningar kastas ett Error (inte Exception) Inte meningen att det ska fångas eller något man ska lita på, bara ett sätt att identifiera misstag under utveckling Skillnad på fel under körning och logiska fel/misstag i koden
97 Avbildningar - Map Vi har använt arrayer och listor (ArrayList) Java har inbyggt stöd för fler datastrukturer Avbildningar bland de mest användbara Nycklar av en datatyp Högst ett värde per nyckel i avbildningen Samma värde kan förekomma för flera nycklar Vanligt att nycklarna är strängar Namn och tillhörande värden I kalkylatorn kan det vara variabelnamn och deras värden
98 I kod import java.util.treemap; import java.util.hashmap; HashMap<String, double> vars = new HashMap<String, double>(); vars.put("x", 15.0); vars.put("y", vars.get("x")); if (!vars.containskey("y")) { System.out.println("Strange, key just added does not exist."); }
99 Försöka läsa nyckel som inte finns if (vars.get("z") == null) { System.out.println("Getting a key which does not exist yields null, not an Exception"); } Fel som bara indikeras med nullvärde, stor risk att man får ett NullPointerException när det värde man plockade ut ska användas Svårt att se att det berodde på att det saknades i avbildningen Att spara det utplockade värdet i en double ger detta Värdet som lagras är ett objekt av klassen Double som sedan ska konverteras till primitiva typen double
100 Sammanfattning Kod ska vara tydlig Nästa uppgift: numerisk kalkylator Rekursiv parsning av tokens Undantag hjälper oss att skriva rak kod Utan att missa att hantera felen Avbildningar är flexibla datastrukturer
101
F3: Recursive descent, tokenisering, avbildningar och undantag. Carl Nettelblad
F3: Recursive descent, tokenisering, avbildningar och undantag Carl Nettelblad 2017-04-03 Säg vad du vill göra Varför skriver vi kod? För att få datorn att göra det vi vill För att själva läsa koden För
Läs merMedan ni väntar. 2. Skriv metoden. 3. Skriv metoden. Naturligtvis rekursivt och utan användning av Javas standardmetoder.
(10 september 2018 T02 1 ) Medan ni väntar 1. Binär sökning i sorterad array med n element kräver log 2 n försök. Hur många försök krävs i en array med 10 3, 10 6 respektive 10 9 element? 2. Skriv metoden
Läs merAlgoritmanalys. 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 =
Läs merF3: OU2, undantag, avbildningar, listor och träd. Carl Nettelblad
F3: OU2, undantag, avbildningar, listor och träd Carl Nettelblad 2019-04-08 Säg vad du vill göra Varför skriver vi kod? För att få datorn att göra det vi vill För att själva läsa koden För att andra ska
Läs merObligatorisk uppgift: Numerisk kalkylator
Informationsteknologi Tom Smedsaas 22 augusti 2018 Obligatorisk uppgift: Numerisk kalkylator Programmet skall läsa in aritmetiska uttryck samt beräkna och skriva ut deras värden. Programmet ska läsa från
Läs merParsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck
Betrakta följande uttryck a +(b + c) d + e (f + g h) Parsing med Recursive Descent, Avbildningsklasser Tobias Wrigstad (baserat på bilder från Tom Smedsaas) 22 november 2010 Beräkning med regler: multiplikation
Läs merTDDI16 Datastrukturer och algoritmer. Algoritmanalys
TDDI16 Datastrukturer och algoritmer Algoritmanalys 2017-08-28 2 Översikt Skäl för att analysera algoritmer Olika fall att tänka på Medelfall Bästa Värsta Metoder för analys 2017-08-28 3 Skäl till att
Läs merSö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äs merObligatorisk uppgift: Numerisk kalkylator
(12 september 2018 OU2 1 ) Obligatorisk uppgift: Numerisk kalkylator Följande klasser skall ingå Calculator Stokenizer Parser Till stor del given. Kompletteras bara med exceptionhantering. Given - skall
Läs merRekursion 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
Läs merDet är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.
Tentamen Programmeringsteknik II 2015-05-26 Skrivtid: 0800 1300 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg
Läs merKlassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en
Tentamen Programmeringsteknik II 2017-10-23 Skrivtid: 14:00 19:00 Inledning Skrivningen innehåller ett antal bilagor: Bilagan listsandtrees innehåller fyra klasser: Klassen List med några grundläggande
Läs merObligatorisk uppgift: Numerisk kalkylator
(11 april 2016 T03.1 ) Obligatorisk uppgift: Numerisk kalkylator Följande klasser skall ingå Calculator Stokenizer Parser Till stor del given. Kompletteras bara med exceptionhantering. Given - skall användas
Läs merif (n==null) { return null; } else { return new Node(n.data, copy(n.next));
Inledning I bilagor finns ett antal mer eller mindre ofullständiga klasser. Klassen List innehåller några grundläggande komponenter för att skapa och hantera enkellänkade listor av heltal. Listorna hålls
Läs merObligatorisk uppgift 5
(5 oktober 2018 Symbolisk kalkylator 1 ) Obligatorisk uppgift 5 En kalkylator som hanterar uttryck symboliskt dvs värden är uttryck inte bara tal. Uppgiften exemplifierar: objektorientering återanvändning
Läs merFöreläsning 5 Innehåll
Föreläsning 5 Innehåll Algoritmer och effektivitet Att bedöma och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Datavetenskap (LTH) Föreläsning 5 VT 2019 1 / 39 Val av algoritm och datastruktur
Läs merAnmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper
Tentamen Programmeringsteknik II 2018-10-19 Skrivtid: 8:00 13:00 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer
Läs merObjektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11
Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Undantag Engelska: exceptions Skansholm: exceptionella händelser Fel som genereras om man försöker
Läs merFö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
Läs merInlämningsuppgift MiniPlotter
LUNDS TEKNISKA HÖGSKOLA Institutionen för datavetenskap EDAA01 Programmeringsteknik fördjupningskurs Inlämningsuppgift MiniPlotter I den här uppgiften ska ett program som ritar grafer av matematiska funktioner
Läs merFöreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek
Föreläsning 5 Innehåll Val av algoritm och datastruktur Algoritmer och effektivitet Att bedöma och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Det räcker inte med att en algoritm är korrekt
Läs merRekursion 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
Läs merIdag. 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äs merDet är principer och idéer som är viktiga. Skriv så att du övertygar rättaren om att du har förstått dessa även om detaljer kan vara felaktiga.
Tentamen Programmeringsteknik II 2014-0-27 Skrivtid: 0800 100 Tänk på följande Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg
Läs merLägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.
Tentamen Programmeringsteknik II 2017-10-23 Skrivtid: 14:00 19:00 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper. Fyll i försättssidan
Läs merProgrammering för språkteknologer II, HT2014. Rum
Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Sökalgoritmer
Läs merAlgoritmer. Två gränssnitt
Objektorienterad programmering E Algoritmer Sökning Linjär sökning Binär sökning Tidsuppskattningar Sortering Insättningssortering Föreläsning 9 Vad behöver en programmerare kunna? (Minst) ett programspråk;
Läs merTentamen Programmeringsteknik II Inledning. Anmälningskod:
Tentamen Programmeringsteknik II 2016-01-11 Inledning I bilagan finns ett antal mer eller mindre ofullständiga klasser. Några ingår i en hierarki: List, SortedList, SplayList och ListSet enligt vidstående
Läs merGrafik, grafiska användargränssnitt och rörliga bilder
(22 maj 2015 F14.1 ) Grafik, grafiska användargränssnitt och rörliga bilder Viktigt: Grafiska komponenter: Fönster, etiketter, knappar, textfält,... Tekniken med att med genom arv definiera t ex sitt eget
Läs merObjektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11
Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11 Undantag Engelska: exceptions Skansholm: exceptionella händelser Fel som genereras om man försöker
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 merObjektorienterad Programmering (TDDC77)
Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 Outline Felhantering Eclipse Felsökning Command line argumenter
Läs merRekursion 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
Läs merCommand line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016
Command line argumenter Objektorienterad Programmering (TDDC77) Föreläsning VI: eclipse, felsökning, felhantering Ahmed Rezine IDA, Linköpings Universitet Hösttermin 2016 /* Cla. java * Programmet illustrerar
Läs merObjektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2
Objektorienterad programmering E Algoritmer Linjär sökning Binär sökning Tidsuppskattningar Föreläsning 9 Vad behöver en programmerare kunna? (Minst) ett programspråk; dess syntax och semantik, bibliotek
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 merFöreläsning REPETITION & EXTENTA
Föreläsning 18 19 REPETITION & EXTENTA Programmeringsteknik på 45 minuter Klasser och objekt Variabler: attribut, lokala variabler, parametrar Datastrukturer Algoritmer Dessa bilder är inte repetitionsbilder
Läs merF5: Debriefing OU2, repetition av listor, träd och hashtabeller. Carl Nettelblad
F5: Debriefing OU2, repetition av listor, träd och hashtabeller Carl Nettelblad 2017-04-24 Frågor Kommer nog inte att täcka 2 timmar Har ni frågor på OU3, något annat vi har tagit hittills på kursen, listor
Läs merFö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 ADT Stack Grundprinciper: En stack
Läs merTentamen Programmeringsteknik II för STS Skrivtid: Inga hjälpmedel.
Tentamen Programmeringsteknik II för STS 2007-03-09 Skrivtid: 1500-2000 Inga hjälpmedel. Tänk på följande OBS: För betygen 4, 5 och VG kommer något högre gränser än normalt användas. Skriv läsligt! Använd
Läs merFöreläsning 11 Datastrukturer (DAT037)
Föreläsning 11 Datastrukturer (DAT037) Fredrik Lindblad 1 4 december 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037
Läs merGrundkurs 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
Läs merpublic boolean containskey(string key) { return search(key, head)!= null; }
Tentamen Programmeringsteknik II 2009-05-26 med lösningar Skrivtid: 0900-1200 Uppgifter 1. Programbilagan ListMap.java innehåller en klass som implementerar en avbildning mellan mängden strängar och mängden
Läs merAlgoritmer och effektivitet. Föreläsning 5 Innehåll. Analys av algoritmer. Analys av algoritmer Tidskomplexitet. Algoritmer och effektivitet
Föreläsning 5 Innehåll Algoritmer och effektivitet Algoritmer och effektivitet Att bedöma, mäta och jämföra effektivitet för algoritmer Begreppet tidskomplexitet Undervisningsmoment: föreläsning 5, övningsuppgifter
Läs merLänkade strukturer, parametriserade typer och undantag
Länkade strukturer, parametriserade typer och undantag Programmering för språkteknologer 2 Sara Stymne 2013-09-18 Idag Parametriserade typer Listor och länkade strukturer Komplexitet i länkade strukturer
Läs merFelhantering TDDD78, TDDE30, 729A
Felhantering TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Felhantering 2 Ofta antar vi att allt ska fungera Alla filer vi behöver finns går att öppna Tillräckligt mycket minne finns Servrar som
Läs merObligatorisk uppgift 5: Symbolisk kalkylator
Informationsteknologi Tobias Wrigstad IOOP HT10 Obligatorisk uppgift 5: Symbolisk kalkylator Moment: Objektorientering med klasshierarkier, arv och dynamisk bindning samt dynamiska strukturer, undantag,
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 merFöreläsning 11 Innehåll
Föreläsning 11 Innehåll Sortering O(n 2 )-algoritmer: urvalssortering insättningssortering O(n log n)-algoritmer: Mergesort Quicksort Heapsort behandlades i samband med prioritetsköer. Undervisningsmoment:
Läs merFöreläsning 1 Datastrukturer (DAT037)
Föreläsning 1 Datastrukturer (DAT037) Fredrik Lindblad 1 30 oktober 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037
Läs merF7: Rekursiv till iterativ, sammanfattning, genomgång av omtentan Carl Nettelblad
F7: Rekursiv till iterativ, sammanfattning, genomgång av omtentan 2018-08-24 Carl Nettelblad 2018-05-21 Lite administrativt Jättevälkomna att redovisa OU5 före deadline Ni får bättre och mer feedback när
Läs merFö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
Läs merLägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.
Tentamen Programmeringsteknik II 2018-05-28 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper. Fyll i försättssidan
Läs merObservera. Tentamen Programmeringsteknik II Skrivtid:
Tentamen Programmeringsteknik II 2016-10-19 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper. Fyll i försättssidan
Läs merAlgoritmanalys. 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
Läs merList.java. List.java. Printed by Tom Smedsaas
Mar 03, 08 17:48 Page 1/3 class List * Representerar en länkad lista av godtyckliga objekt public class List { ListNode * Noder i listor protected static class ListNode { protected Object data; protected
Läs merTENTAMEN I PROGRAMMERING. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng
TENTAMEN I PROGRAMMERING Ansvarig: Jan Skansholm, tel 7721012 Betygsgränser: Hjälpmedel: Sammanlagt maximalt 60 poäng. På tentamen ges graderade betyg:. 3:a 24 poäng, 4:a 36 poäng och 5:a 48 poäng Skansholm,
Läs merJAVAUTVECKLING 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
Läs merFöreläsning 12 Innehåll
Föreläsning 12 Innehåll Sortering O(n 2 )-algoritmer: urvalssortering insättningssortering O(n log n)-algoritmer: Mergesort Quicksort Datavetenskap (LTH) Föreläsning 12 HT 2017 1 / 38 Sortering Varför
Läs merLägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.
Tentamen Programmeringsteknik II 2016-10-19 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper. Fyll i försättssidan
Läs merTDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 5 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Algoritmanalys Tidskomplexitet, Rumskomplexitet
Läs merFö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
Läs merF9 - Polymorfism. ID1004 Objektorienterad programmering Fredrik Kilander
F9 - Polymorfism ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Polymorfism - flerformighet Vi vet vad metoden heter (signaturen) Men vi vet inte vid anropet exakt vilken metod som faktiskt
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 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 merDatastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6
Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6? DAGENS AGENDA Komplexitet Ordobegreppet Komplexitetsklasser Loopar Datastrukturer Några nyttiga regler OBS! Idag jobbar
Läs merTentamen i Algoritmer & Datastrukturer i Java
Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2008-05-27 Skrivtid: 4 timmar Kontakt person: Nicolina Månsson, tel. 035-167487 Poäng / Betyg:
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 mer1 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
Läs merMagnus Nielsen, IDA, Linköpings universitet
Föreläsning 7 Introduktion till sortering TDDC91,TDDE22,725G97: DALG Utskriftsversion av föreläsning i Datastrukturer och algoritmer 24 september 2018 Magnus Nielsen, IDA, Linköpings universitet 7.1 1
Läs merLägg uppgifterna i ordning. Skriv uppgiftsnummer och din kod överst i högra hörnet på alla papper.
Tentamen Programmeringsteknik II 2016-05-30 Skrivtid: 1400 1900 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Börja alltid ny uppgift på nytt papper. Lägg
Läs merTommy Färnqvist, IDA, Linköpings universitet. 2 Rekursion i C Implementation av rekursion Svansrekursion En till övning...
Föreläsning 15 Rekursion TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 2 november 2015 Tommy Färnqvist, IDA, Linköpings universitet 15.1 Innehåll
Läs merpublic 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)
Läs merProgramkonstruktion och Datastrukturer
Programkonstruktion och Datastrukturer VT 2012 Tidskomplexitet Elias Castegren elias.castegren.7381@student.uu.se Problem och algoritmer Ett problem är en uppgift som ska lösas. Beräkna n! givet n>0 Räkna
Läs merTDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 6 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Sortering Selectionsort, Bubblesort,
Läs merTentamen i Algoritmer & Datastrukturer i Java
Tentamen i Algoritmer & Datastrukturer i Java Hjälpmedel: Skrivhjälpmedel, miniräknare. Ort / Datum: Halmstad / 2010-03-16 Skrivtid: 4 timmar Kontaktperson: Nicolina Månsson Poäng / Betyg: Max 44 poäng
Läs merRepetition av OOP- och Javabegrepp
ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir
Läs merProgrammering för språkteknologer II, HT2014. evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/
Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Hashtabeller
Läs merFöreläsning 2 Datastrukturer (DAT037)
Föreläsning 2 Datastrukturer (DAT037) Fredrik Lindblad 1 1 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037
Läs merProgrammeringsteknik II
Programmeringteknik II Kursintroduktion http://www.it.uu.se/edu/course/homepage/prog2/vt18/ 2018-03-19 Programmeringsteknik II 2018-03-19 1 / 9 Lärare Carl Nettelblad (kursansvarig) Anna Eckerdal Biträdande
Läs merTDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Interface Generiska klasser Undantag
Läs merF4. 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
Läs merFöreläsning Datastrukturer (DAT037)
Föreläsning Datastrukturer (DAT037) Nils Anders Danielsson 2015-12-14 Idag Frågor? Är något oklart inför tentan? Sammanfattning Exempel från föreläsning 1 Dåligt val av datastruktur public class Bits {
Läs merRepetition av OOP- och Javabegrepp
ArrayList Repetition av OOP- och Javabegrepp En lista i vilken man kan lagra objekt Implementerar List-interfacet Skiljer sig från ett vanligt endimensionellt fält: Dynamisk expanderar när den blir
Läs merFöreläsning 4 Datastrukturer (DAT037)
Föreläsning 4 Datastrukturer (DAT07) Fredrik Lindblad 1 november 2017 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt Se http://wwwcsechalmersse/edu/year/2015/course/dat07 1 Innehåll
Läs merExempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.
Institutionen för Datavetenskap Göteborgs universitet HT2008 DIT011 Objektorienterad programvaruutveckling GU (DIT011) Innehåll Föreläsning 4 Exempel på listor (klassen ArrayList). Ett exempel med fält.
Läs merDet ä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äs merFöreläsning 13 Datastrukturer (DAT037)
Föreläsning 13 Datastrukturer (DAT037) Fredrik Lindblad 1 2016-12-14 1 Slides skapade av Nils Anders Danielsson har använts som utgångspunkt. Se http://www.cse.chalmers.se/edu/year/2015/course/dat037 Sammanfattning
Läs merSMD 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
Läs merAnmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper
Tentamen Programmeringsteknik I 2017-03-16 Skrivtid: 0800 1300 Tänk på följande Skriv läsligt. Använd inte rödpenna. Skriv bara på framsidan av varje papper. Lägg uppgifterna i ordning. Skriv uppgiftsnummer
Läs merÖversikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem
Översikt Stegvis förfining Pseudokod Flödesdiagram Dekomposition KISS-regeln Procedurell dekomposition DRY-regeln Algoritmer Sortering och sökning Stegvis förfining Metod för att skapa ett program från
Läs merLägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper.
Tentamen Programmeringsteknik II 2018-05-28 Skrivtid: 0800 1300 Tänk på följande Lägg uppgifterna i ordning. Skriv uppgiftsnummer och din anmälningskod överst i högra hörnet på alla papper. Fyll i försättssidan
Läs merObjektorienterad Programkonstruktion. Föreläsning 4 8 nov 2016
Objektorienterad Programkonstruktion Föreläsning 4 8 nov 2016 Nästade klasser I Java går det att deklarera en klass inuti en annan klass. Vi kallar detta för att en yttre klass innehåller en inre klass.
Läs merLite 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?
Läs merDel 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
Läs merMetodanrop - 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
Läs merTestning av program. Verklig modell för programutveckling
Fel i program När man skriver program uppkommer alltid fel. Felen kan indelas i följande kategorier: Under kompileringen upptäcker kompilatorn fel som handlar om att man använt konstruktionerna i programspråket
Läs merFöreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel
Föreläsning 3 Innehåll Generiska klasser Implementera generiska klasser Exceptions Dokumentationekommentarer javadoc Enhetstestning - junit Man kan deklarera en eller flera typparametrar när man definierar
Läs merTDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU
TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU På denna föreläsning: Mer om Interface Generiska klasser Undantag Nästlade klasser 1
Läs mer