Föreläsning 12: Exempel och problemlösning

Slides:



Advertisements
Liknande presentationer
Interface.  Interface är en datatyp och har alltså egen syntax och en hel del egna regler för vad arv från interface innebär.  Interface är renodlad.
Advertisements

Algoritmer och data strukturer -Länkade listor
Next previous Internetprogrammering 2000 Internetprogrammering 2000 Föreläsning 10 Distribuerad programmering med Javas RMI, Remote Method Invocation.
Fortsättningskurs i Programmering lektion 6
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Programmeringsteknik för K och Media
Att programmera i språket Java
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
4. Arv och dynamisk bindning
Vektorer (klassen Vector) Sortering
Mer om arv - Polymorfism Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling Fredric Ragnar
OOP Objekt-orienterad programmering
Programmeringsteknik för Media1 & K1
OOP F6:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 6 Mer om klasser och objekt Hantera många objekt ArrayList toString() – metoden.
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
Rekursiva algoritmer Hur När Bra/Dåligt (kap 7).
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Metoder -Lokala variabler -Mera om klasser: -Nyckelorden.
Föreläsning 5, Kapitel 5 Använda Java-bibliotek för att få avancerad funktionalitet Kursbok: “Objects First with Java - A Practical Introduction using.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
Next previous RMI, Remote Method Invocation Om du har boken av Marty Hall, läs avsnitt 15.8 För fler exempel se:
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
1. Ett problem/uppgift.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 1 Om kursen Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Class VattenKraft{ public static void main(String[] args){ int num=150; int i, totflöde, maxflöde; int[] fall = new int[num]; //vattenflödet i vattenfallen.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
TILLÄMPAD DATALOGI (TILDA) Övning 1 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Övning 3. Repetition Metoder class RepetitionMetoder { public static void main(String [] args) double längd = 2.0; double bredd = 1.0; double area =
TILLÄMPAD DATALOGI (TILDA) Övning 2
TILLÄMPAD DATALOGI (TILDA) Övning 2
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
1 Övning6 Läsning från fil till java objekt Sökning Sortering.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
OOP&M - teori1 OOP– Föreläsning vecka Genomgång uppgifter Arbetsmetoder Repetition Kapitel 14 Metoder.
Föreläsning 7 Metoder Parametrar Klassmetod.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Föreläsning Klass Cirkel, Punkt Klassen Object Arv, överskuggning
Malmö högskola Rolf Axelsson 2003/2004 DA7231, 4 poäng Referensvariabel Klass och konstruktorer Klass med set- och get-metoder Klass och fält Fler metoder.
Arv, abstrakta klasser och gränssnitt
OOP&M - teori1 OOPM del II – Föreläsning vecka Abstrakta klasser/metoder igen Gränssnitt/Interface klasser igen tillämpat.
Malmö högskola Rolf Axelsson 2004/2005 DA7350, 10 poäng char Klassen String Klass och attribut Klass och metoder Föreläsning 30/
För utveckling av verksamhet, produkter och livskvalitet. Algoritmer och datastrukturer Sökning, Symbol tabeller Binära sökträd.
Gruppövning Applikationsprogramering Klassuppdelning Loose Coupling Model View Controller Inversion of Control Layout med Swing JSplitPane Mouse-over Events.
Länkade listor á la C/C++
Föreläsning 16: Tentan, att förbereda sig…
Föreläsning 3: Booleans, if, switch
Föreläsning 6: Metoder och fält (arrays)
Föreläsning 15: Exceptions & lite swing, gränssnitt
Föreläsning 4: for, while, do-while
Föreläsning 11: Rekursion
Föreläsning 8: Exempel och problemlösning
Innehåll: Arrays Arraylists For loops For-each loops
Föreläsning 9: Arv och UML
Föreläsning 5: Att använda klasser & objekt
Repetitionsföreläsning 2: Quiz & problemlösning med swing
Föreläsning 10: Abstrakta klasser, gränssnitt
Algoritmer och datastrukturer, förel. 1
Repetitionsföreläsning 1: Lite rekursion & problemlösning
Presentationens avskrift:

Föreläsning 12: Exempel och problemlösning TDA 545: Objektorienterad programmering Magnus Myréen Chalmers, läsperiod 1, 2015-2016

Koden som skrivs kommer upp på websidan efter lektionen. Idag Problemlösning, dvs hur man “ska tänka” för att hitta lösning int mängd/set (att skriva klass, arrays, testning) testning av Goldbachs hypotes (arrays) quicksort (arrays, rekursion) Idag skriver vi koden interaktivt. Koden som skrivs kommer upp på websidan efter lektionen. Kom med förslag. Fråga frågor! Nästa två föreläsningar: swing, grafik, händelser; läs kap 19

IntSet implementera klassens metoder [6 poäng] /** This class creates *immutable* objects that * represent sets of integer numbers. */ public class IntSet { // ... /** Creates a new IntSet object containing the * integers that appear in the content array. */ public IntSet(int[] content) { } /** Returns true if n is a member of the set, * otherwise it returns false. */ public boolean hasInt(int n) { implementera klassens metoder [6 poäng] skriv ett enkelt testprogram [3 poäng] förklara hur man kan optimera koden [6 poäng]

IntSet, del (a) public class IntSet { int[] a; // always non-null public IntSet(int[] content) { if (content == null) { a = new int[0]; } else { a = new int[content.length]; for (int i=0; i < a.length; i++) { a[i] = content[i]; } public boolean hasInt(int n) { if (a[i] == n) { return true; return false;

IntSet, del (b) public static void main(String[] args) { int[] arr = {2,6,1,7,9,2,34,7}; IntSet s = new IntSet(arr); System.out.println("s.hasInt(0) = " + s.hasInt(0)); arr[5] = 0; System.out.println("s.hasInt(2) = " + s.hasInt(2)); }

IntSet, del (c) public class IntSet { int[] a; // always non-null and sorted public IntSet(int[] content) { if (content == null) { a = new int[0]; } else { a = new int[content.length]; for (int i=0; i < a.length; i++) { a[i] = content[i]; } BubbleSort.sort(a); public boolean hasInt(int n) { return BinarySearch.lookup(n,a); Obs: uppgiften krävde inte konkret kod, men här ger jag koden.

Goldbachs hypotes (från övningstenta 2006) Hypotesen: “Alla jämna heltal (större än 2) kan skrivas som en summa av två primtal.” Hypotesen: Skriv ett program som kan användas för att testa denna hypotes.

public class Goldbach { public static boolean isPrime(int n) { for (int i=2;i<n;i++) { if (n % i == 0) { return false; } return true; public static void findSum(int n) { if (n % 2 == 1) { return; } for (int p = (n/4*2)+1; p > 0; p--) { if (isPrime(p) && isPrime(n-p)) { System.out.println(n + " = " + p + " + " + (n-p)); return; System.out.println("Goldbach was wrong!"); public static void main(String[] args) { findSum(8); findSum(50); findSum(500);

Implementera Quicksort Så här fungerar Quicksort: steg 1: Välj ett element i arrayn, t.ex. 34. 34 | 23 | 12 | 78 | 24 | 2 | 89 | 1 23 | 12 | 24 | 2 | 1 78 | 89 34 Dela arrayn i två: en del med elementen mindre än 34, och en del med de som är större än 34. steg 2: Kör Quicksort rekursivt på de två delarna av arrayn. steg 3: https://www.youtube.com/watch?v=kPRA0W1kECg&t=39 Video:

Quicksort utan debug kod public class Quicksort { private static void swap(int i, int j, int[] arr) { int ti = arr[i]; int tj = arr[j]; arr[i] = tj; arr[j] = ti; } private static int partition(int b, int e, int[] arr) { int k = arr[b]; int i = b+1; int j = e; while (i < j) { if (arr[i] < k) { i = i+1; } else { swap(i,j-1,arr); j = j-1; swap(b,i-1,arr); return i-1; private static void qsortAux(int b, int e, int[] arr) { if (b+1 < e) { int k = partition(b,e,arr); qsortAux(b,k,arr); qsortAux(k+1,e,arr); public static void qsort(int[] arr) { qsortAux(0,arr.length,arr); public static void main(String[] args) { int[] arr = { 3, 1, 5, 4, 6, 2, 8, -3, 15, 67 }; System.out.println("\nBefore qsort:"); for (int k=0;k<arr.length;k++) { System.out.println(" arr["+k+"] = " + arr[k]); qsort(arr); System.out.println("\nAfter qsort:"); System.out.println("");

Quicksort som sorterar Objekt Utskrift: public class QuicksortOO { private static void swap(int i, int j, Comparable[] arr) { Comparable ti = arr[i]; Comparable tj = arr[j]; arr[i] = tj; arr[j] = ti; } private static int partition(int b, int e, Comparable[] arr) { Comparable k = arr[b]; int i = b+1; int j = e; while (i < j) { if (arr[i].compareTo(k) < 0) { i = i+1; } else { swap(i,j-1,arr); j = j-1; swap(b,i-1,arr); return i-1; private static void qsortAux(int b, int e, Comparable[] arr) { if (b+1 < e) { int k = partition(b,e,arr); qsortAux(b,k,arr); qsortAux(k+1,e,arr); public static void qsort(Comparable[] arr) { qsortAux(0,arr.length,arr); public static void main(String[] args) { Circle[] arr = { new Circle(3), new Circle(1), new Circle(5), new Circle(4), new Circle(6), new Circle(67), new Circle(8), new Circle(15), new Circle(2) }; System.out.println("\nBefore qsort:"); for (int k=0;k<arr.length;k++) { System.out.println(" arr["+k+"] = " + arr[k]); qsort(arr); System.out.println("\nAfter qsort:"); System.out.println(""); public class Circle implements Comparable { private int radius; public Circle(int radius) { this.radius = radius; } public String toString() { return "<< circle with radius " + radius + " >>"; public int compareTo(Object o) { if (o instanceof Circle) { Circle other = (Circle)o; int otherRadius = other.radius; return this.radius - other.radius; } else { return -1; Before qsort: arr[0] = << circle with radius 3 >> arr[1] = << circle with radius 1 >> arr[2] = << circle with radius 5 >> arr[3] = << circle with radius 4 >> arr[4] = << circle with radius 6 >> arr[5] = << circle with radius 67 >> arr[6] = << circle with radius 8 >> arr[7] = << circle with radius 15 >> arr[8] = << circle with radius 2 >> After qsort: arr[0] = << circle with radius 1 >> arr[1] = << circle with radius 2 >> arr[2] = << circle with radius 3 >> arr[4] = << circle with radius 5 >> arr[5] = << circle with radius 6 >> arr[8] = << circle with radius 67 >> Utskrift: