Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

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

Lignende præsentationer


Præsentationer af emnet: "Sweep-algoritmer. DAIMIIntroducerende objektorienteret programmeringsweep.2 Datatypen Sequence Oprette Sequence() Sequence(s, l, h) Kopiere Sequence clone()"— Præsentationens transcript:

1 Sweep-algoritmer

2 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!

3 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]

4 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?

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

6 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; }

7 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.

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

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

10 DAIMIIntroducerende objektorienteret programmeringsweep.10 Farvelægning og invariant 10 20 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.

11 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:

12 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

13 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; }

14 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; }

15 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

16 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

17 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

18 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() }

19 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

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

21 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( 255 - data.elementAt(r,c), r, c ); } // redisplay the image on screen canvas.drawMonashImage(data); }

22 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.

23 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.


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

Lignende præsentationer


Annoncer fra Google