ΠΠ°ΡΡΠΈΠ², Π½Π°Π·Π²Π°Π½Π½ΡΠΉ representation, ΠΈΠΌΠ΅Π΅Ρ Π³ΡΠ°Π½ΠΈΡΡ 1 ΠΈ capacity: ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ Π°ΡΡΠΈΠ±ΡΡ count, ΠΎΡΠΌΠ΅ΡΠ°ΡΡΠΈΠΉ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°. ΠΠ°ΠΌΠ΅ΡΡΡΠ΅, ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΡ ΠΎΡΠΊΡΠΎΠ΅ΠΌ Π΄Π»Ρ ΡΠ΅Π±Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠΎΡΠ²ΠΈΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΈΡΠ°ΡΡ ΠΊΠ»Π°ΡΡΡ Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ ΠΏΠΎΠΊΡΡΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ, Π° Π½Π΅ ΠΎΠ΄Π½Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΡ. ΠΠ°ΠΆΠ΅ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° c ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠ°ΠΊ Π·Π΄Π΅ΡΡ Π½Π° Π±Π°Π·Π΅ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΌΡ Π±ΡΠ΄Π΅ΠΌ ΠΈΠΌΠ΅ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΡΡΠΎΠΈΡΡ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΌΠΊΠ° ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Array. Π Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ Π½Π΅ Π±ΡΠ΄ΡΡ.
ΠΠΎΡ ΠΎΠ½ ΠΊΠ»Π°ΡΡ. ΠΡΡΠ°Π΅ΡΡΡ Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ Π΄Π»Ρ ΠΌΠ°ΡΡΠΈΠ²Π° a ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°ΡΡΠ°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ x Π΅Π³ΠΎ i-ΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΊ: a.put(x,i). ΠΠΎΠ»ΡΡΠΈΡΡ i-ΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊ: a.item(i) ΠΈΠ»ΠΈ a @ i. ΠΡΠ»ΠΈ, ΠΊΠ°ΠΊ Π·Π΄Π΅ΡΡ, Π³ΡΠ°Π½ΠΈΡΡ Π·Π°Π΄Π°Π½Ρ, ΡΠΎ i Π²ΠΎ Π²ΡΠ΅Ρ ΡΠ»ΡΡΠ°ΡΡ Π»Π΅ΠΆΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΈΠΌΠΈ Π³ΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ: 1<= i <= capacity.
indexing
description: "Π‘ΡΠ΅ΠΊΠΈ: Π‘ΡΡΡΠΊΡΡΡΡ Ρ ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠΎΠΉ Π΄ΠΎΡΡΡΠΏΠ° Last-In, First-Out %
% ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠΈΡΠ΅Π» - ΠΠ΅ΡΠ²ΡΠΉ ΡΡΠ΅Π», ΠΈ Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠΉ Π΅ΠΌΠΊΠΎΡΡΡΡ"
class STACK2 [G] creation
make
feature - Initialization (ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ)
make (n: INTEGER) is
-- Π‘ΠΎΠ·Π΄Π°ΡΡ ΡΡΠ΅ΠΊ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ n ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
require
positive_capacity: n >= 0
do
capacity := n
create representationlmake (1, capacity)
ensure
capacity_set: capacity = n
array_allocated: representation /= Void
stack_empty: empty
end
feature - Access (ΠΠΎΡΡΡΠΏ)
capacity: INTEGER
-- ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ΅ΠΊΠ°
count: INTEGER
-- Π§ΠΈΡΠ»ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ΅ΠΊΠ°
item: G is
-- ΠΠ»Π΅ΠΌΠ΅Π½Ρ Π½Π° Π²Π΅ΡΡΠΈΠ½Π΅ ΡΡΠ΅ΠΊΠ°
require
not_empty: not empty -- i.e. count > 0
do
Result := representation @ count
end
feature -- Status report (ΠΡΡΠ΅Ρ ΠΎ ΡΡΠ°ΡΡΡΠ΅)
empty: BOOLEAN is
-- ΠΡΡΡ Π»ΠΈ ΡΡΠ΅ΠΊ?
do
Result := (count = 0)
ensure
empty_definition: Result = (count = 0)
end
full: BOOLEAN is
-- ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½ Π»ΠΈ ΡΡΠ΅ΠΊ?
do
Result := (count = capacity)
ensure
full_definition: Result = (count = capacity)
end
feature -- Element change (ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²)
put (x: G) is
-- ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ x Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ
require
not_full: not full -- Ρ.Π΅. count < capacity Π² ΡΡΠΎΠΌ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ
do
count := count + 1
representation.put (count, x)
ensure
not_empty: not empty
added_to_top: item = x
one_more_item: count = old count + 1
in_top_array_entry: representation @ count = x
end
remove is
-- ΡΠ΄Π°Π»ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ°
require
not_empty: not empty -- i.e. count > 0
do
count := count - 1
ensure
not_full: not full
one_fewer: count = old count - 1
end
feature {NONE} -- Implementation (Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ)
representation: ARRAY [G]
-- ΠΠ°ΡΡΠΈΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΡΠ΅ΠΊΠ°
invariant
... ΠΡΠ΄Π΅Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ...
end
Π’Π΅ΠΊΡΡ ΠΊΠ»Π°ΡΡΠ° ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΠΏΡΠΎΡΡΠΎΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡΠΌΠΈ. ΠΡΠΎ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ΅ΠΊΡΡ, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ invariant, Π·Π°Π΄Π°ΡΡΠΈΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ Π² ΡΡΠΎΠΉ Π»Π΅ΠΊΡΠΈΠΈ. ΠΠ°Π²Π°ΠΉΡΠ΅ ΠΈΡΡΠ»Π΅Π΄ΡΠ΅ΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠ»Π°ΡΡΠ°.
ΠΡΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ Π·Π°ΠΊΠΎΠ½ΡΠ΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΡΠΎΠΉ Π»Π΅ΠΊΡΠΈΠΈ, Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ Π΄Π°Π»Π΅ΠΊΠΎ ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΠΉΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡΠΈ Π² ΠΏΡΠΎΡΠ΅ΡΡΠΈΠΎΠ½Π°Π»ΡΠ½ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΠ-ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ ΠΠ°Π·ΠΎΠ²ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. ΠΠ΄Π½ΠΎ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΎ ΡΡΡΡΠΊΡΡΡΠ΅ ΠΊΠ»Π°ΡΡΠ°. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΠ»Π°ΡΡ ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»Π΅Π΅ Π΄Π²ΡΡ -ΡΡΠ΅Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠ³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°ΡΡ Π΅Π³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ. ΠΠΎΡΠ°ΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ feature. ΠΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²ΠΊΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π² ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ Π»Π΅ΠΊΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΎΡΡ ΡΠ°ΠΌ, ΠΊΠ°ΠΊ ΡΠΏΠΎΡΠΎΠ± Π·Π°Π΄Π°Π½ΠΈΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΎΠ³ΠΎ ΡΡΠ°ΡΡΡΠ° ΡΠΊΡΠΏΠΎΡΡΠ° ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ². Π Π·Π΄Π΅ΡΡ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΡΠ°ΡΡΠΈ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠΉ Implementation, ΡΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π·Π°ΡΠΈΡΠ΅Π½Π½ΠΎΡΡΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° representation. ΠΠΎ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Π³ΡΡΠΏΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ ΠΏΡΠΈ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΠΌ ΡΡΠ°ΡΡΡΠ΅ ΡΠΊΡΠΏΠΎΡΡΠ°. ΠΠ³ΠΎ ΡΠ΅Π»Ρ - ΡΠ΄Π΅Π»Π°ΡΡ ΠΊΠ»Π°ΡΡ ΠΏΡΠΎΡΡΡΠΌ ΠΏΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ ΠΈ Π»Π΅Π³ΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠΌ, Π³ΡΡΠΏΠΏΠΈΡΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΏΠΎ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΡΠΌ. ΠΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° feature ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ, Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ ΠΊ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ Feature (Feature Clause Comment). ΠΠ½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π΄Π°ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ - ΡΠΎΠ»Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΡ Π² ΡΡΠΎΡ ΡΠ°Π·Π΄Π΅Π». ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠ΅ Π² ΠΏΡΠΈΠΌΠ΅ΡΠ΅, ΡΠ΅ ΠΆΠ΅, ΡΡΠΎ ΠΈ ΠΏΡΠΈ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠ»Π°ΡΡΠ° STACK1 Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π° Initialization Ρ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠΎΠΉ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ (ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ).
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΊΠ°ΡΠ΅Π³ΠΎΡΠΈΠΈ feature ΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π½ΠΈΠΌΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΊ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡΠΌ Feature ΡΠ²Π»ΡΡΡΡΡ ΡΠ°ΡΡΡΡ ΠΎΠ±ΡΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΊΠ»Π°ΡΡΠΎΠ².
ΠΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ² ΠΈ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ² (ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΠΎΡΡΡ)
Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΈΠ· STACK2 ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΡΡ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΠΈΡ - ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠΌ ΠΈ Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΠΌ Π²ΠΈΠ΄Π΅Π½ΠΈΠ΅ΠΌ.
Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ empty ΠΈ full ΠΌΠΎΠ³ΡΡ Π²ΡΠ·Π²Π°ΡΡ ΡΠ΄ΠΈΠ²Π»Π΅Π½ΠΈΠ΅. ΠΡΠΈΠ²Π΅Π΄Ρ Π΅ΡΠ΅ ΡΠ°Π· ΡΠ΅ΠΊΡΡ full:
full: BOOLEAN is
-- ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½ Π»ΠΈ ΡΡΠ΅ΠΊ?
do
Result := (count = capacity)
ensure
full_definition: Result = (count = capacity)
end
ΠΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΡΡΠΎ Result ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ (count = capacity). ΠΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½ΠΎΠΉ Result. Π ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠΌΡΡΠ» Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΡ ΠΏΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΡ? ΠΠ΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΎΠ½ΠΎ ΠΈΠ·Π±ΡΡΠΎΡΠ½ΡΠΌ?
Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΠΌΠΈ Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°Π·Π½ΠΈΡΠ°. ΠΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ ΡΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°, ΠΎΡΠ΄Π°Π½Π½Π°Ρ Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠΌΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΡ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ. Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ, ΠΎΠ½ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΡΠ΅Ρ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ³ΠΎ Π·Π°ΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΠΎΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ, Π²ΡΠ·Π²Π°Π²ΡΠΈΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΈΡΡΠ²Π°Π΅Ρ (prescriptive), ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ (descriptive). ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ "ΠΊΠ°ΠΊ", ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ "ΡΡΠΎ". ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ°ΡΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ - ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
ΠΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π°, ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ - Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΠΎ. ΠΡΠΈ Π΄Π²Π° ΡΠ΅ΡΠΌΠΈΠ½Π° Π²ΡΡΠ°ΠΆΠ°ΡΡ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΡΡ ΡΠ°Π·Π½ΠΈΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΎΠΉ.
[x]. ΠΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΠΎ-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Ρ. ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ Π² ΡΠ·ΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ (ΠΈΠΌΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ), Π·Π°ΡΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΠΌΠ°ΡΠΈΠ½Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΡΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
[x]. ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ ΠΌΠ΅Π½ΡΡΡ. ΠΠ°ΠΊ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΎΡΡ ΠΏΡΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ ΠΠ’Π, Π²Π·ΡΡΠΈΠ΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ½Ρ ΠΎΡ ΡΠΈΡΠ»Π° 2 Π½Π΅ ΠΌΠ΅Π½ΡΠ΅Ρ ΡΡΠΎ ΡΠΈΡΠ»ΠΎ. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΊΠ°ΠΊ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΎΠ΄Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ², Π²ΡΠ²Π΅ΡΡΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π° Π΄ΡΡΠ³ΠΈΡ , ΡΠ°ΠΊΠΈΡ ΠΊΠ°ΠΊ v2, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ (applying - ΠΎΡΡΡΠ΄Π° ΠΈ ΡΠ΅ΡΠΌΠΈΠ½ "Π°ΠΏΠΏΠ»ΠΈΠΊΠ°ΡΠΈΠ²Π½ΡΠΉ") ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΡΠ°Π½ΡΡΠΎΡΠΌΠ°ΡΠΈΠΉ.
Π’ΠΎ, ΡΡΠΎ Π΄Π²Π΅ Π½ΠΎΡΠ°ΡΠΈΠΈ Π² Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ°ΠΊ Π±Π»ΠΈΠ·ΠΊΠΈ, - ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΡΡΡ - Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π·Π°ΡΠ΅ΠΌΠ½ΡΡΡ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅. Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΠΏΠΎΡΠΎΠ± Π΅Π³ΠΎ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ. ΠΠ»ΠΈΠ΅Π½ΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΎΠ±ΡΡΠ½ΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΡΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡΠΌΠΈ, Π° Π½Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ.
ΠΡΠΈΡΠΈΠ½Π° Π±Π»ΠΈΠ·ΠΎΡΡΠΈ Π½ΠΎΡΠ°ΡΠΈΠΉ Π² ΡΠΎΠΌ, ΡΡΠΎ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Π·Π°ΡΠ°ΡΡΡΡ ΠΊΡΠ°ΡΡΠ°ΠΉΡΠΈΠΉ ΠΏΡΡΡ Π΄ΠΎΡΡΠΈΠΆΠ΅Π½ΠΈΡ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΎΡΡΠΈ. ΠΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄Π΅ ΠΊ Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½ΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ°ΡΡ. ΠΠ°ΠΆΠ΅ Π² ΠΏΡΠΎΡΡΠ΅ΠΉΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ½Ρ ΠΏΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°Π΄Π°Π½ΠΎ Π² ΡΠΎΡΠΌΠ΅: abs(Result^2 -x) <= tolerance, Π³Π΄Π΅ abs - ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π° tolerance - Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΠΎΡ ΡΠΎΡΠ½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ. ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π²ΡΡΠΈΡΠ»ΡΡΡΠΈΠ΅ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΠΉ ΠΊΠΎΡΠ΅Π½Ρ, ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΌΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΡΠ½Ρ.
ΠΠ°ΠΆΠ΅ Π΄Π»Ρ put Π² ΠΊΠ»Π°ΡΡΠ΅ STACK2 ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΌΠΎΠ³ΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
if count = capacity then Result := True else Result := False end
ΠΈΠ»ΠΈ ΡΠΏΡΠΎΡΠ΅Π½Π½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ, ΡΡΠΈΡΡΠ²Π°ΡΡΠΈΠΉ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ:
if count = capacity then Result := True end
Π Ρ ΠΎΠ΄Π΅ ΡΠ°Π±ΠΎΡΡ ΠΌΡ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ ΡΠΎ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎΠΌ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ, Π·Π°ΡΠ»ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΌ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΉ ΠΏΡΠΎΡΠ°Π±ΠΎΡΠΊΠΈ: ΠΎΠ½ΠΎ Π²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ Π°Π²ΡΠΎΡΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ ΠΊΠ»Π°ΡΡΠΎΠ², Π½Π΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΡ ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, Π½ΠΎ Π½ΡΠΆΠ΄Π°ΡΡΠΈΡ ΡΡ Π² Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΠΎΠΌ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠΈ ΡΠΎΠ»ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΡΠ° ΠΈΠ΄Π΅Ρ ΠΏΡΠΈΠ²Π΅Π΄Π΅Ρ Π½Π°Ρ ΠΊ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΊΡΠ°ΡΠΊΠΎΠΉ ΡΠΎΡΠΌΡ (short form), ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΠΌΠΎΠΉ Π΄Π°Π»Π΅Π΅ Π² ΡΡΠΎΠΉ Π»Π΅ΠΊΡΠΈΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ»Π°ΡΡΠ°.