ΠΠ»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° ΠΌΡ Π±ΡΠ΄Π΅ΠΌ Π½Π°Π·ΡΠ²Π°ΡΡ ΡΠΈΠΏ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ, Π΅ΡΠ»ΠΈ Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΊΠ»Π°ΡΡ FIGURE, ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΠΌΡΠΉ ΠΊΠ°ΠΊ ΡΠΈΠΏ, ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ. ΠΡΠ»ΠΈ ΡΠΎΠ΄ΠΎΠ²ΠΎΠΉ ΠΊΠ»Π°ΡΡ LIST ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ (ΠΊΠ°ΠΊ ΡΡΠΎ ΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ°, Π½Π΅ Π·Π°Π²ΠΈΡΡΡΠ΅Π΅ ΠΎΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ), ΡΠΎ ΡΠΈΠΏ LIST [INTEGER] ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ. Π£ΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ: C [X] Π±ΡΠ΄Π΅Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ, Π΅ΡΠ»ΠΈ ΠΊΠ»Π°ΡΡ C ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ, ΠΈ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ, Π΅ΡΠ»ΠΈ C ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ, Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΡΡΠ°ΡΡΡΠ° X.
Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΎ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡΡ
Π‘Π΅ΠΉΡΠ°Ρ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ Π³ΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π½Π° ΡΠΈΡ. 14.8. ΠΠ²Π΅Π·Π΄ΠΎΡΠΊΠΎΠΉ ΠΎΡΠΌΠ΅ΡΠ°ΡΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈΠ»ΠΈ ΠΊΠ»Π°ΡΡΡ:
FIGURE*
display*
perimeter* -- ΠΠ° ΡΡΠΎΠ²Π½Π΅ ΠΊΠ»Π°ΡΡΠ° OPEN_FIGURE Π½Π° ΡΠΈΡ. 14.8
ΠΠ½Π°ΠΊ ΠΏΠ»ΡΡ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ "ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ" ΠΈ ΠΈΠΌ ΠΎΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²ΠΈΠ·Π°ΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ°:
perimeter+ -- ΠΠ° ΡΡΠΎΠ²Π½Π΅ POLYGON Π½Π° ΡΠΈΡ. 14.8
Π§ΡΠΎΠ±Ρ ΡΠΊΠ°Π·Π°ΡΡ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΠΌΠ΅ΡΠΈΡΡ Π΅Π³ΠΎ Π·Π½Π°ΠΊΠΎΠΌ +. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π½Π΅ΠΎΡΠΌΠ΅ΡΠ΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ, ΡΠ°ΠΊ ΠΆΠ΅ ΠΊΠ°ΠΊ Π² ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠΌ Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ class C Π±Π΅Π· ΠΊΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ»ΠΎΠ²Π° deferred ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΊΠ»Π°ΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ.
ΠΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΡΡ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΉ ΠΏΠ»ΡΡ ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ Π΄Π»Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ½ ΡΡΠ°Π» ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΌ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ perimeter ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΈΠΌΠ΅Π΅Ρ Π²ΠΈΠ΄ perimeter* Π² ΠΊΠ»Π°ΡΡΠ΅ CLOSED_FIGURE. ΠΠ°ΡΠ΅ΠΌ Π½Π° ΡΡΠΎΠ²Π½Π΅ POLYGON Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π΄Π°Π΅ΡΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΎΠ½ ΠΎΡΠΌΠ΅ΡΠ°Π΅ΡΡΡ Π² ΡΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ΅ ΠΊΠ°ΠΊ perimeter+.
ΠΠ°ΠΊΠΎΠ½Π΅Ρ, Π΄Π²Π° Π·Π½Π°ΠΊΠ° ΠΏΠ»ΡΡ ΠΎΡΠΌΠ΅ΡΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:
perimeter++ -- ΠΠ° ΡΡΠΎΠ²Π½Π΅ RECTANGLE ΠΈ SQUARE Π½Π° ΡΠΈΡ.14.8
Π§ΡΠΎ Π΄Π΅Π»Π°ΡΡ Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌΠΈ ΠΊΠ»Π°ΡΡΠ°ΠΌΠΈ?
ΠΡΠΈΡΡΡΡΡΠ²ΠΈΠ΅ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π²ΠΎΠΏΡΠΎΡ: "ΡΡΠΎ ΡΠ»ΡΡΠΈΡΡΡ, Π΅ΡΠ»ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ rotate ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΡΠΈΠΏΠ° FIGURE?" ΠΈΠ»ΠΈ Π² ΠΎΠ±ΡΠ΅ΠΌ Π²ΠΈΠ΄Π΅ - "ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΠΊ ΠΏΡΡΠΌΠΎΠΌΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ°?" ΠΡΠ²Π΅Ρ ΠΌΠΎΠΆΠ΅Ρ ΠΎΠ±Π΅ΡΠΊΡΡΠ°ΠΆΠΈΡΡ: ΡΠ°ΠΊΠΎΠΉ Π²Π΅ΡΠΈ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° FIGURE Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ - ΠΏΡΡΠΌΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² Π½Π΅ Π±ΡΠ²Π°Π΅Ρ.
ΠΡΠ°Π²ΠΈΠ»ΠΎ ΠΎΡΡΡΡΡΡΠ²ΠΈΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠ² ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ²
Π’ΠΈΠΏ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π² ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ.
ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ ΡΠΈΠΏ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ - ΡΡΠΎ ΡΠΈΠΏ x, Π΄Π»Ρ ΡΠΎΡΠΌΡ create x, ΠΈ U Π΄Π»Ρ ΡΠΎΡΠΌΡ create {U} x. Π’ΠΈΠΏ ΡΡΠΈΡΠ°Π΅ΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ² Π΅Π³ΠΎ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ.
ΠΠΎΡΡΠΎΠΌΡ Π²ΡΠ·ΠΎΠ² ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠ° create f Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ΅Π½ ΠΈ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ²Π΅ΡΠ³Π½ΡΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠΌ, Π΅ΡΠ»ΠΈ ΡΠΈΠΏΠΎΠΌ f Π±ΡΠ΄Π΅Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ²: FIGURE, OPEN_FIGURE, CLOSED_FIGURE. ΠΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΡΡΡΠ°Π½ΡΠ΅Ρ ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ ΠΎΡΠΈΠ±ΠΎΡΠ½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ².
ΠΡΠΌΠ΅ΡΠΈΠΌ ΠΎΠ΄Π½Π°ΠΊΠΎ, ΡΡΠΎ Π΄Π°ΠΆΠ΅, Π΅ΡΠ»ΠΈ ΡΠΈΠΏ ΡΡΡΠ½ΠΎΡΡΠΈ f ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΉ, ΡΠΎ Π΄ΠΎΠΏΡΡΡΠΈΠΌΠ° ΡΠ²Π½Π°Ρ ΡΠΎΡΠΌΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ - create{RECTANGLE} f, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π·Π΄Π΅ΡΡ ΡΠΈΠΏΠΎΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΌΠΎΠΊ FIGURE - ΠΊΠ»Π°ΡΡ RECTANGLE. ΠΡ ΡΠΆΠ΅ Π²ΠΈΠ΄Π΅Π»ΠΈ, ΠΊΠ°ΠΊ ΡΡΠΎΡ ΠΏΡΠΈΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΠ²Π°ΡΠΈΠ°Π½ΡΠ½ΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π΄Π»Ρ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΊΠ»Π°ΡΡΠ° FIGURE, ΠΊΠΎΡΠΎΡΡΠ΅, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°, Π±ΡΠ΄ΡΡ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠ°ΠΌΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ² RECTANGLE, CIRCLE ΠΈ Π΄Ρ.ΠΠΎΠΆΠ΅Ρ ΠΏΠΎΠΊΠ°Π·Π°ΡΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠΎΠ², Π΄Π΅Π»Π°Ρ ΠΈΡ ΠΏΡΠΎΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ»ΠΎΠ²ΠΊΠΎΠΉ Π΄Π»Ρ ΠΎΠ±ΠΌΠ°Π½Π° ΡΠΈΡΡΠ΅ΠΌΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠΈΠΏΠΎΠ². ΠΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ Π²Π΅ΡΠ½ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Π½Π΅ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ ΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅. ΠΠ΅Π»ΡΠ·Ρ ΡΠΎΠ·Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΈΠΏΠ° FIGURE, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΡ ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠ½ΡΡ ΡΡΡΠ½ΠΎΡΡΡ ΡΡΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, Π° Π·Π°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΅Π΅, Π½Π΅ Π·Π½Π°Ρ ΡΠΎΡΠ½ΠΎ, ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΡΠΈΠΏΠ° ΠΎΠ½Π° ΠΏΡΠΈΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½Π° Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΈ:
f: FIGURE
...
f := "ΠΠ΅ΠΊΠΎΡΠΎΡΠΎΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΡΠ°ΠΊΠΎΠ³ΠΎ ΠΊΠ°ΠΊ CIRCLE ΠΈΠ»ΠΈ POLYGON"
...
f.rotate (some_point, some_angle)
f.display
...
Π’Π°ΠΊΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΠ΅ΠΉ ΠΈ ΠΊΡΠ»ΡΠΌΠΈΠ½Π°ΡΠΈΠ΅ΠΉ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΡΡ ΡΡΠ΅Π΄ΡΡΠ² Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ ΠΠ-ΠΌΠ΅ΡΠΎΠ΄Π° ΡΠ°ΠΊΠΈΡ , ΠΊΠ°ΠΊ ΠΊΠ»Π°ΡΡΡ, ΡΠΊΡΡΡΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π²ΡΠ±ΠΎΡ, Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΠΌ, Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅, ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ (ΠΈ, ΠΊΠ°ΠΊ Π±ΡΠ΄Π΅Ρ Π²ΠΈΠ΄Π½ΠΎ Π΄Π°Π»ΡΡΠ΅, ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ). ΠΡ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΠ΅ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ, Π½Π΅ Π·Π½Π°Ρ ΡΠΎΡΠ½ΠΎ ΠΈΡ ΡΠΈΠΏΠΎΠ², Π·Π°Π΄Π°Π²Π°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠΉ Π΄Π»Ρ ΡΡΠ΅Π±ΡΠ΅ΠΌΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ. ΠΠΌΠ΅Ρ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΉ ΡΡΠ°ΠΌΠΏ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ° ΡΠΈΠΏΠΎΠ², ΡΠ΄ΠΎΡΡΠΎΠ²Π΅ΡΡΡΡΠΈΠΉ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Ρ ΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΡΠΈΡΡΠ²Π°ΡΡ Π½Π° Π±ΠΎΠ»ΡΡΡΡ ΡΠΈΠ»Ρ - Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ²ΡΠ·ΡΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΡ Π²Π΅ΡΡΠΈΡ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, Π½Π΅ Π·Π½Π°Ρ ΡΠΎΡΠ½ΠΎ, ΡΡΠΎ ΡΡΠΎ Π·Π° Π²Π΅ΡΡΠΈΡ.
ΠΠ°Π΄Π°Π½ΠΈΠ΅ ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠΈ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² ΠΈ ΠΊΠ»Π°ΡΡΠΎΠ²
Π₯ΠΎΡΡ Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° Π½Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π° Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠ»Π°ΡΡΠ° Π»ΠΈΠ±ΠΎ Π½Π΅Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ, Π»ΠΈΠ±ΠΎ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ°ΡΡΠΈΡΠ½ΠΎ, ΡΠ°ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π·Π°Π΄Π°ΡΡ ΠΈΡ Π°Π±ΡΡΡΠ°ΠΊΡΠ½ΡΠ΅ ΡΠ΅ΠΌΠ°Π½ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π°. ΠΠ»Ρ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ.
ΠΠ°ΠΊ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΉ ΠΊΠ»Π°ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½Ρ, Π° Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠ΅Π΄ΡΡΠ»ΠΎΠ²ΠΈΠ΅, ΠΏΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΈΠ»ΠΈ ΠΎΠ±Π° ΡΡΠΈ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅Ρ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ², ΠΎΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΠΎ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ°ΠΊ ΠΈ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ Π΄ΡΡΠ³ΠΈΡ ΡΡΡΡΠΊΡΡΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠΎΠ΄Π°, ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΠ²ΡΠ·Π°ΡΡ Ρ ΠΊΠ°ΠΆΠ΄ΡΠΌ ΡΠΏΠΈΡΠΊΠΎΠΌ ΠΊΡΡΡΠΎΡ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ Π°ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.
Π ΠΈΡ. 14.9. Π‘ΠΏΠΈΡΠΎΠΊ Ρ ΠΊΡΡΡΠΎΡΠΎΠΌ
ΠΡΠΎΡ ΠΊΠ»Π°ΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ:
indexing
description: "ΠΠΈΠ½Π΅ΠΉΠ½ΡΠ΅ ΡΠΏΠΈΡΠΊΠΈ"
deferred class
LIST [G]
feature -- Access
count: INTEGER is
-- Π§ΠΈΡΠ»ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ²
deferred
end
index: INTEGER is
-- ΠΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΊΡΡΡΠΎΡΠ°
deferred
end
item: G is
-- ΠΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ ΠΊΡΡΡΠΎΡΠ°
deferred
end
feature - ΠΡΡΠ΅Ρ ΠΎ ΡΡΠ°ΡΡΡΠ΅
after: BOOLEAN is
-- ΠΡΡΡΠΎΡ Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ?
deferred
end
before: BOOLEAN is
-- ΠΡΡΡΠΎΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΏΠ΅ΡΠ²ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ?
deferred
end
feature - Π‘Π΄Π²ΠΈΠ³ ΠΊΡΡΡΠΎΡΠ°
forth is
-- ΠΠ΅ΡΠ΅Π΄Π²ΠΈΠ½ΡΡΡ ΠΊΡΡΡΠΎΡ Π½Π° ΠΎΠ΄Π½Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ Π²ΠΏΠ΅ΡΠ΅Π΄.
require
not after
deferred
ensure
index = old index + 1
end
... ΠΡΡΠ³ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ...
invariant
non_negative_count: count >= 0
offleft_by_at_most_one: index >= 0
offright_by_at_most_one: index <= count + 1
after_definition: after = (index = count + 1)
before_definition: before = (index = 0)
end
ΠΠ΄Π΅ΡΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½Ρ Π²ΡΡΠ°ΠΆΠ°Π΅Ρ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ°Π·Π½ΡΠΌΠΈ Π·Π°ΠΏΡΠΎΡΠ°ΠΌΠΈ. ΠΠ΅ΡΠ²ΡΠ΅ Π΄Π²Π° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π°ΡΡ, ΡΡΠΎ ΠΊΡΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΉΡΠΈ Π·Π° Π³ΡΠ°Π½ΠΈΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π½Π° ΠΎΠ΄Π½Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ ΡΠ»Π΅Π²Π° ΠΈΠ»ΠΈ ΡΠΏΡΠ°Π²Π°.
Π ΠΈΡ. 14.10. ΠΠΎΠ·ΠΈΡΠΈΠΈ ΠΊΡΡΡΠΎΡΠ°
ΠΠ²Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΠΉ: ensure Result = (index = count + 1) Π΄Π»Ρ after ΠΈ ensure Result = (index = 0) Π΄Π»Ρ before. Π’Π°ΠΊΠΎΠΉ Π²ΡΠ±ΠΎΡ Π²ΡΠ΅Π³Π΄Π° Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ ΠΏΡΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΈ ΡΠ²ΠΎΠΉΡΡΠ², Π²ΠΊΠ»ΡΡΠ°ΡΡΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΠΎΡΡ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². Π― ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΠ°, ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ ΡΠ°ΠΊΠΈΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠ°ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΡΠ²ΠΎΠΉΡΡΠ²Π° ΠΊΠ»Π°ΡΡΠ°, Π° Π½Π΅ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»ΡΡΡ ΠΈΡ ΠΊ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ.Π£ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ ΠΎ forth ΡΠΎΡΠ½ΠΎ Π²ΡΡΠ°ΠΆΠ°ΡΡ ΡΠΎ, ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π΄Π΅Π»Π°ΡΡ ΡΡΠ° ΠΏΡΠΎΡΠ΅Π΄ΡΡΠ°: ΠΏΠ΅ΡΠ΅Π΄Π²ΠΈΠ³Π°ΡΡ ΠΊΡΡΡΠΎΡ Π½Π° ΠΎΠ΄Π½Ρ ΠΏΠΎΠ·ΠΈΡΠΈΡ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΊΡΡΡΠΎΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡΠ°Π²Π°ΡΡΡΡ Π² ΠΏΡΠ΅Π΄Π΅Π»Π°Ρ ΡΠΏΠΈΡΠΊΠ° ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΏΠ»ΡΡ Π΄Π²Π΅ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ "ΠΌΠ΅ΡΠΎΠΊ" ΡΠ»Π΅Π²Π° ΠΈ ΡΠΏΡΠ°Π²Π°, ΡΠΎ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ forth ΡΡΠ΅Π±ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡ not after, Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠΌ Π±ΡΠ΄Π΅Ρ, ΠΊΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² ΠΏΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΠΈ, ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ index Π½Π° ΠΎΠ΄ΠΈΠ½.
ΠΠΎΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ - Π½Π°Ρ ΡΡΠ°ΡΡΠΉ Π΄ΡΡΠ³ ΡΡΠ΅ΠΊ. ΠΠ°ΡΠ΅ΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΠΎΠ±ΡΠΈΠΉ ΠΊΠ»Π°ΡΡ STACK [G], ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠΊΡΡΠ²Π°ΡΡ Π²ΡΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ³ΠΎ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΌΠΊΠΈ, ΡΠ°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ FIXED_STACK ΠΈ LINKED_STACK, Π±ΡΠ΄ΡΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΡ ΠΏΡΠΎΡΠ΅Π΄ΡΡ ΠΊΠ»Π°ΡΡΠ° STACK ΡΠ²Π»ΡΠ΅ΡΡΡ put:
put (x: G) is
-- ΠΠΎΠΌΠ΅ΡΡΠΈΡΡ x Π½Π° Π²Π΅ΡΡΠΈΠ½Ρ.
require
not full
deferred
ensure
not_empty: not empty
pushed_is_top: item = x
one_more: count = old count + 1
end
ΠΡΠ»Π΅Π²ΡΠΊΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ empty ΠΈ full (ΡΠ°ΠΊΠΆΠ΅ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π½Π° ΡΡΠΎΠ²Π½Π΅ STACK) Π²ΡΡΠ°ΠΆΠ°ΡΡ ΡΠ²ΠΎΠΉΡΡΠ²ΠΎ ΡΡΠ΅ΠΊΠ° Π±ΡΡΡ ΠΏΡΡΡΡΠΌ ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΠΌ.
Π’ΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΠΉ ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ ΠΊΠ»Π°ΡΡΡ Π΄ΠΎΡΡΠΈΠ³Π°ΡΡ ΡΠ²ΠΎΠ΅ΠΉ ΠΏΠΎΠ»Π½ΠΎΠΉ ΡΠΈΠ»Ρ. ΠΠ°ΠΊ ΡΠΆΠ΅ ΠΎΡΠΌΠ΅ΡΠ°Π»ΠΎΡΡ (Ρ ΠΎΡΡ Π΄Π΅ΡΠ°Π»ΠΈ ΠΏΠΎΡΠ²ΡΡΡΡ ΡΠ΅ΡΠ΅Π· Π΄Π²Π΅ Π»Π΅ΠΊΡΠΈΠΈ), ΠΏΡΠ΅Π΄ΡΡΠ»ΠΎΠ²ΠΈΡ ΠΈ ΠΏΠΎΡΡΡΡΠ»ΠΎΠ²ΠΈΡ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΠΌΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡΠΌ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ. ΠΡΠΎ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π²Π°ΠΆΠ½ΠΎ Π² ΠΎΡΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅: Π² Π½Π΅ΠΌ ΡΠ°ΠΊΠΈΠ΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°ΡΡ Π²ΡΠ΅ Π΄ΠΎΠΏΡΡΡΠΈΠΌΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ put Π² ΠΏΠΎΡΠΎΠΌΠΊΠ°Ρ ΠΊΠ»Π°ΡΡΠ° STACK.