Forelæsning Uge 4 Mandag

Relaterede dokumenter
Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Mandag

Forelæsning Uge 4 Torsdag

Forelæsning Uge 4 Torsdag

Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner

Forelæsning Uge 5 Mandag

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag

Forelæsning Uge 3 Torsdag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 6 Mandag

Forelæsning Uge 2 Mandag

Forelæsning Uge 2 Mandag

Forelæsning Uge 5 Mandag

Forelæsning Uge 6 torsdag repetition

Forelæsning Uge 2 Torsdag

Forelæsning Uge 6 Mandag

Forelæsning Uge 2 Mandag

Forelæsning Uge 6 Mandag

Forelæsning Uge 3 Mandag

Forelæsning Uge 6 torsdag repetition

Forelæsning Uge 5 Mandag

Forelæsning Uge 2 Mandag

Forelæsning Uge 3 Mandag

Forelæsning Uge 3 Mandag

Forelæsning Uge 1 Torsdag

Forelæsning Uge 3 Mandag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 5 Mandag

Forelæsning Uge 2 Torsdag

Forelæsning Uge 2 Mandag

Forelæsning Uge 6 Mandag

Forelæsning Uge 6 Mandag

Eksempel: Skat i år 2000

Billedbehandling. Processering af digitale billeder

BILLEDREDIGERING (IMAGES)

Forelæsning Uge 1 Torsdag

Forelæsning Uge 4 Torsdag

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 4

Datalogi OB, Efterår 2002 OH er, forelæsning 10/ Klasser og nedarvning

BRP Tal. Om computer-repræsentation og -manipulation. Logaritmer

Klasser og nedarvning

DM507 Algoritmer og datastrukturer

Klasser og objekter. (Afsnit i manualen)

DM507 Algoritmer og datastrukturer

Quiz Uge 5 mandag første time

University of Southern Denmark Syddansk Universitet. DM502 Forelæsning 3

dintprog Manual Revision: 1241 August 24, 2010 I Introduktion 3 1 Notation 3 II Begreber 4 2 Grundbegreber om programmering 4

Polymorfi. Arv (inheritance) Abstrakte klasser, substitutionsprincippet, overriding, statisk og dynamisk type. Coercion

//Udskriver System.out.println("Hej " + ditfornavn + " " + ditefternavn + "."); System.out.println("Du er " + dinalder + " aar gammel!

Crash Course i Programmering. HumTek, RUC

Ugeseddel 4 1. marts - 8. marts

Tree klassen fra sidste forelæsning

AAU, Programmering i Java Intern skriftlig prøve 18. maj 2007

Studiepraktik. Thomas Bøgholm Mikkel Hansen Jacob Elefsen

Fundamentale sprogbegreber

class Time { int hours, min; } } Time t1; // Erklær variabel af type Time class Time1 { public static void main(string[] args) { Time t1; t1.

dintprog Manual Revision: 731 September 30, Introduktion Notation... 3 I Begreber 4 2 Grundbegreber om programmering 4

DM507 Algoritmer og datastrukturer

Quiz Uge 5 mandag første time

Programmering for begyndere Lektion 2. Opsamling mm

COMPUTERSPIL 1. Opgave 1. Opgave 2

Programmering i C. Lektion september 2009

Virkefeltsregler i Java

Forelæsning Uge 12 Torsdag

Kursus 02199: Programmering. Kontrol af programudførelsen. afsnit if (indkomst > ) topskat = (indkomst ) * 0.

Python programmering. Per Tøfting. MacFest

Hvad er Objekter - Programmering

Algoritmeskabeloner: Sweep- og søgealgoritmer C#-version

Abstrakte datatyper C#-version

DRONNINGER (QUEENS) Opgave 1

Programmering i C. Lektion september 2009

DM507 Algoritmer og datastrukturer

DM01 DM Obl. Afl. Jacob Christiansen, , D12, Elias 18/ Side 1 af 11

DM507 Algoritmer og datastrukturer

Kapitel 3 Betinget logik i C#

DANMARKS TEKNISKE UNIVERSITET

Kursus i OOP og Java. Kursus i Objektorienteret programmering i Java

DM507 Algoritmer og datastrukturer

Forelæsning Uge 12 Mandag

DM507 Algoritmer og datastrukturer

Programmering i C. Kursusintroduktion. Lektion september Målgruppe 2 Indhold 3 Form 4 Materiale. Målgruppe Indhold Form Materiale

Skriftlig eksamen i Datalogi

Pointers. Programmering i C. 11. december Lektion 5. Eksempel: denne plads. Getting the address of a variable:

Forelæsning Uge 9 Mandag

COMPUTERSPIL 1. Opgave 1

#AlleKanKode. Lektion 3 - Operatorer

Forelæsning Uge 10 Torsdag

Aritmetiske Forelæsning Pr ogrammering operatorer tir 1999 sda præcedens september 1999 Logiske Sammenligningsoperatorer operatorer præcedens

Introduktion til ActionScript

Programmering i C. Lektion december 2008

Bits, bit operationer, integers og floating point

Rekursion C#-version

#AlleKanKode. Lektion 2 - Konstanter og Variabler

Software Construction 1 semester (SWC) Spørgsmål 1

Forelæsning 17, tirsdag 2. november 1999 Søgning efter en given værdi i en tabel. Programmering 1999

Skriftlig eksamen i Datalogi

Bilag 1 Rige billeder Ordremodtagelse

Transkript:

Forelæsning Uge 4 Mandag Algoritmeskabeloner Kan (ved simple tilretningerne) bruges til at implementere metoder, der gennemsøger en arrayliste (eller anden objektsamling) og finder objekter, der opfylder et givet kriterium Fire forskellige skabeloner: findone, findall, findnoof, findsumof Primitive typer (forfremmelse og begrænsning) Identitet versus lighed for objekter (herunder strenge) Afleveringsopgave: Billedredigering På Projekt Euler og CodingBats findes en masse ekstra opgaver, hvor I kan øve jer i Java programmering, hvis I har tid tilovers Links under Uge 3 på Ugeoversigten CS Challenge Deadline for første opgave onsdag 04.00 Møde i ADA-018 torsdag kl 15.00 Løsning af første opgave Præsentation af anden opgave Person Person "Fred" "Jill" p1 p2 p1 == p2 evaluerer til false

Algoritmeskabeloner Finder ét element, der opfylder betingelsen public Pixel findonepixel(int color) { for( Pixel p : pixels ) { if( p.getcolor() == color) { return p; return null; Finder en pixel med den angivne farve public Person findoneperson(string q) { for( Person p : persons ) { if( p.getname().contains(q) ) { return p; return null; Finder en person, hvis navn indeholder den angivne textstreng 2

findone = finder ét element For-each løkke (gennemløb af LISTE) public TYPE findone( PARAM ) { for( TYPE elem : LISTE ) { if( TEST(elem, PARAM) ) { return elem; return null; Test af betingelse Så snart vi finder et element, der opfylder TEST, returneres dette (hvorpå algoritmen terminerer) Algoritmeskabelon Gennemsøger LISTE med elementer af typen TYPE og returnerer ét element, der opfylder TEST Hvis flere elementer opfylder TEST, returneres et vilkårligt af disse Hvis ingen elementer opfylder TEST, returneres null (den tomme pointer) Algoritmeskabelon Konkret metode Indsæt hvad de RØDE ting skal være (TYPE, LISTE, PARAM og TEST) Kopiér resten, som det står uden modifikationer 3

En anden algoritmeskabelon Finder alle elementer, der opfylder betingelsen public ArrayList<Pixel> findallpixels(int color) { ArrayList<Pixel> result = new ArrayList<>(); for( Pixel p : pixels ) { if( p.getcolor() == color ) { result.add(p); return result; Finder alle pixels med den angivne farve public ArrayList<Person> findallpersons(string q) { ArrayList<Person> result = new ArrayList<>(); for( Person p : persons ) { if( p.getname().contains(q) ) { result.add(p); return result; Finder alle, hvis navn indeholder den angivne textstreng 4

findall = finder alle elementer Lokal variabel For-each løkke (gennemløb af LISTE) public ArrayList<TYPE> findall( PARAM ) { ArrayList<TYPE> result = new ArrayList<>(); for( TYPE elem : LISTE ) { if( TEST(elem, PARAM) ) { result.add(elem); return result; Test af betingelse Elementer, der opfylder TEST, tilføjes til arraylisten result Algoritmeskabelon Gennemsøger LISTE med elementer af typen TYPE og returnerer en arrayliste med alle elementer, der opfylder TEST Hvis ingen elementer opfylder TEST, er arraylisten tom Video 4.2 fra BlueJ bogen behandler et eksempel på denne algoritmeskabelon Algoritmeskabelon Konkret metode Indsæt hvad de RØDE ting skal være (TYPE, LISTE, PARAM og TEST) Kopiér resten, som det står uden modifikationer 5

Lad os kigge lidt nærmere på findall Resultat type Parameter Start på for-each løkke TEST af element Returner resultat public ArrayList<TYPE> findall( PARAM ) { ArrayList<TYPE> result = new ArrayList<TYPE>(); for( TYPE elem : LISTE ) { if( TEST(elem, PARAM) ) { result.add(elem); return result; Opdatering af lokal variabel Erklæring af lokal variabel Lad os bibeholde de grønne dele, men udskifte de blå 6

Ny findnoof algoritmeskabelon = finder antal elementer public int findnoof( PARAM ) { int result = 0; Erklæring for( TYPE elem : LISTE ) { if( TEST(elem, PARAM) ) { result++; Opdatering return result; Hvad gør denne algoritmeskabelon? Algoritmeskabelon Gennemsøger LISTE med elementer af typen TYPE og returnerer antallet af elementer, der opfylder TEST Algoritmeskabelon Konkret metode Indsæt hvad de RØDE ting skal være (TYPE, LISTE, PARAM og TEST) Kopiér resten, som det står uden modifikationer 7

findsumof Endnu en = algoritmeskabelon finder summen af elementerne public int findsumof( PARAM ) { int result = 0; Erklæring for( TYPE elem : LISTE ) { if( TEST(elem,PARAM) ) { result += VALUE(elem, PARAM); return result; Hvad gør denne algoritmeskabelon? Opdatering Beregner værdi ved hjælp af VALUE, f.eks. farven i et Pixel-objekt længden af navnet i et Person-objekt Algoritmeskabelon Gennemsøger LISTE med elementer af typen TYPE og returnerer summen (beregnet ved hjælp af VALUE) af de elementer, der opfylder TEST Hvis man undlader TEST (og fjerner if sætningen), summerer man over alle elementer i LISTE Algoritmeskabelon Konkret metode Indsæt hvad de RØDE ting skal være (TYPE, LISTE, PARAM og TEST) Kopiér resten, som det står uden modifikationer 8

Sammenligning af de fire algoritmeskabeloner Fælles Alle skabeloner gennemsøger en arrayliste (eller en anden objektsamling) og tjekker hvert enkelt element i listen op mod en angiven betingelse (der kan afhænge af parametre) Betingelsen involverer kun det element i listen, der pt. undersøges Forskelle SKOBUTIK BETINGELSEN TESTER SKOENES FARVE findone returnerer ét element, der opfylder den angivne betingelse (og stopper så snart et sådant element er fundet) ÉN RØD SKO findall returnerer en arrayliste med alle de elementer, der opfylder den angivne betingelse ALLE RØDE SKO findnoof returnerer antallet af elementer, der opfylder den angivne betingelse ANTALLET AF RØDE SKO findsumof returnerer summen af værdierne af de elementer, der opfylder den angivne betingelse SAMLEDE PRIS FOR ALLE RØDE SKO Køreprøven indeholder opgaver, som kan løses ved hjælp af algoritmeskabeloner Skabelon Initialisering Opdatering findall tom liste add findnoof 0 += 1 findsumof 0 += VALUE 9

Eksempler på findnoof Finder antal elementer, der opfylder betingelsen public int findnoofpixels(int color) { int result = 0; for( Pixel p : pixels ) { if( p.getcolor() == color ) { result++; return result; Finder antal pixels med den angivne farve public int findnoofpersons(string q) { int result = 0; for( Person p : persons ) { if( p.getname().contains(q) ) { result++; return result; Finder antal personer, hvis navn indeholder den angivne textstreng 10

Eksempler på findsumof Finder summen af de elementer, der opfylder betingelsen public int findsumofdarkpixels(int color) { int result = 0; for( Pixel p : pixels ) { if( p.getcolor() <= color ) { result += p.getcolor(); return result; Finder summen af mørke pixelværdier public int findsumofteenagers() { int result = 0; for( Person p : persons ) { if( 13 <= p.getage() && p.getage() <= 19 ) { result += p.getage(); return result; Finder summen af teenagernes alder 11

Primitive typer i Java Heltal Reelle tal byte short int long float double 8 bit 16 bit 32 bit 64 bit 32 bit 64 bit Sandhedsværdier boolean 1 bit Tegn char 16 bit Eksempel: double d; int i; Man må gerne assigne en "lille" værdi til en "stor" variabel X Y angiver at udtryk af type X kan assignes til variabler af type Y Lovligt: int double Ulovligt: d = 7; i = 3.5; Man kan ikke proppe en "stor" værdi ind i en "lille" variabel 12

Forfremmelse og begrænsning En værdi kan forfremmes til en "større type" d = 7; int udtrykket 7 bliver forfremmet til typen double Håndteres automatisk af compileren (når det er nødvendigt) En værdi kan begrænses til en "mindre type" i = (int) 3.5; type-cast Kræver et eksplicit type-cast double udtrykket 3.5 bliver (indsat af begrænset til typen int og programmøren) variablen i får værdien 3 (ved at bortkaste decimalbrøken) 13

Eksempler på forfremmelse og begrænsning Hvad er værdien af dette udtryk? (int) (12 / 2.5) (int) (12.0 / 2.5) (int) 4.8 4 12 forfremmes til 12.0 4.8 begrænses til 4 ved at smide decimalbrøken væk 9 + 6 * 2 / (int) -3.5 = 5 6 / (int) (2 / 2.5) Er nedenstående erklæringer lovlige? double d = 7; int i = d; Selv om d har værdien 7, kan den ikke assignes til heltals variablen i Det er typen der er afgørende Ikke den øjeblikkelige værdi 14

Konstanter (literals) Type Konstanter Wrapper type byte 15 Byte short -3215 Short int 45320 Integer Primitive typer long 45320L float 15.03e5F double 15.03e5 Long Float Double Objekt typer char 'h' Character boolean false Boolean Objekt type String "hello" Detaljer kan findes i Appendix B 15

Identitet versus lighed (magen til) I det virkelige liv skelner vi mellem objekter, der er identiske, og objekter, der ligner hinanden To personer er ikke identiske, selvom de hedder det samme og er født samme dag (feltvariablerne har samme værdier) Hvis man fortæller tjeneren, at man vil have samme pizza som dem ved nabobordet, kommer han med en der ligner (dvs. er magen til) Java Operator == identitet (samme objekt) Metode (i den klasse, hvis elementer skal sammenlignes) equals lighed (feltvariablernes værdier ligner hinanden) 16

Identitet mellem objekter Person Person "Fred" "Jill" p1 p2 p1 == p2 evaluerer til false Operatoren == tester for identitet Det er ikke nok, at de to objekter har samme værdier for feltvariablerne Nedenfor peger p1 og p2 på samme objekt Person Person Person Person "Fred" "Fred" "Fred" "Jill" p1 p2 p1 p2 p1 == p2 evaluerer til false p1 == p2 evaluerer til true 17

Sammenligning af tekststrenge BlueJ's code pad String s1 = "Peter"; String s2 = "Petersen".substring(0,5); s1 "Peter" (String) s2 "Peter" (String) == operatoren s1 == s2 tester identitet (samme objekt) false (boolean) s1.equals(s2) equals metoden true (boolean) tester lighed (magen til) s2.equals(s1) true (boolean) String s3 = "Peter"; s1 == s3 true (boolean) compileren har fundet ud af at s1 og s3 er ens og har kun oprettet ét String objekt Tekststrenge skal altid sammenlignes ved hjælp af equals metoden Aldrig ved hjælp af == 18

Afleveringsopgave: Billedredigering I får udleveret et projekt med nedenstående to klasser Samme som i billedredigeringsdelen af sidste forelæsning (bortset fra metoderne gettitle og settitle, som er tilføjet) Image int width int height int getwidth() int getheight() String gettitle() void settitle(string title) Pixel getpixel(int i, int j) ArrayList<Pixel> getpixels() ArrayList<Pixel> getneighbours(int i, int j) void updatecanvas()... * Pixel int value int getvalue() void setvalue(int value) 19

Afleveringsopgave fortsat I skal implementere en række billedoperationer på gråtone billeder heriblandt Original Lysere, mørkere, invertering Skalering Spejling vandret og lodret Uskarpt (blur) 20

Opsummering Fire algoritmeskabeloner, som alle tjekker elementer i en arrayliste op mod en angiven betingelse findone returnerer ét element findall returnerer en arrayliste med alle elementer findnoof returnerer antallet af elementer findsumof returnerer summen af værdierne Primitive typer Regler for assignments og parametre (bestemt via relation) Forfremmelse (til større type) og begrænsning (til mindre type) Konstanter og Wrapper klasser Identitet versus lighed For objekter generelt Strenge skal altid sammenlignes ved hjælp af equals metoden Afleveringsopgave: Billedredigering Køreprøven indeholder opgaver, som kan løses ved hjælp af algoritmeskabeloner 21

Det var alt for nu.. spørgsmål 22