Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 110

Автор Π‘Π΅Ρ€Ρ‚Ρ€Π°Π½ ΠœΠ΅ΠΉΠ΅Ρ€

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