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

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

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

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

Metoder - en funktion: medel

Föreläsning 9: Arv och UML

Föreläsning 2, vecka 8: Repetition

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

OOP Objekt-orienterad programmering

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

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 11: Rekursion

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

Tentamen i Algoritmer & Datastrukturer i Java

Tentamen i Algoritmer & Datastrukturer i Java

Algoritmer. Två gränssnitt

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

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

Laboration 13, Arrayer och objekt

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Föreläsning REPETITION & EXTENTA

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

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista

Föreläsning 1, vecka 7: Rekursion

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

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

JAVAUTVECKLING LEKTION 8

OOP Tenta

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

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

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

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

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

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

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

Tentamen. Lösningsförslag

Typkonvertering. Java versus C

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

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

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

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

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

TENTAMEN OOP

DAT043 Objektorienterad Programmering

Tentamen i Objektorienterad programmering

Länkade strukturer. (del 2)

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

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

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

Föreläsning 3-4 Innehåll

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

Laboration A Objektsamlingar

Datastrukturer. föreläsning 3. Stacks 1

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

Föreläsning 4. ADT Kö Kö JCF Kö implementerad med en cirkulär array Kö implementerad med en länkad lista Läsanvisningar och uppgifter

Tentamen. DD2385 Programutvecklingsteknik vt 2014 Måndagen den 2 juni 2014 kl Hjälpmedel: penna, suddgummi, linjal

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

Tentamen i Programmering

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

Objektorienterad programmering i Java

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Del A (obligatorisk för alla)

Klassen BST som definierar binära sökträd med tal som nycklar och enda data. Varje nyckel är unik dvs förekommer endast en

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.

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

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Föreläsning 2. Länkad lista och iterator

Programmering för språkteknologer II, HT2011. Rum

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

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

Dugga i Grundläggande programmering STS, åk

Tentamen , Introduktion till Java, dtaa98, dtea53

Tentamen i Objektorienterad programmering E

Lösningsförslag till exempeltenta 2

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

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

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

TENTAMEN OOP

Objektorienterad Programmering (TDDC77)

ADS : STACK ADT: STACK. Stack och Kö -Implementering - Tilllämpningar. Oftast förekommande metoder i Stack. TopOfStack

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

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

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Föreläsning Datastrukturer (DAT036)

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

Föreläsning 3. Stack

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

TENTAMEN: Objektorienterad programutveckling, fk. Läs detta! Börja varje hel uppgift på ett nytt blad. Skriv inte i tesen.

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

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

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

Lösningar för tenta 3 DAT043,

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

Transkript:

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 metoder informationsdöljande och inkapsling skapa och använda färdiga objekt! primitiva variabler kontra objektvariabler 3 tester på likhet metoder fält (arrays) att konstruera en klass Javadoc Nu har vi en föreläsning som består av bara exempel, t.ex. hur man tolkar felutskrifter från kompilatorn.

Idag Nu har vi en föreläsning som består av bara exempel, t.ex. hur man tolkar felutskrifter från kompilatorn. Observera att när man utvecklar program så är inte alla lösningar på vägen korrekta. Idag diskuterar vi (interaktivt!) problemlösning i programmering. Denna föreläsning är repetition av tidigare material.

En tentauppgift med lösning: Skriv en metod void columnsort(int[][] x) som givet en matris x sorterar varje kolumn. Skriv också en metod print(int[][] x) som skriver ut en matris. Skriv sedan kod som skapar första matrisen nedan, anropar columnsort och sedan print som då skriver den andra matrisen nedan. Exempel: om x är första 5x7 matrisen nedan så skall metoden columnsort arrangera matrisen som andra matrisen nedan. Låter detta svårt? Ifall det gör det lönar det sig att börja med att försöka lösa ett lättare problem. 12 6 7 17 18 19 8 0 14 8 15 5 3 2 7 2 1 6 9 18 21 1 5 9 3 7 11 2 89 12 6 1 0 19 27 ------------------------ skall bli: 0 2 1 1 0 3 2 1 5 6 3 5 11 2 7 6 7 6 7 18 8 12 12 8 15 9 19 21 89 14 9 17 18 19 27

Sortering Hur sorterar man ett fält av ints? int[] a = { 5, 1, 2, 6, 3, 9 ; Läs om bubble sort på nätet, t.ex. titta på en video om bubble sort. https://www.youtube.com/watch?v=lyzqpjut5b4

Sortering Hur sorterar man ett fält av ints? Denna kod byter två element i fältet. int tmp0 = a[i]; int tmp1 = a[i+1]; a[i] = tmp1; a[i+1] = tmp0;

Sortering Hur sorterar man ett fält av ints? Denna kod byter två element i fältet, ifall de inte är i ordning. if (a[i] > a[i+1]) { int tmp0 = a[i]; int tmp1 = a[i+1]; a[i] = tmp1; a[i+1] = tmp0;

Sortering Hur sorterar man ett fält av ints? Denna kod bubblar upp det största elementet till slutet av fältet. for (int i=0; i<a.length- 1; i++) { if (a[i] > a[i+1]) { int tmp0 = a[i]; int tmp1 = a[i+1]; a[i] = tmp1; a[i+1] = tmp0;

Sortering Hur sorterar man ett fält av ints? Denna kod sorterar fältet genom att köra a.length-1 bubblingar. for (int j=0; j<a.length- 1; j++) { for (int i=0; i<a.length- 1; i++) { if (a[i] > a[i+1]) { int tmp0 = a[i]; int tmp1 = a[i+1]; a[i] = tmp1; a[i+1] = tmp0;

Sortering Hur sorterar man ett fält av ints? Denna kod sorterar fältet genom att köra a.length-1 bubblingar. for (int j=0; j<a.length- 1; j++) { for (int i=0; i<a.length- 1; i++) { if (a[i] > a[i+1]) { int tmp0 = a[i]; int tmp1 = a[i+1]; a[i] = tmp1; a[i+1] = tmp0; Hur vet vi om koden är korrekt?

Sortering Hur sorterar man ett fält av ints? Vi kan skriva ut lite debug data för att testa programmet. System.out.print("a = { "); for (int i=0; i<a.length; i++) { System.out.print(a[i] + " "); System.out.println(""); Exempel utskrift: a = { 5 1 2 6 3 9

Sortering av ett fält Hela koden: public class Test { public static void print(int[] a) { System.out.print("a = { "); for (int i=0; i<a.length; i++) { System.out.print(a[i] + " "); System.out.println(""); public static void main(string[] args) { int[] a = { 5,1,2,6,3,9 ; print(a); for (int j=0; j<a.length- 1; j++) { for (int i=0; i<a.length- 1; i++) { if (a[i] > a[i+1]) { int tmp0 = a[i]; int tmp1 = a[i+1]; a[i] = tmp1; a[i+1] = tmp0; print(a);

En tentauppgift med lösning: Skriv en metod void columnsort(int[][] x) som givet en matris x sorterar varje kolumn. Skriv också en metod print(int[][] x) som skriver ut en matris. Skriv sedan kod som skapar första matrisen nedan, anropar columnsort och sedan print som då skriver den andra matrisen nedan. Exempel: om x är första 5x7 matrisen nedan så skall metoden columnsort arrangera matrisen som andra matrisen nedan. 12 6 7 17 18 19 8 0 14 8 15 5 3 2 7 2 1 6 9 18 21 1 5 9 3 7 11 2 89 12 6 1 0 19 27 ------------------------ skall bli: 0 2 1 1 0 3 2 1 5 6 3 5 11 2 7 6 7 6 7 18 8 12 12 8 15 9 19 21 89 14 9 17 18 19 27

Sortering av kolumner i matris Hur representerar man matriser i Java? int[][] a = { { 12, 6, 7, 17, 18, 19, 8, { 0, 14, 8, 15, 5, 3, 2, { 7, 2, 1, 6, 9, 18, 21, { 1, 5, 9, 3, 7, 11, 2, { 89, 12, 6, 1, 0, 19, 27 ;

Sortering av kolumner i matris Vi börjar med att skriva en print metod: for går genom alla kolumner for går genom alla element i raden skriver ut ett element byter till nästa rad public static void print(int[][] x) { for (int i=0; i<x.length; i++) { System.out.print("Rad " + i + ": "); for (int j=0; j<x[i].length; j++) { System.out.print(x[i][j] + " "); System.out.println(""); Exempel utskrift: Rad 0: 12 6 7 17 18 19 8 Rad 1: 0 14 8 15 5 3 2 Rad 2: 7 2 1 6 9 18 21 Rad 3: 1 5 9 3 7 11 2 Rad 4: 89 12 6 1 0 19 27

Sortering av kolumner i matris Så här kan vi ändra koden för sortering av ett fält till kod som sorterar den första kolumnen. for (int j=0; j<a.length- 1; j++) { for (int i=0; i<a.length- 1; i++) { if (a[i][0] > a[i+1][0]) { int tmp0 = a[i][0]; int tmp1 = a[i+1][0]; a[i][0] = tmp1; a[i+1][0] = tmp0;

Sortering av kolumner i matris Med en for-loop kan vi få alla kolumner sorterade. for (int k=0; k<a[0].length; k++) { for (int j=0; j<a.length- 1; j++) { for (int i=0; i<a.length- 1; i++) { if (a[i][k] > a[i+1][k]) { int tmp0 = a[i][k]; int tmp1 = a[i+1][k]; a[i][k] = tmp1; a[i+1][k] = tmp0;

Sortering av kolumner i matris och så här sätter vi koden in i en metod. public static void columnsort(int[][] a) { for (int k=0; k<a[0].length; k++) { for (int j=0; j<a.length- 1; j++) { for (int i=0; i<a.length- 1; i++) { if (a[i][k] > a[i+1][k]) { int tmp0 = a[i][k]; int tmp1 = a[i+1][k]; a[i][k] = tmp1; a[i+1][k] = tmp0;

Svar på tentafrågan public Hela koden: class Test2 { Så här kör vi programmet: $ javac Test2.java $ java Test2 Rad 0: 12 6 7 17 18 19 8 Rad 1: 0 14 8 15 5 3 2 Rad 2: 7 2 1 6 9 18 21 Rad 3: 1 5 9 3 7 11 2 Rad 4: 89 12 6 1 0 19 27 Rad 0: 0 2 1 1 0 3 2 Rad 1: 1 5 6 3 5 11 2 Rad 2: 7 6 7 6 7 18 8 Rad 3: 12 12 8 15 9 19 21 Rad 4: 89 14 9 17 18 19 27 public static void print(int[][] x) { System.out.println(); for (int i=0; i<x.length; i++) { System.out.print("Rad " + i + ": "); for (int j=0; j<x[i].length; j++) { System.out.print(x[i][j] + " "); System.out.println(); public static void columnsort(int[][] a) { for (int k=0; k<a[0].length; k++) { for (int j=0; j<a.length- 1; j++) { for (int i=0; i<a.length- 1; i++) { if (a[i][k] > a[i+1][k]) { int tmp0 = a[i][k]; int tmp1 = a[i+1][k]; a[i][k] = tmp1; a[i+1][k] = tmp0; public static void main(string[] args) { int[][] a = { { 12, 6, 7, 17, 18, 19, 8, { 0, 14, 8, 15, 5, 3, 2, { 7, 2, 1, 6, 9, 18, 21, { 1, 5, 9, 3, 7, 11, 2, { 89, 12, 6, 1, 0, 19, 27 ; columnsort(a); print(a);

Implementera en kö /** This class implements a queue of objects. New elements can join at * the back of the queue (method: put). Elements are removed from the * front of the queue (method: pop). */ public class Queue { /** Constructs an empty queue. */ public Queue () { /** Returns true if the queue is empty. */ public boolean isempty () { /** Returns the first element in the queue, if the queue is * non- empty. */ public Object getfirst () { /** Adds an element to the back of the queue. */ public void put (Object o) { /** Removes the first element from the queue, if the queue is * non- empty.. */ public void pop () {

Implementera en kö Man måste alltid ha en idé för hur koden ska fungera innan man börjar skriva. Idé: En kö kan implementeras av en array (ett fält). En kö: 0 1 2 3 4 A B C D E först i kön sist i kön

Implementera en kö public class Queue1 { private Object[] q; /** Constructs an empty queue. */ public Queue1 () { q = new Object[0]; internt tillstånd har arrayn som representerar kön utgångsvärdet är en tom array /** Returns true if the queue is empty. */ public boolean isempty () { return (q.length == 0); /** Returns the first element in the queue, if the queue is * non- empty. */ public Object getfirst () { return q[0]; /** Adds an element to the back of the queue. */ public void put (Object o) { Object[] tmp = new Object[q.length+1]; for (int i=0; i<q.length; i++) { tmp[i] = q[i]; tmp[q.length] = o; q = tmp; /** Removes the first element from the queue, if the queue is * non- empty. */ public void pop () { if (!(isempty())) { Object[] tmp = new Object[q.length- 1]; for (int i=1; i<q.length; i++) { tmp[i- 1] = q[i]; q = tmp; kopierar till ny array kopierar till ny array main testar koden public String tostring() { String str = ""; for (int i=0; i<q.length; i++) { str = str + " " + q[i]; return str; /** Test */ public static void main(string[] args) { Queue1 t = new Queue1(); t.put("a"); t.put("b"); t.put("c"); System.out.println(t.toString()); t.put("d"); System.out.println(t.toString()); t.pop(); System.out.println(t.toString()); t.pop(); System.out.println(t.toString());

Bättre implementation (mindre kopering) Ny idé: En kö kan implementeras av en array (ett fält). En kö: 0 1 2 3 4 A B C D E 5 6 7 8 9 null null null null null först i kön sist i kön vi låter de sista vara oanvända (null) Vi behöver ny en variabel som visar hur mycket av arrayn som vi använder.

public class Queue { private Object[] q; private int l; Implementera en kö /** Constructs an empty queue. */ public Queue () { q = new Object[10]; l = 0; ny variabel l /** Returns true if the queue is empty. */ public boolean isempty () { return (l == 0); /** Returns the first element in the queue, if the queue is * non- empty. */ public Object getfirst () { return q[0]; /** Adds an element to the back of the queue. */ public void put (Object o) { if (l < q.length) { q[l] = o; l = l+1; else { Object[] tmp = new Object[q.length+10]; for (int i=0; i<q.length; i++) { tmp[i] = q[i]; tmp[q.length] = o; q = tmp; l = l+1; kopierar inte alltid /** Removes the first element from the queue, if the queue is * non- empty. */ public void pop () { if (!(isempty())) { for (int i=1; i<l; i++) { q[i- 1] = q[i]; l = l- 1; q[l] = null; public String tostring() { String str = ""; for (int i=0; i<l; i++) { str = str + " " + q[i]; return str; main testar koden /** Test */ public static void main(string[] args) { Queue t = new Queue(); t.put("a"); t.put("b"); t.put("c"); System.out.println(t.toString()); t.put("d"); System.out.println(t.toString()); t.pop(); System.out.println(t.toString()); t.pop(); System.out.println(t.toString());

Ännu bättre Ny idé: samma som förr men låt början av kön åka runt. En kö: 0 1 2 3 4 5 6 7 8 9 D E null null null null null A B C sist i kön först i kön Det fina med det här är att vi aldrig behöver kopiera i pop-metoden. Implementeringstips: använda modulus, dvs %, för att komma åt elementen.

Personnummer Skriv ett program som beräknar kontrollsiffran till ett inmatat personnummer (9 siffror).