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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π€ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… Π² DelphiΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 11

Автор Π”ΠΆΡƒΠ»ΠΈΠ°Π½ Π‘Π°ΠΊΠ½Π΅Π»Π»

РСзюмС

Π­Ρ‚Π° Π³Π»Π°Π²Π° Π±Ρ‹Π»Π° достаточно насыщСна ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΈ, чСстно говоря, Π±Ρ‹Π»Π° посвящСна Π½Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ ΠΈ структурам Π΄Π°Π½Π½Ρ‹Ρ…, сколько тСхнологиям увСличСния быстродСйствия ΠΊΠΎΠ΄Π° ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ.

Иногда быстродСйствиС являСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ‹Π±ΠΎΡ€Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈΠ»ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… (ΠΈΠ»ΠΈ Ρ‚ΠΎΠ³ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ). Π’ Π΄Ρ€ΡƒΠ³ΠΈΡ… случаях ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ скорости ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ достигнуто благодаря Π³Π»ΡƒΠ±ΠΎΠΊΠΈΠΌ знаниям оборудования ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π° ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго, Π²Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ СдинствСнным ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ увСличСния быстродСйствия прилоТСния являСтся использованиС ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠ°. Волько прСдоставляСмая ΠΏΡ€ΠΎΡ„ΠΈΠ»ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊΠΎΠΌ статистика ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Π½Π° Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Ρ‚Ρ€Π°Ρ‚ΠΈΡ‚ врСмя, ΠΈ лишь Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ΅ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΎΠ² ΠΊΠΎΠ΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΡ‚ΡŒ Π΅Π³ΠΎ быстродСйствиС. Π₯ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ просто Π²Ρ‹Π±ΠΎΡ€ "ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ" Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΈΠ»ΠΈ структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚Π½ΡŽΠ΄ΡŒ Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ быстрСС. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Π°Ρ Π² ΠΊΠ½ΠΈΠ³Π΅ информация ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Π²Π°ΠΌ ΠΏΠΎΠ½ΡΡ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ способы ускорСния выполнСния ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… частСй ΠΊΠΎΠ΄Π°, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Π½ΠΎΡΠΈΡ‚ΡŒ Π² ΠΊΠΎΠ΄ слоТныС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Ρ‚Π°ΠΌ, Π³Π΄Π΅ этого Π½Π΅ трСбуСтся - Π²Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ зря потСряСтС врСмя.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² этой Π³Π»Π°Π²Π΅ ΠΌΡ‹ ΠΊΡ€Π°Ρ‚ΠΊΠΎ рассмотрСли тСстированиС ΠΈ ΠΎΡ‚Π»Π°Π΄ΠΊΡƒ - это Ρ‚ΠΎΠΆΠ΅ Π½Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, Π° скорСС ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹, Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π½Π΅ содСрТит ошибок. А Ссли ошибки всС-Ρ‚Π°ΠΊΠΈ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, Ρ‚ΠΎ Π² ΠΊΠΎΠ΄Π΅ находится ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·Π½ΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° слСдов ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, Ρ‡Ρ‚ΠΎ поиск ΠΈ устранСниС ошибок Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Π“Π»Π°Π²Π° 2. ΠœΠ°ΡΡΠΈΠ²Ρ‹.

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

НСвзирая Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ Π² ΠΊΠ½ΠΈΠ³Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΠΏΠΎΠ»Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ этих Π΄Π²ΡƒΡ… Ρ‚ΠΈΠΏΠΎΠ² структур Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠ½ΠΎΠ³Π΄Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ свою ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π²Π°ΠΆΠ½ΠΎ Ρ‡Π΅Ρ‚ΠΊΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ всС аспСкты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ Π² этой ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π³Π»Π°Π²Π°Ρ….

ΠœΠ°ΡΡΠΈΠ²Ρ‹

Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ… массивы ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΉ структурой Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΎΡ‰Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°ΠΊΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠ°ΠΊ integer ΠΈΠ»ΠΈ Boolean. Массив (array) прСдставляСт собой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ список ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ количСства элСмСнтов. ВсС элСмСнты Π² массивС ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, хранятся Π² ΠΎΠ΄Π½ΠΎΠΌ Π±Π»ΠΎΠΊΠ΅ памяти, Ρ‚.Π΅. ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт Π² памяти находится нСпосрСдствСнно послС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ. Π’ Ρ‚Π°ΠΊΠΎΠΌ случаС говорят, Ρ‡Ρ‚ΠΎ элСмСнты массива ΡΠ²Π»ΡΡŽΡ‚ΡΡ смСТными Π² памяти. Если ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° элСмСнты массива ΠΏΠΎ ΠΈΡ… числовым индСксам, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ индСкс 0 (ΠΈΠ»ΠΈ 1, ΠΈΠ»ΠΈ любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ число, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π² Delphi), Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ элСмСнта Π±ΡƒΠ΄Π΅Ρ‚ большС Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ ΠΈ Ρ‚.Π΄. Π’ ΠΊΠΎΠ΄Π΅ элСмСнт с индСксом i обозначаСтся ΠΊΠ°ΠΊ А[i], Π³Π΄Π΅ А - ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ массива.

Π’ Delphi имССтся большой Π½Π°Π±ΠΎΡ€ встроСнных Ρ‚ΠΈΠΏΠΎΠ² массивов. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ ΡƒΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ массивов ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ VCL (Visual Component Library) Π² Π²ΠΈΠ΄Π΅ классов (ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ классов). Для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… классов, ΠΊΠ°ΠΊ массивы, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Delphi прСдусмотрСли Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ массива, [], добавляя ΠΊ Π½Π΅ΠΌΡƒ Π½ΠΎΠ²Ρ‹Π΅ свойства. Π­Ρ‚ΠΎ СдинствСнная опСрация Π² Delphi, ΠΏΠΎΠΌΠΈΠΌΠΎ + (слоТСниС ΠΈ конкатСнация строк), ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒ.

Π’ΠΈΠΏΡ‹ массивов Π² Delphi

Π’ Delphi имССтся Ρ‚Ρ€ΠΈ Ρ‚ΠΈΠΏΠ° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… языком массивов. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ - стандартный массив, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова array. Π’Ρ‚ΠΎΡ€ΠΎΠΉ Ρ‚ΠΈΠΏ Π±Ρ‹Π» Π²ΠΏΠ΅Ρ€Π²Ρ‹Π΅ Π²Π²Π΅Π΄Π΅Π½ Π² Delphi 4 Π² качСствС ΠΈΠΌΠΈΡ‚Π°Ρ†ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ Π΄Π°Π²Π½Ρ‹ΠΌ-Π΄Π°Π²Π½ΠΎ доступно Π² Visual Basic, - динамичСский массив, Ρ‚.Π΅. массив, Π΄Π»ΠΈΠ½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² процСссС выполнСния ΠΊΠΎΠ΄Π°.

И послСдний Ρ‚ΠΈΠΏ массивов, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Π½Π΅ считаСтся массивом, хотя Π² языкС Object Pascal имССтся нСсколько Π΅Π³ΠΎ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΉ. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΌΡ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ строках: ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚Π½Ρ‹Ρ… строках (Ρ‚ΠΈΠΏ shortstring Π² 32-разрядной вСрсии Delphi), строках с Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΌ Π½ΡƒΠ»Π΅ΠΌ (Ρ‚ΠΈΠΏ Pchar) ΠΈ Π΄Π»ΠΈΠ½Π½Ρ‹Ρ… строках Π² 32-разрядных вСрсиях Delphi (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΡŽ для "ΡˆΠΈΡ€ΠΎΠΊΠΈΡ…" символов).

ВсС массивы ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ структуру. Они состоят ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ большСго количСства ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, char, integer ΠΈΠ»ΠΈ record, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² памяти находятся рядом Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ. ИмСнно это послСднСС свойство стандартных массивов позволяСт ΠΎΡ‡Π΅Π½ΡŒ быстро ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ элСмСнтам массивов. Π’Π΅ΡΡŒ процСсс доступа ΠΊ элСмСнту сводится ΠΊ простому Π²Ρ‹Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡŽ адрСса, для Ρ‡Π΅Π³ΠΎ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ, ΠΊΠ°ΠΊ ΠΌΡ‹ вскорС ΡƒΠ²ΠΈΠ΄ΠΈΠΌ, всСго нСсколько ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Ρ… инструкций.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ массивы

МоТно Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΠΎΠΌΠ½Π΅Π²Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ всС Π²Ρ‹ Π·Π½Π°Π΅Ρ‚Π΅ стандартный способ объявлСния массивов Π² Delphi. Π’Π°ΠΊ, объявлСниС


var

MyIntArray : array [0..9] of integer;


создаСт массив ΠΈΠ· 10 элСмСнтов Ρ‚ΠΈΠΏΠ° integer. Π’ языкС Object Pascal Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ измСнСния индСксов элСмСнтов ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ Π»ΡŽΠ±Ρ‹ΠΌ (Π² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ случаС - ΠΎΡ‚ 0 Π΄ΠΎ 9). Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ массив ΠΈΠ· 10 элСмСнтов Ρ‚ΠΈΠΏΠ° integer, Π½ΠΎ здСсь индСксация элСмСнтов слСдуСт ΠΎΡ‚ 1 Π΄ΠΎ 10:


var

MyIntArray : array [1..10] of integer;


НСкоторыС ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с массивом, объявлСнном Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅, ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ (Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ†ΠΎΠ², ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 1).

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π½ΡƒΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ нСсколько слов ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ с массивами, индСксация ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… начинаСтся с нуля. Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΎΡ‡Π΅Π½ΡŒ часто Π² API-интСрфСйсах ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Windows ΠΈ Linux, Π° Ρ‚Π°ΠΊΠΆΠ΅ Delphi-Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°Ρ… VCL ΠΈ CLX прСдполагаСтся, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт Π² массивС ΠΈΠΌΠ΅Π΅Ρ‚ индСкс 0. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² языках программирования Π‘, Π‘++ ΠΈ Java индСксация всСх массивов ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ начинаСтся с 0. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈ Windows, ΠΈ Linux Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Π½Π° Π‘ (ΠΈΠ»ΠΈ Π‘++), ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ API-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ считаСтся, Ρ‡Ρ‚ΠΎ индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива Ρ€Π°Π²Π΅Π½ 0.

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, индСксация динамичСских массивов начинаСтся с 0. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΎΡ‡Π΅Π½ΡŒ Π³ΠΈΠ±ΠΊΠΈΠΉ Ρ‚ΠΈΠΏ, Π½Π°Ρ‡ΠΈΠ½Π°ΠΉΡ‚Π΅ Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΡŽ элСмСнтов массивов с 0.

Π’-Ρ‚Ρ€Π΅Ρ‚ΡŒΠΈΡ…, Ссли Π²Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°Π΅Ρ‚Π΅ массивы Π² качСствС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² функциям (скоро ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Π½ΠΈΡŽ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… массивов), Ρ‚ΠΎ функция Low (которая Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива) Π²Π½ΡƒΡ‚Ρ€ΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ 0 нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ массив объявлСн Π²Π½Π΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. (ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ сказанноС Π±Ρ‹Π»ΠΎ справСдливо для всСх вСрсий Delphi Π½Π° ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания ΠΊΠ½ΠΈΠ³ΠΈ; Π² Π±ΡƒΠ΄ΡƒΡ‰ΠΈΡ… вСрсиях, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ Π²Π²Π΅Π΄Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ индСксирования элСмСнтов массивов Π² функциях ΠΏΠΎ Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌ индСксам.)

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, - для основных Ρ‚ΠΈΠΏΠΎΠ² массивов, элСмСнты ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² памяти Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎ, вычислСниС адрСса элСмСнта N (Ρ‚.Π΅. элСмСнта MyArray[N]) Π² случаС индСксации с 0 производится ΠΏΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ:

AddressOfElementN :=

AddressOfArray + (N * sizeof(ElementType));

Если ΠΆΠ΅ индСксация массива начинаСтся с X, Ρ‚ΠΎ адрСс элСмСнта N Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡ‚ΡŒΡΡ Π² соотвСтствии с Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ:

AddressOfElementN :=

AddressOfArray + ((N - X) * sizeof(ElementType));

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, Π² послСднСм случаС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ нСсколько слоТнСС. НСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ вычислСниС адрСса ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ элСмСнта лишь Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ (ΠΎ сниТСнии быстродСйствия ΠΌΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ Π½Π΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ), ΠΏΡ€ΠΈ использовании Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… массивов сниТСниС скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния вслСдствиС Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ индСксация элСмСнтов всСх массивов начинаСтся Π½Π΅ с 0, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ вСсьма сущСствСнной.

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

Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π·Π°ΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Π² использовании массивов Π² качСствС структуры Π΄Π°Π½Π½Ρ‹Ρ…? Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, вычислСниС адрСсов элСмСнтов выполняСтся ΠΎΡ‡Π΅Π½ΡŒ быстро. Как ΡƒΠΆΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΎΡΡŒ, для этого Π½ΡƒΠΆΠ½ΠΎ всСго лишь ΡƒΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ слоТСниС. ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ доступа ΠΊ элСмСнту N (MyArray [N]) компилятор для вычислСния адрСса добавляСт простой ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. НСзависимо ΠΎΡ‚ значСния числа N, Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° для вычислСния адрСса Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ доступа ΠΊ элСмСнту с индСксом N ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ ΠΊ классу ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ O(1) ΠΈ Π½Π΅ зависит ΠΎΡ‚ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρ‹ N.