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

Relevanta dokument
Uno Holmer, Chalmers, :17 Uno Holmer, Chalmers, :17

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

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

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

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

Föreläsning 3-4 Innehåll

Föreläsning 2 Datastrukturer (DAT037)

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

DAT043 - föreläsning 8

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

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

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

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

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

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Lösningsförslag till tentamen Datastrukturer, DAT037,

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

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

Saker du ska kunna Föreläsning 13 & 14

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

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

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Objektorienterad programmering i Java

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 2 Datastrukturer (DAT037)

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

TDDC77 Objektorienterad Programmering

Del A (obligatorisk för alla)

Typkonvertering. Java versus C

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

Exempel: Förel Rekursion III Nr 14. Uno Holmer, Chalmers,

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

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

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

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

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

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

Föreläsning 2, vecka 8: Repetition

OOP Objekt-orienterad programmering

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

Repetition av OOP- och Javabegrepp

Föreläsning 10. ADT:er och datastrukturer

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Föreläsning REPETITION & EXTENTA

Repetition av OOP- och Javabegrepp

Tentamen , Introduktion till Java, dtaa98, dtea53

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

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

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

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

(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

Tentamen. Lösningsförslag

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

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Föreläsning Datastrukturer (DAT036)

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 5 Erik Nilsson, Institutionen för Datavetenskap, LiU

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

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 6: Metoder och fält (arrays)

Laboration A Objektsamlingar

DAT043 Objektorienterad Programmering

JAVAUTVECKLING LEKTION 8

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

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

BST implementering, huvudstruktur

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Föreläsning 3 Datastrukturer (DAT037)

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Arrayer. results

Kapitel 6. Kapitel 6. Hakparenteser fšr att ange index float[] priser = new float[500]; frekvens[4] boolean[] flaggor;

Kungliga Tekniska Högskolan Ämneskod 2D4134 Nada Tentamensdag maj - 19 Tentamen i Objektorientering och Java Skrivtid 5 h

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

Laboration 13, Arrayer och objekt

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

Föreläsning 1 Datastrukturer (DAT037)

Lösningsförslag till exempeltenta 2

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Algoritmer. Två gränssnitt

Föreläsning Datastrukturer (DAT036)

Generiska klasser och funktioner

Tentamen Datastrukturer, DAT037 (DAT036)

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

TENTAMEN: Objektorienterad programmering. Läs detta! Skriv din tentamenskod på varje blad (så att vi inte slarvar bort dem).

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

Tentamen, EDAA20/EDA501 Programmering

Föreläsning 3 Datastrukturer (DAT037)

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

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

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

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Transkript:

Introduktion Föreläsning (Weiss kap. -4) Många begrepp blir det Introduktion till kursen Exempel: Datastrukturen mängd Generiska<klasser> Den som bara har en hammare tror att alla problem är spikar Vilken loop är snabbast? for ( i = 0; i < n; i++ ) for ( j = 0; j < n; j++ ) // massa jobb... for ( i = 0; i < n; i++ ) for ( j = i; j < n; j++ ) // massa jobb... Uno Holmer, Chalmers, 09-03- 4:46 3 4 Vad kan man ha en datastruktur till? Datastrukturen mängd (eng. Set) Problem: Skriv ut en serie inlästa tal utan duplikat Ex. indata 4 3 4 3 skall ge utskriften 4 3 det behövs Informell algoritm: någon form av minne... Så länge det finns mer indata Läs N Om N ej är utskrivet tidigare Skriv ut N enklast möjliga Kom ihåg N En mängd är en oordnad struktur utan duplikat Operationer add(x) lägg till x till mängden contains(x) finns x i mängden? Axiom: Om x S så S = S x Alt. Om S.contains(x) så S == S.add(x) att lägga till ett element flera gånger ger samma resultat som att bara lägga till det en gång 6

Exempel på användning av en mängd Ett Java-gränssnitt för mängder Exempel: Skriv ut en serie inlästa tal utan duplikat m.h.a. en mängd Ex. indata 4 3 4 3 skall ge utskriften 4 3 Informell matematisk algoritm: Utskrivna = Så länge det finns mer indata Läs N Om N Utskrivna Skriv ut N Utskrivna = Utskrivna N public interface Set void add(int x); boolean contains(int x); // is x in the set? 7 8 Exempel: Exemplet i Java () Skriv ut en serie inlästa tal utan duplikat m.h.a. en mängd Ex. indata 4 3 4 3 skall ge utskriften 4 3 Mängder av små ickenegativa heltal public static void main(string[] args) Set printed = new SomeImplementingClass(); int n; System.out.print("Skriv in tal: ); while ( more data ) read an int into n if (! ( printed.contains( n ) ) ) System.out.println( n ); printed.add( n ); public class SimpleSet implements Set private // data representation public SimpleSet(int maxnum) // constructor public void add(int x) public boolean contains(int x) // is x in the set? 9 0 Exemplet i Java () public static void main(string[] args) Set printed = new SimpleSet(99); int n; System.out.print("Skriv in POSITIVA TAL < 00: ); while ( more data ) read an int into n if (! ( printed.contains( n ) ) ) System.out.println( n ); printed.add( n ); Datarepresentation x [0, maxnum] 3 7 8 array F TF F TF F TF F TF TF... F 0 3 4 6 7 8... maxnum array[x] == true omm x finns i mängden

Mängder av små ickenegativa heltal Implementering public class SimpleSet implements Set private boolean[] array; // reference to array private int maxnum; // max size of stored number public SimpleSet(int maxnum) // constructor public void add(int x) public boolean contains(int x) // is x in the set? // constructor public SimpleSet( int maxnum ) assert ( maxnum > 0 ); array = new boolean[ maxnum + ]; // allocate array this.maxnum = maxnum; for ( int i = 0; i <= maxnum; i++ ) array[ i ] = false; // initialize the array 3 4... add och member public void add( int x ) assert ( x >= 0 && x <= maxnum ); array[ x ] = true; Begränsningar Hur hanterar vi mängder av godtyckliga heltal? flyttal? andra typer? Elementen kan ej längre vara index i fältet public boolean contains( int x ) assert ( x >= 0 && x <= maxnum ); return array[ x ]; 3 7 8 3 0 8 7... 3 4... Inga duplikat 6 Generalisering i tre steg Mängder av godtyckliga heltal Klarar små positiva heltal SimpleSet (se bild -) Klarar godtyckliga heltal SetOfInt Klarar ej flyttal, strängar,... public class SetOfInt implements Set private static final int DEFAULT_CAPACITY = 6; private static final int SIZE_INCREMENT = 8; private int capacity = DEFAULT_CAPACITY; // Array capacity private int size = 0; // Number of distinct elements private int[] array = new int[ capacity ]; Klarar alla elementtyper som är jämförbara Generalisera till fler typer GenericSet (of anything) Gör klassen generisk! public void add( int x )... public boolean contains( int x )... Samma operationer som förut 7 8 3

Fältallokering i SetOfInt.add. fullt! 3. kopiera elementen 4. addera nya elementet x. allokera ett större fält SetOfInt.add public void add( int x ) if ( this.contains(x) ) return; if ( size == capacity ) // buffer full? int[] old = array; // handle to old array // allocate a bigger array capacity += SIZE_INCREMENT; array = new int[ capacity ]; // copy elements for( int i = 0; i < size; i++ ) array[ i ] = old[ i ]; // add the new element array[ size++ ] = x; 9 0 SetOfInt.contains public boolean contains( int x ) for ( int i = 0; i < size; i++ ) if ( array[ i ] == x ) Generiska klasser En generisk klass är en klassmall där vissa typnamn ersätts med typvariabler Typvariablerna specificeras i en typparameterlista i början av klassdefinitionen En generisk klass instansieras explicit med konkreta typer i samband med objektdeklarationer. De konkreta typerna ersätter typvariablerna i klassen. Det generiska gränssnittet GenericSet Klassen GenericArraySet public interface GenericSet<T> void add( T x ); boolean contains( T x ); T är en typvariabel för mängdens element public class GenericArraySet<T> implements GenericSet<T> void add( T x )... boolean contains( T x )... 3 4 4

Klassen GenericArraySet Exempel: Tag bort duplikat ur en ordföljd public boolean contains(t x ) for ( int i = 0; i < setsize; i++ ) public static void main(...) GenericSet<String> printed = new GenericArraySet<String>(); if ( array[ i ] == x ) Duger likhetsoperatorn för Jämförelse av objekt? Svar: Nä! String word; while ( more words ) read a word if (! printed.contains(word)) System.out.println(word); printed.add( word ); 6 Den generiska klassen GenericArraySet public class GenericArraySet<T> implements GenericSet<T> private static final int DEFAULT_CAPACITY = 6; private static final int SIZE_INCREMENT = 8; private int capacity = DEFAULT_CAPACITY; // Array capacity private int size = 0; // Number of distinct elements *) private T[] array = (T[])new Object[capacity]; public GenericArraySet()... public void add(t x)... public boolean contains(t x)... *) typvariabler får ej användas för att deklarera fält - använd Objekt och typomvandla GenericArraySet.contains public boolean contains(t x) for ( int i = 0; i < size; i++ ) if ( x.equals(array[i]) ) 7 8 GenericArraySet.add public void add( T x ) if ( this.contains(x) ) return; if ( size == capacity ) // buffer full? T[] old = array; // handle to old array // allocate a bigger array capacity += SIZE_INCREMENT; array = (T[])new Object[capacity]; // copy elements for( int i = 0; i < size; i++ ) array[ i ] = old[ i ]; // add the new element array[size++] = x; 9