I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Grundlæggende programmering Efterår 2001
Begreber og Redskaber 8. Plan for idag Sortering fortsat Comparable Søgning –Lineær søgning –Binær søgning.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
1 Søgning I. 2 Plan Sekventiel søgning Binær søgning Binære søgetræer Balancerede binære søgetræer træer.
Anvendelser I Leg og spil.
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
1 Søgetræer. 2 Binære søgetræer Definition Operationer Balancerede binære søgetræer AVL-træer Rød-sort-træer (AA-træer) B-træer Plan.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
Ingeniørhøjskolen i Århus Slide 1 Newton approximation ”Oversæt” til algoritme - Step 5: Skriv kode - Step 4: Skriv pseudokode - Step 3: Specificér pre-
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
Paradigmer i Programmering 1. Plan for kurset 4 x Mads R, 4 x Torben B, 2 x opgave MR: Funktionsprogrammering, SML TB: Logikprogrammering, Prolog Opgave:
Anvendelser I Leg og spil.
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.
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.
Sweep-algoritmer. DAIMIIntroducerende objektorienteret programmeringsweep.2 Datatypen Sequence Oprette Sequence() Sequence(s, l, h) Kopiere Sequence clone()
 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.
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering5A.1 OOP – Model før funktioner Funktionsorienteret versus objektorienteret systemudvikling.
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.
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.
 Bærbak & Caspersen, 2000 Introducerende objektorienteret programmering4B.1 Talsystemer Positionstalsystemer Decimale og binære tal.
 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.
I o p o DAIMI, AU, Marts 1999Introducerende objektorienteret programmering5B.1 Et lille banksystem Modellering ved hjælp af UML.
I o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14A.1 Del, løs og kombinér.
Programmering med interfaces Separering af specifikation, anvendelse og implementation.
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 programmering10B.1 Interfaces En ren kontrakt.
 Jens Bennedsen 2001Multimedie programmering4.1 Definition af begreber Interface, implements, klasse.
Positionstalsystemer Decimale og binære tal
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering6C.1 OOP – Hvorfor nu det? Funktionsorienteret versus objektorienteret systemudvikling.
I o p o DAIMI, AU, December 1999Introducerende objektorienteret programmering14B.1 Sortering.
 Jens Bennedsen 2001Multimedie programmering3B.1 Specifikationer Betingelser, specifikationer og JavaDoc.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering6B.1 Rekursive skildpadder Supertrekanter....
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, November 1999Introducerende objektorienteret programmering9D.1 Del, løs og kombinér.
DAIMIIntroducerende Objektorienteret Programmering8B.1 Interfaces En ren kontrakt.
Programmering med interfaces – en stak og en HP-regnemaskine push pop.
I o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5C.1 Virkefeltsregler i Java int i; int j; int k; i = i+j; String t; Sequence.
 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.
Collections og opremsning Nye typer collections, objektorienteret sweep.
Del, løs og kombinér Et algoritmemønster.
Containerklasser – klassifikation og brug.  Michael E. Caspersen, 2003IOOPContainerklasser.2 Mange objekter Containerklasser –antag at man skal repræsentere.
I o p o DAIMI, AU, Oktober 1999Introducerende objektorienteret programmering7B.1 Søgning.
Forelæsning Uge 2 – Torsdag Java syntax og style guide Sætninger –Simple sætninger (assignment, interne og eksterne metodekald) –Sammensatte sætninger.
Forelæsning Uge 4 – Mandag
Quiz – Uge 3 – torsdag – første time
Præsentationens transcript:

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.1 Sweep-algoritmer Programmering med invarianter og uden kaniner

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.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!

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.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]

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.4 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?

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.5 Sweep-algoritme... i 0b.size() i = 0;... while ( i != b.size() ) { // behandl b.elementAt(i) i++; } // i == b.size() b:

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.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; }

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.7 Søgning, første forsøg public static boolean search(int e, Sequence s) { // post: returnerer om e findes i s boolean found; // resultat-variabel int i; // sweep-variabel i = 0; found = false; while ( i != s.size() ) { found = s.elementAt(i)==e; i++; } return found; }

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.8 En let korrigering public static boolean search(int e, Sequence s) { // post: returnerer om e findes i s boolean found; // resultat-variabel int i; // sweep-variabel i = 0; found = false; while ( i != s.size() ) { found = found || s.elementAt(i)==e; i++; } return found; }

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.9 Den samme, men med if... public static boolean search(int e, Sequence s) { // post: returnerer om e findes i s boolean found; // resultat-variabel int i; // sweep-variabel i = 0; found = false; while ( i != s.size() ) { if ( s.elementAt(i) == e ) found = true; i++; } return found; }

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.10 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.

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.11 Dominobrikker x2-brikker i rigelige mængder Kan man overdække dette bræt? (Ingen brikker må overlappe.) 20

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.12 Manglende hjørner x2-brikker i rigelige mængder Kan man overdække dette?

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.13 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.

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.14 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:

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.15 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

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.16 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; }

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.17 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; } skal etablere invarianten skal sammen med invarianten garantere post skal bevare invarianten når i tælles op

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.18 Invariant for søgning... i 0s.size() s: // inv: elementerne i s[0:i) er behandlet // inv: elementerne i s[0:i) er sammenlignet med e // inv: found == e findes i s[0:i) e found:true

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.19 Søgning, udregn løsning public static boolean search(int e, Sequence s) { // post: returnerer om e findes i s boolean found; // resultat-variabel int i; // sweep-variabel i = ?; found = ?; // inv: found == e findes i // i == e findes i s[0:i) // // s: while ( i != s.size() ) { ? i++; } // found == e findes i s[0:s.size()) return res; }

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.20 Søgning á la carte public static boolean search(int e, Sequence s) { // post: returnerer om e findes i s boolean found; // resultat-variabel int i; // sweep-variabel i = 0; found = false; // inv: found == e findes i s[0:i) while ( i != s.size() ) { found = found || s.elementAt(i) == e; i++; } // found == e findes i s[0:s.size()) return found; }

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.21 Primtal?  Et tal n, n  2, er et primtal hvis de eneste divisorer i tallet er 1 og n.  Med andre ord: hvis 2,..., n-1 ikke går op i n, er n et primtal. Går 2 op? Går 3 op? Går 4 op?... Går n-1 op? Med f gennemløber vi tallene i intervallet [2:n) og registrerer hvis et af tallene går op i n. p == ingen af tallene [2:f) går op i n Er et primtal?

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.22 Skelet for funktionen prime public static boolean prime(int n) { // pre: n >= 2 // post: returnerer om n er et primtal boolean p; // resultat-variabel int f; // sweep-variabel f = ?; p = ?; // inv: p == ingen af tallene [2:f) går op i n while ( f != n ) { ? f++; } // p == ingen af tallene [2:n) går op i n return p; }

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.23 Funktionen prime public static boolean prime(int n) { // pre: n >= 2 // post: returnerer om n er et primtal boolean p; // resultat-variabel int f; // sweep-variabel f = 2; p = true; // inv: p == ingen af tallene [2:f) går op i n while ( f != n ) { if ( divides(f, n) ) { p = false; } f++; } // p == ingen af tallene [2:n) går op i n return p; }

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.24 Et par hjælpefunktioner... public static boolean divides(int f, int x) { // pre: f != 0 // post: returnerer om f går op i x return x%f == 0; } public static boolean even(int x) { // post: returnerer om x er lige return divides(2,x); } public static boolean odd(int x) { // post: returnerer om x er ulige return !even(x); }

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.25 Spejlvending af et tal public static int reverse(int n) { // pre: n >= 0 // post: returnerer ciffer-spejlvendingen af n int res; // resultat-variabel res = 0; while ( n != 0 ) { res = 10*res + n%10; n = n/10; } return res; } 1825  5281

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.26 Talsystemer, decimal til binær Hvordan ser 825 ud binært? n bit 825 % 2 = 1 / 2 == 412 % 2 = 0 / 2 == 206 % 2 = 0 / 2 == 103 % 2 = 1 / 2 == 51 % 2 = 1 / 2 == 25 % 2 = 1 / 2 == 12 % 2 = 0 / 2 == 6 % 2 = 0 / 2 == 3 % 2 = 1 / 2 == 1 % 2 = 1 / 2 ==

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.27 Decimal til binær konvertering public static Sequence dec2bin(int n) { // pre: n >= 0 // post: returnerer den binære repræsentation af n Sequence b = new Sequence(); // resultat-variabel while ( n != 0 ) { int bit; if ( divides(2, n) ) bit = 0; else bit = 1; b.insertElementAt(bit, b.size()); n = n/2; } return b; }

i o p o DAIMI, AU, September 1999Introducerende objektorienteret programmering5B.28 Kaffebønner (Java naturligvis) Tag to bønner op af posen. Hvis de har samme farve, så smid dem væk, men put en ny sort bønne i. (Der er ekstra sorte bønner til dette.) Hvis de har hver sin farve, så smid den sorte væk og læg den hvide tilbage. Legen slutter når der er én bønne tilbage; kan I sige noget om farven på denne? x sorte og y hvide bønner