Legyen adott tulajdonság. A feladat az, hogy keressük meg azt a legkisebb
tulajdonságú egész számot, amely nem kisebb, mint az adott
szám.
|
|
|
|
A feladatot ciklussal oldjuk meg. Az invariánshoz gyengítjük az utófeltételt, elhagyjuk
belőle -t:
|
|
,
,
Legyen tetszőlegesen rögzített olyan szám, amelyre
igaz(ilyen az előfeltétel miatt létezik). Ekkor
.
az értékadás csökkenti a terminálófüggvény értékét,
.
Tétel: Az alábbi struktogram formában megadott program megoldása a fent specifikált feladatnak:
Bizonyítás: A tétel a levezetési szabályokból, és a specifikáció tételéből a fentiek szerint következik. __
A fenti program csak akkor megoldása a feladatnak, ha a
tulajdonság megengedett feltétel. Ha ez nem így van, akkor másik megoldást kell
keresnünk. Válasszuk az alábbi invariánst (a feladat marad ugyanaz!):
|
Ekkor:
,
,
Legyen tetszőlegesen rögzített olyan szám, amelyre
igaz(ilyen az előfeltétel miatt létezik). Ekkor
.
az értékadás csökkenti a terminálófüggvény értékét,
A ciklusmag szekvencia lesz, melynek közbülső feltétele:
|
és így a ciklusmag első fele az értékadás lesz.
Tétel: Ekkor az alábbi program is megoldása a specifikált feladatnak.
Tegyük fel, hogy és létezik
, hogy
. Keressük meg a
legelső
elemet (ha van
olyan), amely előtt (
-től
kezdve) nem volt igaz
! Ennek a változatnak már a specifikációja is más lesz, hiszen a feladat is
megváltozott.
|
|
|
|
|
|
A feladatot megoldó ciklus invariánsa:
|
|
|
|
Ekkor:
,
,
Legyen tetszőlegesen rögzített olyan szám, amelyre
igaz (ilyen az előfeltétel miatt létezik). Ekkor
.
az értékadás csökkenti a terminálófüggvény értékét,
A ciklusmag szekvencia lesz, melynek közbülső feltétele ( ):
|
|
|
|
és így a ciklusmag első fele az értékadás lesz.
Tétel: Az alábbi struktogram formában megadott program megoldása a fent specifikált feladatnak:
A fenti feladatnak van egy speciális esete, amikor
tulajdonság azt mondja ki, hogy még nem értünk el egy
számot, azaz egy intervallumon kell keresni. Erre a speciális esetre adunk egy másik
megoldást is.
|
|
|
|
|
|
Legyen a ciklus invariáns tulajdonsága:
|
|
Ekkor:
,
,
,
az értékadás csökkenti a terminálófüggvény értékét,
A ciklusmag szekvencia lesz, melynek közbülső feltétele ( ):
|
|
és így a ciklusmag első fele az értékadás lesz.
Tétel: Az alábbi struktogram formában megadott program megoldása a fent specifikált feladatnak: