 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.1 Sweep-algoritmer Programmering med invarianter og uden kaniner.

Slides:



Advertisements
Lignende præsentationer
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Advertisements

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.
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
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.
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.
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.
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.
Klassevariable- og metoder Tilstand og opførsel på klasseniveau.
 Bærbak & Caspersen, 2000Introducerende objektorienteret programmering1.1 Turtlemaskinen Arkitektur, instruktionssæt og eksempler.
Rekursion 2.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursion 2.2 Introduktion Vi har tidligere set eksempler på rekursive.
 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.
Rekursive skildpadder Supertrekanter.....  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringRekursive skildpadder.2 Penta, etc.
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.
 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,
 Michael E. Caspersen, 2000Introducerende objektorienteret programmering7A.1 Rekursion.
Lærde skildpadder Specialisering af skildpadder – nye kompetencer (metoder/kommandoer)
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.
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.
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.
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.
Collections og opremsning Nye typer collections, objektorienteret sweep.
Billedbehandling – processering af digitale billeder.
Del, løs og kombinér Et algoritmemønster.
Skildpadder Modeller, objekter og opførsel.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSkildpadder.2 Model Modeller bruges.
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.
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 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
Quiz – Uge 3 – torsdag – første time
Præsentationens transcript:

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.1 Sweep-algoritmer Programmering med invarianter og uden kaniner

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.2 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?

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.3 Sweep-algoritme... i 0b.size() i = 0;... while ( i != b.size() ) { // behandl b.elementAt(i) i++; } // i == b.size() b:

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.4 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; }

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.5 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; }

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.6 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; }

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.7 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; }

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.8 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.

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.9 Dominobrikker x2-brikker i rigelige mængder Kan man overdække dette bræt? (Ingen brikker må overlappe.) 20

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.10 Manglende hjørner x2-brikker i rigelige mængder Kan man overdække dette?

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.11 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.

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.12 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:

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.13 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

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.14 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; }

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.15 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; }

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.16 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

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.17 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; }

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.18 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; }

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.19 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?

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.20 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; }

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.21 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; }

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.22 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); }

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.23 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

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.24 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 ==

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.25 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; }

 Michael E. Caspersen, 2000 Introducerende objektorienteret programmering4A.26 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