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

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

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

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.