if full then
error := Overflow
else
check representation /= Void end
representation.put (x); error := 0
end
ΠΠ΄Π΅ΡΡ ΡΠΈΡΠ°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π΄ΡΠΌΠ°ΡΡ, ΡΡΠΎ Π²ΡΠ·ΠΎΠ² Π² else Π²Π΅ΡΠ²ΠΈ: representation.put(x) ΠΏΠΎΡΠ΅Π½ΡΠΈΠ°Π»ΡΠ½ΠΎ Π½Π΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ΅Π½, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π΅ΠΌΡ Π½Π΅ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠ΅ΡΡ: (representation /=Void). ΠΠΎ, ΠΈΡΡΠ»Π΅Π΄ΡΡ ΡΠ΅ΠΊΡΡ ΠΊΠ»Π°ΡΡΠ°, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, ΡΡΠΎ ΠΈΠ· ΡΡΠ»ΠΎΠ²ΠΈΡ (full = false) ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ capacity, ΠΎΡΠΊΡΠ΄Π°, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΡΠ»Π΅Π΄ΡΠ΅Ρ, ΡΡΠΎ representation Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Void. ΠΡΠΎ Π²Π°ΠΆΠ½ΠΎΠ΅ ΠΈ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΡΠ°ΡΡΡΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ»Π°ΡΡΠ°. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Ρ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΠ°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ:
check
representation_exists: representation /= Void
-- ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ representation_exists ΠΈΡΡΠΈΠ½Π½ΠΎ, ΠΊΠΎΠ³Π΄Π°
-- full Π»ΠΎΠΆΠ½ΠΎ, ΡΡΠΎ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΈΠ· ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
end
Π ΠΎΠ±ΡΡΠ½ΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°Ρ ΠΊ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΠ, Ρ ΠΎΡΡ Π²ΡΠ·ΠΎΠ²Ρ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΠ°ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π½Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅, ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ, ΠΎΡΡΠ°ΡΡΡΡ Π½Π΅ΡΠ²Π½ΡΠΌΠΈ. Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠ²Π΅ΡΡΠ΅Ρ ΡΠ΅Π±Ρ, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ Π²ΡΠ΅Π³Π΄Π° ΠΈΠΌΠ΅Π΅Ρ ΠΌΠ΅ΡΡΠΎ Π² Π½Π΅ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΎΡΠΊΠ΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΡΠΎΡ Π°Π½Π°Π»ΠΈΠ· ΠΏΡΠΈ Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈ ΠΊΠΎΠ΄Π°, Π½ΠΎ ΠΏΠΎΡΠ»Π΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠΎΠ³ΠΎ, Π½Π΅ ΡΠΈΠΊΡΠΈΡΡΠ΅Ρ ΡΡΠΎΠ³ΠΎ Π² ΡΠ΅ΠΊΡΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠΌΡΡΠ» ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΡΠ΅ΡΡΠ½. ΠΠΎΠ³Π΄Π° Π½Π΅ΠΊΡΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ°ΠΌ Π°Π²ΡΠΎΡ, Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΌΠ΅ΡΡΡΠ°ΠΌΠΈ ΠΏΠΎΠ·ΠΆΠ΅, Π·Π°Ρ ΠΎΡΠ΅Ρ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ ΡΠ΅Π»ΡΡ Π΅Π΅ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, Π΅ΠΌΡ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π½Π°ΡΠΈΠ½Π°ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π½ΡΠ»Ρ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π²ΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΎΡΡΠ°Π»ΠΈΡΡ Π² ΡΠΎΠ·Π½Π°Π½ΠΈΠΈ Π°Π²ΡΠΎΡΠ°. ΠΠ½ΡΡΡΡΠΊΡΠΈΡ check ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ, ΡΡΠ΅Π±ΡΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.
ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ, ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΠ΅ Π² ΡΡΠΎΠΉ Π»Π΅ΠΊΡΠΈΠΈ, ΠΏΠΎΠΌΠΈΠΌΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ½ΠΈ Π΄Π°ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° Π²ΡΠ΅ Π²Π΅ΡΠΈ Π΄Π΅Π»Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ Ρ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½Π°ΡΠ°Π»Π°, ΠΎΠ½ΠΈ Π΅ΡΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π½Π°ΠΉΡΠΈ ΡΠΎ, ΡΡΠΎ ΡΠ΄Π΅Π»Π°Π½ΠΎ Π½Π΅Π²Π΅ΡΠ½ΠΎ. ΠΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ, ΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ check ΡΠ΅Π°Π»ΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅ΠΌΠΎΠΉ Π² ΠΏΠ΅ΡΠΈΠΎΠ΄ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π²ΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, ΡΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π΅ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, Π½ΠΎ, Π΅ΡΠ»ΠΈ Π²Ρ ΠΎΡΠΈΠ±Π»ΠΈΡΡ, ΠΈ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π½Π΅ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ, ΡΠΎ Π² ΡΠΎΡΠΊΠ΅ ΠΈΡ Π½Π°ΡΡΡΠ΅Π½ΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ±ΡΠΎΡΠ΅Π½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ ΠΏΡΠΎΡΠ΅ΡΡ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ. Π’Π΅ΠΌ ΡΠ°ΠΌΡΠΌ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π±ΡΡΡΡΠΎΠ³ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅Π»ΡΠ½ΡΡ ΠΎΡΠΈΠ±ΠΎΠΊ. ΠΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ checking - Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΎΠΊ Π±ΡΠ΄Π΅Ρ Π²ΠΊΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ.ΠΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΠΈΠΊΠ»Π°
ΠΠ°ΡΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΏΠΎΠΌΠΎΠ³ΡΡ ΡΡΡΠΎΠΈΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΠΈΠΊΠ»Ρ. ΠΡΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΡΠΌ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½Π½ΡΡ ΡΠ°Π½Π΅Π΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ². ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ°ΡΡΡΡ ΠΠ-ΠΌΠ΅ΡΠΎΠ΄Π°, ΡΠΎ Π²Ρ Π²ΠΏΡΠ°Π²Π΅ ΠΏΡΠΎΠΏΡΡΡΠΈΡΡ ΡΡΠΎΡ ΡΠ°Π·Π΄Π΅Π» ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΡΠ΅Π½ΠΈΠΈ.
Π’ΡΡΠ΄Π½ΠΎΡΡΠΈ ΡΠΈΠΊΠ»ΠΎΠ²
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ²ΡΠΎΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠ°Π·, Π½Π΅ ΠΏΠΎΠ΄Π΄Π°Π²Π°ΡΡΡ ΡΡΡΠ°Π»ΠΎΡΡΠΈ, Π±Π΅Π· ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΠΏΠΎΡΠ΅ΡΡ ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ Π²Π°ΠΆΠ½ΠΎΠ³ΠΎ, - Π² ΡΡΠΎΠΌ ΠΏΡΠΈΠ½ΡΠΈΠΏΠΈΠ°Π»ΡΠ½ΠΎΠ΅ ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΎΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ ΡΠ΅Π»ΠΎΠ²Π΅ΠΊΠ°. ΠΠΎΡ ΠΏΠΎΡΠ΅ΠΌΡ ΡΠΈΠΊΠ»Ρ ΡΠ°ΠΊ Π²Π°ΠΆΠ½Ρ. Π’ΡΡΠ΄Π½ΠΎ Π²ΠΎΠΎΠ±ΡΠ°Π·ΠΈΡΡ, ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π΄Π΅Π»Π°ΡΡ Π² ΡΠ·ΡΠΊΠ°Ρ , Π² ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ»ΠΈ Π±Ρ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π²Π΅ ΡΠΏΡΠ°Π²Π»ΡΡΡΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ - ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ Π²ΡΠ±ΠΎΡ, - Π½ΠΎ Π½Π΅ Π±ΡΠ»ΠΎ Π±Ρ ΡΠΈΠΊΠ»ΠΎΠ² ΠΈ Π½Π΅ Π±ΡΠ»ΠΎ Π±Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΠ΅ΠΊΡΡΡΠΈΠΈ, Π΅ΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π±Π°Π·ΠΈΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΈΠ²Π½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ.
ΠΠΎ Ρ ΠΌΠΎΡΠ½ΠΎΡΡΡΡ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡ ΠΈ ΡΠΈΡΠΊΠΈ. Π£ ΡΠΈΠΊΠ»ΠΎΠ² Π΄ΡΡΠ½Π°Ρ ΡΠ»Π°Π²Π°, - ΠΈΡ ΡΡΡΠ΄Π½ΠΎ Π·Π°ΡΡΠ°Π²ΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ. Π’ΠΈΠΏΠΈΡΠ½ΡΠΌΠΈ Π΄Π»Ρ ΡΠΈΠΊΠ»ΠΎΠ² ΡΠ²Π»ΡΡΡΡΡ:
[x]. ΠΡΠΈΠ±ΠΊΠΈ "Π±ΠΎΠ»ΡΡΠ΅-ΠΌΠ΅Π½ΡΡΠ΅" (Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΈΠΊΠ»Π° ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ°Π»ΠΎ ΡΠ°Π·).
[x]. ΠΡΠΈΠ±ΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ³ΡΠ°Π½ΠΈΡΠ½ΡΠΌΠΈ ΡΠΈΡΡΠ°ΡΠΈΡΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΡΡΡΠΌΠΈ ΡΡΡΡΠΊΡΡΡΠ°ΠΌΠΈ. Π¦ΠΈΠΊΠ» ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π° Π±ΠΎΠ»ΡΡΠΈΡ ΠΌΠ°ΡΡΠΈΠ²Π°Ρ , Π½ΠΎ Π΄Π°Π²Π°ΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΈΠ»ΠΈ ΠΎΠ½ Π²ΠΎΠΎΠ±ΡΠ΅ ΠΏΡΡΡ.
[x]. ΠΡΠΈΠ±ΠΊΠΈ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ("Π·Π°ΡΠΈΠΊΠ»ΠΈΠ²Π°Π½ΠΈΠ΅") Π² Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ .
ΠΠΈΠ½Π°ΡΠ½ΡΠΉ ΠΏΠΎΠΈΡΠΊ - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΡΡΡΠ° "ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΊΡ" (Computer Science 101) - Ρ ΠΎΡΠΎΡΠ°Ρ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΡ "ΠΊΠΎΠ²Π°ΡΡΡΠ²Π°" ΡΠΈΠΊΠ»ΠΎΠ² Π΄Π°ΠΆΠ΅ Π² ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ, ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΡΠΉ ΠΏΠΎ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΡ ΠΌΠ°ΡΡΠΈΠ² t Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ ΠΎΡ 1 Π΄ΠΎ n. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π°Π»Π³ΠΎΡΠΈΡΠΌ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° Π΄Π»Ρ ΠΎΡΠ²Π΅ΡΠ° Π½Π° Π²ΠΎΠΏΡΠΎΡ: ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΠ΅Π»ΠΎΠ΅ x ΡΡΠ΅Π΄ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΡΠ»ΠΈ ΠΌΠ°ΡΡΠΈΠ² ΠΏΡΡΡ, ΠΎΡΠ²Π΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ "Π½Π΅Ρ", Π΅ΡΠ»ΠΈ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΡΠΎΠ²Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠΎ ΠΎΡΠ²Π΅Ρ "Π΄Π°" ΡΠΎΠ³Π΄Π° ΠΈ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ x. Π‘ΡΡΡ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ ΡΠΏΠΎΡΡΠ΄ΠΎΡΠ΅Π½Π½ΠΎΡΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΏΡΠΎΡΡΠ°: Π²Π½Π°ΡΠ°Π»Π΅ x ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅ΡΡΡ ΡΠΎ ΡΡΠ΅Π΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π°, Π΅ΡΠ»ΠΈ Π΅ΡΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΠ΅, ΡΠΎ Π·Π°Π΄Π°ΡΠ° ΡΠ΅ΡΠ΅Π½Π°, Π΅ΡΠ»ΠΈ x ΠΌΠ΅Π½ΡΡΠ΅ ΡΡΠ΅Π΄Π½Π΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°, ΡΠΎ ΠΏΠΎΠΈΡΠΊ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΡΡΡ Π² Π²Π΅ΡΡ Π½Π΅ΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅ ΠΌΠ°ΡΡΠΈΠ²Π°, Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ - Π² Π½ΠΈΠΆΠ½Π΅ΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π΅. ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ ΡΠΌΠ΅Π½ΡΡΠ°Π΅Ρ ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π²Π΄Π²ΠΎΠ΅. ΠΠΈΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½Ρ ΡΠ΅ΡΡΡΠ΅ ΠΏΠΎΠΏΡΡΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠΉ ΠΏΡΠΎΡΡΠΎΠΉ ΠΈΠ΄Π΅ΠΈ. Π Π½Π΅ΡΡΠ°ΡΡΡΡ, Π²ΡΠ΅ ΠΎΠ½ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ ΠΎΡΠΈΠ±ΠΊΠΈ. ΠΠ°ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉ ΠΏΠΎΡΠΏΡΠ°ΠΆΠ½ΡΡΡΡΡ Π² ΠΏΠΎΠΈΡΠΊΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ, Π² ΠΊΠ°ΠΊΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ² Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π½ΡΠΆΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ.
ΠΠ°ΠΏΠΎΠΌΠ½Ρ, t @ m ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° t Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ m. ΠΠ½Π°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ // ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½Π°ΡΠ΅Π»ΠΎ, ΡΠ°ΠΊ ΡΡΠΎ 7 // 2 ΠΈ 6 // 2 Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 3. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΡΠΈΠΊΠ»Π° Π±ΡΠ΄Π΅Ρ Π΄Π°Π½ Π½ΠΈΠΆΠ΅, Π½ΠΎ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΈ ΡΠ°ΠΊ ΠΏΠΎΠ½ΡΡΠ΅Π½. ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠ΅ from Π²Π²ΠΎΠ΄ΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΈΠΊΠ»Π°.BS1
from
i := 1; j := n
until i = j loop
m := (i + j) // 2
if t @ m <= x then
i := m
else
j := m
end
end
Result := (x = t @ i)
BS2
from
i := 1; j := n; found := false
until i = j and not found loop
m := (i + j) // 2
if t @ m < x then
i := m + 1
elseif t @ m = x then
found := true
else
j := m - 1
end
end
Result := found
BS3
from
i := 0; j := n
until i = j loop
m := (i + j + 1) // 2
if t @ m <= x then
i := m + 1
else
j := m
end
end
if i >= 1 and i <= n then
Result := (x = t @ i)
else
Result := false
end
BS4
from
i := 0; j := n + 1
until i = j loop
m := (i + j) // 2
if t @ m <= x then
i := m + 1
else
j := m
end
end
if i >= 1 and i <= n then
Result := (x = t @ i)
else
Result := false
end
Π’Π°Π±Π»ΠΈΡΠ° 11.3.Π§Π΅ΡΡΡΠ΅ (ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΡ ) ΠΏΠΎΠΏΡΡΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±ΠΈΠ½Π°ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ°
Π‘Π΄Π΅Π»Π°Π΅ΠΌ ΡΠΈΠΊΠ»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌΠΈ
Π Π°Π·ΡΠΌΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ. Π¦ΠΈΠΊΠ» ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ Ρ Π½ΠΈΠΌ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅, ΡΠ°ΠΊ Π½Π°Π·ΡΠ²Π°Π΅ΠΌΡΠΉ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½Ρ ΡΠΈΠΊΠ»Π° (loop invariant), ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΡΡΠ°ΡΡ Ρ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ°. ΠΠ½ ΠΌΠΎΠΆΠ΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅ΡΡ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠΈΠΊΠ»Π° (loop variant), ΡΠ²Π»ΡΡΡΠΈΠΉΡΡ Π½Π΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ, Π°, ΠΎΠ±ΡΡΠ½ΠΎ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎ, ΠΈΠ½Π²Π°ΡΠΈΠ°Π½Ρ ΠΈ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ ΡΠΈΠΊΠ»Π°.
ΠΠ»Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΡ ΡΡΠΈΡ ΠΏΠΎΠ½ΡΡΠΈΠΉ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠΎΠ·Π½Π°ΡΡ, ΡΡΠΎ ΡΠΈΠΊΠ» - ΡΡΠΎ ΡΠΏΠΎΡΠΎΠ± Π²ΡΡΠΈΡΠ»ΠΈΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΡΠΈΠ±Π»ΠΈΠΆΠ΅Π½ΠΈΡΠΌΠΈ (successive approximations).
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΠΉ ΠΏΡΠΈΠΌΠ΅Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠ° Π² ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ:
maxarray (t: ARRAY [INTEGER]): INTEGER is
-- ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΠ²Π° t
require
t.capacity >= 1
local
i: INTEGER
do
from
i := t.lower
Result := t @ lower
until i = t.upper loop
i := i + 1
Result := Result.max (t @ i)
end
end
Π ΡΠ°Π·Π΄Π΅Π»Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ i ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°, Π° ΡΡΡΠ½ΠΎΡΡΡ Result - Π±ΡΠ΄ΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ - Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΡΠ΅Π΄ΡΡΠ»ΠΎΠ²ΠΈΠ΅ Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ ΠΎΡΡ Π±Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΌΠ°ΡΡΠΈΠ²Π΅. ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ Π² ΡΠΈΠΊΠ»Π΅, ΠΌΡ Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΠΌ Π²Π΅ΡΡ Π½Π΅ΠΉ Π³ΡΠ°Π½ΠΈΡΡ ΠΌΠ°ΡΡΠΈΠ²Π°, ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Ρ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ°Π³Π΅ i Π½Π° 1, ΠΈ Π·Π°ΠΌΠ΅Π½ΡΡ Result Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° t @ i, Π΅ΡΠ»ΠΈ ΡΡΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ΅ΠΌ Result. ΠΠ»Ρ Π½Π°Ρ ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌΠ° Π΄Π²ΡΡ ΡΠ΅Π»ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ max, ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½Π°Ρ Π΄Π»Ρ ΠΊΠ»Π°ΡΡΠ° integer: a.max(b) Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· a ΠΈ b.