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

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

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

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ трСбования НСзависимости ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠΉ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ связанный с Π½ΠΈΠΌ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ ЕдинствСнного Π’Ρ‹Π±ΠΎΡ€Π°, сформулированный ΠΏΡ€ΠΈ обсуТдСнии ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдписываСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ ситуаций, связанных с Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€


if "t это массив, управляСмый Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ" then

"ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ поиск с Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ"

elseif "t это Π΄Π΅Ρ€Π΅Π²ΠΎ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска" then

"ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ…ΠΎΠ΄ Π΄Π΅Ρ€Π΅Π²Π° Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска"

elseif

(ΠΈ Ρ‚.Π΄.)

end


Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π² Ρ€Π°Π²Π½ΠΎΠΉ стСпСни Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚Π°ΠΊΡƒΡŽ структуру Π² самом ΠΌΠΎΠ΄ΡƒΠ»Π΅ (нСльзя ΠΆΠ΅ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, Π·Π½Π°Π΅Ρ‚ ΠΎΠ±ΠΎ всСх Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ… ΠΈ Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°Ρ…), Ρ‚Π°ΠΊ ΠΈ Π²ΠΎΡΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΅Π΅ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅-ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π΅. (Π‘ΠΌ. "ЕдинствСнный Π²Ρ‹Π±ΠΎΡ€", лСкция 3) РСшСниС состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ автоматичСский Π²Ρ‹Π±ΠΎΡ€, осущСствляСмый систСмой исполнСния. Π’Π°ΠΊΠΎΠ²Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ€ΠΎΠ»ΡŒ динамичСского связывания (dynamic binding), ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠΉ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ ОО-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π°, которая ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ обсуТдСнии наслСдования. (Π‘ΠΌ. "ДинамичСскоС связываниС" ("Dynamic binding"), лСкция 14)

Ѐакторизация ΠžΠ±Ρ‰Π΅Π³ΠΎ ПовСдСния

Если Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ НСзависимости ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠΉ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° - ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… Π΄Π΅Ρ‚Π°Π»Π΅ΠΉ ΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ - Ρ‚ΠΎ послСднСС Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… классов. Π˜Ρ… Ρ†Π΅Π»ΡŒ Π² ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ прСимущСств ΠΎΡ‚ любой общности (commonality), которая ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π² сСмСйствС ΠΈΠ»ΠΈ подсСмСйствС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ.

ΠœΠ½ΠΎΠ³ΠΎΠΎΠ±Ρ€Π°Π·ΠΈΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ, ΠΈΠΌΠ΅ΡŽΡ‰Π΅Π΅ мСсто Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹Ρ… областях, Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, основанного Π½Π° сСмСйствС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ. Часто это сСмСйство Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΅Π»ΠΈΠΊΠΎ, Ρ‡Ρ‚ΠΎ СстСствСнно ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ подсСмСйства. Π’ случаС Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска пСрвая ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ° классификации ΠΌΠΎΠΆΠ΅Ρ‚ привСсти ΠΊ Ρ‚Ρ€Π΅ΠΌ ΠΎΠ±ΡˆΠΈΡ€Π½Ρ‹ΠΌ подсСмСйствам:

[x]. Π’Π°Π±Π»ΠΈΡ†Ρ‹, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ схСмС Ρ…Π΅ΡˆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ.

[x]. Π’Π°Π±Π»ΠΈΡ†Ρ‹, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠ°ΠΊ нСкоторая Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΡŒΠ΅Π².

[x]. Π’Π°Π±Π»ΠΈΡ†Ρ‹, ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

КаТдая ΠΈΠ· этих ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ ΠΎΡ…Π²Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Π½ΠΎ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ случаСв ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ ΡΡƒΡ‰Π΅ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ ΠΎΠ±Ρ‰Π½ΠΎΡΡ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ этими Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ. Рассмотрим, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, сСмСйство ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ - Ρ‚Π°ΠΊΠΈΡ…, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… элСмСнты ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‚ΡΡ ΠΈ ΠΎΡ‚Ρ‹ΡΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² порядкС ΠΈΡ… ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ.

Рис. 4.1.  ΠΠ΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ прСдставлСниями ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ массив, связный список ΠΈ Ρ„Π°ΠΉΠ». Но нСзависимо ΠΎΡ‚ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ‚Π°ΠΊΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΊΠ»ΠΈΠ΅Π½Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для любой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Π΅Π΅ элСмСнты ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈΠΌ, пСрСмСщая (Π²ΠΎΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹ΠΉ) курсор, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ элСмСнта, рассматриваСмого Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚. ΠŸΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ поиска для ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ† Π² Π²ΠΈΠ΄Π΅:


has (t: SEQUENTIAL_TABLE; x: ELEMENT): BOOLEAN is

-- БодСрТится Π»ΠΈ x Π² ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ t?

do

from start until

after or else found (x)

loop

forth

end

Result := not after

end


Π­Ρ‚ΠΎ прСдставлСниС основано Π½Π° использовании Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒΡΡ Π² любой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹(ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠ° Ρ€Π°Π±ΠΎΡ‚Ρ‹ с курсором Π±ΡƒΠ΄Π΅Ρ‚ рассмотрСна Π² Π»Π΅ΠΊΡ†ΠΈΠΈ 5 курса "ΠžΡΠ½ΠΎΠ²Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ проСктирования""АктивныС структуры Π΄Π°Π½Π½Ρ‹Ρ…" ("Active data structures"). ):

[x]. start (Π½Π°Ρ‡Π°Ρ‚ΡŒ) , ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ курсор ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту, Ссли ΠΎΠ½ имССтся.

[x]. forth (ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ) , ΠΏΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ курсор ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ.

[x]. after (послС) , Π±ΡƒΠ»Π΅Π² запрос, пСрСмСстился Π»ΠΈ курсор Π·Π° послСдний элСмСнт.

[x]. found (x) , Π±ΡƒΠ»Π΅Π² запрос, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠΉ true, ΠΊΠΎΠ³Π΄Π° курсор ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° элСмСнт, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x.

Рис. 4.2.  ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ структура с курсором

НСсмотря Π½Π° сходство с шаблоном ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π² Π½Π°Ρ‡Π°Π»Π΅ этого обсуТдСния, Π½ΠΎΠ²Ρ‹ΠΉ тСкст - это ΡƒΠΆΠ΅ Π½Π΅ шаблон, это настоящая ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, написанная Π² нСпосрСдствСнно исполняСмой Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ (такая нотация ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² лСкциях 7-18 этого курса). Если Π·Π°Π΄Π°Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ start, forth, after ΠΈ found, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ послСднюю Π²Π΅Ρ€ΡΠΈΡŽ has.

КаТдоС прСдставлСниС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ прСдставлСния курсора. Π’Ρ€ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Ρ‚Π°ΠΊΠΈΡ… прСдставлСний основаны Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅ с массивом, связным списком ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠΌ.

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΈΠ· Π½ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ массив ΠΈΠ· capacity элСмСнтов, ΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΎΡ‚ 1 Π΄ΠΎ count + 1. (ПослСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² случаС, ΠΊΠΎΠ³Π΄Π° курсор пСрСмСстился Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ послС ("after") послСднСго элСмСнта.)

Рис. 4.3.  ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с курсором Π½Π° основС массива

Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ прСдставлСнии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ связный список, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ доступ ΠΊ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ элСмСнту обСспСчиваСтся ΠΏΠΎ ссылкС first_cell ΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт связан со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΏΠΎ ссылкС right. ΠŸΡ€ΠΈ этом курсор ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ссылкой cursor.

Рис. 4.4.  ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с курсором Π½Π° основС связного списка

Π’ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΌ прСдставлСнии ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ курсор прСдставляСт просто Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ чтСния.

Рис. 4.5.  ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ с курсором Π½Π° основС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°

РСализация ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ start, forth, after ΠΈ found Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π½ΠΎΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Π΅4.3) ΠΏΠΎΠΊΠ°Π·Π°Π½Π° рСализация для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ случая. Π—Π΄Π΅ΡΡŒ t @ i ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ i-ΠΉ элСмСнт массива t, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ записываСтся ΠΊΠ°ΠΊ t [i] Π² языках Pascal ΠΈΠ»ΠΈ C; Void ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ "ΠΏΡƒΡΡ‚ΡƒΡŽ" ссылку; ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ f- языка Pascal, для Ρ„Π°ΠΉΠ»Π° f, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ элСмСнт Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ чтСния ΠΈΠ· Ρ„Π°ΠΉΠ»Π°.

start forth after found (x) Массив i :=1 i :=i + 1 i >count t @ i =x Бвязный список c := first_cell c :=c. right c =Void c. item =x Π€Π°ΠΉΠ» rewind read end_of_file f -=x

Π’Π°Π±Π»ΠΈΡ†Π° 4.1.ΠšΠ»Π°ΡΡΡ‹ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹


ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ΅ использованиС позволяСт ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π½Π΅Π½ΡƒΠΆΠ½ΠΎΠ΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ±Ρ‰Π½ΠΎΡΡ‚ΡŒ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ². Если Π² Ρ€Π°Π·Π½Ρ‹Ρ… модулях ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠ»ΠΈ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹, Ρ‚ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΈΡ… Ρ†Π΅Π»ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΠΈ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ измСнСния ΠΈΠ»ΠΈ ΠΏΠΎΠΏΡ€Π°Π²ΠΊΠΈ достигли всСх Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… мСст систСмы. Π’Π½ΠΎΠ²ΡŒ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ систСмы.

ВсС Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ совмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ has, ΠΈ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π₯ΠΎΡ€ΠΎΡˆΠ΅Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Ρ‚Π°ΠΊΠΎΠΉ ситуации тСкст has находился Π±Ρ‹ лишь Π² ΠΎΠ΄Π½ΠΎΠΌ мСстС, связанном с ΠΎΠ±Ρ‰ΠΈΠΌ понятиСм ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹. Для описания ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ большС Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ ΠΎ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ has; трСбуСтся лишь ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ подходящиС вСрсии start, forth, after ΠΈ found.

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½Ρ‹Π΅ структуры

Наряду с трСбованиями ΠΊ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ Π»Π΅ΠΊΡ†ΠΈΠΈ, ΠΏΡΡ‚ΡŒ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ Π˜Π·ΠΌΠ΅Π½Ρ‡ΠΈΠ²ΠΎΡΡ‚ΠΈ Π’ΠΈΠΏΠΎΠ², Группирования ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π˜Π·ΠΌΠ΅Π½Ρ‡ΠΈΠ²ΠΎΡΡ‚ΠΈ Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ, НСзависимости ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠΉ ΠΈ Π€Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠžΠ±Ρ‰Π΅Π³ΠΎ ПовСдСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚, Ρ‡Π΅Π³ΠΎ слСдуСт ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ ΠΎΡ‚ Π½Π°ΡˆΠΈΡ… ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² - абстрактных ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ.

Рассмотрим Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ, ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΠΎΠ²Π°Π²ΡˆΠΈΠ΅ ОО-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Ρƒ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ нас Π½Π΅ устраиваСт, ΠΈ Ρ‡Ρ‚ΠΎ слСдуСт Π²Π·ΡΡ‚ΡŒ с собой Π² ОО-ΠΌΠΈΡ€.

ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠšΠ»Π°ΡΡΠΈΡ‡Π΅ΡΠΊΠΈΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ ΠΊ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ использованию состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π—Π΄Π΅ΡΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° (routine) ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ элСмСнтами для выполнСния Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, создавая Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, модифицируя Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅. Π’Ρ‹Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ элСмСнт ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚ свои Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ (Π° ΠΈΠ½ΠΎΠ³Π΄Π° - Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅) Π² Π²ΠΈΠ΄Π΅ фактичСских Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² (actual arguments) . ΠŸΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ Π²Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π²ΠΈΠ΄Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°; Π² этом случаС ΠΎΠ½Π° называСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ.