FEN 2013-05-01KbP/seminar2: LoopsReview1 Kontraktbaseret programmering Seminar 2 Udvikling af løkker: Checklisten for løkker “Hånd-i-hånd” udvikling.

Slides:



Advertisements
Lignende præsentationer
FEN KbP/seminar3: subcontracts1 Kontraktbaseret programmering Seminar 3 Kontrakter og arv Underleverandørsyn Substitutionsprincippet Guarded.
Advertisements

FEN Diskret matematik/Seminar 3 - proofs 1 Beviser Et bevis er en argumentation, som overbeviser om, at en påstand er sand, påstanden kaldes.
1 Bevisteknikker. 2 Bevisteknikker (relevant både ved design og verifikation) Teorem: Der findes uendeligt mange primtal Bevis: Antag at der findes et.
Induktion og rekursion
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
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.
FEN Prædikater/Seminar 11 Prædikatslogik eller Kvantificerede udtryk Prædikater udvider propositionslogikken på to måder: –Vi tillader variable.
Opsamling Loops Klassedesign Immutable Lister shallowCopy() Projekt 2 FEN KbP/seminar3: Opsamling.
Eksamen 20 minutters mundtlig prøve, inklusiv ca. 5 minutter til votering. Prøven bedømmes efter 7-trinsskalaenskalaen. Der ikke forberedelsestid. I kan.
FEN KbP/seminar2: design11 Kontraktbaseret programmering Seminar 2 Klassedesign – grundprincipper Eksempler: Stack Dictionary.
FEN KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q.
FEN KbP/seminar1: ProgUdsagn1 Kontraktbaseret programmering Seminar 1 Programudsagn og programbeviser.
FEN KbP/seminar2: design21 Kontraktbaseret programmering Seminar 2 Klassedesign: Immutable lister Queue Shallowcopy og alkvantoren.
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.
KAPITEL 2 Renterisiko.
Gode råd om ansøgning til MUDP 2017
Forældre-information
Pengurusan Pembayaran Penyelidikan Research Management Centre
Interaktion og usability
Almen statskundskab Politisk meningsdannelse v/ Peter Nedergaard
SOPU Sund – motion Kondition og kredsløb.
Omkostninger til tilsyn m.v. for statsautoriserede revisorer
P4: Vejledning i læreruddannelsen
Søgeradius med Aabenraa som udgangspunkt
Søgeradius med Kerteminde som udgangspunkt
Hvor går de unge hen, når de går ud?
Bevis for længdeformlen i rummet
Delprøve i M2CAL2 efterår 2015
DK: Indledende: Jeg er jeres vært, og jeg har ansvaret for jer, mens I er her – og for, at I forlader bygningen igen, når vores møde er slut. I bedes derfor.
August, Holm, Olsen, Tobias og Viktor
Tilskud & Regnskab Kursus for nye efterskoleledere
356 – Kender du den livsens kilde 1, S1
Rekeparty Fredag 16. juni 2017 Kl. 18:00 Eventuelt:
Eva Danielsen, Nærum Gymnasium
Førstegradsligninger
Nogle af de nye emner i læreplaner for samfundsfag
Hvad er Lindebjergskolens CO2 fodaftryk
21. november 2018 Ulla Nørskov Philip & Martin Stabell
KVANTEFilosofi Jan Faye Institut for Medier, Erkendelse og Formidling
CUSTOMER LIFETIME VALUE
Skrivedag 2: At skrive analyserende
Støtte til biomasse-elproduktion efter 1
Modellering af skovtårnet 2019
Højtuddannet arbejdskraft
At udvikle produkter og services sammen med vores brugere
Formandens beretning Kommunernes It-Arkitekturråd
Sted - klasse - dato H H H H H H H H H H
Kort-sitet Med alle relevante temaer fra Kommuneplanen
Velkommen Dagens program.
Direktørmøde- Rammeaftale Sjælland 7. oktober 2016 kl
Hvem bestemmer dine valg? Tobaksforebyggelse i Sønderborg Kommune
GD1/GD2 – DLS kvalitetssikring Agenda
Model og Tilgang strategi på det specialiserede voksenområde
Lynæs Sejl- og Kajakklub åbner Sejlsportsligaen med Lynx-open d. 25
Vejledning - Lokal tilpasning af oplæg og proces
Refleksionens betydning for den pædagogiske praksis i SFO og skole
Værktøj: Målhierarkiet eller
FoU-Projekt om børn- og ungeområdet på Efter- og Videreuddannelsen Specialisering i børne- og ungeafdelinger – gavner det børn, unge og familier? v/ Annemette.
Introduktion til kemiske reaktioner
Elevtrivselsundersøgelsen 2016
Sådan sikrer vi fremtidens it- arbejdskraft
MADPLAN Uge xx Morgenmad Frokost Aftensmad Mandag Tirsdag Onsdag
Dagens program 9.00 – Værgemål herunder arv/testamente Pause
Hvad kan vi lære af USA og Tyskland?
Energi, Danisco, Grindsted
Lineær eller eksponentiel graf gennem to punkter
Energierhvervsanalyse
Digital Uddannelsesmappe
Buffons nåleproblem Introduktion Beskrivelse af aktiviteten
Anvendelse af produktionsdata
Præsentationens transcript:

FEN KbP/seminar2: LoopsReview1 Kontraktbaseret programmering Seminar 2 Udvikling af løkker: Checklisten for løkker “Hånd-i-hånd” udvikling

FEN KbP/seminar2: LoopsReview2 Udvikling af løkker Loop-struktur: {Q} S 0 do {P} B  S od {R} Checklisten: 1. {Q} S 0 {P} (initiering) 2. {P  B} S {P}(bevarelse af invariant) 3. terminering af løkken(t: nedadtil begrænset - termineringsfunktion) 4. P   B  R(korrekthed)

FEN KbP/seminar2: LoopsReview3 Vi står med Q og R, og skal skrive en løkke: Vi skal udvikle: invarianten P vagten B “programmerne” S 0 og S Beviset er vores guide: Checklisten giver os: Find P og B ud fra: P   B  R (pkt. 4) Find initiering, så P etableres ({Q} S 0 {P}) (pkt. 1) Find et termineringsudtryk og sætninger, så der tages skridt mod terminering. (pkt. 3) Hermed brydes invarianten måske, i så fald findes sætninger som genetablerer invarianten: {P  B} S {P} (pkt. 2) {Q} S 0 do {P} B  S od {R} Checklisten: 1. {Q} S 0 {P} (initiering) 2. {P  B} S {P}(bevarelse af invariant) 3. terminering af løkken (t: nedadtil begrænset - termineringsfunktion) 4. P   B  R(korrekthed)

FEN KbP/seminar2: LoopsReview4 Udledning af invarianten fra postbetingelsen ”Ballon-teorien” (Gries 1981) Tilstandene, som tilfredsstiller P, er den oppustede ballon. Ballonen pustes op ved at afsvække R. Termineringsudtrykket er ventilen, som lukker luft ud af ballonen. Når al luft er ude af ballonen, så er sluttilstanden R nået. Hver iteration lukker lidt luft ud af P, som igen nærmer sig R mere og mere. Terminating State R er sand Invariant P Skal omfatte alle tilstande, som tilfredsstiller Q og R IS: Initial State Q er sand og S 0 er udført IS: Initial State Q er sand og S 0 er udført Terminating State R er sand

FEN KbP/seminar2: LoopsReview5 Afsvækkelse af postbetingelsen P kan findes ved passende afsvækkelse af R: –Slet en konjunkt –Erstat en konstant med en variabel –(Udvid værdimængden for en variabel) –(Tilføje en disjunkt) Kun de tre første er praktisk interessante, og vi begrænser os til de to første. Eller er det en adjunkt?

FEN KbP/seminar2: LoopsReview6 Afsvækkelse af postbetingelsen Figur fjernet pga. Copyright (fra Meyer 1990)

FEN KbP/seminar2: LoopsReview7 Slet en konjunkt Eksempel: Lineær søgning. Omgivelse: [var N: int; b:array [0..N) of int; i, x: int;] Ramme: i:[N>0  x  b[0..N), 0  i  N  (  j| 0  j < i: x  b[j])  x=b[i]]

FEN KbP/seminar2: LoopsReview8 Slet en konjunkt i R: 0  i  N  (  j| 0  j < i: x  b[j])  x=b[i] Hvilken skal slettes? Slet den der er sværest at etablere initialt: - pkt. 4 og 1 x=b[i] Negation heraf anvendes som vagt: - pkt. 4 x  b[i] Etabler invarianten initialt: - pkt. 1 i:=0 Checklisten: 1. {Q} S 0 {P} 2. {P  B} S {P} 3. terminering af løkken 4. P   B  R {Q} S 0 do {P} B  S od {R}

FEN KbP/seminar2: LoopsReview9 Vi har nu: i:=0; do {0  i  N  (  j| 0  j < i: x  b[j])} x  b[i]  S od Det ses, at t= N-i er en passende termineringsfunktion. Vi mangler at bestemme S: Invarianten skal bevares, og der skal tages skridt mod terminering. Begge dele opnås ved S:i:= i+1 Pre-betingelsen siger, at x findes i arrayet, invarianten at x ikke findes i den allerede undersøgte del, så på et eller andet tidspunkt vil vi møde x og terminere. {Q} S 0 do {P} B  S od {R} Checklisten: 1. {Q} S 0 {P} 2. {P  B} S {P} 3. terminering af løkken 4. P   B  R

FEN KbP/seminar2: LoopsReview10 Programmet bliver: {N>0  x  b[0..N)} i:=0; do {0  i  N  (  j| 0  j < i: x  b[j])} x  b[i]  i:= i+1 od {0  i  N  (  j| 0  j < i: x  b[j])  x=b[i]} {Q} S 0 do {P} B  S od {R} Checklisten: 1. {Q} S 0 {P} 2. {P  B} S {P} 3. terminering af løkken 4. P   B  R Korrekthed?

FEN KbP/seminar2: LoopsReview11 Erstat en konstant med en variabel. Eksempel: Summering af elementerne i et array. Ramme:sum:[N>0, sum=(  j| 0  j<N : b[j])] Vi kan afsvække postbetingelsen ved at erstatte konstanten N med variablen n og tilføje en begrænsning på n. Invarianten bliver: sum = (  j | 0  j<n : b[j])  0  n  N Vagten findes udfra kravet P  ¬B  R. Dvs. hvad mangler P i at medføre R? (n=N): B: n  N Vi skal finde en initialisering af sum og n, som etablerer invarianten: sum, n := 0, 0 {Q} S 0 do {P} B  S od {R} Checklisten: 1. {Q} S 0 {P} 2. {P  B} S {P} 3. terminering af løkken 4. P   B  R

FEN KbP/seminar2: LoopsReview12 Hermed har vi følgende skabelon for løkken: n, sum := 0, 0; do {0  n  N  sum = (  j | 0  j<n : b[j])} n  N  S(?) od Begrænsningsfunktionen må være t= N-n. Skridt mod terminering sikres ved kommandoen n:= n+1: n, sum := 0, 0; do {0  n  N  sum = (  j | 0  j<n : b[j])} n  N  (?) n:= n+1 od {Q} S 0 do {P} B  S od {R} Checklisten: 1. {Q} S 0 {P} 2. {P  B} S {P} 3. terminering af løkken 4. P   B  R

FEN KbP/seminar2: LoopsReview13 Invarianten skal bevares. Sum skal være summen af elementerne op til n. Når n tælles op, så må summen forøges med næste element. Det færdige loop: n, sum := 0, 0; do {0  n  N  sum = (  j | 0  j<n : b[j])} n  N  n, sum:= n+1, sum+b[n] od {Q} S 0 do {P} B  S od {R} Checklisten: 1. {Q} S 0 {P} 2. {P  B} S {P} 3. terminering af løkken 4. P   B  R

FEN KbP/seminar2: LoopsReview14 Afsvækkelse af postbetingelsen Figur fjernet pga. Copyright (fra Meyer 1990)

FEN KbP/seminar2: LoopsReview15 Øvelser Udvikl programmet til summering af et array ved at erstatte konstanten 0 med en variabel i stedet for konstanten N. Udvikl en algoritme med følgende specifikation: OddCount:[N: int; b: array[0..N) of int; r: int; r: [N  0, r = (#i | 0  i<N : Odd(b[i]))] ] Udled invarianten ved at erstatte konstanten N med en variabel Udvikl en algoritme til bestemmelse af heltalsapproksimationen af kvadratroden af et heltal. Specifikation: SquareRootAppr:|[ n, r: int; r : [n  0, 0  r 2  n < (r+1) 2 ] ]| Vink: Find en invariant ved at slette en konjunkt. {Q} S 0 do {P} B  S od {R} Checklisten: 1. {Q} S 0 {P} 2. {P  B} S {P} 3. terminering af løkken 4. P   B  R

FEN KbP/seminar2: LoopsReview16 JML requires ensures \result>=0 && (\result)*(\result) <= && n < (\result + 1)*(\result + public static int root(int n) { int r= 0; while(n>=(r+1)*(r+1)) { r++; } return r; }

FEN KbP/seminar2: LoopsReview17 Andre opgaver: Øvelser uge 2: –AllZeros –Bin2Dec –JML