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

Π Π°Π±ΠΎΡ‚Π° с Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ числовыми массивами

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

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

Π Π°Π±ΠΎΡ‚Π° с Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ числовыми массивами (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

1. ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ

1.1 ΠžΠ±Ρ‰Π΅Π΅ понятиС ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°Ρ…

1.1.1 ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ примСнСния

1.1.2 БпСцифичСскиС Ρ‚ΠΈΠΏΡ‹ массивов

1.1.3 РСализация массивов

1.1.4 Достоинства массивов

1.1.5 НСдостатки массивов

1.2 ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² Object Pascal

1.2.1 БтатичСскиС массивы

1.2.2 ДинамичСскиС массивы

1.2.3 Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ

1.3 ИспользованиС массивов Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

2. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ

2.1 ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

2.2 Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ структура прилоТСния

2.3 ОписаниС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

2.3.1 ΠœΠΎΠ΄ΡƒΠ»ΡŒ MatrixOperations

2.3.2 ΠœΠΎΠ΄ΡƒΠ»ΡŒ fileIO

2.4 ΠœΠΎΠ΄ΡƒΠ»ΡŒ form

3. Эксплуатационная докумСнтация

3.1 ОписаниС примСнСния

3.2 Руководство ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

Π’ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° являСтся Π½Π°Π±ΠΎΡ€ΠΎΠΌ инструкций, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ вычислСниС ΠΈΠ»ΠΈ Π·Π°Π΄Π°Ρ‡Ρƒ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌΡƒΡŽ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠΌ. Π”Π°Π½Π½Ρ‹ΠΌΠΈ ΠΆΠ΅ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎ называСтся всё, Ρ‡Ρ‚ΠΎ Π½Π΅ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Π΅Ρ‚ Π² Ρ€ΠΎΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π’ ΡΠ·Ρ‹ΠΊΠ°Ρ… высокого уровня Π΄Π°Π½Π½Ρ‹Π΅ Π²ΠΎΠΏΠ»ΠΎΡ‰Π°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ….

Часто ΠΏΠ΅Ρ€Π΅Π΄ программистами Π²ΡΡ‚Π°ΡŽΡ‚ Π·Π°Π΄Π°Ρ‡ΠΈ, связанныС с ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΎΠΉ стразу мноТСства Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях ΠΊΡ€Π°ΠΉΠ½Π΅ Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ для хранСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ значСния Π·Π°Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. Для Ρ‚Π°ΠΊΠΎΠΉ ситуации синтаксис ΠΌΠ½ΠΎΠ³ΠΈΡ… языков прСдусматриваСт созданиС массивов — мноТСств ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ осущСствляСтся посрСдством ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ (ΠΈΠΌΠ΅Π½ΠΈ массива) ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… индСксов.

Данная курсовая Ρ€Π°Π±ΠΎΡ‚Π° рассматриваСт ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ использования ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π² ΡΡ€Π΅Π΄Π΅ Delphi. Она дСмонстрируСт использованиС встроСнных возмоТностСй языка, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡˆΠΈΡ€ΠΎΠΊΠΎ извСстных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ массивами, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠ±Ρ…ΠΎΠ΄ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, сортировка, цикличСский сдвиг.

1. ВСорСтичСская Ρ‡Π°ΡΡ‚ΡŒ

1.1 ΠžΠ±Ρ‰Π΅Π΅ понятиС ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°Ρ…

1.1.1 ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ примСнСния

Массив (ΠΈΠ»ΠΈ индСксный массив), это ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, располоТСнных Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ нСпосрСдствСнно Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ, доступ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ осущСствляСтся ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡƒ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… индСксов массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ. ΠœΠ°ΡΡΠΈΠ²Ρ‹ с ΠΎΠ΄Π½ΠΈΠΌ индСксом Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ, с Π΄Π²ΡƒΠΌΡ — Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ ΠΈ Ρ‚. Π΄. ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив нСстрого соотвСтствуСт Π²Π΅ΠΊΡ‚ΠΎΡ€Ρƒ Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅, Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ — ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅. ΠœΠ°ΡΡΠΈΠ²Ρ‹ Ρ…ΠΎΡ€ΠΎΡˆΠΎ подходят для отобраТСния Ρ‚Π°ΠΊΠΈΡ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΌΠΈΡ€Π°, ΠΊΠ°ΠΊ строки (массивы символов), Π½Π°Π±ΠΎΡ€Ρ‹ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, матСматичСскиС мноТСства ΠΈ Π²ΠΎΠΎΠ±Ρ‰Π΅ мноТСства ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

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

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° индСксных массивов (свой синтаксис объявлСния, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΈ Ρ‚. Π΄.) Π΅ΡΡ‚ΡŒ Π² Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ высокоуровнСвых языков программирования. Максимально допустимая Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ массива, Ρ‚ΠΈΠΏΡ‹ ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ индСксов, ограничСния Π½Π° Ρ‚ΠΈΠΏΡ‹ элСмСнтов ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ языком программирования ΠΈ/ΠΈΠ»ΠΈ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ транслятором.

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

1.1.2 БпСцифичСскиС Ρ‚ΠΈΠΏΡ‹ массивов

ДинамичСским называСтся массив, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ исполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Для измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° динамичСского массива язык программирования, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Ρ‚Π°ΠΊΠΈΠ΅ массивы, Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π²ΡΡ‚Ρ€ΠΎΠ΅Π½Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€. ДинамичСскиС массивы Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ Π³ΠΈΠ±ΠΊΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π½Π΅ ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ…Ρ€Π°Π½ΠΈΠΌΡ‹Π΅ ΠΎΠ±ΡŠΡ‘ΠΌΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива Π² ΡΠΎΠΎΡ‚вСтствии с Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ ΠΎΠ±ΡŠΡ‘ΠΌΠ°ΠΌΠΈ. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹Π΅, Π½Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ массивы Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Π΅Ρ‰Ρ‘ статичСскими.

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

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… являСтся ссылкой Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив.

1.1.3 РСализация массивов

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΌ способом Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ статичСских массивов с ΠΎΠ΄Π½ΠΈΠΌ Ρ‚ΠΈΠΏΠΎΠΌ элСмСнтов являСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ:

Под массив выдСляСтся Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ Π±Π»ΠΎΠΊ памяти ΠΎΠ±ΡŠΡ‘ΠΌΠΎΠΌ

S*m1*m2*m3…mn,

Π³Π΄Π΅ S — Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠ΄Π½ΠΎΠ³ΠΎ элСмСнта, Π° m1…mn — Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ΠΎΠ² индСксов (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ количСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ индСкс).

ΠŸΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρƒ массива A[i1, i2, i3, … in] адрСс ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ элСмСнта вычисляСтся ΠΊΠ°ΠΊ

B+S*(i1p*m1+i2p*m2+…+i(n-1)p*mn-1+inp),

Π³Π΄Π΅ B — Π±Π°Π·Π° (адрСс Π½Π°Ρ‡Π°Π»Π° Π±Π»ΠΎΠΊΠ° памяти массива), ikp-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ k-Π³ΠΎ индСкса, ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ ΠΊ Ρ†Π΅Π»ΠΎΠΌΡƒ с Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ смСщСниСм.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, адрСс элСмСнта с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ индСксов вычисляСтся Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎ врСмя доступа ΠΊΠΎ Π²ΡΠ΅ΠΌ элСмСнтам массива ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ ΡΠ·Ρ‹ΠΊΠ° программирования, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΉ индСкс. Π Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‚ Ρ‚Ρ€ΠΈ основных разновидности массивов: с ΠΎΡ‚счСтом ΠΎΡ‚ Π½ΡƒΠ»Ρ (zero-based), с ΠΎΡ‚счСтом ΠΎΡ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ (one-based) ΠΈ Ρ ΠΎΡ‚счСтом ΠΎΡ‚ ΡΠΏΠ΅Ρ†ΠΈΡ„ичСского значСния Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ программистом (n-based).

ΠžΡ‚ΡΡ‡Π΅Ρ‚ индСкса элСмСнта массивов с Π½ΡƒΠ»Ρ Π±ΠΎΠ»Π΅Π΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π΅Π½ для Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Ρ… языков программирования, ΠΎΠ΄Π½Π°ΠΊΠΎ этот ΠΌΠ΅Ρ‚ΠΎΠ΄ Π±Ρ‹Π» популяризирован Π² ΡΠ·Ρ‹ΠΊΠ°Ρ… Π±ΠΎΠ»Π΅Π΅ высокого уровня языком программирования Π‘.

Π‘ΠΎΠ»Π΅Π΅ слоТныС Ρ‚ΠΈΠΏΡ‹ массивов — динамичСскиС ΠΈ Π³Π΅Ρ‚Π΅Ρ€ΠΎΠ³Π΅Π½Π½Ρ‹Π΅ — Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ΡΡ слоТнСС.

1.1.4 Достоинства массивов

Β· Быстрый доступ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌ, ΠΏΡ€ΠΈΡ‡Ρ‘ΠΌ врСмя доступа Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ‚ ΠΎΡ‚ Π΄Π»ΠΈΠ½Ρ‹ массива

Β· Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ располоТСны Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ нСпосрСдствСнно Π΄Ρ€ΡƒΠ³ Π·Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π΅Π³Ρ‡Π°Π΅Ρ‚ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ всСго массива Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ

Β· ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ нСобходимости Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти

1.1.5 НСдостатки массивов

Β· для статичСского массива — отсутствиС Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ, Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ удалСния ΠΈΠ»ΠΈ добавлСния элСмСнта Π±Π΅Π· сдвига Π΄Ρ€ΡƒΠ³ΠΈΡ…

Β· для динамичСского ΠΈ/ΠΈΠ»ΠΈ Π³Π΅Ρ‚Π΅Ρ€ΠΎΠ³Π΅Π½Π½ΠΎΠ³ΠΎ массива — Π±ΠΎΠ»Π΅Π΅ Π½ΠΈΠ·ΠΊΠΎΠ΅ (ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ со ΡΡ‚атичСским) быстродСйствиС ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ динамичСских свойств ΠΈ/ΠΈΠ»ΠΈ гСтСрогСнности.

Β· ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ Π² ΠΎΡ‚сутствиС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… срСдств контроля — ΡƒΠ³Ρ€ΠΎΠ·Π° Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ массива ΠΈ ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΡ «Ρ‡ΡƒΠΆΠΈΡ…» Π΄Π°Π½Π½Ρ‹Ρ…

1.2 ΠœΠ°ΡΡΠΈΠ²Ρ‹ Π² Object Pascal

ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Array ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для опрСдСлСния ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивов Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Object Pascal сущСствуСт Π΄Π²Π° Ρ‚ΠΈΠΏΠ° массивов

1.2.1 БтатичСскиС массивы

Π‘ΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с Π·Π°Ρ€Π°Π½Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΌΠΈ, нСизмСняСмыми Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ. ΠœΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ, ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ — Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС прСдставляя ΠΈΠ· ΡΠ΅Π±Ρ массив массивов (массивов массивов ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅).

Π’Π΅Π»ΠΈΡ‡ΠΈΠ½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ размСрности опрСдСляСтся двумя способами, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ свободно ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива:

Β· Π’ΠΈΠΏ Index, Π³Π΄Π΅ Index — Ρ†Π΅Π»Ρ‹ΠΉ Ρ‚ΠΈΠΏ, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Byte ΠΈΠ»ΠΈ Word. Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Ρ‚ΠΈΠΏΠ° опрСдСляСт Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ размСрности, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 0.255 для Byte

Β· Ordinal.Ordinal. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ нСпосрСдствСнно Π·Π°Π΄Π°Ρ‚ΡŒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ размСрности, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ 12.44.

Β· НапримСр:

1 var

2 wordArray: Array[Word] of Integer; // Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π²Π΅Π½ High (Word)

3 multiArray: Array[Byte, 1.5] of char; // Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив

4 rangeArray: Array[5.20] of string; // Ρ€Π°Π·ΠΌΠ΅Ρ€ Ρ€Π°Π²Π΅Π½ 16

1.2.2 ДинамичСскиС массивы

Π£ Π΄Π»Ρ динамичСских массивов ΠΏΠ°ΠΌΡΡ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅ Π½Π΅ Π²Ρ‹Π΄Π΅Π»ΡΠ΅Ρ‚ся, создаётся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Π£ Ρ‚Π°ΠΊΠΈΡ… массивов Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π΄ использованиСм. НапримСр

SetLength(dynArray, 5);

устанавливаСт Π΄Π»ΠΈΠ½Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠΉ размСрности массива dynArray Π² ΠΏΡΡ‚ΡŒ, ΠΏΡ€ΠΈ этом выдСляСтся нСобходимая ΠΏΠ°ΠΌΡΡ‚ΡŒ. Для всСх динамичСских массивов ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ индСкс Ρ€Π°Π²Π΅Π½ Π½ΡƒΠ»ΡŽ.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Π΅ подмассивы ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ динамичСского массива ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎ ΡΡƒΡ‚ΠΈ ΠΎΠ½ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ массивами.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния динамичСских массивов:

1 var

2 byteArray: Array of Byte; // ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив

3 multiArray: Array of Array of string; // Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив

1.2.3 Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ

Copy (Source: array; StartIndex, Count: Integer): array — создаСт копию части массива.

High (type or variable): Ordinal type — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массива.

Length (const SourceArray: array): Integer — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ число элСмСнтов Π² ΠΌΠ°ΡΡΠΈΠ²Π΅.

Low (type or variable): Ordinal type — Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ниТнюю Π³Ρ€Π°Π½ΠΈΡ†Ρƒ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ массива

SetLength (var ArrayToChange: Array type; Dim1Length: Integer {;Dim2Length: Integer; …}) — измСняСт Ρ€Π°Π·ΠΌΠ΅Ρ€ динамичСского массива. Для ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π΄Π»ΠΈΠ½Ρ‹.

Slice (SourceArray: array; Count: Integer): array — создаСт Ρ‡Π°ΡΡ‚ΡŒ массива для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΅Π³ΠΎ ΠΊΠ°ΠΊ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π² ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ.

ΠŸΡ€ΠΈ использовании динамичСских массивов Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Ρ‹ SetLength Π²Ρ‹Π΄Π΅Π»ΡΡŽΡ‚ для массива Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ послС окончания Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ. Для этого Π΅ΠΌΡƒ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ nil.

1.3 ИспользованиС массивов Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π Π°Π±ΠΎΡ‚Π° со ΡΡ‚атичСскими массивами Π±ΠΎΠ»Π΅Π΅ проста ΠΈ ΠΌΠ΅Π½Π΅Π΅ Π·Π°Ρ‚Ρ€Π°Ρ‚Π½Π° Π² ΠΏΠ»Π°Π½Π΅ использования рСсурсов ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°, Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² Π·Π°Π΄Π°Π½ΠΈΠΈ Π½ΠΈΠ³Π΄Π΅ Π½Π΅ ΠΎΠ³ΠΎΠ²Π°Ρ€ΠΈΠ²Π°ΡŽΡ‚ся ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ исходных ΠΌΠ°Ρ‚Ρ€ΠΈΡ†, Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ принято Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Ρƒ ΠΎΡΠ½ΠΎΠ²Π΅ использования динамичСских массивов.

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

2. ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠ°Ρ Ρ‡Π°ΡΡ‚ΡŒ

2.1 ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ для выполнСния спСцифичСской ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, Π»ΠΈΠ±ΠΎ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ нСпосрСдствСнно Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ интСрфСйса прилоТСния.

Π“Ρ€Π°Π½ΠΈΡ‡Π½Ρ‹Π΅ условия Π½Π° Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‚Π°ΠΊΠΎΠ²Ρ‹:

Β· Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… [1; 2 147 483 647]. Если Π²Π²Π΅Π΄Π΅Π½ΠΎ число, выходящСС ΠΈΠ· ΡΡ‚ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Π»ΠΈΠ±ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ Ρ†Π΅Π»Ρ‹ΠΌ числом, Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ устанавливаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ Π΅Π΄ΠΈΠ½ΠΈΡ†Π΅.

Β· Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… [-2 147 483 648; 2 147 483 647]. Если ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Π»Π΅ΠΆΠΈΡ‚ Π²Π½Π΅ этого Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Π»ΠΈΠ±ΠΎ Π²Π²Π΅Π΄Ρ‘Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ Ρ†Π΅Π»Ρ‹ΠΌ числом, Ρ‚ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ устанавливаСтся Ρ€Π°Π²Π½Ρ‹ΠΌ Π½ΡƒΠ»ΡŽ.

Β· Π’ Π·Π°Π΄Π°Π½ΠΈΡΡ…, связанных с ΠΏΠΎΠ΄ΡΡ‡Ρ‘Ρ‚ΠΎΠΌ сумм элСмСнтов, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚ Π»Π΅ΠΆΠ°Ρ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… [-9 223 372 036 854 775 808; 9 223 372 036 854 775 808]. Если сумма Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° ΡΡ‚ΠΈ ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½.

2.2 Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Π°Ρ структура ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π° Π½Π° Ρ‚Ρ€ΠΈ модуля:

MatrixOperations — Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ΠΉ

fileIO — сохранСниС ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Ρ„Π°ΠΉΠ»/ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

form — Ρ„ΠΎΡ€ΠΌΠ° прилоТСния, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ массивами ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΡ‹. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° связСй ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ Ρ‚Π°ΠΊΠΎΠ²Π°:

2.3 ОписаниС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ

2.3.1 ΠœΠΎΠ΄ΡƒΠ»ΡŒ MatrixOperations

Π­Ρ‚ΠΎ основной ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, содСрТащий ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ для выполнСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, прСдусмотрСнных Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ.

ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ повсСмСстно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Ρ‚ΠΈΠΏΡ‹ «ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°» ΠΈ «Π²Π΅ΠΊΡ‚ΠΎΡ€»:

1 type

2 TVector = array of integer;

3 TMatrix = array of TVector;

Поиск ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅.

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° GetMaxVals, которая, пСрСбирая всС строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт, записываСт Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΠΌΠ°ΡΡΠΈΠ² maxVal, Π° Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€ столбца Π² ΠΌΠ°ΡΡΠΈΠ² maxValCol. ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° выдСляСт Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡƒΡŽ Π½Π°ΠΌΡΡ‚ΡŒ для этих массивов. Листинг:

1 {

2 Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅Ρ‚ массив ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов maxVal ΠΈ ΠΌΠ°ΡΡΠΈΠ² Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² столбцов,

3 содСрТащих ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты maxValCol Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ arr

4 }

5 procedure GetMaxVals (var maxVal, maxValCol: TVector; const arr: TMatrix);

6 var

7 RowN, ColN, maxInRow: integer;

8 begin

9 //Π²Ρ‹Π΄Π΅Π»ΠΈΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ массива ΠΎΠ±ΡŠΡ‘ΠΌ памяти

10 SetLength (maxVal, high (arr)+1);

11 SetLength (maxValCol, high (arr)+1);

12 for RowN:= low (arr) to high (arr) do

13 begin//для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки

14 maxVal[RowN]: = low (integer);//ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ -2 147 483 648

15 maxValCol[RowN]: = -1;//ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π½ΠΎΠΌΠ΅Ρ€ столбца с ΠΌΠ°ΠΊΡ элСмСнтом -1

16 for ColN:= low (arr[RowN]) to high (arr[RowN]) do

17 begin//для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ столбца

18 if arr[RowN, ColN] > maxVal[RowN] then

19 begin//Ссли элСмСнт большС макс значСния, Ρ‚ΠΎ

20 maxVal[RowN]: = arr[RowN, ColN]; //максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ приравняСм элСмСнту

21 maxValCol[RowN]: = ColN;//Π½ΠΎΠΌΠ΅Ρ€ столбца приравняСм Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ столбцу

22 end;

23 end;

24 end;

25 end;

Π‘ΡƒΠΌΠΌΡ‹ элСмСнтов ΠΌΠ΅ΠΆΠ΄Ρƒ диагоналями

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

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ GetSumAbove ΠΈ GetSumBelow проходят ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹ строк ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки высчитывая Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ столбцов, ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½ΡƒΠΆΠ½ΠΎ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты:

1 {Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сумму элСмСнтов Π²Ρ‹ΡˆΠ΅ пСрСсСчСния Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»Π΅ΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ arr}

2 function GetSumAbove (const arr: TMatrix): Int64;

3 var

4 RowN, ColN: integer;

5 lastColumn: integer;//Π½ΠΎΠΌΠ΅Ρ€ столбца, содСрТащСго элСмСнт дальнСй Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ минус 1

6 begin

7 Result:= 0;

8 for RowN:= 0 to (high (arr) div 2) do

9 begin//с Π½ΡƒΠ»Π΅Π²ΠΎΠΉ, ΠΏΠΎ ΡΡ€Π΅Π΄ΡŽΡŽ строку

10 lastColumn:= high (arr)-RowN-1;//ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π½ΠΎΠΌΠ΅Ρ€ столбца послСднСго элСмСнта, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ

11 //Ссли число столбцов мСньшС числа строк, Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ столбСц ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π±Π»ΠΈΠΆΠ΅

12 if lastColumn > high (arr[RowN]) then lastColumn:= high (arr[RowN]);

13 for ColN:= RowN+1 to lastColumn do //просуммируСм элСмСнты Π² Π²Ρ‹ΡΡ‡ΠΈΡ‚Π°Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ…

14 Result:= Result + arr[RowN, ColN];

15 end;

16 end;

17 {Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сумму элСмСнтов Π½ΠΈΠΆΠ΅ пСрСсСчСния Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»Π΅ΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ arr}

18 function GetSumBelow (const arr: TMatrix): Int64;

19 var

20 RowN, ColN: integer;

21 lastColumn: integer;//Π½ΠΎΠΌΠ΅Ρ€ столбца, содСрТащСго элСмСнт дальнСй Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ минус 1

22 begin

23 Result:= 0;

24 for RowN:= (high (arr) div 2)+1 to high (arr) do

25 begin//со срСднСй ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡŽΡŽ строку

26 lastColumn:= RowN-1;//ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π½ΠΎΠΌΠ΅Ρ€ столбца послСднСго элСмСнта, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ

27 //Ссли число столбцов мСньшС числа строк, Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ столбСц ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π±Π»ΠΈΠΆΠ΅

28 if lastColumn > high (arr[RowN]) then lastColumn:= high (arr[RowN]);

29 for ColN:= high (arr)-RowN+1 to lastColumn do //просуммируСм элСмСнты Π² Π²Ρ‹ΡΡ‡ΠΈΡ‚Π°Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ…

30 Result:= Result + arr[RowN, ColN];

31 end;

32 end;

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° SwapAboveBelow Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠ°ΠΊ функция GetSumAbove, опрСдСляСт, ΠΊΠ°ΠΊΠΈΠ΅ элСмСнты Π»Π΅ΠΆΠ°Ρ‚ Π²Ρ‹ΡˆΠ΅ пСрСсСчСния Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»Π΅ΠΉ, Π½ΠΎ Π½Π΅ ΡΡƒΠΌΠΌΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ…, Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ мСняСт мСстами с ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ столбца, симмСтричным Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌΡƒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ ΠΈ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ† ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Для смСны ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° swap для Ρ†Π΅Π»Ρ‹Ρ… чисСл, опрСдСлённая Π² ΡΡ‚ΠΎΠΌ ΠΆΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π΅:

1 {Π²ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°: ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами Π΄Π²Π° Ρ†Π΅Π»Ρ‹Ρ… числа}

2 procedure swap (var first, second: integer);

3 var tmp: integer;

4 begin

5 tmp:= first;

6 first:= second;

7 second:= tmp;

8 end;

9 {ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами элСмСнты Π²Ρ‹ΡˆΠ΅ ΠΈ Π½ΠΈΠΆΠ΅ пСрСсСчСния Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»Π΅ΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ arr}

10 procedure SwapAboveBelow (var arr: TMatrix);

11 var

12 RowN, ColN: integer;

13 lastColumn: integer;//Π½ΠΎΠΌΠ΅Ρ€ столбца, содСрТащСго элСмСнт дальнСй Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»ΠΈ минус 1

14 begin

15 for RowN:= 0 to (high (arr) div 2) do

16 begin//с Π½ΡƒΠ»Π΅Π²ΠΎΠΉ, ΠΏΠΎ ΡΡ€Π΅Π΄ΡŽΡŽ строку

17 lastColumn:= high (arr)-RowN-1;//ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ Π½ΠΎΠΌΠ΅Ρ€ столбца послСднСго элСмСнта, ΠΏΠΎΠ΄Π»Π΅ΠΆΠ°Ρ‰Π΅Π³ΠΎ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ

18 //Ссли число столбцов мСньшС числа строк, Ρ‚ΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ столбСц ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π±Π»ΠΈΠΆΠ΅

19 if lastColumn > high (arr[RowN]) then lastColumn:= high (arr[RowN]);

20 for ColN:= RowN+1 to lastColumn do//для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² Π²Ρ‹ΡΡ‡ΠΈΡ‚Π°Π½Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ…

21 //помСняСм Π΅Π³ΠΎ мСстами с ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠΌ Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ столбца, отстаящСм Π½Π° Ρ‚ΠΎ ΠΆΠ΅ число строк, Π½ΠΎ ΠΎΡ‚ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

22 swap (arr[RowN, ColN], arr[high (arr) — RowN, ColN]);

23 end;

24 end;

ЦикличСский сдвиг строк

Π”Π°Π»Π΅Π΅ функция CircuarShift, ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‰Π°Ρ цикличСский сдвиг строк ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π²Π²Π΅Ρ€Ρ…, ΠΈΠ»ΠΈ Π²Π½ΠΈΠ·. НаправлСниС сдвига опрСдСляСтся Π±ΡƒΠ»Π΅Π²Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ shiftUp, ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΌ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅:

1 {

2 осущСствляСт цикличСский сдвиг строк ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ arr Π²Π²Π΅Ρ€Ρ… ΠΏΡ€ΠΈ shiftUp = true,

3 ΠΈ Π²Π½ΠΈΠ·, ΠΏΡ€ΠΈ shiftUp = false

4 }

5 procedure CircuarShift (var arr: TMatrix; shiftUp: boolean);

6 var

7 RowN: integer;

8 tmpRow: TVector;//врСмСнная пСрСмСнная для хранСния строки ΠΈΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

10 begin

12 if high (arr) < 1 then exit;//Ссли Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ мСньшС Π΄Π²ΡƒΡ… строк — Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ

13 if shiftUp then

14 begin//Ссли сдвиг Π²Π²Π΅Ρ€Ρ…

15 tmpRow:= arr[high (arr)]; //сохраним послСднюю строку ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

16 arr[high (arr)]: = arr[0]; //приравняСм послСднюю строку ΠΏΠ΅Ρ€Π²ΠΎΠΉ

17 for rowN:= 0 to high (arr)-2 do

18 begin//для строк с Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΠΏΠΎ ΠΏΡ€Π΅Π΄-ΠΏΡ€Π΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½ΡŽΡŽ

19 arr[rowN]: = arr[rowN+1]; //тСкущая строка Ρ€Π°Π²Π½Π° Π½ΠΈΠΆΠ½Π΅ΠΉ

20 end;

21 arr[high (arr)-1]: = tmpRow;//ΠΏΡ€Π΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½ΡŽΡŽ строку приравняСм послСднСй

22 end

23 else

24 begin//ΠΈΠ½Π°Ρ‡Π΅, Ссли сдвиг Π²Π½ΠΈΠ·

25 tmpRow:= arr[0]; //сохраним Π½ΡƒΠ»Π²ΡƒΡŽ строку

26 arr[0]: = arr[high (arr)]; //приравняСм Π½ΡƒΠ»Π΅Π²ΡƒΡŽ строку послСднСй

27 for rowN:= high (arr) downto 2 do

28 begin//для строк с ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΡƒΡŽ

29 arr[RowN]: = arr[RowN-1]; //тСкущая строка Ρ€Π°Π²Π½Π° Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ

30 end;

31 arr[1]: = tmpRow;//ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку приравняСм Π½ΡƒΠ»Π΅Π²ΠΎΠΉ

32 end;

33 end;

«Π Π°Π·Π²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Π½ΠΈΠ΅» ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

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

1 //пСрСчислСниС — направлСния

2 type TDirection = (down, right, up, left);

4 {ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ arr ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки ΠΈ Π½Π°ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ элСмСнтами массив res}

5 procedure UnwindMatrix (const arr: TMatrix; var res: TVector);

6 var

7 count, cur: integer;//число элСмСнтов Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ ΠΈ ΡΡ‡Ρ‘Ρ‚Ρ‡ΠΈΠΊ элСмСнтов

9 RowN, ColN: integer;

10 leftB, bottomB, rightB, topB: integer;//Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΎΠ±Ρ…ΠΎΠ΄Π° — ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»Π½ΠΎΠΉ строки ΠΈΠ»ΠΈ столбца

11 direction: TDirection;//Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ±Ρ…ΠΎΠ΄Π°

13 begin

14 if (length (arr) = 0) or (length (arr[0]) = 0) then exit;//Ссли Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ Π½Π΅Ρ‚ элСмСнтов — Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ

15 count:= length (arr) * length (arr[0]);//подсчитаСм число элСмСнтов Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅

16 SetLength (res, count);//Π²Ρ‹Π΄Π΅Π»ΠΈΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ для хранСния всСх элСмСнтов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

18 //Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ условия ΠΎΠ±Ρ…ΠΎΠ΄Π°: Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт [0,0], Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ с Π³Ρ€Π°Π½ΠΈΡƒΡ†Π°ΠΌΠΈ ΠΌΠ°Ρ‚Ρ€ΠΈΡ‹, Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ — Π²Π½ΠΈΠ·

19 direction:= down;

20 RowN:= 0;

21 ColN:= 0;

22 leftB:= 0;

23 bottomB:= high (arr);

24 rightB:= high (arr[0]);

25 topB:= 0;

27 for cur:= 0 to count-1 do

28 begin//ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΡ€ΠΎΠΉΠ΄Ρ‘ΠΌ count элСмСнтов

29 res[cur]: = arr[RowN, ColN]; //добавляСм Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт Π² ΠΌΠ°ΡΡΠΈΠ²

30 //дальнСнйшиС дСйствия зависят ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ направлСния ΠΎΠ±Ρ…ΠΎΠ΄Π°

31 case direction of

32 down://Ссли вниз

33 if RowN < bottomB then inc (RowN)//Ссли Π½Π΅ Π΄ΠΎΡˆΠ»ΠΈ Π΄ΠΎ Π½ΠΈΠΆΠ½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ — сдвигаСмся Π²Π½ΠΈΠ·

34 else

35 begin//ΠΈΠ½Π°Ρ‡Π΅ — ΠΏΡ€ΠΎΡˆΠ»ΠΈ Π»Π΅Π²Ρ‹ΠΉ столбСц

36 direction:= right;//смСним Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° «Π²ΠΏΡ€Π°Π²ΠΎ»

37 inc (leftB);//сдвинСм Π»Π΅Π²ΡƒΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ

38 inc (ColN);//сдвинСмся Π²ΠΏΡ€Π°Π²ΠΎ

39 end;

41 right://Ссли Π²ΠΏΡ€Π°Π²ΠΎ

42 if ColN < rightB then inc (ColN)//Ссли Π½Π΅ Π΄ΠΎΡˆΠ»ΠΈ Π΄ΠΎ ΠΏΡ€Π°Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ — сдвигаСмся Π²ΠΏΡ€Π°Π²ΠΎ

43 else

44 begin//ΠΈΠ½Π°Ρ‡Π΅ — ΠΏΡ€ΠΎΡˆΠ»ΠΈ ниТнюю строку

45 direction:= up;//смСним Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° «Π²Π²Π΅Ρ€Ρ…»

46 dec (bottomB);//сдвинСм ниТнюю Π³Ρ€Π°Π½ΠΈΡ†Ρƒ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ

47 dec (RowN);//сдвинСмся Π²Π²Π΅Ρ€Ρ…

48 end;

50 up://Ссли Π²Π²Π΅Ρ€Ρ…

51 if RowN > topB then dec (RowN)//Ссли Π½Π΅ Π΄ΠΎΡˆΠ»ΠΈ Π΄ΠΎ Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ — сдвигаСмся Π²Π²Π΅Ρ€Ρ…

52 else

53 begin//ΠΈΠ½Π°Ρ‡Π΅ — ΠΏΡ€ΠΎΡˆΠ»ΠΈ ΠΏΡ€Π°Π²Ρ‹ΠΉ столбСц

54 direction:= left;//смСним Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° «Π²Π»Π΅Π²ΠΎ»

55 dec (rightB);//сдвинСм ΠΏΡ€Π°Π²ΡƒΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ

56 dec (ColN);//сдвинСмся влСво

57 end;

59 left://Ссли влСво

60 if ColN > leftB then dec (ColN)//Ссли Π½Π΅ Π΄ΠΎΡˆΠ»ΠΈ Π΄ΠΎ Π»Π΅Π²ΠΎΠΉ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ — сдвигаСмся Π²Π»Π΅Π²ΠΎ

61 else

62 begin//ΠΈΠ½Π°Ρ‡Π΅ — ΠΏΡ€ΠΎΡˆΠ»ΠΈ Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ строку

63 direction:= down;//смСним Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° «Π²Π½ΠΈΠ·»

64 inc (topB);//сдвинСм Π²Π΅Ρ€Ρ…Π½ΡŽΡŽ Π³Ρ€Π°Π½ΠΈΡ†Ρƒ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ

65 inc (RowN);//сдвинСмся вниз

66 end;

67 end;

68 end;

69 end;

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° строк ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

НаконСц упорядочиваниС строк ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ суммы элСмСнтов ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки. Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Π°Ρ функция getRowSum Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сумму элСмСнтов Π·Π°Π΄Π°Π½Π½ΠΎΠΉ строки:

1 {Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ сумму элСмСнтов RowN-ΠΎΠΉ строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ arr}

2 function getRowSum (const arr: TMatrix; RowN: integer): Int64;

3 var ColN: integer;

4 begin

5 Result:= 0;

6 if RowN > high (arr) then exit;//Ссли Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ Π½Π΅Ρ‚ RowN-ΠΎΠΉ строки — Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ

7 for ColN:= 0 to high (arr[RowN]) do//суммируСм элСмСнты строки

8 Result:= Result + arr[RowN, ColN];

9 end;

Π‘Π°ΠΌΠ° сортировка осущСствляСтся посрСдством ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ SortRows. Π‘Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ прямой вставки, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ число строк Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ Π½Π΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ся большим, Π° ΡΡ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ эффСктивСн Π½Π° Π½Π΅Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π½Π°Π±ΠΎΡ€Π°Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. Π’ Π»ΡŽΠ±ΠΎΠΌ случаС сортировка осущСствляСтся быстро, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π΅ мСст строк Π½Π΅ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π½ΠΎ ΠΏΡ€ΠΎΡΡ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ мСстами ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ. Листинг этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

1 {сортируСт строки ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ сумм элСмСнтов ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки}

2 procedure SortRows (var arr: TMatrix);

3 var

4 i, k: integer;//ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сортировки

5 tmpRow: TVector;//врСмСнная пСрСмСнная для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сортировки

6 begin

7 //Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ прямой вставки

8 for i:= 1 to high (arr) do

9 begin//для строк с ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½ΡŽΡŽ

10 k:= i;//начиная с Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строки

11 while (k > 0) and (getRowSum (arr, k) > getRowSum (arr, k-1)) do

12 begin//ΠΏΠΎΠΊΠ° Π½Π΅ Π΄ΠΎΡˆΠ»ΠΈ Π΄ΠΎ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ строки, ΠΈ ΡΡƒΠΌΠΌΠ° строки Π½Π°Π΄ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строкой большС Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ суммы

13 swap (arr[k-1], arr[k]);//помСняСм Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ строку ΠΈ ΡΡ‚Ρ€ΠΎΠΊΡƒ Π½Π°Π΄ Π½Π΅ΠΉ мСстами

14 dec (k);//сдвинСмся Π²Π²Π΅Ρ€Ρ…

15 end;

16 end;

17 end;

2.3.2 ΠœΠΎΠ΄ΡƒΠ»ΡŒ fileIO

Π­Ρ‚ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ содСрТит ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ для Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° ΠΌΠ°Ρ‚Ρ€ΠΈΡ†. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ тСкстовыС Ρ„Π°ΠΉΠ»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ/записи.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π°, содСрТащСго ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Ρ‚Π°ΠΊΠΎΠ²: ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° записана построчно, начиная с ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки, элСмСнты Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС записаны слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ ΠΈ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ количСством ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ². ИмСнно Ρ‚Π°ΠΊΠΎΠΉ Ρ„Π°ΠΉΠ» создаёт ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Write2DArray:

1 {

2 записываСт ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ arr Π² Ρ‚Скстовый Ρ„Π°ΠΉΠ» outFile. Π€Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ

3 ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚

4 }

5 procedure Write2DArray (const arr: TMatrix; const outFile: TextFile);

6 var

7 rowN, colN: integer;

8 begin

9 for rowN:= low (arr) to high (arr) do

10 begin

11 for colN:= low (arr[rowN]) to high (arr[rowN]) do

12 begin

13 //ΡˆΠΈΡ€ΠΈΠ½Π° поля 12, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ -2 147 483 648 — 11 символов

14 Write (outFile, arr[rowN, colN]: 12);

15 end;

16 Writeln (outFile);

17 end;

18 end;

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Read2DArray Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» ΠΏΠΎ ΡΡ‚Ρ€ΠΎΠΊΠ°ΠΌ, разбирая ΠΊΠ°ΠΆΠ΄ΡƒΡŽ строку Π½Π° ΠΏΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ° ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ExtractStrings:

1 { Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ arr ΠΈΠ· Ρ‚Скстового Ρ„Π°ΠΉΠ»Π° inFile. Π€Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ

2 ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚}

3 procedure Read2DArray (var arr: TMatrix; const inFile: TextFile);

4 var

5 rowN, colN: integer;

6 colCount: integer; //максимальноС количСство чисСл Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅ (число столбцов ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹)

7 lineStr: string; //тСкущая строка

8 strNumbers: TStringList;//тСкущая строка, раздСлённая Π½Π° ΠΏΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ

9 begin

10 rowN:= 0;

11 colCount:= 0;

12 strNumbers:= TStringList. Create;

13 arr:= nil;

14 while not Eof (inFile) do

15 begin

16 Readln (inFile, lineStr);

17 strNumbers. Clear;

18 ExtractStrings ([' '], [], PChar (lineStr), strNumbers); //Ρ€Π°Π·Π΄Π΅Π»ΠΈΠΌ ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ Π½Π° ΠΏΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠΈ

19 if colCount < strNumbers. Count then colCount:= strNumbers. Count;

20 SetLength (arr, rowN+1, colCount);//Π²Ρ‹Π΄Π΅Π»ΠΈΠΌ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ Π½ΠΎΠ²ΡƒΡŽ строку

21 for colN:= 0 to strNumbers. Count-1 do //для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ числа Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅

22 arr[rowN, colN]: = StrToIntDef (strNumbers[colN], 0);

23 Inc (rowN);

24 end;

25 strNumbers. Destroy;

26 end;

2.3.3 ΠœΠΎΠ΄ΡƒΠ»ΡŒ form

ΠœΠΎΠ΄ΡƒΠ»ΡŒ, содСрТащий Ρ„ΠΎΡ€ΠΌΡƒ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для хранСния исходной ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ синхронизации содСрТания ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΠΎΡ€ΠΌΡ‹, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ задания Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹.

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

ОпишСм Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Ρ„ΠΎΡ€ΠΌΡ‹. ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ReadMatrix осущСствляСт Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ исходных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ Π² Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив. ΠŸΠ΅Ρ€Π΅Π΄ Π½Π°Ρ‡Π°Π»ΠΎΠΌ чтСния ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° устанавливаСт Ρ€Π°Π·ΠΌΠ΅Ρ€ массива:

1 {Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π² ΡΠΎΠΎΡ‚вСтствии с ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅}

2 procedure TMainForm. ReadMatrix;

3 var rowN, colN: integer;

4 begin

5 SetLength (workMatrix, G_Matrix.RowCount-1, G_Matrix.ColCount-1);

6 for rowN:= 0 to G_Matrix.RowCount-2 do

7 for colN:= 0 to G_Matrix.ColCount-2 do

8 workMatrix[rowN, colN]: = StrToIntDef (G_Matrix.Cells[colN+1, rowN+1], 0);

9 end;

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° writeMatrix осущСствляСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ, ΠΎΠ½Π° заполняСт поля Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² ΡΠΎΠΎΡ‚вСтствии с ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ. ΠšΡ€ΠΎΠΌΠ΅ этого ΠΎΠ½Π° мСняСт значСния числа строк ΠΈ ΡΡ‚ΠΎΠ»Π±Ρ†ΠΎΠ² Π² ΡΠΎΠΎΡ‚вСтствии с Ρ€Π°Π·ΠΌΠ΅Ρ€Π°ΠΌΠΈ массива:

1 {Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ Π² ΡΠΎΠΎΡ‚вСтствии с ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹}

2 procedure TMainForm. writeMatrix;

3 var rowN, colN: integer;

4 begin

5 G_Matrix.Cells[1, 1]: = '';//Ссли ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° пуста

6 E_RowsN.Text:= IntToStr (high (workMatrix) + 1);

7 if (E_RowsN.Text <> '0') then

8 E_ColsN.Text:= IntToStr (high (workMatrix[low (workMatrix)]) + 1)

9 else E_ColsN.Text:= '0';

10 B_SetDimmsClick (self);

11 //Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ

12 for rowN:= low (workMatrix) to high (workMatrix) do

13 for colN:= low (workMatrix[rowN]) to high (workMatrix[rowN]) do

14 G_Matrix.Cells[colN+1, rowN+1]: = IntToStr (workMatrix[rowN, colN]);

15 end;

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° B_SetDimmsClick являСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ «Π·Π°Π΄Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹». Она провСряСт, Π½Π΅ ΡΡ‚Π°Π»ΠΈ Π»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ мСньшС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, мСняСт число строк ΠΈ ΡΡ‚ΠΎΠ»Π±Ρ†ΠΎΠ² Π² Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… Ρ„ΠΎΡ€ΠΌΡ‹, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ проставляСт Π½ΠΎΠΌΠ΅Ρ€Π° строк ΠΈ ΡΡ‚ΠΎΠ»Π±Ρ†ΠΎΠ²:

1 {ΠΎΠ±Ρ€Π°ΡŽΠΎΡ‚Ρ‡ΠΈΠΊ уствновки Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹}

2 procedure TMainForm. B_SetDimmsClick (Sender: TObject);

3 var

4 i: integer;

5 RowsN, ColsN: integer;

6 begin

7 //значСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ мСньшС 1

8 RowsN:= StrToIntDef (E_RowsN.Text, 0);

9 if RowsN < 1 then begin RowsN:= 1; E_RowsN.Text:= '1' end;

10 ColsN:= StrToIntDef (E_ColsN.Text, 0);

11 if ColsN < 1 then begin ColsN:= 1; E_ColsN.Text:= '1' end;

12 //число строк ΠΈ ΡΡ‚ΠΎΠ»Π±Ρ†ΠΎΠ² Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, учитывая ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ ΠΈ ΡΡ‚Ρ€ΠΎΠΊΡƒ с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ

13 G_Matrix.RowCount:= RowsN + 1;

14 G_Matrix.ColCount:= ColsN + 1;

15 //Π² этих Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ задания

16 G_Task1B.RowCount:= RowsN;

17 G_Task1C.RowCount:= RowsN;

18 //ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚ΠΎΠ³ΠΎ задания ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ, Ρ€Π°Π²Π½ΡƒΡŽ числу элСмСнтов исходной ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

19 G_Task4.ColCount:= RowsN * ColsN;

20 //расставим Π½ΠΎΠΌΠ΅Ρ€Π° строк ΠΈ ΡΡ‚ΠΎΠ»Π±Ρ†ΠΎΠ²

21 for i:= 0 to RowsN do

22 begin

23 G_Matrix.Cells[0, i+1]: = IntToStr (i+1);

24 G_Task1B.Cells[0, i]: = IntToStr (i+1);

25 G_Task1C.Cells[0, i]: = IntToStr (i+1);

26 end;

27 for i:= 0 to ColsN do

28 G_Matrix.Cells[i+1, 0]: = IntToStr (i+1);

29 for i:= 0 to RowsN * ColsN do

30 G_Task4.Cells[i, 0]: = IntToStr (i+1);

31 G_Matrix.Refresh;

32 end;

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° FormDestroy выполняСтся ΠΏΡ€ΠΈ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ΠΈΠΈ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ΅Ρ‚ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ — освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая Π²Ρ‹Π΄Π΅Π»ΡΠ»Π°ΡΡŒ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния ΠΏΠΎΠ΄ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ исходных Π΄Π°Π½Π½Ρ‹Ρ….

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° saveClick являСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠΌ Ρ‰Π΅Π»Ρ‡ΠΊΠ° ΠΏΠΎ ΠΏΡƒΠ½ΠΊΡ‚Ρƒ мСню Π€Π°ΠΉΠ»->Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ. Она ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΄ΠΈΠ°Π»ΠΎΠ³ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° для сохранСния, создаёт Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ», Π° ΠΏΠΎΡΠ»Π΅ окончания записи Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ:

1 {ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π€Π°ΠΉΠ»->Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ}

2 procedure TMainForm. saveClick (Sender: TObject);

3 var

4 outFile: TextFile;

5 begin

6 //ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° для сохранСния, Ссли ΠΎΡ‚ΠΌΠ΅Π½Π° — Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ

7 if SaveDialog. Execute = false then exit;

8 AssignFile (outFile, SaveDialog. Files[0]);

9 ReWrite (outFile);//создадим Ρ„Π°ΠΉΠ»

10 readMatrix;//ΠΏΡ€ΠΎΡ‡Ρ‚Ρ‘ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

11 Write2DArray (workMatrix, outFile);//запишСм ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π² Ρ„Π°ΠΉΠ»

12 CloseFile (outFile);//Π·Π°ΠΊΡ€ΠΎΠ΅ΠΌ Ρ„Π°ΠΉΠ».

ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° loadClick Π²Π΅Π΄Ρ‘Ρ‚ сСбя Ρ‚Π°ΠΊ ΠΆΠ΅, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅ ΡΠΎΠ·Π΄Π°Ρ‘Ρ‚ Ρ„Π°ΠΉΠ», Π° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π΅Π³ΠΎ для чтСния:

1 {ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π€Π°ΠΉΠ»->Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ}

2 procedure TMainForm. loadClick (Sender: TObject);

3 var

4 inFile: TextFile;

5 begin

6 //ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°Π»Π° для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Ссли ΠΎΡ‚ΠΌΠ΅Π½Π° — Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ

7 if OpenDialog. Execute = false then exit;

8 AssignFile (inFile, OpenDialog. Files[0]);

9 Reset (inFile);//ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ Ρ„Π°ΠΉΠ» ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ

10 Read2DArray (workMatrix, inFile);//ΠΏΡ€ΠΎΡ‡Ρ‚Ρ‘ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

11 writeMatrix;//ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ

12 CloseFile (inFile);//Π·Π°ΠΊΡ€ΠΎΠ΅ΠΌ Ρ„Π°ΠΉΠ»

13 end;

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

2.4 ОписаниС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° исходных Ρ„Π°ΠΉΠ»ΠΎΠ²

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π° Π² ΠΈΡΡ…ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ прСдставляСтся Π² Ρ‚Скстовом Π²ΠΈΠ΄Π΅. КаТдая строка ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ начинаСтся с Π½ΠΎΠ²ΠΎΠΉ строки. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт строки ΠΎΡ‚Π΄Π΅Π»Ρ‘Π½ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌ числом ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ² ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ прСдставлСн Ρ†Π΅Π»Ρ‹ΠΌ числом, Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [-2 147 483 648; 2 147 483 647]. Если ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ элСмСнт Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ этого Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, Π»ΠΈΠ±ΠΎ Π½Π΅ ΡΠ²Π»ΡΠ΅Ρ‚ся Ρ†Π΅Π»Ρ‹ΠΌ числом, Ρ‚ΠΎ ΠΎΠ½ ΠΈΠ½Ρ‚СрпрСтируСтся ΠΊΠ°ΠΊ ноль.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ составлСнного исходного Ρ„Π°ΠΉΠ»Π°:

100 000 10 000 20 000 40 000 -4000

50 100 -20 1000 2000

— 100 -50 -20 0 20

— 1000 -200 200 2 12

4000 -100 000 -40 000 -10 000 80 000

3. Эксплуатационная докумСнтация

3.1 ОписаниС примСнСния

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для выполнСния ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠ³ΠΎ Π½Π°Π±ΠΎΡ€Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π°Π΄ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°ΠΌΠΈ. ОписаниС ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ Π² ΠΈΠ½Ρ‚СрфСйсС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для исполнСния Π½Π° IBM-совмСстимых ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ… с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой Windows (тСстированиС ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π½Π° Windows XP).

ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ систСмныС трСбования:

Β· ДисплСй с Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ 1024×768

Β· ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°

Β· 10 ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ свободной ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти ВрСбования прилоТСния ΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти сильно зависят ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹. Π‘ΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ трСбованиям ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ смоТСт ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ста элСмСнтов.

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

Π’Ρ‹Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ Π² ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ… Ρ„ΠΎΡ€ΠΌΡ‹, располоТСнных Π½Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ заданию Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ (смотритС руководство ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°)

3.2 Руководство ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°

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

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ:

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ № 1:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ № 1:

ΠŸΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ Π·Π°Π΄Π°Ρ‡Π΅ № 3:

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ № 3:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π΄Π²ΡƒΠΊΡ€Π°Ρ‚Π½ΠΎΠ³ΠΎ выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ № 3:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ № 2:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ № 5:

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π·Π°Π΄Π°Ρ‡ΠΈ № 4:

Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² Ρ„Π°ΠΉΠ»:

Π—Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ сохранённого Ρ„Π°ΠΉΠ»Π°:

100 000 10 000 20 000 40 000 -4000

50 100 -20 1000 2000

— 100 -50 -20 0 20

— 1000 -200 200 2 12

4000 -100 000 -40 000 -10 000 80 000

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

Π”Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ динамичСский массив — ΠΎΡ‡Π΅Π½ΡŒ удобная конструкция для прСдставлСния ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹, Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π²ΠΎ Π²Ρ€Π΅ΠΌΡ написания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ ΠΈΠ·Π²Π΅ΡΡ‚Π½Ρ‹. Но ΠΏΡ€ΠΈ Π΅Π³ΠΎ использовании Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ остороТным ΠΈ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ особСнности:

Β· ΠŸΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ SetLength с ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ массива (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΎ число строк Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅), ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ размСрности Π·Π°Ρ‚Ρ€ΠΎΠ½ΡƒΡ‚Ρ‹ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ (Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΉ строкС Π±ΡƒΠ΄Π΅Ρ‚ ноль элСмСнтов).

Β· ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ подмассив ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свою Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, каТдая строка ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ Π² ΠΎΠ±Ρ‰Π΅ΠΌ Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π΄Π»ΠΈΠ½Ρƒ, ΠΎΡ‚Π»ΠΈΡ‡Π½ΡƒΡŽ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ…)

Β· НСобходимо всСгда Π·Π½Π°Ρ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ размСрности, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ Π²Ρ‹ΠΉΡ‚ΠΈ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ массива Π² Ρ‡ΡƒΠΆΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. Для этого ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ low ΠΈ high.

Β· НСобходимо всСгда ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ динамичСски Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Β· ΠŸΡ€ΠΈ присваивании динамичСских массивов копирования Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚, ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°ΡŽΡ‚ΡΡ лишь ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, послС присваивания Π΄Π²Π° массива Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ копию массива, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Copy.

Β· Copy ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ Π½Π΅ Π²Π΅ΡΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив, Π½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π½ΠΎΡΡ‚ΡŒ.

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1. ВСстовыС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹

ВСст 1: ΠšΠ²Π°Π΄Ρ€Π°Ρ‚Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 5x5.

Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°:

— 100 -50 -20 0 20

50 100 200 1000 2000

4000 10 000 20 000 40 000 80 000

100 000 -100 000 -40 000 -10 000 -4000

— 1000 -200 -20 2 12

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ задания:

ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΏΠΎ ΡΡ‚Ρ€ΠΎΠΊΠ°ΠΌ: 20; 2000; 80 000; 100 000; 12

Π‘Ρ‚ΠΎΠ»Π±Ρ†Ρ‹ с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ элСмСнтами: 5; 5; 5; 1; 5

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ задания:

S1 = 130

S2 = -40 218

S1 > S2, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π½Π΅ Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ задания:

Число столбцов Π½Π΅Ρ‡Ρ‘Ρ‚Π½ΠΎ — Π±Ρ‹Π» ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Ρ‘Π½ сдвиг «Π²Π½ΠΈΠ·»

— 1000 -200 -20 2 12

— 100 -50 -20 0 20

50 100 200 1000 2000

4000 10 000 20 000 40 000 80 000

100 000 -100 000 -40 000 -10 000 -4000

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚ΠΎΠ³ΠΎ задания:

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°, «Ρ€Π°Π·Π²Ρ‘рнутая» ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки: -100; 50; 4000; 100 000; -1000; -200; -20; 2; 12; -4000; 80 000; 2000; 20; 0; -20; -50; 100; 10 000; -100 000; -40 000; -10 000; 40 000; 1000; 200; 20 000

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния пятого задания:

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ отсортированы Π² Π½Π΅Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅ΠΌ порядкС сумм:

4000 10 000 20 000 40 000 80 000

50 100 200 1000 2000

— 100 -50 -20 0 20

— 1000 -200 -20 2 12

100 000 -100 000 -40 000 -10 000 -4000

ВСст 2: ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 3x8.

Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°:

1 — 18 17 -16 15 -14 13 -12

— 2 19 20 2000 200 000 20 000 000 2 000 000 000 11

3 -4 5 -6 7 -8 9 -10

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ задания:

ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΏΠΎ ΡΡ‚Ρ€ΠΎΠΊΠ°ΠΌ: 17; 2 000 000 000; 9

Π‘Ρ‚ΠΎΠ»Π±Ρ†Ρ‹ с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ элСмСнтами: 3; 7; 7

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ задания:

S1 = -18 S2 = -4

S1 < S2, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°:

1 -4 17 -16 15 -14 13 -12

— 2 19 20 2000 200 000 20 000 000 2 000 000 000 11

3 -18 5 -6 7 -8 9 -10

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ задания:

Число столбцов Ρ‡Ρ‘Ρ‚Π½ΠΎ — Π±Ρ‹Π» ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Ρ‘Π½ сдвиг «Π²Π²Π΅Ρ€Ρ…»

— 2 19 20 2000 200 000 20 000 000 2 000 000 000 11

3 -18 5 -6 7 -8 9 -10

1 -4 17 -16 15 -14 13 -12

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚ΠΎΠ³ΠΎ задания:

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°, «Ρ€Π°Π·Π²Ρ‘рнутая» ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки: 1; -2; 3; -4; 5; -6; 7; -8; 9; -10; 11; -12; 13; -14; 15; -16; 17; -18; 19; 20; 2000; 200 000; 20 000 000; 2 000 000 000;

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния пятого задания:

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ отсортированы Π² Π½Π΅Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅ΠΌ порядкС сумм:

— 2 19 20 2000 200 000 20 000 000 2 000 000 000 11

3 -4 5 -6 7 -8 9 -10

1 -18 17 -16 15 -14 13 -12

ВСст 3: ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° 10x5, наполнСнная случайными числами.

Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°:

4490 6540 -12 901 20 330 -6046

— 27 459 -22 256 26 705 14 852 -30 502

23 701 -11 502 -30 162 -14 325 -20 739

— 15 721 -14 704 17 504 -23 934 21 020

— 27 932 7054 -30 557 -28 698 -19 302

— 16 794 -24 715 28 069 -2485 -11 281

30 727 18 102 20 673 -32 373 23 140

— 16 762 -1303 5821 21 065 -25 295

— 24 472 27 091 -6385 -13 002 -22 009

— 12 309 26 284 20 788 -21 316 -25 044

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ задания:

ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΏΠΎ ΡΡ‚Ρ€ΠΎΠΊΠ°ΠΌ: 20 330; 26 705; 23 701; 21 020; 7054

Π‘Ρ‚ΠΎΠ»Π±Ρ†Ρ‹ с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ элСмСнтами: 4; 3; 1; 5; 2

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ задания:

S1 = 4934

S2 = -21 774

S1 > S2, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π½Π΅ Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π° Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ задания:

Число столбцов Π½Π΅Ρ‡Ρ‘Ρ‚Π½ΠΎ — Π±Ρ‹Π» ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Ρ‘Π½ сдвиг «Π²Π½ΠΈΠ·»

— 12 309 26 284 20 788 -21 316 -25 044

4490 6540 -12 901 20 330 -6046

— 27 459 -22 256 26 705 14 852 -30 502

23 701 -11 502 -30 162 -14 325 -20 739

— 15 721 -14 704 17 504 -23 934 21 020

— 27 932 7054 -30 557 -28 698 -19 302

— 16 794 -24 715 28 069 -2485 -11 281

30 727 18 102 20 673 -32 373 23 140

— 16 762 -1303 5821 21 065 -25 295

— 24 472 27 091 -6385 -13 002 -22 009

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚ΠΎΠ³ΠΎ задания:

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°, «Ρ€Π°Π·Π²Ρ‘рнутая» ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки: 4490; -27 459; 23 701; -15 721; -27 932; -16 794; 30 727; -16 762; -24 472; -12 309; 26 284; 20 788; -21 316; -25 044; -22 009; -25 295; 23 140; -11 281; -19 302; 21 020; -20 739; -30 502; -6046; 20 330; -12 901; 6540; -22 256; -11 502; -14 704; 7054; -24 715; 18 102; -1303; 27 091; -6385; -13 002; 21 065; -32 373; -2485; -28 698; -23 934; -14 325; 14 852; 26 705; -30 162; 17 504; -30 557; 28 069; 20 673; 5821

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния пятого задания:

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ отсортированы Π² Π½Π΅Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅ΠΌ порядкС сумм:

30 727 18 102 20 673 -32 373 23 140

4490 6540 -12 901 20 330 -6046

— 12 309 26 284 20 788 -21 316 -25 044

— 15 721 -14 704 17 504 -23 934 21 020

— 16 762 -1303 5821 21 065 -25 295

— 16 794 -24 715 28 069 -2485 -11 281

— 27 459 -22 256 26 705 14 852 -30 502

— 24 472 27 091 -6385 -13 002 -22 009

23 701 -11 502 -30 162 -14 325 -20 739

— 27 932 7054 -30 557 -28 698 -19 302

ВСст 4: ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° с Π±ΠΎΠ»ΡŒΡˆΠΈΠΌΠΈ ΠΏΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŽ числами.

Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°:

0 -2 000 000 000 -2 100 000 000 -2 000 000 000 1

1 000 000 000 -800 000 000 400 000 000 3 15

0 -2 000 000 000 -2 000 000 000 -2 000 000 000 1

1 000 000 000 -800 000 000 400 000 000 3 15

0 -2 000 000 000 -2 000 000 000 -2 000 000 000 1

1 000 000 000 -800 000 000 400 000 000 3 15

0 -2 000 000 000 -1 900 000 000 -200 000 000 1

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ задания:

ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΏΠΎ ΡΡ‚Ρ€ΠΎΠΊΠ°ΠΌ: 1; 1 000 000 000; 1; 1 000 000 000; 1; 1 000 000 000; 1

Π‘Ρ‚ΠΎΠ»Π±Ρ†Ρ‹ с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ элСмСнтами: 5; 1; 5; 1; 5; 1; 5

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ задания:

S1 = -7 699 999 981

S2 = -7 499 999 981

S1 < S2, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°:

0 -2 000 000 000 -1 900 000 000 -2 000 000 000 1

1 000 000 000 -800 000 000 400 000 000 3 15

0 -2 000 000 000 -2 000 000 000 -2 000 000 000 1

1 000 000 000 -800 000 000 400 000 000 3 15

0 -2 000 000 000 -2 000 000 000 -2 000 000 000 1

1 000 000 000 -800 000 000 400 000 000 3 15

0 -2 000 000 000 -2 100 000 000 -2 000 000 000 1

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ задания:

Число столбцов Π½Π΅Ρ‡Ρ‘Ρ‚Π½ΠΎ — Π±Ρ‹Π» ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Ρ‘Π½ сдвиг «Π²Π½ΠΈΠ·»

0 -2 000 000 000 -1 900 000 000 -2 000 000 000 1

0 -2 000 000 000 -2 100 000 000 -2 000 000 000 1

1 000 000 000 -800 000 000 400 000 000 3 15

0 -2 000 000 000 -2 000 000 000 -2 000 000 000 1

1 000 000 000 -800 000 000 400 000 000 3 15

0 -2 000 000 000 -2 000 000 000 -2 000 000 000 1

1 000 000 000 -800 000 000 400 000 000 3 15

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚ΠΎΠ³ΠΎ задания:

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°, «Ρ€Π°Π·Π²Ρ‘рнутая» ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки: 0; 1 000 000 000; 0; 1 000 000 000; 0; 1 000 000 000; 0; -2 000 000 000; -1 900 000 000; -2 000 000 000; 1; 15; 1; 15; 1; 15; 1; -2 000 000 000; -2 100 000 000; -2 000 000 000; -800 000 000; -2 000 000 000; -800 000 000; -2 000 000 000; -800 000 000; 400 000 000; 3; -2 000 000 000; 3; -2 000 000 000; 3; 400 000 000; -2 000 000 000; 400 000 000; -2 000 000 000

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния пятого задания:

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ отсортированы Π² Π½Π΅Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅ΠΌ порядкС сумм:

1 000 000 000 -800 000 000 400 000 000 3 15

1 000 000 000 -800 000 000 400 000 000 3 15

1 000 000 000 -800 000 000 400 000 000 3 15

0 -2 000 000 000 -1 900 000 000 -2 000 000 000 1

0 -2 000 000 000 -2 000 000 000 -2 000 000 000 1

0 -2 000 000 000 -2 000 000 000 -2 000 000 000 1

0 -2 000 000 000 -2 100 000 000 -2 000 000 000 1

ВСст 5: ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° с ΠΎΡˆΠΈΠ±ΠΊΠ°ΠΌΠΈ.

Π˜ΡΡ…ΠΎΠ΄Π½Π°Ρ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π°:

9 999 999 999 123 fdf

456 rt 8 888 888 888

1 234 567 890 9 876 543 210 789

q 0xf e

— 77 777 777 777 000 -13

915 -376 19

dddddd 1 111 111 111

Π’Π½ΡƒΡ‚Ρ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ такая ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

0 123 0

456 0 0

1 234 567 890 0 789

0 15 0

0 0 -13

915 -376 19

0 0 1 111 111 111

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ задания:

ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты ΠΏΠΎ ΡΡ‚Ρ€ΠΎΠΊΠ°ΠΌ: 123; 456; 1 234 567 890; 15; 0; 915; 1 111 111 111

Π‘Ρ‚ΠΎΠ»Π±Ρ†Ρ‹ с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ элСмСнтами: 2; 1; 1; 2; 1; 1; 3

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ задания:

S1 = 123

S2 = 1 111 111 130

S1 < S2, ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°:

0 0 1 111 111 111

456 0 19

1 234 567 890 0 789

0 15 0

0 0 -13

915 -376 0

0 123 0

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ задания:

Число столбцов Π½Π΅Ρ‡Ρ‘Ρ‚Π½ΠΎ — Π±Ρ‹Π» ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Ρ‘Π½ сдвиг «Π²Π½ΠΈΠ·»

0 0 1 111 111 111

0 123 0

456 0 0

1 234 567 890 0 789

0 15 0

0 0 -13

915 -376 19

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚ΠΎΠ³ΠΎ задания:

ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°, «Ρ€Π°Π·Π²Ρ‘рнутая» ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки: 0; 456; 1 234 567 890; 0; 0; 915; 0; 0; 1 111 111 111; 19; -13; 0; 789; 0; 0; 123; 0; 0; 15; 0; -376

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния пятого задания:

Π‘Ρ‚Ρ€ΠΎΠΊΠΈ отсортированы Π² Π½Π΅Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰Π΅ΠΌ порядкС сумм:

1 234 567 890 0 789

0 0 1 111 111 111

915 -376 19

456 0 0

0 123 0

0 15 0

0 0 -13

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 2. ΠŸΠΎΠ»Π½Ρ‹ΠΉ листинг Ρ„ΠΎΡ€ΠΌΡ‹ (Ρ„Π°ΠΉΠ» form.pas)

14 {

15 ΠœΠΎΠ΄ΡƒΠ»ΡŒ, содСрТащий Ρ„ΠΎΡ€ΠΌΡƒ, ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ для хранСния исходной ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹,

16 ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ синхронизации содСрТания ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΠΎΡ€ΠΌΡ‹, Π° Ρ‚Π°ΠΊ ΠΆΠ΅

17 ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρƒ задания Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

18 }

19 unit form;

21 interface

23 uses

24 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

25 Dialogs, Menus, StdCtrls, ExtCtrls, ComCtrls, Grids,

26 //ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

27 fileIO, MatrixOperations;

29 type

30 TMainForm = class (TForm)

31 Pages: TPageControl;

32 Task1: TTabSheet;

33 Task2: TTabSheet;

34 Task3: TTabSheet;

35 Task4: TTabSheet;

36 Task5: TTabSheet;

37 Menu: TMainMenu;

38 A1: TMenuItem;

39 load: TMenuItem;

40 save: TMenuItem;

41 N1: TMenuItem;

42 quit: TMenuItem;

43 N4: TMenuItem;

44 M_Task1: TMenuItem;

45 M_Task2: TMenuItem;

46 M_Task3: TMenuItem;

47 M_Task4: TMenuItem;

48 M_Task5: TMenuItem;

49 GroupBox1: TGroupBox;

50 G_Matrix: TStringGrid;

51 E_RowsN: TEdit;

52 Label1: TLabel;

53 Label2: TLabel;

54 E_ColsN: TEdit;

55 B_SetDimms: TButton;

56 SaveDialog: TSaveDialog;

57 OpenDialog: TOpenDialog;

58 Label3: TLabel;

59 Label4: TLabel;

60 G_Task1B: TStringGrid;

61 Label5: TLabel;

62 Label6: TLabel;

63 G_Task1C: TStringGrid;

64 B_Task1Run: TButton;

65 Label7: TLabel;

66 Label8: TLabel;

67 Label9: TLabel;

68 E_Task2S1: TEdit;

69 B_Task2Run: TButton;

70 E_Task2S2: TEdit;

71 L_Task2MatrxChanged: TLabel;

72 Label10: TLabel;

73 B_Task3Run: TButton;

74 L_Task3Result: TLabel;

75 Label11: TLabel;

76 B_Task4Run: TButton;

77 Label12: TLabel;

78 B_Task5Run: TButton;

79 about: TMenuItem;

80 MEM_Task4: TMemo;

81 procedure saveClick (Sender: TObject);

82 procedure loadClick (Sender: TObject);

83 procedure B_SetDimmsClick (Sender: TObject);

84 procedure FormCreate (Sender: TObject);

85 procedure quitClick (Sender: TObject);

86 procedure M_Task1Click (Sender: TObject);

87 procedure M_Task2Click (Sender: TObject);

88 procedure M_Task3Click (Sender: TObject);

89 procedure M_Task4Click (Sender: TObject);

90 procedure M_Task5Click (Sender: TObject);

91 procedure B_Task1RunClick (Sender: TObject);

92 procedure FormDestroy (Sender: TObject);

93 procedure B_Task2RunClick (Sender: TObject);

94 procedure B_Task3RunClick (Sender: TObject);

95 procedure B_Task4RunClick (Sender: TObject);

96 procedure B_Task5RunClick (Sender: TObject);

97 procedure aboutClick (Sender: TObject);

98 private

99 procedure readMatrix;

100 procedure writeMatrix;

101 public

102 published

103 { Public declarations }

104 end;

106 var

107 MainForm: TMainForm;

108 workMatrix: TMatrix;

110 implementation

112 uses Math;

114 {$R *.dfm}

116 {Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π² ΡΠΎΠΎΡ‚вСтствии с ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅}

117 procedure TMainForm. ReadMatrix;

118 var rowN, colN: integer;

119 begin

120 SetLength (workMatrix, G_Matrix.RowCount-1, G_Matrix.ColCount-1);

121 for rowN:= 0 to G_Matrix.RowCount-2 do

122 for colN:= 0 to G_Matrix.ColCount-2 do

123 workMatrix[rowN, colN]: = StrToIntDef (G_Matrix.Cells[colN+1, rowN+1], 0);

124 end;

126 {Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ Π² ΡΠΎΠΎΡ‚вСтствии с ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹}

127 procedure TMainForm. writeMatrix;

128 var rowN, colN: integer;

129 begin

130 G_Matrix.Cells[1, 1]: = '';//Ссли ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° пуста

131 //ΠΎΠ±Π½ΠΎΠ²ΠΈΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

132 E_RowsN.Text:= IntToStr (high (workMatrix) + 1);

133 if (E_RowsN.Text <> '0') then

134 E_ColsN.Text:= IntToStr (high (workMatrix[low (workMatrix)]) + 1)

135 else E_ColsN.Text:= '0';

136 B_SetDimmsClick (self);

137 //Π·Π°ΠΏΠΎΠ»Π½ΠΈΠΌ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ

138 for rowN:= low (workMatrix) to high (workMatrix) do

139 for colN:= low (workMatrix[rowN]) to high (workMatrix[rowN]) do

140 G_Matrix.Cells[colN+1, rowN+1]: = IntToStr (workMatrix[rowN, colN]);

141 end;

143 {ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π€Π°ΠΉΠ»->Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ}

144 procedure TMainForm. saveClick (Sender: TObject);

145 var

146 outFile: TextFile;

147 begin

148 //ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° для сохранСния, Ссли ΠΎΡ‚ΠΌΠ΅Π½Π° — Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ

149 if SaveDialog. Execute = false then exit;

150 AssignFile (outFile, SaveDialog. Files[0]);

151 ReWrite (outFile);//создадим Ρ„Π°ΠΉΠ»

153 readMatrix;//ΠΏΡ€ΠΎΡ‡Ρ‚Ρ‘ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹

154 Write2DArray (workMatrix, outFile);//запишСм ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ Π² Ρ„Π°ΠΉΠ»

156 CloseFile (outFile);//Π·Π°ΠΊΡ€ΠΎΠ΅ΠΌ Ρ„Π°ΠΉΠ»

158 end;

160 {ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ Π€Π°ΠΉΠ»->Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ}

161 procedure TMainForm. loadClick (Sender: TObject);

162 var

163 inFile: TextFile;

164 begin

165 //ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ Π΄ΠΈΠ°Π»ΠΎΠ³ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°Π»Π° для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ, Ссли ΠΎΡ‚ΠΌΠ΅Π½Π° — Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΠΌ

166 if OpenDialog. Execute = false then exit;

167 AssignFile (inFile, OpenDialog. Files[0]);

168 Reset (inFile);//ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΠΌ Ρ„Π°ΠΉΠ» ΠΊ Ρ‡Ρ‚Π΅Π½ΠΈΡŽ

170 Read2DArray (workMatrix, inFile);//ΠΏΡ€ΠΎΡ‡Ρ‚Ρ‘ΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

171 writeMatrix;//ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΠΌ ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρƒ

173 CloseFile (inFile);//Π·Π°ΠΊΡ€ΠΎΠ΅ΠΌ Ρ„Π°ΠΉΠ»

174 end;

176 {ΠΎΠ±Ρ€Π°ΡŽΠΎΡ‚Ρ‡ΠΈΠΊ уствновки Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹}

177 procedure TMainForm. B_SetDimmsClick (Sender: TObject);

178 var

179 i: integer;

180 RowsN, ColsN: integer;

181 begin

182 //значСния Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ мСньшС 1

183 RowsN:= StrToIntDef (E_RowsN.Text, 0);

184 if RowsN < 1 then begin RowsN:= 1; E_RowsN.Text:= '1' end;

185 ColsN:= StrToIntDef (E_ColsN.Text, 0);

186 if ColsN < 1 then begin ColsN:= 1; E_ColsN.Text:= '1' end;

187 //число строк ΠΈ ΡΡ‚ΠΎΠ»Π±Ρ†ΠΎΠ² Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅, учитывая ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ ΠΈ ΡΡ‚Ρ€ΠΎΠΊΡƒ с Π½ΠΎΠΌΠ΅Ρ€Π°ΠΌΠΈ

188 G_Matrix.RowCount:= RowsN + 1;

189 G_Matrix.ColCount:= ColsN + 1;

190 //Π² этих Ρ‚Π°Π±Π»ΠΈΡ†Π°Ρ… ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹Π΅ массивы ΠΈΠ· ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ задания

191 G_Task1B.RowCount:= RowsN;

192 G_Task1C.RowCount:= RowsN;

193 //ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив ΠΈΠ· Ρ‡Π΅Ρ‚Π²Ρ‘Ρ€Ρ‚ΠΎΠ³ΠΎ задания ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ, Ρ€Π°Π²Π½ΡƒΡŽ числу элСмСнтов исходной ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹

194 //G_Task4.ColCount:= RowsN * ColsN;

195 //расставим Π½ΠΎΠΌΠ΅Ρ€Π° строк ΠΈ ΡΡ‚ΠΎΠ»Π±Ρ†ΠΎΠ²

196 for i:= 0 to RowsN do

197 begin

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