Sweep-algoritmer. DAIMIIntroducerende objektorienteret programmeringsweep.2 Datatypen Sequence Oprette Sequence() Sequence(s, l, h) Kopiere Sequence clone()

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

Gråskala.
Array og ArrayList Et slideshow. Som er sødt.. Hvordan virker ArrayList?  ArrayList NAVN = new ArrayList ();  NAVN.add(”Værdi”);  NAVN.add(index, ”værdi”)
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Array vs. ArrayList. Arrays Et array er en struktureret metode til at gemme flere værdier af den samme datatype. Data’en i et array ligger op ad hinanden.
Grundlæggende programmering Efterår 2001
Forelæsning 3.1 Collections Javas for-each løkke
Items 4, 14, 24, 34, 44, 54 Orange gruppe Liv, Jonas, Thorkil, Søren S og Martin D.
Forelæsning 3.2 Billedredigering (bl.a. brug af for-løkker)
Lektion 7 Læsestof: Kopier fra Caranno
Forelæsning 5.1 Brug af klassen Collections og interfacet Comparable samt parametriserede typer Projektuge: Ants and Spiders / Lommeregner dIntProg,
10. Datastrukturer. 2 Nordjyllands Erhvervakademi Collections library Datastrukturer i.NET kaldes normalt Collections Findes i namespace System.Collections.
Repetition: Introduktion til OOP med C# og .NET
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
KF04 GRAY Item 2, 12, 22, 32, 42, 52. Consider a builder when faced with many constructor parameters Item 2.
Anvendelser I Leg og spil.
C#: Udtryk og metoder Kilde: Joe Hummel. 2 Nordjyllands Erhvervakademi – 2008 Indhold “With regards to programming statements and methods, C# offers what.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
Længste plateau En klassisk problemstilling (Gries, 1981) - og her i Java!!! Denne opgave drejer sig om at bestemme længden af det længste plateau i en.
Begreber og Redskaber 11. Plan for idag Lidt afrunding: Collections Framework i Java Noget om oversættere og sprog Evaluering Sidste gang øvelser før.
Forelæsning 7.1 – repetition
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Effective Java Blå gruppe. Item 18: Interfaces frem for abstrakte klasser Kan implementeres i klasser der ikke nedarver Eksisterende klasser kan nemt.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Søgning.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser.
I o p o DAIMI, AU, November 1999Programkonstruktion I9E.1 Konstruktion og brug af klasser – en stak og en HP-regnemaskine push pop.
Fundamentale sprogbegreber Sætninger og udtryk Niveauer af programbeskrivelse (statisk versus dynamisk syn)
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering9B.1 Fletning.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6B.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
 Bærbak & Caspersen, 2000Introducerende objektorienteret programmering1.1 Turtlemaskinen Arkitektur, instruktionssæt og eksempler.
Sortering.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSortering.2 Sortering Vi hartidligere set at effektiv søgning forudsætter.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7B.1 Søgning.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
 Henrik B. Christensen, 1999Introducerende objektorienteret programmering8B.1 Interfaces En ren kontrakt.
 Jens Bennedsen, 2003Introducerende objektorienteret programmeringinterfaces.1 Interfaces En ren kontrakt.
DAIMIIntroducerende Objektorienteret Programmering1 Collections og opremsning Nye typer collections, objektorienteret sweep.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering6A.1 Programmering med interfaces – en stak og en HP-regnemaskine push pop.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
Trinvis forfinelse Systematisk, gradvis udvikling af programmer.
Klasser og objekter – grundbegreber.  Michael E. Caspersen, 2001Introducerende objektorienteret programmeringKlasser og objekter.2 Klasser og objekter.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
Collectionklasser Klassifikation og anvendelse. dIntProg, F08Collectionklasser.2 Samlinger af objekter Objektreferencer –for at holde fast i et objekt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
I o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14B.1 Sortering.
DAIMIIntroducerende objektorienteret programmering4A.1 Kontrakter og Design Kontraktbaseret design, JavaDoc dokumentation,
 Jens Bennedsen 2001Multimedie programmering Collections Samlinger af objekter.
DAIMIIntroducerende objektorienteret programmeringfletning.1 Fletning.
Sequence En container til heltal.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSequence.2 Datatypen Sequence Oprette Sequence()
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
Collections og opremsning Nye typer collections, objektorienteret sweep.
Billedbehandling – processering af digitale billeder.
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.1 Søgning.
Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence s; int i; int j; Sequence s; String s; int i; int j;
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 4 – Mandag
Quiz – Uge 3 – mandag – første time
Backgammon Formål: Du skal primært øve dig i brug af figurer i PowerPoint. Opgave: Lav et backgammon vha. figurer. Find et billede på Internettet af det.
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 3 – Torsdag
Forelæsning Uge 4 – Torsdag
Forelæsning Uge 3 – Torsdag
Præsentationens transcript:

Sweep-algoritmer

DAIMIIntroducerende objektorienteret programmeringsweep.2 Datatypen Sequence Oprette Sequence() Sequence(s, l, h) Kopiere Sequence clone() Spørge på tilstand int size() boolean isEmpty() int elementAt(int i) Opdatere Sequence setElementAt(int e, int i) Sequence insertElementAt(int e, int i) Sequence removeElementAt(int i) Sequence removeAllElements() Input/output Sequence read() Sequence write() String toString() Ekstrafunktioner Sequence sort() Sequence reverse() Sequence concat(Sequence rhs) Læs JavaDoc!

DAIMIIntroducerende objektorienteret programmeringsweep.3 Sequence, by example Sequence s = new Sequence(5, 1, 20); // s: [8, 2, 19, 6, 11] s.elementAt(2) == 19 s.setElementAt(5, 1); // s: [8, 5, 19, 6, 11] s.size() == 5 s.insertElementAt(0, 2); // s: [8, 5, 0, 19, 6, 11] s.sort(); // s: [0, 5, 6, 8, 11, 19] s.reverse(); // s: [19, 11, 8, 6, 5, 0] s.concat(s.reverse()).write; // [19, 11, 8, 6, 5, 0, 0, 5, 6, 8, 11, 19]

DAIMIIntroducerende objektorienteret programmeringsweep.4 Iteration: for/while I turtle-programmer (og andre steder) har vi skrevet: for ( int i= 0; i < 4; i++ ) { t.move(l); t.turn(90); } Et alternativ til for-løkken er while-løkken der ser således ud: int i= 0; while ( i < 4 ) { t.move(l); t.turn(90); i++; } Hvornår skal man bruge for, og hvornår skal man bruge while?

DAIMIIntroducerende objektorienteret programmeringsweep.5 Sweep-algoritme... i 0b.size() i= 0;... while ( i != b.size() ) { // behandl b.elementAt(i) i++; } // i == b.size() b:

DAIMIIntroducerende objektorienteret programmeringsweep.6 Summering public static int sum(Sequence s) { // post: returnerer summen af tallene i s int res; // resultat-variabel int i; // sweep-variabel i= 0; res= 0; while ( i != s.size() ) { res = res + s.elementAt(i); i++; } return res; }

DAIMIIntroducerende objektorienteret programmeringsweep.7 Optagelsesprøve til Menza ? ? EA E a E A E E AA ?? ?? Find det uforanderlige i forandringen... Invariant: en størrelse som ikke ændres under ændrede forudsætninger.

DAIMIIntroducerende objektorienteret programmeringsweep.8 Dominobrikker x2-brikker i rigelige mængder Kan man overdække dette bræt? (Ingen brikker må overlappe.) 20

DAIMIIntroducerende objektorienteret programmeringsweep.9 Manglende hjørner x2-brikker i rigelige mængder Kan man overdække dette?

DAIMIIntroducerende objektorienteret programmeringsweep.10 Farvelægning og invariant En brik dækker to felter, et hvidt og et sort. På brædtet er der 100 sorte og 98 hvide felter (de to manglende felter er begge hvide). En brik dækker et sort og et hvidt felt. Lad # b betegne antallet af synlige sorte felter og # w antallet af synlige hvide felter. Vi har da: Invariant: # b = # w +2 og vi kan se at når # w er nul er # b = 2.

DAIMIIntroducerende objektorienteret programmeringsweep.11 Sweep-algoritme + invariant... i 0s.size() i= 0;... // inv: elementerne i s[0:i) er behandlet while ( i != s.size() ) { // behandl s.elementAt(i) i++; } // elementerne i s[0:i) er behandlet og // i == s.size(), ergo // alle elementerne i s er behandlet s:

DAIMIIntroducerende objektorienteret programmeringsweep.12 Invariant for summering... i 0s.size() s: // inv: elementerne i s[0:i) er behandlet // inv: elementerne i s[0:i) er summeret // inv: res = summen af s[0:i) res:42

DAIMIIntroducerende objektorienteret programmeringsweep.13 Summering, udregn løsning public static int sum(Sequence s) { // post: returnerer summen af tallene i s int res; // resultat-variabel int i; // sweep-variabel i= ?; res= ?; // inv: res = summen af // i = summen af s[0:i) // // s: while ( i != s.size() ) { ? i++; } // res er summen af s[0:s.size()) return res; }

DAIMIIntroducerende objektorienteret programmeringsweep.14 Summering á la carte public static int sum(Sequence s) { // post: returnerer summen af tallene i s int res; // resultat-variabel int i; // sweep-variabel i= 0; res= 0; // inv: res er summen af s[0:i) while ( i != s.size() ) { res= res + s.elementAt(i); i++; } // res er summen af s[0:s.size()) return res; }

DAIMIIntroducerende objektorienteret programmeringsweep.15 Spejlvending // initialiser l og h // inv: elementerne i s[0:l) er byttet // med elementerne i s(h:s.size()) while ( ??? ) { // byt element l og element h l++; h--; } s: lh

DAIMIIntroducerende objektorienteret programmeringsweep.16 Spejlvending á la carte public static void reverse(Sequence s) { // post: spejlvender s int l; // sweep-variabel 1 int h; // sweep-variabel 2 l= 0; h= s.size()-1; // inv: elementerne i s[0:l) er byttet // med elementerne i s(h:s.size()) while ( l < h ) { s.byt(l, h); l++; h--; } s: lh

DAIMIIntroducerende objektorienteret programmeringsweep.17 Billedbehandling s r pixel (r, s)  [0..255] 0 ~ sort, 255 ~hvid r  [0..rows), s  [0..columns) 0 0 rows columns

DAIMIIntroducerende objektorienteret programmeringsweep.18 Billedoperationer public class Sequence2D { /** * Return the value at index (row,column) in this 2D sequence */ public int elementAt(int row, int column) /** * Set the value at index (row,column) in this 2D sequence to e */ public void setElementAt(int e, int row, int column) /** * Return the number of rows in this 2D sequence */ public int rows() /** * Return the number of rows in this 2D sequence */ public int columns() }

DAIMIIntroducerende objektorienteret programmeringsweep.19 Sweep i to dimensioner for(int r= 0; r < data.rows(); r++) { // behandl række r } for(int r= 0; r < rows; r++) { // behandl række r for(int c= 0; c < data.columns(); c++) { // behandl pixel(r, s) } columnss r 0 0 rows

DAIMIIntroducerende objektorienteret programmeringsweep.20 Invertér (negativ) pixelValue= 255-pixelValue

DAIMIIntroducerende objektorienteret programmeringsweep.21 Invertér (negativ) public void invert() { // go through all pixels and // invert the colour value for(int r= 0; r < data.rows(); r++) { for(int c= 0; c < data.columns(); c++) { data.setElementAt( data.elementAt(r,c), r, c ); } // redisplay the image on screen canvas.drawMonashImage(data); }

DAIMIIntroducerende objektorienteret programmeringsweep.22 Andre billedoperationer (1) brighten Gør billedet lidt lysere. darken Gør billedet lidt mørkere. flip Spejlvend billedet omkring den horisontale midterakse. mirror Spejlvend billedet omkring den vertikale midterakse. invert Inverter hver farveværdi. Dvs. 0 bliver til 255, 1 bliver til 254, 2 bliver til 253, etc. rotateL Rotér billedet 90 grader (90 grader mod uret, venstreom). rotateR Rotér billedet -90 grader (90 grader med uret, højreom). thresholding Sæt alle pixels der højst har tærskelværdien til 0 og alle pixels større end tærskelværdien til 255. Parameter: tærskelværdien. thresholding Sæt hver pixel til sort (0), grå (127) eller hvid (255). border Sæt en sort ramme omkring billedet. Parameter: rammens bredde. smoothing Erstat hvert pixel med gennemsnitsværdien i det 3x3. kvadrat det er centrum i.

DAIMIIntroducerende objektorienteret programmeringsweep.23 Andre billedoperationer (2) oilPainting Erstat hvert pixel med den hyppigst forekommende værdi i det nxn kvadrat det er centrum i. Parameter: størrelsen på kvadratet (n). fillImage Fyld billedet med en given farve. Parameter: farveværdien. drawRect Tegn et rektangel ind på billedet. Parametre: øverste venstre og nederste højre hjørne samt en farve. fillRect Udfyld et givent rektangel i billedet med en farve. Parametre: øverste venstre og nederste højre hjørne af rektanglet samt fyldfarven. add Læg et billede til et andet. Billeder adderes ved at addere værdierne for korresponderende pixels (pas på grænsen på 255). Parameter: et billede. subtract Træk et billede fra et andet. Parameter: et billede. crop Skær et rektangel ud af et billede og lav dette til et nyt billede. Parametre: øverste venstre og nederste højre hjørne på crop-rektanglet.