PawelG: Różnice pomiędzy wersjami
Z Lem
(Nie pokazano 12 pośrednich wersji utworzonych przez tego samego użytkownika) | |||
Linia 2: | Linia 2: | ||
# Czy potrafisz odgadnąc co ten program robi i sformułować odpowiednie twierdzenie? | # Czy potrafisz odgadnąc co ten program robi i sformułować odpowiednie twierdzenie? | ||
# Czy potrafisz je udowodnić? | # Czy potrafisz je udowodnić? | ||
+ | # Czy potrafisz podać dowód w którym posługujesz sie wyłącznie aksjomatami rachunku programów (''alias'' AL), aksjomatami liczb naturalnych i regułami wnioskowania rachunku programów. Tak by czytelnik Twojego dowodu mógł zweryfikowac kazdy krok Twego rozumowania? | ||
− | + | ||
− | + | '''program''' PawelG; (* autor Paweł Gburzyński, 1983, <ref>Loglan Summer School, 1983, Instytut Informatyki, Uniwersytet Warszawski</ref> *) | |
− | + | '''var''' A: '''arrayof''' integer; | |
− | + | '''var''' n, k, j, licz: integer ; | |
− | var A: arrayof integer; | + | '''unit''' DrukujA: '''procedure'''; |
− | + | '''var''' j: integer | |
− | var n, k, j, licz: integer ; | + | '''begin''' |
− | unit DrukujA: | + | '''for''' j := 1 '''to''' n '''do''' write(A[j]) '''od'''; |
− | var j: integer | + | writeln |
− | + | '''end''' DrukujA; | |
− | + | '''-----''' | |
− | writeln | + | '''unit''' F: '''procedure'''; |
− | + | '''var''' i: integer; | |
− | + | '''begin''' | |
− | + | '''if''' k=n+1 '''then''' | |
− | var i: integer; | + | '''call''' DrukujA; licz := licz+1 |
− | + | '''else''' | |
− | + | '''for''' i:= 1 '''to''' n | |
− | + | '''do''' | |
− | + | '''if''' A[i]=0 '''then''' | |
− | + | A[i] := k; k := k+1; | |
− | + | '''call''' F; | |
− | + | k := k-1; A[i]:=0 | |
− | A[i] := k; k := k+1; | + | '''fi'''; |
− | + | '''od'''; | |
− | k := k-1; A[i]:=0 | + | '''fi'''; |
− | + | '''return''' | |
− | + | '''end''' F; | |
− | + | '''begin''' | |
− | + | readln(n); | |
− | + | '''array''' A '''dim'''(1:n); | |
− | readln(n); | + | '''for''' j := 1 '''to''' n '''do''' A[j] := 0 '''od'''; |
− | array A dim(1:n); | + | k :=1; |
− | + | licz:=0; | |
− | + | '''call''' F; | |
− | k :=1; | + | writeln(``Bywaj``) |
− | + | '''end''' PawelG | |
− | writeln( | + | |
− | + | <references/> | |
− | + | ||
− | </ | + |
Aktualna wersja na dzień 11:36, 23 mar 2020
Poniżej znajdziesz niewielki program.
- Czy potrafisz odgadnąc co ten program robi i sformułować odpowiednie twierdzenie?
- Czy potrafisz je udowodnić?
- Czy potrafisz podać dowód w którym posługujesz sie wyłącznie aksjomatami rachunku programów (alias AL), aksjomatami liczb naturalnych i regułami wnioskowania rachunku programów. Tak by czytelnik Twojego dowodu mógł zweryfikowac kazdy krok Twego rozumowania?
program PawelG; (* autor Paweł Gburzyński, 1983, [1] *) var A: arrayof integer; var n, k, j, licz: integer ; unit DrukujA: procedure; var j: integer begin for j := 1 to n do write(A[j]) od; writeln end DrukujA; ----- unit F: procedure; var i: integer; begin if k=n+1 then call DrukujA; licz := licz+1 else for i:= 1 to n do if A[i]=0 then A[i] := k; k := k+1; call F; k := k-1; A[i]:=0 fi; od; fi; return end F; begin readln(n); array A dim(1:n); for j := 1 to n do A[j] := 0 od; k :=1; licz:=0; call F; writeln(``Bywaj``) end PawelG
- ↑ Loglan Summer School, 1983, Instytut Informatyki, Uniwersytet Warszawski