ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² написании студСнчСских Ρ€Π°Π±ΠΎΡ‚
АнтистрСссовый сСрвис

ОписаниС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ — это особый Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… этого Ρ‚ΠΈΠΏΠ° хранятся адрСса Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… содСрТащих ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ использованиС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π»ΠΈΡˆΠ½ΠΈΠΌ Π·Π°Ρ‚Ρ€Π°Ρ‚Π°ΠΌ памяти ΠΈ ΠΊ ΡƒΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ сущСствС услоТняСт ΠΈ ΡΠ°ΠΌ процСсс программирования. Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

ОписаниС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

АдрСсация динамичСских ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… происходит Ρ‡Π΅Ρ€Π΅Π· ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Π’ ΠŸΠ°ΡΠΊΠ°Π»Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΡ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ адрСс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ прСдусмотрСны:

Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ памяти ΠΏΠΎΠ΄ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ;

присвоСниС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ Π½Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ адрСса Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ памяти (инициализация указатСля);

освобоТдСниС памяти послС использования динамичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ.

1. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. ОписаниС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ — это особый Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… этого Ρ‚ΠΈΠΏΠ° хранятся адрСса Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… содСрТащих ΠΏΠΎΠ»Π΅Π·Π½ΡƒΡŽ для ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ использованиС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π»ΠΈΡˆΠ½ΠΈΠΌ Π·Π°Ρ‚Ρ€Π°Ρ‚Π°ΠΌ памяти ΠΈ ΠΊ ΡƒΡΠ»ΠΎΠΆΠ½Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π° Ρ‚Π°ΠΊΠΆΠ΅ сущСствС услоТняСт ΠΈ ΡΠ°ΠΌ процСсс программирования. Π’ Π΄Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ‹, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ Ρ‚Π°ΠΊΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… станСт ясно, Ρ‡Ρ‚ΠΎ всС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° ΠΈΡ… Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΎΠΊΡƒΠΏΠ°ΡŽΡ‚ΡΡ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅. Π Π°Π±ΠΎΡ‚Π° с ΡƒΠΊΠ°Π·Π°Ρ‚Слями прСдусмотрСна Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Pascal, Π½ΠΎ ΠΈ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования. НапримСр, Π² ΡΠ·Ρ‹ΠΊΠ΅ Π‘ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ практичСски Π² Π»ΡŽΠ±ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

Π’ Pascal Ρ€ΠΎΠ»ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ нСсколько скромнСС, ΠΈ, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΠΌ программистам слСдуСт ΡƒΡΠ²ΠΎΠΈΡ‚ΡŒ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡƒΠΊΠ°Π·Π°Ρ‚Слями, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π³Π»ΡƒΠ±ΠΆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ любой ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

2. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ ΠΈ Π°Π΄Ρ€Π΅ΡΠ°

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ адрСсом ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ являСтся адрСс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° ячСйки памяти, которая ΠΏΠΎΠ΄ Π½Π΅Π΅ отводится. Для Π΄Π°Π½Π½Ρ‹Ρ… структурных Ρ‚ΠΈΠΏΠΎΠ² (массивов ΠΈ Π·Π°ΠΏΠΈΡΠ΅ΠΉ) ΠΈΡ… Π°Π΄Ρ€Π΅ΡΠΎΠΌ считаСтся адрСс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта.

Π’ Turbo Pascal сущСствуСт Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ прямого доступа ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ Π±Π°ΠΉΡ‚Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ΠΏΠΎ Π΅Π³ΠΎ адрСсу ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Π² ΠΌΠΎΠ΄ΡƒΠ»Π΅ system массивов Mem, MemW ΠΈ MemL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Π΅ Π½Π΅ΠΏΠΎΡΡ€Π΅Π΄ΡΡ‚Π²Π΅Π½Π½ΠΎ ΠΈΠ· ΡΡ‡Π΅Π΅ΠΊ памяти (ΠΎΠ΄ΠΈΠ½, Π΄Π²Π° ΠΈΠ»ΠΈ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π±Π°ΠΉΡ‚Π°). Π­Ρ‚ΠΎ ΠΎΡ‡Π΅Π½ΡŒ опасныС дСйствия, поэтому ΠΎΠ½ΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½Ρ‹ Π² 32- разрядных систСмах программирования. ВсС ΠΆΠ΅ Π΄Π°Π΄ΠΈΠΌ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠ΅ пояснСния для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² ΡΡ€Π΅Π΄Π΅ Borland (Turbo) Pascal.

Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ индСкса Π² ΡΡ‚ΠΈΡ… массивах ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ адрСс, записанный Π² Π²ΠΈΠ΄Π΅, принятом Π² DOS: сСгмСнт: Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π°Ρ‡Π°Π»Π° сСгмСнта. Π’Π°ΠΊΠΎΠΉ странный способ записи адрСса связан с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС DOS вся ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ€Π°Π·Π±ΠΈΡ‚Π° Π½Π° ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Ρ‹, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°ΡŽΡ‚ 64 ΠšΠ±Π°ΠΉΡ‚. Для получСния Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ³ΠΎ адрСса ΠΈΠ· ΠΏΠ°Ρ€Ρ‹ сСгмСнт Π‘ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ систСма прибавляСт ΠΊ ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Ρƒ справа ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΉ ноль (это Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ нуля Π² Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠΉ систСмС), Π° Π·Π°Ρ‚Π΅ΠΌ складываСт Π΅Π³ΠΎ со ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ΠΌ. Π’Π°ΠΊΠΈΠΌ способом ΠΌΠΎΠΆΠ½ΠΎ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ 1 ΠœΠ±Π°ΠΉΡ‚ памяти.

НапримСр, Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ адрСс Π²ΠΈΠ΄Π΅ΠΎΠ±ΡƒΡ„Π΅Ρ€Π° Π·Π°ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ $B800:$ 000, Π° ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ ΡΠ°ΠΌΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ Π΅Π³ΠΎ Π±Π°ΠΉΡ‚Ρƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊ:

Mem[$Π’800:$ 0000],

ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Π΄Π²ΡƒΠΌ Π±Π°ΠΉΡ‚Π°ΠΌ — MemW[$B800:$ 0000],

ΠΊ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ΠΌ Π±Π°ΠΉΡ‚Π°ΠΌ — MemL [$B800:$ 0000]

ΠΠ±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ адрСс, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΠ°Ρ€Π΅, — $B8000.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для Π»ΡŽΠ±ΠΎΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… — ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ mem[0:$ 41C]: =mem[0:$ 41А]; ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ для ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ очистки Π±ΡƒΡ„Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹. Π—Π΄Π΅ΡΡŒ адрСс ΠΌΠ°Ρ€ΠΊΠ΅Ρ€Π° ΠΊΠΎΠ½Ρ†Π° Π±ΡƒΡ„Π΅Ρ€Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ приравниваСтся ΠΊ Π°Π΄Ρ€Π΅ΡΡƒ Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»Π°. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, Π² Π΄Π°Π½Π½ΠΎΠΌ случаС Π»ΡƒΡ‡ΡˆΠ΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ срСдствами модуля crt.

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ способ обращСния ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти — использованиС слуТСбного слова absolute ΠΏΡ€ΠΈ описании ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’ ΡΡ‚ΠΎΠΌ случаС пСрСмСнная Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ Ρ‚ΠΎΠΌΡƒ адрСсу Π² ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Π½ послС absolute. РазумССтся, использованиС слуТСбного слова absolute — ΡΡ‚ΠΎΠ»ΡŒ ΠΆΠ΅ опасный способ, ΠΊΠ°ΠΊ ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ°ΠΌΡΡ‚ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ массивы.

Однако absolute ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈ Π±ΠΎΠ»Π΅Π΅ бСзопасным способом, позволяя ΡΠΎΠ²ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ Π΄Π²Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ с Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. Π’ ΡΠ·Ρ‹ΠΊΠ΅ Pascal Π΅ΡΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ опСрация получСния указатСля Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ (ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ) — ΠΎΠ½Π° обозначаСтся ΠΊΠ°ΠΊ @. Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ эквивалСнтная Π΅ΠΉ Ρ„ункция addr.

НапримСр, @x ΠΈΠ»ΠΈ addr (Ρ…) — адрСс ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ….

Π˜ΠΌΠ΅Π΅Ρ‚ΡΡ ΠΈ ΠΎΠ±Ρ€Π°Ρ‚ная опСрация получСния значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎ Π΅Π΅ Π°Π΄Ρ€Π΅ΡΡƒ, которая обозначаСтся Π·Π½Π°ΠΊΠΎΠΌ. НапримСр, Ρ€^ пСрСмСнная с Π°Π΄Ρ€Π΅ΡΠΎΠΌ Ρ€.

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

3. ОписаниС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

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

ОписаниС Π΄Π²ΡƒΡ… Π²ΠΈΠ΄ΠΎΠ² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ выполняСтся ΠΏΠΎ-Ρ€Π°Π·Π½ΠΎΠΌΡƒ:

var p1: ^integer; {ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ†Π΅Π»ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°}

p2: ^string; {ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΡ‚ΠΎΠΊΡƒ}

p3 pointer; {Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ}

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ Ρ‡Ρ‚ΠΎ Ρ‚ΠΈΠΏ pointer совмСстим со Π²ΡΠ΅ΠΌΠΈ Ρ‚ΠΈΠΏΠ°ΠΌΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’ Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ для удобства ΠΈΠΌΠ΅Π½Π° всСх ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒ с Π±ΡƒΠΊΠ²Ρ‹ p (pointer).

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ размСщаСтся Π² ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π² ΡΡ‚Π΅ΠΊΠ΅ (Ссли ΠΎΠ½ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ Π² ΠΏΠΎΠ΄ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅) ΠΈ Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚Π°ΠΌ 4 Π±Π°ΠΉΡ‚Π°. Π­Ρ‚ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ «Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы' памяти. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ€Π΅Π΄ΠΊΠΎ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ°ΡŽΡ‚ динамичСски, оставляя эту Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ для Π±ΠΎΠ»ΡŒΡˆΠΈΡ… совокупностСй Π΄Π°Π½Π½Ρ‹Ρ….

Π§Π΅ΠΌ большС Ρ€Π°Π·ΠΌΠ΅Ρ€ динамичСской ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Ρ‚Π΅ΠΌ мСньшС доля Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов. НапримСр, ΠΏΡ€ΠΈ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠΈ Π² Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΎΠΉ памяти массивов Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² лишниС 4 Π±Π°ΠΉΡ‚Π°, Π·Π°Ρ‚Ρ€Π°Ρ‡Π΅Π½Π½Ρ‹Π΅ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, нСсущСствСнны.

ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ динамичСский ΠΏΠ°ΠΌΡΡ‚ΡŒ адрСсация

4. ОбъявлСниС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

Как ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π² Π’ΡƒΡ€Π±ΠΎ ПаскалС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ связываСтся с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Π’Π°ΠΊΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ. Для объявлСния Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ указатСля ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π½Π°Ρ‡ΠΎΠΊ А, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ помСщаСтся ΠΏΠ΅Ρ€Π΅Π΄ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

var

p1: ^integer;

Ρ€2: ^real;

type

PerconPointer = ^PerconRecord;

PerconRecord = record

Name: string;

Job: string;

Next: PerconPointer

end;

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΡ€ΠΈ объявлСнии Ρ‚ΠΈΠΏΠ° PerconPointer ΠΌΡ‹ ΡΠΎΡΠ»Π°Π»ΠΈΡΡŒ Π½Π° PerconRecord, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ объявлСн Π½Π΅ Π±Ρ‹Π». Как ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, Π² Π’ΡƒΡ€Π±ΠΎ ПаскалС ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ проводится Π² ΠΆΠΈΠ·Π½ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ, Π² ΡΠΎΠΎΡ‚вСтствии с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ описан. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сдСлано Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ сдСлано Π½Π΅ ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΠΎ. ДинамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡƒΡŽ Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π²ΠΈΠ΄Π΅ списков. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт списка ΠΈΠΌΠ΅Π΅Ρ‚ Π² ΡΠ²ΠΎΠ΅ΠΌ составС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠΎΡΠ΅Π΄Π½ΠΈΠΉ элСмСнт, Ρ‡Ρ‚ΠΎ обСспСчиваСт ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ просмотра ΠΈ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ†ΠΈΠΈ списка. Если Π±Ρ‹ Π² Π’ΡƒΡ€Π±ΠΎ ПаскалС Π½Π΅ Π±Ρ‹Π»ΠΎ этого ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ, рСализация списков Π±Ρ‹Π»Π° Π±Ρ‹ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½Π΅Π½Π°.

Π’ Π’ΡƒΡ€Π±ΠΎ ПаскалС ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ ΠΈ Π½Π΅ ΡΠ²ΡΠ·Ρ‹Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΡ€ΠΈ этом с ΠΊΠ°ΠΊΠΈΠΌ-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Для этого слуТит стандартный Ρ‚ΠΈΠΏ POINTER, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

var

Ρ€: pointer;

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π΅ ΡΠ²ΡΠ·Π°Π½Ρ‹ с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ, с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΡƒΠ΄ΠΎΠ±Π½ΠΎ динамичСски Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅, структура ΠΈ Ρ‚ΠΈΠΏ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π² Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, значСниями ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ ΡΠ²Π»ΡΡŽΡ‚ΡΡ адрСса ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ, поэтому слСдовало Π±Ρ‹ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ укаатСля ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ. На ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ это Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ Ρ‚Π°ΠΊ. Π’ Π’ΡƒΡ€Π±ΠΎ ПаскалС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ значСния Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ указатСлями, связанными с ΠΎΠ΄Π½ΠΈΠΌ ΠΈ Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ‚ΠΈΠΏΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ…. Если, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€,

var

p1, p2: ^integer;

Ρ€3: ^real;

Ρ€Ρ€: pointer;

Ρ‚ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Ρ€1:= Ρ€2;

Π²ΠΏΠΎΠ»Π½Π΅ допустимо, Π² Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΊΠ°ΠΊ Ρ€1:= Ρ€3;

Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π 1 ΠΈ Π 3 ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…. Π­Ρ‚ΠΎ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, ΠΎΠ΄Π½Π°ΠΊΠΎ, Π½Π΅ Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚раняСтся Π½Π° Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, поэтому ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ

pp:= Ρ€3;

Ρ€1:= Ρ€Ρ€;

ΠΈ Ρ‚Π΅ΠΌ самым Π΄ΠΎΡΡ‚ΠΈΡ‡ΡŒ Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°.

Π§ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŒ Π²ΠΏΡ€Π°Π²Π΅ Π·Π°Π΄Π°Ρ‚ΡŒ вопрос, стоило Π»ΠΈ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ограничСния ΠΈ Ρ‚ΡƒΡ‚ ΠΆΠ΅ Π΄Π°Π²Π°Ρ‚ΡŒ срСдства для ΠΈΡ… ΠΎΠ±Ρ…ΠΎΠ΄Π°. ВсС Π΄Π΅Π»ΠΎ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ любоС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, с ΠΎΠ΄Π½ΠΎΠΉ стороны, вводится для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ надСТности ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, Π° Ρ Π΄Ρ€ΡƒΠ³ΠΎΠΉ — ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ языка, Π΄Π΅Π»Π°Π΅Ρ‚ Π΅Π³ΠΎ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄Π½Ρ‹ΠΌ для ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΉ. Π’ Π’ΡƒΡ€Π±ΠΎ ПаскалС нСмногочислСнныС ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ΄Π°ΡŽΡ‚ языку Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ, Π½ΠΎ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡΡ‚Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… усилий ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎ Π²ΠΏΠΎΠ»Π½Π΅ осознанном дСйствии.

ИспользованиС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ

ПодвСдСм Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡ‚ΠΎΠ³ΠΈ. Π˜Ρ‚Π°ΠΊ, динамичСская ΠΏΠ°ΠΌΡΡ‚ΡŒ составляСт 200…300 ΠšΠ±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ большС, Π΅Π΅ Π½Π°Ρ‡Π°Π»ΠΎ хранится Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ HEAPORG, a ΠΊΠΎΠ½Π΅Ρ† соотвСтствуСт адрСсу ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ HEAPEND. Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ адрСс свободного участка динамичСской памяти хранится Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ HEAPPTR.

ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ для размСщСния ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… массивов Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡƒΡΡ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, трСбуСтся ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ 100×200 Ρ‚ΠΈΠΏΠ° EXTENDED. Для размщССния Ρ‚Π°ΠΊΠΎΠ³ΠΎ массива трСбуСтся ΠΏΠ°ΠΌΡΡ‚ΡŒ 200 000 Π±Π°ΠΉΡ‚ (100*200*10). Казалось Π±Ρ‹, эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

var

i, j: integer;

PtrArr: array [1.100, 1.200] of ^real;

begin

for i := 1 to 100 do

for j := 1 to 200 do

new (PtrArr[i, j]);

end.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ элСмСнту вновь созданного динамичСского массива ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

PtrArr[1,1]^ := 0;

if PtrArr[i, j*2]^ > 1 then

Вспомним, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π»ΠΈΠ½Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ прСдставлСния указатСля составляСт 4 Π±Π°ΠΉΡ‚Π°, поэтому для размСщСния массива PTRARR потрСбуСтся 100*200*4 = 80 000 Π±Π°ΠΉΡ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ сСгмСнта Π΄Π°Π½Π½Ρ‹Ρ… (65 536 Π±Π°ΠΉΡ‚), доступный, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ для статичСского размСщСния Π΄Π°Π½Π½Ρ‹Ρ…. Π’Ρ‹Ρ…ΠΎΠ΄ΠΎΠΌ ΠΈΠ· ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΠΌΠΎΠ³Π»Π° Π±Ρ‹ ΠΏΠΎΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ адрСсная Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ°, Ρ‚. Π΅. Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ° Π½Π°Π΄ указатСлями, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² ΡΡ‚ΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ массива ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ PTRARR ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒ адрСс любого элСмСнта ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Π½Π΅ΠΌΡƒ. Однако Π² Π’ΡƒΡ€Π±ΠΎ ПаскалС Π½Π°Π΄ указатСлями Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ присвоСния ΠΈ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡ.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ всС-Ρ‚Π°ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ. Как ΠΌΡ‹ ΡƒΠΆΠ΅ Π·Π½Π°Π΅ΠΌ, любой ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ состоит ΠΈΠ· Π΄Π²ΡƒΡ… слов Ρ‚ΠΈΠΏΠ° WORD, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… хранятся сСгмСнт ΠΈ ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅. Π’ Π’ΡƒΡ€Π±ΠΎ ПаскалС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π΄Π²Π΅ встроСнныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΈΠΏΠ° WORD, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ содСрТимоС этих слов:

SEG (X) — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ адрСса;

OFS (X) — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ смСщСниС.

АргумСнтом Π₯ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΡΡ‚ΠΈΠΌ функциям ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ любая пСрСмСнная, Π² Ρ‚ΠΎΠΌ числС ΠΈ Ρ‚Π°, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. НапримСр, Ссли ΠΈΠΌΠ΅Π΅ΠΌ

var

Ρ€: ^real;

begin

new (p);

p^ := 3.14;

end

Ρ‚ΠΎ Ρ„ункция SEG (P) Π²Π΅Ρ€Π½Π΅Ρ‚ ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ адрСса, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ располагаСтся 4-Π±Π°ΠΉΡ‚Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π , Π² Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΡ ΠΊΠ°ΠΊ SEG (P^) — сСгмСнт 6-Π±Π°ΠΉΡ‚Π½ΠΎΠ³ΠΎ участка ΠΊΡƒΡ‡ΠΈ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится число 3.14.

Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ встроСнной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ PTR (SEG, OFS: WORD): POINTER ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ указатСля, совмСстимоС с ΡƒΠΊΠ°Π·Π°Ρ‚Слями любого Ρ‚ΠΈΠΏΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° такая ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий. Π’Π½Π°Ρ‡Π°Π»Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ΠΎΠΉ GETMEM ΠΈΠ· ΠΊΡƒΡ‡ΠΈ Π·Π°Π±ΠΈΡ€Π°ΡŽΡ‚ΡΡ нСсколько Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² подходящСй Π΄Π»ΠΈΠ½Ρ‹ (напомню, Ρ‡Ρ‚ΠΎ Π·Π° ΠΎΠ΄Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 65 521 Π±Π°ΠΉΡ‚ динамичСской памяти). Для рас сматриваСмого ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΡƒΠ΄ΠΎΠ±Π½ΠΎ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Ρ‚Π°ΠΊΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² Π½ΠΈΡ… ΠΌΠΎΠ³Π»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°Π·ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒΡΡ строки ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Ρ‚. Π΅.

200 * 10 = 2000 Π±Π°ΠΉΡ‚.

Начало ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π°, Ρ‚. Π΅. фактичСски Π½Π°Ρ‡Π°Π»ΠΎ размСщСния Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки, запоминаСтся Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ PTRSTR, состоящСм ΠΈΠ· 100 ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ. Π’Π΅ΠΏΠ΅Ρ€ΡŒ для доступа ΠΊ Π»ΡŽΠ±ΠΎΠΌΡƒ элСмСнту строки Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ смСщСниС этого элСмСнта ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° строки ΠΈ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ:

var

i, j: integer;

PtrStr: array [1.100] of pointer;

pr: ^real;

const

SizeOfReal = 6;

begin

for i := 1 to 100 do

GetMem (PtrStr[i], SizeOfReal*200);

{ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ [i, j]}

pr := ptr (seg (PtrStr[i]^), ofs (PtrStr[i]^)+(j-1)*SizeOfReal);

if pr^ > 1 then

end

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ вычислСния адрСса PR := PTR… Π±ΡƒΠ΄Π΅Ρ‚, судя ΠΏΠΎ Π²ΡΠ΅ΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ, ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ввСсти Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ GETR, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ PUTR, ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта. КаТдая ΠΈΠ· Π½ΠΈΡ…, Π² ΡΠ²ΠΎΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, обращаСтся ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ADDRR для вычислСния адрСса. НиТС приводится ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΡΠΎΠ·Π΄Π°ΡŽΡ‰Π°Ρ Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈΠ· NxM случайных чисСл ΠΈ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π°Ρ ΠΈΡ… ΡΡ€Π΅Π΄Π½Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅.

program Primer1;

const

SizeOfReal = 6; {Π”Π»ΠΈΠ½Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° REAL}

N = 100; {ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ столбцов}

М = 200; {ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ строк}

var

i, j: integer;

PtrStr: array [1.N] of pointer;

s: real;

type

RealPoint = ^real;

{}

Function AddrR (i, j: word): RealPoint;

{По сСгмСнту i ΠΈ ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ j Π²Ρ‹Π΄Π°Π΅Ρ‚ адрСс вСщСствСнной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ}

begin

AddrR:= ptr (seg (PtrStr[i]^), ofs (PtrStr[i]^)+(j-1)*SizeOfReal)

end; {AddrR}

{}

Function GetR (i, j: integer): real;

{Π’Ρ‹Π΄Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вСщСствСнной ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠΎ ΡΠ΅Π³ΠΌΠ΅Π½Ρ‚Ρƒ i

ΠΈ ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ j Π΅Π΅ Π°Π΄Ρ€Π΅ΡΠ°}

begin

GetR := AddrR (i, j)^

end; {GetR}

{}

Procepure PutR (i, j: integer; x: real);

{ΠŸΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ, адрСс ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ сСгмСнт i

смСщСниС j, вСщСствСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x}

begin

AddrR (i, j)^ := x

end; {PutR}

{}

begin {Main}

for i := 1 to N do

begin

GetMem (PtrStr[i], M*SizeOfReal);

for j := 1 to M do PutR (i, j, Random)

end;

s := 0;

for i := 1 to N do

for j := 1 to M do

s := s + GetR (i, j);

WriteLn (s / (N * M): 12:10)

end. {Main}

Π’ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ прСдполагаСтся, Ρ‡Ρ‚ΠΎ каТдая строка размСщаСтся Π² ΠΊΡƒΡ‡Π΅, начиная с Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π°, ΠΈ ΡΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ указатСля PTRSTR Ρ€Π°Π²Π½ΠΎ Π½ΡƒΠ»ΡŽ. Π’ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… обращСниях ΠΊ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ GETMEM Π½Π°Ρ‡Π°Π»ΠΎ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π° слСдуСт сразу Π·Π° ΠΊΠΎΠ½Ρ†ΠΎΠΌ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π½Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ сСгмСнта. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠΈ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ² максимальной Π΄Π»ΠΈΠ½Ρ‹ (65 521 Π±Π°ΠΉΡ‚) ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈ вычислСнии смСщСния послСднСго Π±Π°ΠΉΡ‚Π°.

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ