Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q.

Lignende præsentationer


Præsentationer af emnet: "FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q."— Præsentationens transcript:

1 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q

2 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 2 Specifikationer Følgende er et eksempel på en specifikation, der udtrykker, at s skal være summen af tallene i tabellen b[0..N): s : [N  0, s = (+ i | 0  i < N : b[i])] Husk: ”(+i…” er det samme som (  i | 0  i  N : b[i]) En specifikation består af fire komponenter: –Omgivelsen er tabellen b[0..N) og variablen s –Rammen er s (de/den variable, som specifikationen drejer sig om) –pre-betingelsen er N  0 –post-betingelsen er s = (  i | 1  i  N : b[i]) Array-segment: 0 incl., N excl.

3 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 3 Flere eksempler x : [true, x = y 2 ] Sæt x til kvadratet på y. y : [x  0, y 2 = x] Sæt y til en kvadratrod af x under forudsætningen, at x ikke er negativ. e : [S  {}, e  S] Sæt e til en værdi fra mængden S under forudsætningen, at S ikke er tom. x : [b 2  4  a  c, a  x 2 +b  x+c = 0] Sæt x til en rod for andengradspolynomiet under forudsætningen, at diskriminanten ikke er negativ.

4 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 4 Generelt Generelt har en specifikation formen w : [pre, post] hvor w er rammen, pre er startbetingelsen og post er slutbetingelsen. I rammen må kun refereres variabler, der er beskrevet i omgivelserne. Betydningen af en sådan specifikation er: Hvis starttilstanden tilfredsstiller pre, ændres kun variabler i rammen w, så sluttilstanden tilfredsstiller post.

5 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 5 Endnu flere eksempler... ”Find en heltalsapproksimation til kvadratroden af heltallet n.” –Resultatet skal gemmes i en variabel; vi vælger r –Vi har hermed omgivelsen |[ n, r: int; ]| –n ikke må være negativ. Startbetingelsen er derfor n  0. Til sidst skal vi have præciseret, hvad vi mener med “en heltalsapproksimation til kvadratroden af n”. Hermed mener vi det største heltal, der højst er  n, det vil sige det største heltal r, så r 2  n. En mulig specifikation er således r : [n  0, r  0  r 2  n < (r+1) 2 ]

6 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 6 Søgning En uformel specifikation kunne være “find x i b[0..N)”. En mere præcis specifikation må fastlægge forudsætninger om N og b: –Kan tabellen være tom? –Findes x? Hvis ikke, hvordan skal vi så beskrive, at x ikke findes? Her er fire mulige specifikationer, som på hver sin måde besvarer disse spørgsmål. I de tre første tilfælde er omgivelsen |[ N: int ; b: array [0..N) of int ; x: int ; p: int ; ]| i det sidste tilfælde er omgivelsen udvidet med variablen found: bool.

7 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 7 p : [x  b[0..N), 0  p < N  x = b[p]] Denne specifikation forudsætter, at x findes i b og dikterer, at et indeks for en forekomst af x gemmes i p. p : [N  0, 0  p < N  x = b[p]  p = N  x  b[0..N)] Her forudsættes ikke, at x findes, men det dikteres, at p sættes til N, hvis x ikke forekommer. p : [N  0, 0  p < N  x  b[0..p)  x = b[p]  p = N  x  b[0..N)] Denne er næsten magen til den forrige, men som noget ekstra dikterer den, at p skal være indeks for første forekomst af x i b (hvis x er der). p, found : [N  0, (found  x  b[0..N))  (found  0  p < N  x = b[p])] Her benyttes en ekstra variabel found til at indikere, om x forekommer i b, og dikterer kun en slutværdi for p, hvis x forekommer. Hvad hvis x ikke er der?

8 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 8 Lidt (mere) notation I specifikationer har man behov for at relatere start- og slutværdier af variabler. Skal vi for eksempel lave en specifikation for en algoritme, der skal tælle en variabel x én op, kunne vi forsøge os med x : [true, x = x +1]. Men denne specifikation er umulig at tilfredsstille: der findes ingen sluttilstand, hvori x = x +1. Vi ønsker at udtrykke, at slutværdien af x skal være én større end startværdien. Vi har derfor behov for at kunne skelne mellem start- og slutværdien af en variabel.

9 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 9 x : [true, x = x 0 + 1] x : [true, x´ = x + 1] x : [x = X, x = X + 1]. x 0 er startværdien af x x’ er slutværdien af x X er startværdien af x

10 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 10 Øvelser Formulér følgende specifikationer med dine egne ord: 1.x : [true, x =  x´] 2.r : [N  0, r  (  i | 0  i < N : b[i]  0)] 3.r : [N  0, r  (  i | 0 < i < N : b[i  1]  b[i])] 4.p : [(  i | 0  i 0), p = (  i | 0  i 0 : i)] Formalisér følgende uformelle specifikationer: 1.Alle værdier i b har fået skiftet fortegn. 2.Beregn summen af elementerne i b[j..k). 3.Find den største værdi i b[j..k). 4.Find indeks for en største værdi i b[j..k). Minimum

11 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 11 Q, en algoritmenotation Kommandoer: –skip –fail –parallel tildeling –kontrolstrukturer: sekvensiering, selektion og iteration procedure- og funktionsbegreb

12 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 12 skip og fail Skip Udførelse af skip-kommandoen skip gør ingenting (og - må man formode - gør det hurtigt)! Fail Udførelse af fail-kommandoen er uforudsigelig, (vi anvender den ikke, men den kan bruges til at beskrive fejlbehæftet kode).

13 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 13 Parallel tildeling Kommandoen til parallel tildeling har formen x 1, x 2,..., x n := e 1, e 2,..., e n hvor x i er variabler, og e i er udtryk, 1  i  n. –Typen af x i og e i skal parvis være ens. –Kommandoen kan kun udføres i en tilstand, hvor alle e i er veldefinerede, og i dette tilfælde består udførelsen i først at evaluere e i -erne (i vilkårlig rækkefølge) og dernæst tildele resultaterne til de tilsvarende x i (igen i vilkårlig rækkefølge). Nondeterminisme Sideeffekt-fri

14 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 14 Sekvens Sekventiel sammensætning er én måde at konstruere større algoritmer ud fra mindre. Lad S 1 og S 2 være to kommandoer. Da er S 1 ; S 2 en kommando, og betydningen af den er, at først udføres S 1 og derefter S 2.

15 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 15 Selektion (Dijkstra’s Guarded Command) if x  0  z:= x x  0  z:=  x fi eller if x  0  z:= x x  0  z:=  x fi Hvad hvis x = 0? Nondeterminisme

16 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 16 Den generelle form af if-kommandoen er if B 0  S 0 B 1  S 1... B n  1  S n  1 fi Hver B i  S i, 0  i < n, er en bevogtet kommando. S i kan være vilkårlige kommandoer alle vagter være veldefinerede i den aktuelle tilstand. mindst én vagt skal være sand hvis mere end én vagt er sand, vælges tilfældigt en bevogtet kommando med sand vagt, og den tilhørende kommando udføres Nondeterminisme

17 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 17 Om guarded command et vilkårligt antal alternativer: –både if og switch/case –nondeterminisme. Hvis mere end én vagt er sand, er der frit slag for en implementation til at vælge en vilkårlig af disse, men kun én. Det kan være et fuldstændig tilfældigt valg, det kan altid være den første eller implementationen kan forsøge at vælge den med den korteste udførelsestid. Pointen er, at eftersom ethvert af disse valg giver et korrekt resultat, så behøver programmøren ikke bekymre sig om, hvilket der skal udføres. Af hensyn til effektiviteten kan nogle vagter strammes, så nondeterminismen elimineres.

18 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 18 Iteration do B 0  S 0 B 1  S 1... B n  1  S n  1 od Semantikken af do-kommandoen er som følger: –Gentag følgende sålænge det er muligt: Vælg en bevogtet kommando med sand vagt og udfør den tilhørende kommando. Løkken standser når (hvis) alle vagter er falske. –Bemærk, at nondeterminisme er tilladt. Den simple: do B  S od svarer til while-sætningen i fx Java: while(B) { S;S; } Nondeterminisme

19 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 19 Procedurer og funktioner proc identifier (parameter specifications) body hvor identifier er navnet på proceduren, parameter specifications er en beskrivelse af slags, navn og type af procedurens parametre og body er procedurens handlingsdel. func identifier (parameter specifications)  r: resulttype body parameteroverførselsmekanismer –in, inout, out samt ref

20 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 20 Eksempler max:|[m, n, r: int ; r : [true, r = m  n] ; if m  n  r:= m m  n  r:= n fi ]| Omgivelser Specifikation Algoritme Navngivning

21 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 21 Summering af array sum:|[b: array [0..N) of int ; s: int ; s : [true, s = (+ i | 0  i < N : b[i])] ; |[n: int ; n, s:= 0, 0 ; do n  N  n, s:= n + 1, s + b[n] od ]| Bemærk: n er ikke en del af omgivelserne, men en del af løsningen. n er erklæret i en lokal blok |[...]|, der afgrænser variablens virkefelt. Hvad hvis b er tomt?

22 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 22 Fibonacci-tal fibonacci: |[ n, r: int ; r : [n  0, r = ‘det n’te Fibonacci-tal’] ; r:= fib(n) where fib is func fib (n: int)  r: int if n = 0  r:= 0 n = 1  r:= 1 n > 1  r:= fib(n  1) + fib(n  2) fi ]| Rekursion

23 FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 23 Øvelser Skriv algoritmer i Q, som tilfredsstiller specifikationerne: 1.r : [N  0, r  (  i | 0  i < N : b[i]  0)] 2.p : [(  i | 0  i 0), p = (  i | 0  i 0 : i)] 3.Brug din specifikation af: Find den største værdi i b[j..k).


Download ppt "FEN 2013-04-11KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q."

Lignende præsentationer


Annoncer fra Google