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

Relevanta dokument
Föreläsning 8: Exempel och problemlösning

Föreläsning 1, vecka 7: Rekursion

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

Föreläsning 11: Rekursion

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Laboration 13, Arrayer och objekt

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Föreläsning 3: Booleans, if, switch

Repetitionsföreläsning 2: Quiz & problemlösning med swing Inget nytt material.

Föreläsning 1, vecka 8: Att förbereda sig för tentan

Tentamen i Algoritmer & Datastrukturer i Java

Detta dokument är ett exempel, cirka andra hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Detta dokument är ett exempel, cirka hälften av en tentamen för TDA545 Objektorienterad programvaruutveckling

Del A (obligatorisk för alla)

OOP Objekt-orienterad programmering

Den som bara har en hammare tror att alla problem är spikar

Föreläsning 2, vecka 8: Repetition

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 2

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Tentamen. Lösningsförslag

Föreläsning 6: Metoder och fält (arrays)

Objektorienterad programmering E. Back to Basics. En annan version av printtable. Ett enkelt exempel. Föreläsning 10

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Tentamen på kursen DA7351, Programmering , kl Malmö högskola Teknik och samhälle. DA7351, Programmering

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

Lösningsförslag. Programmeringsmetodik, KV: Java och OOP. 17 januari 2004

Lösningsförslag till omtentamen för TDA540 Objektorienterad Programmering

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

DAT043 Objektorienterad Programmering

Lösningar för tenta 3 DAT043,

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Föreläsning REPETITION & EXTENTA

TENTAMEN OOP

Funktioner. Programmering. Egendefinierade funktioner i Java. En Java-funktions anatomi. hh.se/db2004. Statiska metoder. Funktioner. resultatvärde.

Malmö högskola 2007/2008 Teknik och samhälle

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

JAVAUTVECKLING LEKTION 8

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

Övning 4. I denna övning ska vi titta på icke-muterbarhet kontra muterbarhet, samt metoderna equals, hashcode och clone.

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Föreläsning 2 Datastrukturer (DAT037)

Modelsvar för Tentamen för Objektorienterad programvaruutveckling, TDA545

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

Föreläsning 7. Träd och binära sökträd

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

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

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Algoritmer. Två gränssnitt

Malmö högskola 2008/2009 CTS

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Tentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

Tentamen i Programmeringsteknik I

TENTAMEN OOP

Typkonvertering. Java versus C

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

Instuderingsfrågor, del D

Lösningsförslag till tentamen i EDA011 Programmeringsteknik för F, E, I, π och N

Lösningar till tentamen i EDAF25

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

BST implementering, huvudstruktur

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Föreläsning 3-4 Innehåll

TDA550 Objektorienterad programvaruutveckling IT, forts. kurs Övning vecka 5

Objektorienterad programmering i Java

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

TDDD78 Viktiga begrepp, del 2

Föreläsning 2 Datastrukturer (DAT037)

Del A (obligatorisk för alla)

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

OOP Tenta

Vad handlar kursen om? Algoritmer och datastrukturer. Vad handlar kursen om? Vad handlar kursen om?

Tentamen OOP

Outline. Objektorienterad Programmering (TDDC77) En frukt har ett namn. Man kan lägga en frukt i en korg... Hashing. Undantag. Ahmed Rezine.

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

Objektorienterad Programmering (TDDC77)

OOP Objekt-orienterad programmering

SI-pass 4. Johan Brook och Jesper Persson. 25 september Diskutera och svara på om påståendena nedan är äkta sanningar eller listiga lögner.

TENTAMEN OOP

Föreläsning 9: Arv och UML

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Föreläsning 7. Träd och binära sökträd

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Programmering för Språkteknologer II. Innehåll. Associativa datastrukturer. Associativa datastrukturer. Binär sökning.

Tentamen Programmeringsteknik II och NV2 (alla varianter) Skriv bara på framsidan av varje papper.

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Tentamen. Programmeringsmetodik, KV: Java och OOP. 20 januari 2005

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Laboration A Objektsamlingar

Transkript:

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 (att skriva klass, arrays, testning) testning av Goldbachs hypotes (arrays) quicksort (arrays, rekursion) Idag skriver vi koden interaktivt. Kom med förslag. Fråga frågor! Koden som skrivs kommer upp på websidan efter lektionen. Nästa två föreläsningar: swing, grafik, händelser; läs kap 19

IntSet /** 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) { //... a) implementera klassens metoder [6 poäng] b) skriv ett enkelt testprogram [3 poäng] c) 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) { for (int i=0; i < a.length; i++) { 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(0) = " + s.hasint(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. 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 steg 2: Dela arrayn i två: en del med elementen mindre än 34, och en del med de som är större än 34. 23 12 24 2 1 34 78 89 steg 3: Kör Quicksort rekursivt på de två delarna av arrayn. Video: h"#s://www.yout-be.com/watch?v=kpra0w1kecg&t=39

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; Quicksort utan debug kod 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:"); for (int k=0;k<arr.length;k++) { System.out.println(" arr["+k+"] = " + arr[k]); System.out.println("");

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; Quicksort som sorterar Objekt 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:"); for (int k=0;k<arr.length;k++) { System.out.println(" arr["+k+"] = " + arr[k]); 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; Utskrift: 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[3] = << circle with radius 4 >> arr[4] = << circle with radius 5 >> arr[5] = << circle with radius 6 >> arr[6] = << circle with radius 8 >> arr[7] = << circle with radius 15 >> arr[8] = << circle with radius 67 >>