init;
while not exit do body
Π‘ Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌΠΈ ΠΈ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ°ΠΌΠΈ ΡΠΈΠΊΠ» Π΄Π»Ρ maxarray Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
from
i := t.lower; Result := t @ lower
invariant
-- Result ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠΎΠΌ Π½Π°ΡΠ΅Π·ΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° t Π² ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π΅ [t.lower,i].
variant
t.lower - i
until
i = t.upper
loop
i := i + 1
Result := Result.max (t @ i)
End
ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΠΈΠ½Π²Π°ΡΠΈΠ°Π½Ρ ΡΠΈΠΊΠ»Π° Π²ΡΡΠ°ΠΆΠ΅Π½ Π½Π΅ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, Π² Π²ΠΈΠ΄Π΅ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡ. ΠΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² ΡΡΠΎΠΉ Π»Π΅ΠΊΡΠΈΠΈ ΠΎΠ±ΡΡΡΠ½ΠΈΡ ΡΡΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠ·ΡΠΊΠ° ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ.
ΠΠΎΡ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°Π½Π΅Π΅ ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΡΠΉ Π±Π΅Π· Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΈ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ². Π¦Π΅Π»ΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅Π³ΠΎ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ - ΠΠΠ (gcd - greatest common divisor) Π΄Π²ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ΅Π»ΡΡ a ΠΈ b, ΡΠ»Π΅Π΄ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΠΠ²ΠΊΠ»ΠΈΠ΄Π°:
gcd (a, b: INTEGER): INTEGER is
-- ΠΠΠ a ΠΈ b
require
a > 0; b > 0
local
x, y: INTEGER
do
from
x := a; y := b
until
x = y
loop
if x > y then x := x - y else y := y - x end
end
Result := x
ensure
-- Result ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΠΠ a ΠΈ b
end
ΠΠ°ΠΊ ΡΠ·Π½Π°ΡΡ, ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ gcd ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ΅Ρ ΡΠ²ΠΎΠ΅ΠΌΡ ΠΏΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΡΠ΅Ρ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΉ ΠΎΠ±ΡΠΈΠΉ Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ a ΠΈ b? ΠΠ»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΈΡΡΠΈΠ½Π½ΠΎ ΠΏΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠΈΠΊΠ»Π° ΠΈ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ:
x > 0; y > 0
-- ΠΠ°ΡΠ° <x, y> ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡ ΠΆΠ΅ ΠΠΠ, ΡΡΠΎ ΠΈ ΠΏΠ°ΡΠ° <a, b>
ΠΡΠΎ ΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ»ΡΠΆΠΈΡΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ ΡΠΈΠΊΠ»Π° inv. Π―ΡΠ½ΠΎ, ΡΡΠΎ inv Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ inv ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΡΠΈΠΊΠ»Π° x /= y, ΡΠΎ ΠΏΠΎΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅Π»Π° ΡΠΈΠΊΠ»Π°:
if x > y then x := x - y else y := y - x end
ΠΈΠ½Π²Π°ΡΠΈΠ°Π½Ρ inv ΠΎΡΡΠ°Π΅ΡΡΡ ΠΈΡΡΠΈΠ½Π½ΡΠΌ, Π·Π°ΠΌΠ΅Π½Π° Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΈΠ· Π΄Π²ΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π΅ΡΠ°Π²Π½ΡΡ ΡΠΈΡΠ΅Π» ΠΈΡ ΡΠ°Π·Π½ΠΎΡΡΡΡ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅Ρ ΠΈΡ gcd ΠΈ ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ. Π’ΠΎΠ³Π΄Π° ΠΏΠΎ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΡΠΈΠΊΠ»Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ:
x = y and Β«ΠΠ°ΡΠ° <x, y> ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡ ΠΆΠ΅ ΠΠΠ, ΡΡΠΎ ΠΈ ΠΏΠ°ΡΠ° <a, b>Β»
ΠΡΡΡΠ΄Π°, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠ»Π΅Π΄ΡΠ΅Ρ, ΡΡΠΎ x ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°ΠΈΠ±ΠΎΠ»ΡΡΠΈΠΌ ΠΎΠ±ΡΠΈΠΌ Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ. ΠΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΠΠ (x, x) = x.
ΠΠ°ΠΊ ΡΠ·Π½Π°ΡΡ, ΡΡΠΎ ΡΠΈΠΊΠ» Π²ΡΠ΅Π³Π΄Π° Π·Π°Π²Π΅ΡΡΠ°Π΅ΡΡΡ? ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ Π²Π°ΡΠΈΠ°Π½Ρ. ΠΡΠ»ΠΈ x Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ y, ΡΠΎ Π² ΡΠ΅Π»Π΅ ΡΠΈΠΊΠ»Π° x Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ°Π·Π½ΠΎΡΡΡΡ x-y. ΠΡΠ»ΠΈ y Π±ΠΎΠ»ΡΡΠ΅ x, ΡΠΎ y Π·Π°ΠΌΠ΅Π½ΡΠ΅ΡΡΡ ΡΠ°Π·Π½ΠΎΡΡΡΡ y-x. ΠΠ΅Π»ΡΠ·Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Π°ΡΠΈΠ°Π½ΡΠ° Π²ΡΠ±ΡΠ°ΡΡ Π½ΠΈ x, Π½ΠΈ y, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ Π½Π΅Ρ Π³Π°ΡΠ°Π½ΡΠΈΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ. ΠΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΠ΄Π΅Ρ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΎ. ΠΠΎΡΡΠΎΠΌΡ ΡΠ°Π·ΡΠΌΠ½ΠΎ Π²ΡΠ±ΡΠ°ΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π²Π°ΡΠΈΠ°Π½ΡΠ° x.max(y). ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, Π²Π°ΡΠΈΠ°Π½Ρ Π²ΡΠ΅Π³Π΄Π° ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΡΠΌ. Π’Π΅ΠΏΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΡ ΡΠΈΠΊΠ» ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ:
from
x := a; y := b
invariant
x > 0; y > 0
-- ΠΠ°ΡΠ° <x, y> ΠΈΠΌΠ΅Π΅Ρ ΡΠΎΡ ΠΆΠ΅ ΠΠΠ, ΡΡΠΎ ΠΈ ΠΏΠ°ΡΠ° <a, b>
variant
x.max (y)
until
x = y
loop
if x > y then x := x - y else y := y - x end
end
ΠΠ°ΠΊ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΎΡΡ, ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ invariant ΠΈ variant ΡΠ²Π»ΡΡΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌΠΈ. ΠΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΡΡ, ΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°ΡΡ ΠΏΡΠΎΡΡΠ½ΠΈΡΡ ΡΠ΅Π»Ρ ΡΠΈΠΊΠ»Π° ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ Π΅Π³ΠΎ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ. ΠΠ»Ρ Π»ΡΠ±ΠΎΠ³ΠΎ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π° Ρ Π°ΡΠ°ΠΊΡΠ΅ΡΠ½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ; ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² Π² ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π»Π΅ΠΊΡΠΈΡΡ Π²ΠΊΠ»ΡΡΠ°ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ Π»Π΅ΠΆΠ°ΡΠΈΡ Π² ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ².
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ
Π’Π΅ΠΏΠ΅ΡΡ ΠΌΡ ΡΠΆΠ΅ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΠ»ΠΈΡΡ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΌΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ. Π Π°Π·ΡΠΌΠ½ΠΎ, Π΅ΡΠ΅ ΡΠ°Π· Π²Π·Π³Π»ΡΠ½ΡΡΡ Π½Π° ΡΠ΅ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π°, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΡ ΡΡΠΎΠ³ΠΎ. ΠΡΠ΄Π΅Π»ΠΈΠΌ ΡΠ΅ΡΡΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ.
[x]. ΠΠΎΠΌΠΎΡΡ Π² ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΠ.
[x]. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
[x]. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ, ΠΎΡΠ»Π°Π΄ΠΊΠΈ ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π°.
[x]. ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° ΠΏΡΠΈΠ΅ΠΌΠ»Π΅ΠΌΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π½Π΅ΠΈΡΠΏΡΠ°Π²Π½ΠΎΡΡΠ΅ΠΉ.
Π’ΠΎΠ»ΡΠΊΠΎ Π΄Π²Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΠΏΡΠ½ΠΊΡΠ° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡΡ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π² ΠΏΠ΅ΡΠΈΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΊΠ°ΠΊ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π΄Π»Ρ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΠ
ΠΠ΅ΡΠ²ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΈΡΡΠΎ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΠ°ΠΌΡΠΌ Π²Π°ΠΆΠ½ΡΠΌ. Π Π΄Π΅ΡΠ°Π»ΡΡ ΠΎΠ½ΠΎ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΎΡΡ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π°Ρ : ΡΠΎΡΠ½ΡΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠ»Π°ΡΡΠΎΠ² ΠΈ ΡΠΈΠΊΠ»ΠΎΠ² - Π²ΡΠ΅ ΡΡΠΎ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΏΡΠΎΠ΄ΡΠΊΡ, ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΉ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π° Π² ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Ρ, ΠΏΡΡΠ°ΡΡΠ΅ΠΌΡΡΡ Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΎΡΠ»Π°Π΄ΠΊΠΈ. ΠΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΡΠΎΡΠ½ΠΎΠΉ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π° ΠΊ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π½Π΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΡΠ΅ΡΠ²Π΅Π»ΠΈΡΠ΅Π½Ρ. ΠΠΎ Π²ΡΠ΅ΠΉ ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ Π²ΡΡΠΊΠΈΠΉ ΡΠ°Π· ΠΏΡΠΈ Π²ΡΡΡΠ΅ΡΠ΅ Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ Π΅Π³ΠΎ ΡΠΎΡΠΌΠ°Π»ΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π²ΡΡΠ°ΠΆΠ°Π»ΠΈΡΡ ΡΠΎΡΠ½ΠΎ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π±ΡΠ»ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠΌ.
ΠΠ»ΡΡΠ΅Π²Π°Ρ ΠΈΠ΄Π΅Ρ ΡΡΠΎΠΉ Π»Π΅ΠΊΡΠΈΠΈ - ΠΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡΠ»Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠΎΠΌ Ρ Π΅Π³ΠΎ ΡΠ»ΡΠΆΠ±Π°ΠΌΠΈ. Π₯ΠΎΡΠΎΡΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ ΡΠΎΡΠ½ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΡΡΡ ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ ΠΏΡΠ°Π²Π° ΠΈ ΠΎΠ±ΡΠ·Π°Π½Π½ΠΎΡΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠ°ΡΡΠ½ΠΈΠΊΠ°. Π ΠΏΡΠΎΠ΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΠΠ, Π³Π΄Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΠΈ ΡΡΡΠΎΠΉΡΠΈΠ²ΠΎΡΡΡ ΡΠ°ΠΊ Π²Π°ΠΆΠ½Ρ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ°ΡΠΊΡΡΡΠΈΠ΅ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ² ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°, ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΈΡ ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ. Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ Π΄Π°ΡΡ ΡΠΏΠΎΡΠΎΠ± ΡΠΎΡΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ, ΡΡΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ ΠΈ ΡΡΠΎ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Π΅ Π² ΡΡΠΎΠΌ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΈ.
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ Π΄Π»Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ: ΠΊΡΠ°ΡΠΊΠ°Ρ ΡΠΎΡΠΌΠ° ΠΊΠ»Π°ΡΡΠ°
ΠΡΠΎΡΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΠΌ Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ, Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±ΡΠ΅, Π² ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠΎΠ² ΠΌΠΎΠ΄ΡΠ»Π΅ΠΉ Π² Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅. ΠΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΏΡΠ΅Π΄ΡΡΠ»ΠΎΠ²ΠΈΡ, ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΌΠΎΠ΄ΡΠ»Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠ΅ΠΉ ΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΠΌΡΡ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ ΡΠ»ΡΠΆΠ±Π°Ρ , Π²ΡΡΠ°ΠΆΠ΅Π½Π½ΠΎΠΉ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΈ ΡΠΎΡΠ½ΠΎΠΉ ΡΠΎΡΠΌΠ΅. ΠΠΈΠΊΠ°ΠΊΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎ Π²ΡΡΠ°ΠΆΠ΅Π½Π½ΡΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ, ΡΠ²Π»ΡΡΡΠΈΡ ΡΡ ΡΠ°ΡΡΡΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΠ.
Π ΡΠ°ΠΌΠΎΠΌ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅ ΡΡΠΎΠΉ Π»Π΅ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡΡΡΡ Ρ ΠΏΡΠΎΠ΅ΠΊΡΠΎΠΌ, Π³Π΄Π΅ ΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π° Π±ΡΠ»ΠΈ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Ρ, ΡΡΠΎ ΠΎΠ±ΠΎΡΠ»ΠΎΡΡ Π² $500 ΠΌΠΈΠ»Π»ΠΈΠΎΠ½ΠΎΠ² ΠΈ ΠΏΡΠΈΠ²Π΅Π»ΠΎ ΠΊ ΠΏΡΠΎΠ²Π°Π»Ρ ΠΊΠΎΡΠΌΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ°.Π‘ΡΠ΅Π΄ΡΡΠ²ΠΎ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ short ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ, ΠΊΠ°ΠΊ Π²Π°ΠΆΠ½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΡΠΈ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠΈ ΠΈΠ· ΠΊΠ»Π°ΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π·Π½Π°ΡΠΈΠΌΠΎΠΉ Π΄Π»Ρ ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ². ΠΡΠ°ΡΠΊΠ°Ρ ΡΠΎΡΠΌΠ° ΠΊΠ»Π°ΡΡΠ° - Π΅Π³ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π° Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠΌ ΡΡΠΎΠ²Π½Π΅. ΠΠ½Π° Π²ΠΊΠ»ΡΡΠ°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ»Π΅Π·Π½Π° Π°Π²ΡΠΎΡΠ°ΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Ρ ΠΈΠ· ΡΠΊΡΡΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ, ΠΈ Π½Π΅ ΡΠ°ΡΠΊΡΡΠ²Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΡΠΊΡΡΡΡΡ . ΠΠΎ ΠΊΡΠ°ΡΠΊΠ°Ρ ΡΠΎΡΠΌΠ° ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ, ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Ρ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΊΠ»Π°ΡΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅Ρ ΡΠ²ΠΎΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ.
ΠΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΡΠ°ΡΠΊΠΎΠΉ ΡΠΎΡΠΌΡ ΠΊΠ»Π°ΡΡΠ° STACK4:
indexing
description: "Π‘ΡΠ΅ΠΊΠΈ: Π‘ΡΡΡΠΊΡΡΡΡ Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΎΠΉ Π΄ΠΎΡΡΡΠΏΠ° Last-In, First-Out %
%ΠΠ΅ΡΠ²ΡΠΉ ΠΏΡΠΈΡΠ΅Π» - ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΡΡΠ΅Π», Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π΅ΠΌΠΊΠΎΡΡΡΡ"
class interface STACK4 [G] creation
make
feature -- Initialization (ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ)
make (n: INTEGER) is
-- Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΡΠ΅ΠΊ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ n ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
require
non_negative_capacity: n >= 0
ensure
capacity_set: capacity = n
end
feature -- Access (ΠΠΎΡΡΡΠΏ)
capacity: INTEGER
-- ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ΅ΠΊΠ°
count: INTEGER
-- Π§ΠΈΡΠ»ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ΅ΠΊΠ°
item: G is
-- ΠΠ»Π΅ΠΌΠ΅Π½Ρ Π² Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ°
require
not_empty: not empty -- i.e. count > 0
end
feature -- Status report (ΠΡΡΠ΅Ρ ΠΎ ΡΡΠ°ΡΡΡΠ΅)
empty: BOOLEAN is
-- ΠΡΡΡ Π»ΠΈ ΡΡΠ΅ΠΊ?
ensure
empty_definition: Result = (count = 0)
end
full: BOOLEAN is
-- ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½ Π»ΠΈ ΡΡΠ΅ΠΊ?
ensure
full_definition: Result = (count = capacity)
end
feature -- Element change (ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²)
put (x: G) is
-- ΠΡΠΎΠ»ΠΊΠ½ΡΡΡ x Π² Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°
require
not_full: not full
ensure
not_empty: not empty
added_to_top: item = x
one_more_item: count = old count + 1
end
remove is
-- Π£Π΄Π°Π»ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°
require
not_empty: not empty -- i.e. count > 0
ensure
not_full: not full
one_fewer: count = old count - 1
end
invariant
count_non_negative: 0 <= count