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

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΈΠΊΠ° ΠΆΠΈΠ»ΠΈΡ‰Π½ΠΎ-эксплуатационной слуТбы

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

Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΌ элСмСнтом. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния коррСктности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π²Ρ‹Π±ΠΎΡ€ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ элСмСнта Π±Π΅Π·Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΌΠ΅Π΄ΠΈΠ°Π½Π°, Π½ΠΎ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… свСдСний ΠΎ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π΅Ρ‘ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ. Π˜Π·Π²Π΅ΡΡ‚Π½Ρ‹Π΅ стратСгии: Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ постоянно ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ элСмСнт, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, срСдний ΠΈΠ»ΠΈ… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΈΠΊΠ° ΠΆΠΈΠ»ΠΈΡ‰Π½ΠΎ-эксплуатационной слуТбы (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠšΠ£Π Π‘ΠžΠ’ΠžΠ™ ΠŸΠ ΠžΠ•ΠšΠ’

ΠΏΠΎ ΠΊΡƒΡ€ΡΡƒ «Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… Π² Π­Π’Πœ»

Π½Π° Ρ‚Π΅ΠΌΡƒ

«Π˜Π½Ρ„ормационная систСма Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΈΠΊΠ° ΠΆΠΈΠ»ΠΈΡ‰Π½ΠΎ-эксплуатационной слуТбы»

Π’Π΅ΠΌΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° — «Π˜Π½Ρ„ормационная систСма Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΈΠΊΠ° ΠΆΠΈΠ»ΠΈΡ‰Π½ΠΎ-эксплуатационной слуТбы». ΠŸΡ€ΠΈ этом ΠΏΠΎ Π·Π°Π΄Π°Π½ΠΈΡŽ ΠΊ ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠΌΡƒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρƒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ структуру Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΡƒ QuickSort.

Для Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ прилоТСния Π±Ρ‹Π»Π° Π²Ρ‹Π±Ρ€Π°Π½Π° срСда программирования Delphi.

Π‘Ρ€Π΅Π΄Π° Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ проСктирования Delphi позволяСт:

1. Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹Π΅ прилоТСния для Windows самой Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΉ направлСнности.

2. Быстро ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ выглядящий ΠΎΠΊΠΎΠ½Π½Ρ‹ΠΉ интСрфСйс для Π»ΡŽΠ±Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ; интСрфСйс удовлСтворяСт всСм трСбованиям Windows ΠΈ Π°Π²Ρ‚оматичСски настраиваСтся Π½Π° Ρ‚Ρƒ ΡΠΈΡΡ‚Π΅ΠΌΡƒ, которая установлСна, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Windows.

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

4. Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΌΠΎΡ‰Π½Ρ‹Π΅ систСмы Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π»ΡŽΠ±Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ².

5. Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ слоТныС ΠΎΡ‚Ρ‡Π΅Ρ‚Ρ‹, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠ΅ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹, Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ ΠΈ Ρ‚. ΠΏ.

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

7. Π‘ΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ установки для ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Windows, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠ΅ всю спСцифику ΠΈ Π²ΡΠ΅ трСбования ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы.

Delphi — быстро Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰Π°ΡΡΡ систСма. ΠŸΠ΅Ρ€Π²Π°Ρ вСрсия Delphi Π±Ρ‹Π»Π° Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½Π° Π² Ρ„Π΅Π²Ρ€Π°Π»Π΅ 1995 Π³ΠΎΠ΄Π°, Π² 1996 Π³ΠΎΠ΄Ρƒ Π²Ρ‹ΡˆΠ»Π° вторая вСрсия, 1997 — Ρ‚Ρ€Π΅Ρ‚ΡŒΡ, 1998 — чСтвСртая, 1999 — пятая, 2001 — ΡˆΠ΅ΡΡ‚Π°Ρ. ВсС вСрсии, начиная с Delphi 2.0, рассчитаны Π½Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ 32-разрядных ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Ρ‚. Π΅. ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Windows 95/98, NT ΠΈ Ρ‚. Π΄. Π’ 2002 Π³ΠΎΠ΄Ρƒ Π²Ρ‹ΡˆΠ»Π° сСдьмая вСрсия, основным Π½ΠΎΠ²ΠΎΠ²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π±Ρ‹Π»ΠΈ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ.

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ прСдставляСт собой инструмСнт для управлСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΈΠΊΠ° ΠΆΠΈΠ»ΠΈΡ‰Π½ΠΎ-эксплуатационной слуТбы.

1. Бостав DELPHI-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

1.1 Бостав ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°

Π”Π°Π½Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ состоит ΠΈΠ· Π΄Π²ΡƒΡ… Ρ„ΠΎΡ€ΠΌ: InputForm ΠΈ ReportForm:

На Ρ„ΠΎΡ€ΠΌΠ΅ InputForm располоТСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (см. рис1):

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ AddBtn — вСрхняя ΠΊΠ½ΠΎΠΏΠΊΠ° ΠΊΠ½ΠΎΠΏΠΊΠ° Π² ΠΏΡ€Π°Π²ΠΎΠΉ части Ρ„ΠΎΡ€ΠΌΡ‹ для добавлСния записСй Π΄Π°Π½Π½Ρ‹Ρ….

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ CopyBtn — ΠΊΠ½ΠΎΠΏΠΊΠ° для копирования записСй Π΄Π°Π½Π½Ρ‹Ρ….

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ DelBtn — ΠΊΠ½ΠΎΠΏΠΊΠ° для удалСния записСй Π΄Π°Π½Π½Ρ‹Ρ….

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ SortBtn — ΠΊΠ½ΠΎΠΏΠΊΠ° для сортировки Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ столбца Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ FindBtn — ΠΊΠ½ΠΎΠΏΠΊΠ° для поиска ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ значСния Π² ΡΡ‚ΠΎΠ»Π±Ρ†Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ SaveBtn — ΠΊΠ½ΠΎΠΏΠΊΠ° для сохранСния всСх Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ Π² Ρ‚Скстовых Ρ„Π°ΠΉΠ».

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ LoadBtn — ΠΊΠ½ΠΎΠΏΠΊΠ° для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ всСх Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ ΠΈΠ· Ρ‚Скстового Ρ„Π°ΠΉΠ»Π°.

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ SaveBtn — ΠΊΠ½ΠΎΠΏΠΊΠ° для сохранСния всСх Ρ‚Π°Π±Π»ΠΈΡ‡Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ Π² Ρ‚Скстовых Ρ„Π°ΠΉΠ».

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ FBtn — ΠΊΠ½ΠΎΠΏΠΊΠ° для отобраТСния Ρ„ΠΎΡ€ΠΌΡ‹ ReportForm ΠΈ Ρ„ормирования ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π€5.

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ BitBtn1 — ΠΊΠ½ΠΎΠΏΠΊΠ° для закрытия прилоТСния.

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ MSpinEdit — ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° для задания количСства этаТСй M.

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ KSpinEdit — ΠΏΠΎΠ»Π΅ Π²Π²ΠΎΠ΄Π° для задания количСства подъСздов К.

На Ρ„ΠΎΡ€ΠΌΠ΅ Ρ‚Π°ΠΊΠΆΠ΅ находятся ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Label1, Label2 для отобраТСния подсказок для Π²Π²ΠΎΠ΄Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ Π½Π΅Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ OpenDialog1, SaveDialog1 для Π²Ρ‹Π·ΠΎΠ²Π° стандартных ΠΎΠΊΠΎΠ½ открытия ΠΈ ΡΠΎΡ…ранСния Ρ„Π°ΠΉΠ»ΠΎΠ².

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ PageControl1 — содСрТит Π²ΠΊΠ»Π°Π΄ΠΊΠΈ TabSheet 1−5 Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΎΡ‚Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ (соотвСтствСнно «ΠšΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹», «Π‘Π₯Π•ΠœΠ», «Π“Πš (Π )», «Π–ΠΈΡ‚Π΅Π»ΠΈ Ρ‡Π»Π΅Π½Ρ‹ сСмСй Π“Πš (А)», ΠΈ «ΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ (Π‘)»).

ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ TabSheet 1−5 содСрТат Π² ΡΠ΅Π±Π΅ элСмСнты Ρ‚Π°Π±Π»ΠΈΡ† StringGrid 1−5, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ связаны с Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, соотвСтствСнно «Kvart», «Scheme», «GK», «People», «FlatAtr»).

Рис. 1 — Главная Ρ„ΠΎΡ€ΠΌΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ На Ρ„ΠΎΡ€ΠΌΠ΅ ReportForm располоТСны ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ (см. Ρ€ΠΈΡ 2):

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Panel1, Panel2 — ΠΏΠ°Π½Π΅Π»ΠΈ Π½Π° Ρ„ΠΎΡ€ΠΌΠ΅ для раздСлСния Ρ„ΠΎΡ€ΠΌΡ‹ Π½Π° ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΈ ΠΏΠ°Π½Π΅Π»ΡŒ ΠΊΠ½ΠΎΠΏΠΎΠΊ.

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ OkBtn — ΠΊΠ½ΠΎΠΏΠΊΠ° для закрытия Ρ„ΠΎΡ€ΠΌΡ‹.

— ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ ListBox1 — список для отобраТСния ΠΎΡ‚Ρ‡Π΅Ρ‚Π°.

Рис. 2 — Ρ„ΠΎΡ€ΠΌΠ° для формирования ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π€5.

1.2 ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹, входящиС Π² ΡΠΎΡΡ‚Π°Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ комплСкса

Бписок ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ:

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° содСрТит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ:

Unit1 — ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π³Π»Π°Π²Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

Unit2 — ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°.

MyTypes — ΠΌΠΎΠ΄ΡƒΠ»ΡŒ с ΠΎΠΏΠΈΡΠ°Π½ΠΈΡΠΌΠΈ классов Π΄Π°Π½Π½Ρ‹Ρ….

Бписок основных ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€, входящих Π² ΡΠΎΡΡ‚Π°Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ комплСкса:

— procedure LoadButtonClick — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π° Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹.

— procedure SaveButtonClick — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° сохранСния Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ».

— procedure FillStringGrid — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‚Π°Π±Π»ΠΈΡ† ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΡ… Π² ΡΠΎΠΎΡ‚вСтствии с ΠΌΠ°ΡΡΠΈΠ²Π°ΠΌΠΈ.

— procedure PageControl1Change — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π²Ρ‹Π±ΠΎΡ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ страницы с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π²Ρ‹Π·ΠΎΠ²Π° пСрСзаполнСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹.

— procedure SGDblClick — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π²Π²ΠΎΠ΄Π° / рСдактирования Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ячСйки Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….

— procedure AddBtnClick — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° добавлСния строки Π² Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π΄Π°Π½Π½Ρ‹Ρ….

— procedure DelBtnClick — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° для удалСния записСй Π΄Π°Π½Π½Ρ‹Ρ….

— procedure SortBtnClick — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° для сортировки Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ столбца Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

— procedure KSpinEditChange — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° для измСнСния значСния количСства подъСздов К Π² ΡΠΎΠΎΡ‚вСтствии с ΠΏΠΎΠ»Π΅ΠΌ Π²Π²ΠΎΠ΄Π°.

— procedure MSpinEditChange — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° для измСнСния значСния количСства этаТСй M Π² ΡΠΎΠΎΡ‚вСтствии с ΠΏΠΎΠ»Π΅ΠΌ Π²Π²ΠΎΠ΄Π°.

— procedure CopyBtnClick — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Π²Π²ΠΎΠ΄Π° Π½ΠΎΠ²ΠΎΠΉ строки Π΄Π°Π½Π½Ρ‹Ρ… ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ строки.

— procedure FindBtnClick — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° для поиска ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ значСния Π² ΡΡ‚ΠΎΠ»Π±Ρ†Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

— procedure SortBtn — ΠΊΠ½ΠΎΠΏΠΊΠ° для сортировки Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ столбца Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Π΄Π°Π½Π½Ρ‹Ρ….

— procedure FButtonClick — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° для отобраТСния Ρ„ΠΎΡ€ΠΌΡ‹ ReportForm ΠΈ Ρ„ормирования ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Π€5.

— procedure ReadVec — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° чтСния Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ‚Скстового Ρ„Π°ΠΉΠ»Π°.

— procedure WriteVec — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° записи Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ‚Скстового Ρ„Π°ΠΉΠ»Π°.

2. Π”Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ для хранСния Π΄Π°Π½Π½Ρ‹Ρ… Π±Ρ‹Π» спроСктирован класс TVector Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ для хранСния Π΄Π°Π½Π½Ρ‹Ρ… использовался Π²Π΅ΠΊΡ‚ΠΎΡ€ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² FArr. Для хранСния ΠΈΠΌΠ΅Π½ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ использовался Π²Π΅ΠΊΡ‚ΠΎΡ€ FNames, описанный ΠΊΠ°ΠΊ array [1.100] of string. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Π±Ρ‹Π»ΠΈ созданы 5 ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² класса TVector:

Kvart: TVector;

Scheme: TVector;

Gk: TVector;

People: TVector;

FlatAtr: TVector;

Имя массива

Π’ΠΈΠΏ

Π Π°Π·ΠΌΠ΅Ρ€ Π² Π±Π°ΠΉΡ‚Π°Ρ…

Kvart

TVector

100*100*16+10 100+8=170 108

Scheme

TVector

Gk

TVector

People

TVector

FlatAtr

TVector

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ для Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Π½ΡƒΠΆΠ΄ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅:

KPod, M, i, j, k, x, Ρ‚ΠΈΠΏΠ° integer (каТдая ΠΏΠΎ 4 Π±Π°ΠΉΡ‚Π°);

FileNameT Ρ‚ΠΈΠΏΠ° string (200 Π±Π°ΠΉΡ‚);

Ft Ρ‚ΠΈΠΏΠ° TextFile (460 Π±Π°ΠΉΡ‚);

FSGVector — Π²Π΅ΠΊΡ‚ΠΎΡ€ ссылок Ρ‚ΠΈΠΏΠ° TStringGrid (40 Π±Π°ΠΉΡ‚).

3. ЛогичСскиС структуры Π΄Π°Π½Π½Ρ‹Ρ…

Π‘Π°Π·ΠΎΠ²ΠΎΠΉ структурой Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° являСтся класс TVector Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ для хранСния Π΄Π°Π½Π½Ρ‹Ρ… использовался Π²Π΅ΠΊΡ‚ΠΎΡ€ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² FArr ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ свойства ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для доступа ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… класса.

ОбъявлСниС Π²Π΅ΠΊΡ‚ΠΎΡ€Π° FArr выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

FArr: array [1.100] of TVarMas, Π³Π΄Π΅ TVarMas = array [1.MaxN] of Variant;

Π’Π΅ΠΊΡ‚ΠΎΡ€ (array) — это линСйная структура Π΄Π°Π½Π½Ρ‹Ρ… (список) с ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ адрСс элСмСнта ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ опрСдСляСтся Π΅Π³ΠΎ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠΌ.

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

ЛогичСская схСма структуры Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² FArr:

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 16 Π±Π°ΠΉΡ‚ памяти. БоотвСтствСнно FArr Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ (100*100)*16=160 000 Π±Π°ΠΉΡ‚.

ЛогичСская схСма структуры Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈΠΌΠ΅Π½ FNames:

100

ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ 101 Π±Π°ΠΉΡ‚ памяти. БоотвСтствСнно Π²Π΅ΠΊΡ‚ΠΎΡ€ FNames Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ 100*101 =10 100 Π±Π°ΠΉΡ‚.

4. Алгоритмы ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ основных структур

Основной ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ структуры Π² Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ обСспСчСнии являСтся сортировка QuickSort (ΠΏΠΎ Π·Π°Π΄Π°Π½ΠΈΡŽ Π½Π° ΠΊΡƒΡ€ΡΠΎΠ²ΠΎΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅).

Быстрая сортировка (quicksort), часто называСмая qsort ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ языка Π‘ΠΈ — ΡˆΠΈΡ€ΠΎΠΊΠΎ извСстный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΉ английским Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠΊΠΎΠΌ Π§Π°Ρ€Π»ΡŒΠ·ΠΎΠΌ Π₯ΠΎΠ°Ρ€ΠΎΠΌ. Один ΠΈΠ· Π±Ρ‹ΡΡ‚Ρ€Ρ‹Ρ… извСстных ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сортировки массивов (Π² ΡΡ€Π΅Π΄Π½Π΅ΠΌ О (n log n) ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ² ΠΏΡ€ΠΈ упорядочСнии n элСмСнтов), хотя ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ряд нСдостатков.

Алгоритм Быстрая сортировка ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΡ‚Ρ€Π°Ρ‚Π΅Π³ΠΈΡŽ «Ρ€Π°Π·Π΄Π΅Π»ΡΠΉ ΠΈ Π²Π»Π°ΡΡ‚Π²ΡƒΠΉ». Π¨Π°Π³ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Ρ‚Π°ΠΊΠΎΠ²Ρ‹:

1. Π’Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅ΠΌ Π½Π°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΌ элСмСнтом. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния коррСктности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π²Ρ‹Π±ΠΎΡ€ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ элСмСнта Π±Π΅Π·Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½. Π‘ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΌΠ΅Π΄ΠΈΠ°Π½Π°, Π½ΠΎ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… свСдСний ΠΎ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π΅Ρ‘ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ. Π˜Π·Π²Π΅ΡΡ‚Π½Ρ‹Π΅ стратСгии: Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ постоянно ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ элСмСнт, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, срСдний ΠΈΠ»ΠΈ послСдний ΠΏΠΎ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ; Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ элСмСнт со ΡΠ»ΡƒΡ‡Π°ΠΉΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ индСксом.

2. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ раздСлСния массива: Ρ€Π΅ΠΎΡ€Π³Π°Π½ΠΈΠ·ΡƒΠ΅ΠΌ массив Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС элСмСнты, мСньшиС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½Ρ‹Π΅ ΠΎΠΏΠΎΡ€Π½ΠΎΠΌΡƒ элСмСнту, оказались слСва ΠΎΡ‚ Π½Π΅Π³ΠΎ, Π° Π²ΡΠ΅ элСмСнты, большиС ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ — справа ΠΎΡ‚ Π½Π΅Π³ΠΎ. ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

1. Π”Π²Π° индСкса — l ΠΈ r, ΠΏΡ€ΠΈΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ индСксу раздСляСмого массива соотвСтствСнно.

2. ВычисляСтся индСкс ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ элСмСнта m.

3. ИндСкс l ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ увСличиваСтся Π΄ΠΎ m Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° l-ΠΉ элСмСнт Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡΠΈΡ‚ ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΉ.

4. ИндСкс r ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ Π΄ΠΎ m Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° r-ΠΉ элСмСнт Π½Π΅ ΠΎΠΊΠ°ΠΆΠ΅Ρ‚ся мСньшС ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ.

5. Если r = l — Π½Π°ΠΉΠ΄Π΅Π½Π° сСрСдина массива — опСрация раздСлСния Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π°, ΠΎΠ±Π° индСкса ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ Π½Π° ΠΎΠΏΠΎΡ€Π½Ρ‹ΠΉ элСмСнт.

6. Если l < r — Π½Π°ΠΉΠ΄Π΅Π½Π½ΡƒΡŽ ΠΏΠ°Ρ€Ρƒ элСмСнтов Π½ΡƒΠΆΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΡΡ‚ΡŒ мСстами ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ раздСлСния с Ρ‚Π΅Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ l ΠΈ r, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±Ρ‹Π»ΠΈ достигнуты. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡƒΡ‡Π΅ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли какая-Π»ΠΈΠ±ΠΎ Π³Ρ€Π°Π½ΠΈΡ†Π° (l ΠΈΠ»ΠΈ r) дошла Π΄ΠΎ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ элСмСнта, Ρ‚ΠΎ ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ m ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ся Π½Π° r-ΠΉ ΠΈΠ»ΠΈ l-ΠΉ элСмСнт соотвСтствСнно.

3. РСкурсивно упорядочиваСм подмассивы, Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ слСва ΠΈ ΡΠΏΡ€Π°Π²Π° ΠΎΡ‚ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ элСмСнта.

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

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ (Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ рСкурсии) Π΄Π»ΠΈΠ½Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠ° массива ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ΡΡ, ΠΏΠΎ ΠΌΠ΅Π½ΡŒΡˆΠ΅ΠΉ ΠΌΠ΅Ρ€Π΅, Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Π°Ρ Π²Π΅Ρ‚Π²ΡŒ рСкурсии Π±ΡƒΠ΄Π΅Ρ‚ достигнута всСгда ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΡ‚ΡΡ.

Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρƒ FArr Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ класса TVector:

// ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° сортировки Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡƒ SortId с Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ xMode

// xMode = 1 — ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ

// xMode = 2 — ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ

// xMode = 0-ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ SortMode ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ

procedure TVector. Sort (xMode: integer = 0);

procedure QSort (l, r: Integer);

function Less (var x, y: Variant): boolean;

begin

if (X < Y) and (SortMode=1) // ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ

then Less:=true

else Less:=false;

end;

var

i, j, x: integer;

y: TVarMas; //Variant;

begin

i:= l; j:= r; x:= (l+r) DIV 2;

repeat

while Less (FArr[i] [SortId], FArr[x] [SortId]) do i:= i + 1;

while Less (FArr[x] [SortId], FArr[j] [SortId]) do j:= j — 1;

if i <= j then

begin

y:= FArr[i];

FArr[i]:= FArr[j];

FArr[j]:= y;

i:= i + 1; j:= j — 1;

end;

until i > j;

if l < j then QSort (l, j);

if i < r then QSort (i, r);

end;

begin {QuickSort};

if xMode<>0

then SortMode:= xMode;

QSort (1, Size);

if xMode=0 then // ПомСняСм Ρ€Π΅ΠΆΠΈΠΌ сортировки

begin

if SortMode = 1

then SortMode:=2 else SortMode:=1;

end;

end;

ΠžΡ†Π΅Π½ΠΊΠ° эффСктивности

QuickSort являСтся сущСствСнно ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½Π½Ρ‹ΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сортировки с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ прямого ΠΎΠ±ΠΌΠ΅Π½Π° (Π΅Π³ΠΎ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ извСстны ΠΊΠ°ΠΊ «ΠŸΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²Π°Ρ сортировка»), извСстного, Π² Ρ‚ΠΎΠΌ числС, своСй Π½ΠΈΠ·ΠΊΠΎΠΉ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ. ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏΠΈΠ°Π»ΡŒΠ½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ мСстами Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹Π΅ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° элСмСнты массива.

Β· Π›ΡƒΡ‡ΡˆΠΈΠΉ случай. Для этого Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° самый Π»ΡƒΡ‡ΡˆΠΈΠΉ случай — Ссли Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² дСлился Π±Ρ‹ Π½Π° Π΄Π²Π° Ρ€Π°Π²Π½Ρ‹Ρ… ΠΏΠΎ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅ массива. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ количСство сравнСний, Π΄Π΅Π»Π°Π΅ΠΌΡ‹Ρ… быстрой сортировкой, Π±Ρ‹Π»ΠΎ Π±Ρ‹ Ρ€Π°Π²Π½ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ рСкурсивного выраТСния CN = 2CN/2+N. Π­Ρ‚ΠΎ Π΄Π°Π»ΠΎ Π±Ρ‹ наимСньшСС врСмя сортировки.

Β· Π‘Ρ€Π΅Π΄Π½Π΅Π΅. Π”Π°Ρ‘Ρ‚ Π² ΡΡ€Π΅Π΄Π½Π΅ΠΌ O (n log n) ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ² ΠΏΡ€ΠΈ упорядочСнии n элСмСнтов. Π’ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ такая ситуация ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ мСсто ΠΏΡ€ΠΈ случайном порядкС элСмСнтов ΠΈ Π²Ρ‹Π±ΠΎΡ€Π΅ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ элСмСнта ΠΈΠ· ΡΠ΅Ρ€Π΅Π΄ΠΈΠ½Ρ‹ массива Π»ΠΈΠ±ΠΎ случайно.

Β· 2CN/2 ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ расходы ΠΏΠΎ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ΅ Π΄Π²ΡƒΡ… ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… подмассивов; N — это ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого выраТСния Ρ€Π°Π²Π½ΠΎ CN = N lg N.

Β· Π₯ΡƒΠ΄ΡˆΠΈΠΉ случай. Π₯ΡƒΠ΄ΡˆΠΈΠΌ случаСм, ΠΎΡ‡Π΅Π²ΠΈΠ΄Π½ΠΎ, Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΎΠΉ, ΠΏΡ€ΠΈ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ этапС массив Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒΡΡ Π½Π° Π²Ρ‹Ρ€ΠΎΠΆΠ΄Π΅Π½Π½Ρ‹ΠΉ подмассив ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ элСмСнта ΠΈ Π½Π° ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ² ΠΈΠ· Π²ΡΠ΅Ρ… ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов. Π’Π°ΠΊΠΎΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΡ‚ΠΈ, Ссли Π² ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ ΠΎΠΏΠΎΡ€Π½ΠΎΠ³ΠΎ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ этапС Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π±Ρ€Π°Π½ элСмСнт Π»ΠΈΠ±ΠΎ наимСньший, Π»ΠΈΠ±ΠΎ наибольший ΠΈΠ· Π²ΡΠ΅Ρ… ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ….

Β· Π₯ΡƒΠ΄ΡˆΠΈΠΉ случай Π΄Π°Ρ‘Ρ‚ O (nΠ†) ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ², Π½ΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ² ΠΈ, соотвСтствСнно, врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ — это Π½Π΅ ΡΠ°ΠΌΡ‹ΠΉ большой Π΅Π³ΠΎ нСдостаток. Π₯ΡƒΠΆΠ΅ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС Π³Π»ΡƒΠ±ΠΈΠ½Π° рСкурсии ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° достигнСт n, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ·Π½Π°Ρ‡Π°Ρ‚ΡŒ n-ΠΊΡ€Π°Ρ‚Π½ΠΎΠ΅ сохранСниС адрСса Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ раздСлСния массивов.

5. Руководство ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

Π”Π°Π½Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС ΠΈΠΌΠ΅Π΅Ρ‚ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ понятный интСрфСйс ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ всС возмоТности срСды Delphi.

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡΡ‚ΡŒ Π²ΠΊΠ»Π°Π΄ΠΎΠΊ. ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ запускС активируСтся пСрвая — Π²ΠΊΠ»Π°Π΄ΠΊΠ° «ΠšΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹» (см. Ρ€ΠΈΡ. 3).

Рис. 3 — Π’ΠΊΠ»Π°Π΄ΠΊΠ° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ с ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ добавлСния Π½ΠΎΠ²ΠΎΠΉ строки, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ, ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ значСния ячССк, Π° Ρ‚Π°ΠΊΠΆΠ΅ сортировки Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ столбца ΠΈ ΠΏΠΎΠΈΡΠΊΠ° Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ значСния Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ столбцС. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° выполняСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ быстрой сортировки QuickSort. ΠŸΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ сортировки Π²Π½Π°Ρ‡Π°Π»Π΅ выполняСтся сортировка ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ, ΠΏΡ€ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ «Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°» выполняСтся сортировка ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ ΠΈ Ρ‚. Π΄.

На Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ «ΠšΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹» ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ: «ΠΠΎΠΌΠ΅Ρ€ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹», «Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹», «ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ ΠΏΡ€ΠΈΠ²Π°Ρ‚.». ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ Ρ€Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Ρ‚Π°Π±Π»ΠΈΡ†Π°ΠΌ «ΠΡ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ (Π‘)» ΠΈ «Π‘Π₯Π•ΠœΠ» ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Π’Ρ€ΠΈ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ исходя ΠΈΠ· Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ «Π‘Π₯Π•ΠœΠ». Колонка «Π–ΠΈΠ»Π°Ρ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ» = сумма ΠΏΠ»ΠΎΡ‰Π°Π΄Π΅ΠΉ всСх ΠΊΠΎΠΌΠ½Π°Ρ‚, взятых ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π‘.

Колонка «ΠžΠ±Ρ‰Π°Ρ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ» =Π°Ρ‚Ρ€. 4 + Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ 7−9 ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π‘.

ΠžΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ послС Π²Π²ΠΎΠ΄Π° / измСнСния Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹ выдаСтся ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ сообщСниС (см. Ρ€ΠΈΡ. 4)

Рис. 4 — Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ΅ сообщСниС Π’ ΡΠ»ΡƒΡ‡Π°Π΅ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ рСдактирования ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ β„–№ 2−5 выдаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сообщСниС (см. Ρ€ΠΈΡ. 5).

Рис. 5 — Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΠΈ рСдактирования ячСйки ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ Π½Π° Π²ΠΊΠ»Π°Π΄ΠΊΡƒ «Π‘Π₯Π•ΠœΠ» отобраТаСтся ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ (см. Ρ€ΠΈΡ. 6)

Рис. 6 — Π’ΠΊΠ»Π°Π΄ΠΊΠ° схСмы ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ «Π‘Π₯Π•ΠœΠ»

Π—Π΄Π΅ΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΡ… ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅, ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ значСния.

Π’Ρ€Π΅Ρ‚ΡŒΡ Π²ΠΊΠ»Π°Π΄ΠΊΠ° «Π“Πš (Π )» содСрТит Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ΠΎΡΡŠΠ΅ΠΌΡ‰ΠΈΠΊΠΎΠ² ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ (см. Ρ€ΠΈΡ. 7).

Рис. 7 — Π’ΠΊΠ»Π°Π΄ΠΊΠ° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ΠΎΡΡŠΠ΅ΠΌΡ‰ΠΈΠΊΠΎΠ² Π“Πš (Π ) Π’ Π΄Π°Π½Π½ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² ΠΏΡ€Π΄Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΡ…, Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅, ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ значСния.

Π’ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ находится Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΆΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ — Ρ‡Π»Π΅Π½ΠΎΠ² сСмСй Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ΠΎΡΡŠΠ΅ΠΌΡ‰ΠΈΠΊΠΎΠ² (А). (см. Ρ€ΠΈΡ. 8)

Рис. 8 — Π’ΠΊΠ»Π°Π΄ΠΊΠ° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠΆΠΈΡ‚Π΅Π»Π΅ΠΉ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ — Ρ‡Π»Π΅Π½ΠΎΠ² сСмСй Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ΠΎΡΡŠΠ΅ΠΌΡ‰ΠΈΠΊΠΎΠ² (А)

На ΠΏΡΡ‚ΠΎΠΉ Π²ΠΊΠ»Π°Π΄ΠΊΠ΅ находится Ρ‚Π°Π±Π»ΠΈΡ†Π° © Ρ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ ©. (см. Ρ€ΠΈΡ. 9)

Рис. 9 — Π’ΠΊΠ»Π°Π΄ΠΊΠ° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ © Ρ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ Из Π²ΡΠ΅Ρ… Π²ΠΊΠ»Π°Π΄ΠΎΠΊ доступны ΠΊΠ½ΠΎΠΏΠΊΠΈ «Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ»» ΠΈ «Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ всСх Π²ΠΊΠ»Π°Π΄ΠΎΠΊ Π² Ρ‚Скстовый Ρ„Π°ΠΉΠ» *.dat ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°.

Для формирования ΠΎΡ‚Ρ‡Π΅Ρ‚Π° Ρ„ΠΎΡ€ΠΌΡ‹ Π€5 Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΠΆΠ°Ρ‚ΡŒ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ «ΠžΡ‚Ρ‡Π΅Ρ‚ Π€5», ΠΏΡ€ΠΈ этом открываСтся Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ с ΠΎΡ‚Ρ‡Π΅Ρ‚Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ (см. Ρ€ΠΈΡ. 10). Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΠΊΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΆΠ°Π² Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ «ΠžΠš».

Рис. 9 — Π’ΠΊΠ»Π°Π΄ΠΊΠ° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ © Ρ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€

Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅

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

ВСстированиС Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π° ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ ΠΏΠΎΠ»Π½ΠΎΡ‚Ρƒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΎΡ‚сутствиС ошибок ΠΈ Π½Π΅Π΄ΠΎΡ‡Ρ‘Ρ‚ΠΎΠ² Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. Π‘Ρ‹Π»ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½Ρ‹ базовая структура Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠ° Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ быстрой сортировки QuickSort.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. Π£Ρ‡Π΅Π±Π½ΠΎΠ΅ пособиС / Π›Π°ΠΊΠΈΠ½ Π’. И., Π ΠΎΠΌΠ°Π½ΠΎΠ² А. Π’. — ΠœΠ½.: БНВУ, 2004 — 176 с.

ΠΡ€Ρ…Π°Π½Π³Π΅Π»ΡŒΡΠΊΠΈΠΉ А.Π―. Delphi 6. Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΎΠ΅ пособиС. М.: Π—ΠΠž «Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΠ²ΠΎ Π‘Π˜ΠΠžΠœ», 2001. 1024 с.

Π’ΠΈΡ€Ρ‚ Н. Алгоритмы ΠΈ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. БПб: НСвский Π΄ΠΈΠ°Π»Π΅ΠΊΡ‚, 2001. — 352 с.

Ананий Π’. Π›Π΅Π²ΠΈΡ‚ΠΈΠ½ Π“Π»Π°Π²Π° 4. ΠœΠ΅Ρ‚ΠΎΠ΄ Π΄Π΅ΠΊΠΎΠΌΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ: Быстрая сортировка // Алгоритмы: Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ Π°Π½Π°Π»ΠΈΠ· = Introduction to The Design and Analysis of Algorithms. — Πœ.: «Π’ΠΈΠ»ΡŒΡΠΌΡ», 2006. — Π‘. 174−179.

ΠšΠ½ΡƒΡ‚ Π”. Π­. Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ программирования, Ρ‚ΠΎΠΌ 1. ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹. М.: Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π΄ΠΎΠΌ «Π’ΠΈΠ»ΡŒΡΠΌΡ», 2002. 720 с.

ΠšΠ½ΡƒΡ‚ Π”. Π­. Π˜ΡΠΊΡƒΡΡΡ‚Π²ΠΎ программирования, Ρ‚ΠΎΠΌ 3. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈ ΠΏΠΎΠΈΡΠΊ. М.: Π˜Π·Π΄Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Π΄ΠΎΠΌ «Π’ΠΈΠ»ΡŒΡΠΌΡ», 2001. 832 с.

Π“ΠΎΡ„ΠΌΠ°Π½ Π’.Π­., Π₯ΠΎΠΌΠΎΠ½Π΅Π½ΠΊΠΎ А. Π”. Delphi. Быстрый старт. — Π‘Пб: Π‘Π₯Π’-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³, 2003. — 288 с.: ΠΈΠ»

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

Листинги ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtCtrls, math, Grids, Buttons, Mask, Calendar, ComCtrls,

Spin, MyTypes, Unit2;

Type

TInputForm = class (TForm)

BitBtn1: TBitBtn;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

LoadButton: TButton;

SaveButton: TButton;

PageControl1: TPageControl;

TabSheet1: TTabSheet;

TabSheet2: TTabSheet;

TabSheet3: TTabSheet;

StringGrid1: TStringGrid;

DelBtn: TBitBtn;

AddBtn: TBitBtn;

StringGrid2: TStringGrid;

SortBtn: TBitBtn;

TabSheet4: TTabSheet;

TabSheet5: TTabSheet;

StringGrid3: TStringGrid;

StringGrid4: TStringGrid;

StringGrid5: TStringGrid;

Label1: TLabel;

KSpinEdit: TSpinEdit;

Label2: TLabel;

MSpinEdit: TSpinEdit;

FindBtn: TBitBtn;

CopyBtn: TBitBtn;

FButton: TButton;

procedure FormCreate (Sender: TObject);

procedure LoadButtonClick (Sender: TObject);

procedure SaveButtonClick (Sender: TObject);

procedure PageControl1Change (Sender: TObject);

procedure AddBtnClick (Sender: TObject);

procedure SGDblClick (Sender: TObject);

procedure DelBtnClick (Sender: TObject);

procedure SortBtnClick (Sender: TObject);

procedure KSpinEditChange (Sender: TObject);

procedure MSpinEditChange (Sender: TObject);

procedure SGKeyPress (Sender: TObject; var Key: Char);

procedure FormDestroy (Sender: TObject);

procedure CopyBtnClick (Sender: TObject);

procedure FindBtnClick (Sender: TObject);

procedure FButtonClick (Sender: TObject);

private

{Private declarations}

public

{Public declarations}

//Fz: file of TVector; // Π€Π°ΠΉΠ» Ρ‚ΠΈΠΏΠ° запись

KPod, M: integer; // ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ подъСздов ΠΈ ΡΡ‚Π°ΠΆΠ΅ΠΉ

People: TVector; // Π’Π΅ΠΊΡ‚ΠΎΡ€ — Ρ‡Π»Π΅Π½Ρ‹ сСмСй Π“Πš

GK: TVector; // Π’Π΅ΠΊΡ‚ΠΎΡ€ — Π³Π»Π°Π²Π½Ρ‹Π΅ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ΠΎΡΡŠΠ΅ΠΌΡ‰ΠΈΠΊΠΈ

Scheme: TVector; // Π’Π΅ΠΊΡ‚ΠΎΡ€ — Π‘Π₯Π•ΠœΠ

FlatAtr: TVector; // Π’Π΅ΠΊΡ‚ΠΎΡ€ — Атрибуты ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€

KVART: TVector; // Π’Π΅ΠΊΡ‚ΠΎΡ€ — ΠšΠ’ΠΠ Π’

Ft: TextFile; // ВСкстовой Ρ„Π°ΠΉΠ»

FileNameT: string[200]; // Имя Ρ„Π°ΠΉΠ»Π°

FSGVector: array [1.10] of TStringGrid;

procedure FillStringGrid (SG: TStringGrid; Vec: TVector);

function GetVec: TVector;

procedure ReadVec (var Vec: TVector);

procedure WriteVec (Vec: TVector); // Π—Π°ΠΏΠΈΡΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π² Ρ„Π°ΠΉΠ»

end;

var

InputForm: TInputForm;

Implementation

{$R *.DFM}

procedure TInputForm. FormCreate (Sender: TObject);

begin

KPod:=2; M:= 3;

// ;

Kvart:= TVector. Create;

Kvart. Cols:= 7;

Kvart. Names[1]: = 'НомСр ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹';

Kvart. Names[2]: = 'число ΠΊΠΎΠΌΠ½Π°Ρ‚';

Kvart. Names[3]: = 'Π½ΠΎΠΌΠ΅Ρ€ этаТа';

Kvart. Names[4]: = 'Тилая ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ (ΠΊΠ². ΠΌ.)';

Kvart. Names[5]: = 'общая ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ (ΠΊΠ². ΠΌ.)';

Kvart. Names[6]: = 'ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹';

Kvart. Names[7]: = 'ΠŸΡ€ΠΈΠ²Π°Ρ‚.';

// ;

Scheme:= TVector. Create;

Scheme. Cols:= 4;

Scheme. Names[1]: = 'Кв. 1';

Scheme. Names[2]: = 'Кв. 2';

Scheme. Names[3]: = 'Кв. 3';

Scheme. Names[4]: = 'Кв. 4';

// ;

GK:= TVector. Create;

GK. Cols:= 8;

GK. Names[1]: = 'НомСр ΠšΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹';

GK. Names[2]: = 'Ѐамилия';

GK. Names[3]: = 'Имя';

GK. Names[4]: = 'ΠžΡ‚Ρ‡Π΅ΡΡ‚Π²ΠΎ';

GK. Names[5]: = 'Π“ΠΎΠ΄ роТдСния';

GK. Names[6]: = 'ΠœΠ΅ΡΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹';

GK. Names[7]: = 'Π›ΡŒΠ³ΠΎΡ‚Ρ‹';

GK. Names[8]: = 'Π”ΠΎΠ»Π³ (тыс. Ρ€ΡƒΠ±.)';

// ;

// 1.5. Π’Π°Π±Π»ΠΈΡ†Π°, А ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ список ΠΆΠΈΠ»ΡŒΡ†ΠΎΠ² — Ρ‡Π»Π΅Π½ΠΎΠ² сСмСй Π³Π»Π°Π²Π½Ρ‹Ρ… ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ΠΎΡΡŠΠ΅ΠΌΡ‰ΠΈΠΊΠΎΠ²:

// 1) фамилия,

// 2) родствСнноС ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ ΠΊ Π“Πš (ΠΌΠ°Ρ‚ΡŒ / ΠΎΡ‚Π΅Ρ†/ΠΌΡƒΠΆ/ΠΆΠ΅Π½Π° / Π΄ΠΎΡ‡ΡŒ/сын),

// 3) Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹,

// 4) ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ «ΠΏΠ΅Π½ΡΠΈΠΎΠ½Π΅Ρ€ / учащийся / Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ / дошкольник».

People:= TVector. Create;

People. Cols:= 4;

People. Names[1]: = 'Ѐамилия';

People. Names[2]: = 'Родств.ΠΎΡ‚Π½-Π½ΠΈΠ΅';

People. Names[3]: = 'НомСр ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹';

People. Names[4]: = 'ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ';

People. Names[5]: = 'ΠœΠ΅ΡΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρ‹';

People. Names[6]: = 'Π›ΡŒΠ³ΠΎΡ‚Ρ‹';

People. Names[7]: = 'Π”ΠΎΠ»Π³ (тыс. Ρ€ΡƒΠ±.)';

// ;

// 1.6. Π’Π°Π±Π»ΠΈΡ†Π° Π‘ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€ (Π² ΡΠΎΠΎΡ‚вСтствии с Ρ‡ΠΈΡΠ»ΠΎΠΌ ΠΊΠΎΠΌΠ½Π°Ρ‚):

// 1) число ΠΊΠΎΠΌΠ½Π°Ρ‚,

// 2) мСсячная ΠΊΠ²Π°Ρ€Ρ‚ΠΏΠ»Π°Ρ‚Π°,

// 3) ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ (ΠΊΠ². ΠΌ.),

// 4) ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹ (Ссли ΠΎΠ½Π° Π΅ΡΡ‚ΡŒ),

// 5) ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹,

// 6) ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ Ρ‡Π΅Ρ‚Π²Π΅Ρ€Ρ‚ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹,

// 7) ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΠΎΡ€ΠΈΠ΄ΠΎΡ€Π°,

// 8) ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ ΠΊΡƒΡ…Π½ΠΈ,

// 9) общая ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ Ρ‚ΡƒΠ°Π»Π΅Ρ‚Π° ΠΈ Π²Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ½Π°Ρ‚Ρ‹.

FlatAtr:= TVector. Create;

FlatAtr. Cols:= 9;

FlatAtr. Names[1]: = 'Число комн.';

FlatAtr. Names[2]: = 'ΠšΠ²Π°Ρ€Ρ‚ΠΏΠ»Π°Ρ‚Π°';

FlatAtr. Names[3]: = 'Пл.ΠΊΠΎΠΌ. № 1';

FlatAtr. Names[4]: = 'Пл.ΠΊΠΎΠΌ. № 2';

FlatAtr. Names[5]: = 'Пл.ΠΊΠΎΠΌ. № 3';

FlatAtr. Names[6]: = 'Пл.ΠΊΠΎΠΌ. № 4';

FlatAtr. Names[7]: = 'Пл.ΠΊΠΎΡ€ΠΈΠ΄ΠΎΡ€Π°';

FlatAtr. Names[8]: = 'Пл.ΠΊΡƒΡ…Π½ΠΈ';

FlatAtr. Names[9]: = 'Пл.Ρ‚ΡƒΠ°Π»Π΅Ρ‚Π°';

// ;

PageControl1Change (Sender);

FSGVector[1]: = StringGrid1;

FSGVector[2]: = StringGrid2;

FSGVector[3]: = StringGrid3;

FSGVector[4]: = StringGrid4;

FSGVector[5]: = StringGrid5;

end;

procedure TInputForm. ReadVec (var Vec: TVector);

var

x, i, j: integer;

St: String;

begin

Readln (Ft, x); Vec. Cols:= x;

for i:=1 to Vec. Cols do

begin Readln (Ft, St); Vec. Names[i]: = St; end;

Readln (Ft, x); Vec. Size:= x;

for i:=1 to Vec. Size do

begin

for j:=1 to Vec. Cols do

begin Readln (Ft, St); Vec. X [i, j]: = St; end;

end;

Vec. SortId:= 1;

Vec. SortMode:= 1;

end;

procedure TInputForm. WriteVec (Vec: TVector);

var i, j: integer;

begin

Writeln (Ft, Vec. Cols);

for i:=1 to Vec. Cols do

Writeln (Ft, Vec. Names[i]);

Writeln (Ft, Vec. Size);

for i:=1 to Vec. Size do

begin

for j:=1 to Vec. Cols do

Writeln (Ft, Vec. X [i, j]);

end;

end;

// Π§Ρ‚Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

procedure TInputForm. LoadButtonClick (Sender: TObject);

begin

OpenDialog1. Title:= 'ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°'; // ИзмСнСниС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΎΠΊΠ½Π° Π΄ΠΈΠ°Π»ΠΎΠ³Π°

if not OpenDialog1. Execute then exit;

// Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стандартного Π΄ΠΈΠ°Π»ΠΎΠ³Π° Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°

FileNameT:= OpenDialog1. FileName; // Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ дискового Ρ„Π°ΠΉΠ»Π°

AssignFile (Ft, FileNameT); // БвязываниС Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Fz Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π°

Reset (Ft); // ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ„Π°ΠΉΠ»Π°

ReadVec (Kvart); // Π§Ρ‚Π΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈΠ· Ρ„Π°ΠΉΠ»Π°

ReadVec (Scheme);

ReadVec (GK);

ReadVec (People);

ReadVec (FlatAtr);

PageControl1Change (Sender);

CloseFile (Ft);

end;

procedure TInputForm. SaveButtonClick (Sender: TObject);

// Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»Π΅

begin

if not SaveDialog1. Execute then exit;

// Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ стандартного Π΄ΠΈΠ°Π»ΠΎΠ³Π° Π²Ρ‹Π±ΠΎΡ€Π° ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°

begin

FileNameT:= SaveDialog1. FileName; // Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΈ дискового Ρ„Π°ΠΉΠ»Π°

AssignFile (Ft, FileNameT); // БвязываниС Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Fz Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ Ρ„Π°ΠΉΠ»Π°

{$I-}

Rewrite (Ft); // ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°

{$I+}

if not ((IOResult = 0) and (FileNameT <> «)) then

begin

Application. MessageBox ('НС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ»!', 'Ошибка', MB_OK);

exit;

end;

end;

WriteVec (Kvart); // Π—Π°ΠΏΠΈΡΡŒ Π² Ρ„Π°ΠΉΠ»

WriteVec (Scheme);

WriteVec (GK);

WriteVec (People);

WriteVec (FlatAtr);

CloseFile (Ft); // Π—Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°

end;

// ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° заполнСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° StringGrid Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠ· Π’Π΅ΠΊΡ‚ΠΎΡ€Π° Vec

procedure TInputForm. FillStringGrid (SG: TStringGrid; Vec: TVector);

var i, j: integer;

begin

Sg. ColCount:= Vec. Cols+1;

if Vec. Size=0

then Sg. RowCount:=2

else Sg. RowCount:=Vec. Size+1;

for i:=1 to Vec. Cols do

Sg. Cells [i, 0]: = Vec. Names[i];

for i:=1 to Vec. Size do

begin

Sg. Cells [0, i]: = IntToStr (i);

for j:=1 to Vec. Cols do

Sg. Cells [j, i]: = Vec. X [i, j];

end;

Sg. ColWidths[0]: = 25;

end;

procedure TInputForm. PageControl1Change (Sender: TObject);

begin

case PageControl1. ActivePageIndex of

0: FillStringGrid (StringGrid1, Kvart);

1: FillStringGrid (StringGrid2, Scheme);

2: FillStringGrid (StringGrid3, GK);

3: FillStringGrid (StringGrid4, People);

4: FillStringGrid (StringGrid5, FlatAtr);

end;

end;

procedure TInputForm. AddBtnClick (Sender: TObject);

var

SG: TStringGrid;

Vec: TVector;

begin

Sg:= FSGVector [PageControl1. ActivePageIndex+1];

Vec:= GetVec;

Vec. Add;

FillStringGrid (SG, Vec);

end;

procedure TInputForm. SGDblClick (Sender: TObject);

var

NRooms, NKv, NKvart, NPod, NFloor: integer;

porch: array [0.MaxN] of integer;

SG: TStringGrid;

Vec: TVector;

i, j, x, k, l: integer;

InputString: String;

begin

Sg:= TStringGrid (Sender);

i:= Sg. Selection. Left;

j:= Sg. Selection. Top;

Vec:= GetVec;

if (i<1) then exit; // Π—Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ рСдактирования

// Установим особыС ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠšΠ’ΠΠ Π’ — StringGrid1

if (Sg. Name = 'StringGrid1') and (i in [2,3,4,5]) then

begin

Application. MessageBox (

'Π­Ρ‚ΠΎ ΠΏΠΎΠ»Π΅ заполняСтся автоматичСски ΠΏΠΎ Π½ΠΎΠΌΠ΅Ρ€Ρƒ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹ ΠΈ Π½Π΅ Ρ€Π΅Π΄Π°ΠΊΡ‚ируСтся!'

'Ошибка', MB_OK);

exit;

end;

InputString:= InputBox ('', 'Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅', Vec. X [j, i]);

if InputString=''

then exit;

SG. Cells [i, j]: = InputString;

Vec.X [j, i]: = InputString;

// Π—Π°ΠΏΠΎΠ»Π½ΠΈΠΌ ΠΏΡ€ΠΈ нСобходимости ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ поля для Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ ΠšΠ’ΠΠ Π’ — StringGrid1

if (Sg. Name = 'StringGrid1') and (i = 1) then

begin

NKvart:= Vec. X [j, i];

porch[0]:= 0; x:= 0;

for i:=1 to Scheme. Size do

begin

porch[i]: = 2;

if Scheme. X [i, 3]=''

then porch[i]: = 2

else if Scheme. X [i, 4]=''

then porch[i]: = 3 else porch[i]: =4;

if NKvart <= x + (porch[i]*M) then

begin

NPod:= i; // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ€ подъСзда

NFloor:= (NKvart-x) div M +1; // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ€ этаТа

NKv:= (NKvart-x) mod M; // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ². Π½Π° ΡΡ‚Π°ΠΆΠ΅

if NKv=0

then NKv:= M;

NRooms:= Scheme. X [i, NKv]; // ΠžΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠ»ΠΈ ΠΊΠΎΠ»-Π²ΠΎ ΠΊΠΎΠΌΠ½Π°Ρ‚

// Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ количСство ΠΊΠΎΠΌΠ½Π°Ρ‚ Π² ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Π΅

SG. Cells [2, j]: = IntToStr (NRooms); Vec. X [j, 2]: = NRooms;

// Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ Π½ΠΎΠΌΠ΅Ρ€ этаТа

SG. Cells [3, j]: = IntToStr (NFloor); Vec. X [j, 3]: = NFloor;

for k:=1 to FlatAtr. Size do

begin

if FlatAtr. X [i, 1]= NRooms then // совпадаСт количСство ΠΊΠΎΠΌΠ½Π°Ρ‚

begin

//x — Π°Ρ‚Ρ€. 4 = сумма ΠΏΠ»ΠΎΡ‰Π°Π΄Π΅ΠΉ всСх ΠΊΠΎΠΌΠ½Π°Ρ‚, взятых ΠΈΠ· Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π‘,

x:= 0;

for l:=1 to NRooms do

try

x:= x + StrToInt (FlatAtr.X [k, 2+l]);

except

end;

// Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ ΠΆΠΈΠ»ΡƒΡŽ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ

Vec.X [j, 4]: = x; SG. Cells [4, j]: = Vec. X [j, 4];

x:= x + StrToInt (FlatAtr.X [i, 7])+StrToInt (FlatAtr.X [i, 8])+

StrToInt (FlatAtr.X [i, 9]);

// Π—Π°ΠΏΠΈΡˆΠ΅ΠΌ ΠΎΠ±Ρ‰ΡƒΡŽ ΠΏΠ»ΠΎΡ‰Π°Π΄ΡŒ

SG. Cells [5, j]: = IntToStr (x); Vec. X [j, 5]: = x;

break;

end;

end;

InputString:= 'ΠšΠ²Π°Ρ€Ρ‚ΠΈΡ€Π° β„–'+IntToStr (NKvart)+

' находится Π² ΠΏΠΎΠ΄ΡŠΠ΅Π·Π΄Π΅ β„–'+IntToStr (NPod)+

' Π½Π° ΡΡ‚Π°ΠΆΠ΅ β„–'+IntToStr (NFloor)+

' ('+IntToStr (NRooms)+' ΠΊΠΎΠΌΠ½Π°Ρ‚Π° (Ρ‹)).';

Application. MessageBox (PChar (InputString), '', MB_OK);

exit;

end;

x:= x + porch[i]*M;

end;

Application. MessageBox ('Указанная ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Π° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π° ΠΏΠΎ ΡΡ…Π΅ΠΌΠ΅ Π΄ΠΎΠΌΠ°',

'Ошибка', MB_OK);

SG. Cells [2, j]: = «; Vec. X [j, 2]: = «;

SG. Cells [3, j]: = «; Vec. X [j, 3]: = «;

end;

if (j>Vec. Size) then // ΠšΠ»ΠΈΠΊΠ½ΡƒΠ»ΠΈ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ области Π΄Π°Π½Π½Ρ‹Ρ…

begin

Vec. Add; FillStringGrid (SG, Vec);

end;

end;

function TInputForm. GetVec: TVector;

begin

case PageControl1. ActivePageIndex of

0: result:= Kvart;

1: result:= Scheme;

2: result:= GK;

3: result:= People;

4: result:= FlatAtr;

else result:= Kvart;

end;

end;

procedure TInputForm. DelBtnClick (Sender: TObject);

var

SG: TStringGrid;

Vec: TVector;

i: integer;

begin

Sg:= FSGVector [PageControl1. ActivePageIndex+1];

i:= Sg. Selection. Top; // удаляСмая строка

Vec:= GetVec;

Vec. Delete (i);

FillStringGrid (SG, Vec);

end;

procedure TInputForm. SortBtnClick (Sender: TObject);

var

SG: TStringGrid;

Vec: TVector;

i: integer;

begin

Sg:= FSGVector [PageControl1. ActivePageIndex+1];

i:= Sg. Selection. Left; // Π‘ΡƒΠ΄Π΅ΠΌ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ этот столбСц

Vec:= GetVec;

if (i<1) then exit; // Π—Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ рСдактирования

Vec. SortId:= i; // установим сортируСмый столбСц

Vec. Sort;

FillStringGrid (SG, Vec);

end;

procedure TInputForm. KSpinEditChange (Sender: TObject);

begin

KPod:= KSpinEdit. Value;

end;

procedure TInputForm. MSpinEditChange (Sender: TObject);

begin

M:= MSpinEdit. Value;

end;

procedure TInputForm. SGKeyPress (Sender: TObject; var Key: Char);

begin

if Key =#13 then // Если Π½Π°ΠΆΠ°Ρ‚Π° клавиша Enter Ρ‚ΠΎ…

SGDblClick (Sender);

end;

procedure TInputForm. FormDestroy (Sender: TObject);

begin

People. Destroy;

GK. Destroy;

Scheme. Destroy;

FlatAtr. Destroy;

Kvart. Destroy;

end;

procedure TInputForm. CopyBtnClick (Sender: TObject);

var

SG: TStringGrid;

Vec: TVector;

i: integer;

begin

Sg:= FSGVector [PageControl1. ActivePageIndex+1];

i:= Sg. Selection. top; // Π‘ΡƒΠ΄Π΅ΠΌ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту строку

Vec:= GetVec;

Vec. AddCopy (i);

FillStringGrid (SG, Vec);

end;

procedure TInputForm. FindBtnClick (Sender: TObject);

var

SG: TStringGrid;

Vec: TVector;

res,

Row, Col: integer;

InputString: String;

begin

Sg:= FSGVector [PageControl1. ActivePageIndex+1];

Col:= Sg. Selection. Left;

Row:= Sg. Selection. Top;

Vec:= GetVec;

if (Col<1) then exit; // Π—Π° ΠΏΡ€Π΅Π΄Π΅Π»Π°ΠΌΠΈ рСдактирования

InputString:= InputBox ('', 'Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для поиска', «);

if InputString=''

then exit;

res:= Vec. Find (Col, Row, InputString);

if res=0 then

begin

Application. MessageBox ('Π£ΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ!', 'Ошибка', MB_OK);

exit;

end;

Sg. Row:= res;

end;

procedure TInputForm. FButtonClick (Sender: TObject);

var

NKvart, NPod: integer;

fl, i, k, x, p: integer;

St, FIO: String;

begin

//

ReportForm. ListBox1. Items. Clear;

ReportForm. ListBox1. Items. Add (

' Cписок всСх ΠΆΠΈΠ»ΡŒΡ†ΠΎΠ² Π΄ΠΎΠΌΠ°, ΠΏΡ€ΠΎΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΡ… Π² ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Π°Ρ…, '+

'Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π“Πš ΠΈΠΌΠ΅Π΅Ρ‚ Π»ΡŒΠ³ΠΎΡ‚Ρ‹ ΠΏΠΎ ΠΊΠ²Π°Ρ€Ρ‚ΠΏΠ»Π°Ρ‚Π΅');

for k:=1 to People. Size do

begin

NKvart:= People. x [k, 3]; // НомСр ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹

fl:= 0;

for i:=1 to GK. Size do

begin

if Gk. X [i, 1]=NKvart then

begin fl:= 1; break; end;

end;

if (fl=0) or ((fl=1) and (Gk.X [i, 7]<>'Π΄Π°'))

then continue; // Π£ Π“Πš Π½Π΅Ρ‚ Π»ΡŒΠ³ΠΎΡ‚;

FIO:= People. X [k, 1];

x:= 0; NPod:= 0;

for i:=1 to Scheme. Size do

begin

if Scheme. X [i, 3]=''

then p:= 2

else if Scheme. X [i, 4]=''

then p:= 3 else p:=4;

if NKvart <= x + (p*M) then

begin NPod:= i; break; end;

end;

for i:=1 to Kvart. Size do

if Kvart. X [i, 1]= NKvart then

begin // ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ ΠΈΡΠΊΠΎΠΌΡƒΡŽ строку ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹

St:= FIO+' ΠΊΠ². β„–'+IntToStr (NKvart)+' подъСзд β„–'+IntToStr (NPod)+' - '+

IntToStr (Kvart.X [i, 2])+' ΠΊΠΎΠΌΠ½. ';

if Kvart. X [i, 7]='Π΄Π°'

then St:= St + ' - ΠΊΠ²-Ρ€Π° ΠΏΡ€ΠΈΠ²Π°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° '

else St:= St + ' - ΠΊΠ²-Ρ€Π° Π½Π΅ ΠΏΡ€ΠΈΠ²Π°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° ';

// списка: Ѐамилия ΠΆΠΈΠ»ΡŒΡ†Π°, Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΡ€Ρ‹, подъСзд, число ΠΊΠΎΠΌΠ½Π°Ρ‚, ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ

// ΠΏΡ€ΠΈΠ²Π°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ReportForm. ListBox1. Items. Add (St);

end;

end;

ReportForm. ShowModal;

end;

end.

unit Unit2;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons, ComCtrls, ExtCtrls;

type

TReportForm = class (TForm)

Panel1: TPanel;

Panel2: TPanel;

OKBtn: TButton;

CancelBtn: TButton;

ListBox1: TListBox;

private

{Private declarations}

public

{Public declarations}

end;

var

ReportForm: TReportForm;

implementation

{$R *.DFM}

end.

unit MyTypes;

interface

uses Sysutils, Contnrs;

const MaxN = 100;

type

TVarType = Variant; //TVarRec;

TVarMas = array [1.MaxN] of TVarType;

TVector = class (TInterfacedObject)

private

{Private declarations}

FArr: array [1.MaxN] of TVarMas; //source data

FNum: integer; //number of items

FCols: integer; //number of columns

FNames: array [1.MaxN] of String[MaxN]; //names of columns

function GetSize: Integer;

procedure SetSize (value: Integer);

function GetCols: Integer;

procedure SetCols (value: Integer);

procedure SetX (Index1, Index2: integer; value: TVarType);

function GetX (Index1, Index2: integer): TVarType;

procedure SetName (Index: integer; value: String);

function GetName (Index: integer): String;

public

SortId: integer; // Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ сортируСмый столбСц

SortMode: integer; // Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ сортировки

constructor Create;

property X [Index1, Index2: Integer]: TVarType read GetX write SetX;

property Names [Index: Integer]: String read GetName write SetName;

property Size: Integer read GetSize write SetSize;

property Cols: Integer read GetCols write SetCols;

procedure Sort (xMode: integer = 0);

procedure Add ();

procedure AddCopy (Index: integer);

procedure Delete (Index: integer);

function Find (Col, Row: integer; Value: Variant): integer;

end;

implementation

constructor TVector. Create;

begin

FNum:= 0; SortId:= 0; SortMode:= 1;

end;

function TVector. GetSize: Integer;

begin result:= FNum; end;

procedure TVector. SetSize (value: Integer);

begin FNum:= value; end;

function TVector. GetCols: Integer;

begin result:= FCols; end;

procedure TVector. SetCols (value: Integer);

begin FCols:= value; end;

procedure TVector. SetX (Index1, Index2: integer; value: TVarType);

begin

FArr[Index1] [Index2]: = value;

end;

function TVector. GetX (Index1, Index2: integer): TVarType;

begin

result:= FArr[Index1] [Index2];

end;

function TVector. GetName (Index: integer): String;

begin

result:= FNames[Index];

end;

procedure TVector. SetName (Index: integer; value: String);

begin

FNames[Index]: = Value;

end;

procedure TVector. Add ();

begin

FNum:= FNum + 1;

end;

procedure TVector. AddCopy (Index: integer);

begin

FNum:= FNum + 1;

FArr[FNum]: = FArr[Index];

end;

procedure TVector. Delete (Index: integer);

var i: integer;

begin

if FNum=0 then exit; // Π’Ρ€ΠΎΠ΄Π΅ ΠΊΠ°ΠΊ Π½Π΅Ρ‡Π΅Π³ΠΎ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ

for i:=Index+1 to FNum do // ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΠ΅ΠΌ строки

FArr [I-1]: = FArr[I];

FNum:= FNum -1; // ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅ΠΌ количСство

end;

// ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° сортировки Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡƒ SortId с Ρ€Π΅ΠΆΠΈΠΌΠΎΠΌ xMode

// xMode = 1 — ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ

// xMode = 2 — ΠΏΠΎ ΡƒΠ±Ρ‹Π²Π°Π½ΠΈΡŽ

// xMode = 0 — ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Ρ€Π΅ΠΆΠΈΠΌ SortMode ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠΌΠ΅Π½ΡΡ‚ΡŒ Π΅Π³ΠΎ

procedure TVector. Sort (xMode: integer = 0);

procedure QSort (l, r: Integer);

function Less (var x, y: Variant): boolean;

begin

if (X < Y) and (SortMode=1) // ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ

then Less:=true

else Less:=false;

end;

var

i, j, x: integer;

y: TVarMas; //Variant;

begin

i:= l; j:= r; x:= (l+r) DIV 2;

repeat

while Less (FArr[i] [SortId], FArr[x] [SortId]) do i:= i + 1;

while Less (FArr[x] [SortId], FArr[j] [SortId]) do j:= j — 1;

if i <= j then

begin

y:= FArr[i];

FArr[i]:= FArr[j];

FArr[j]:= y;

i:= i + 1; j:= j — 1;

end;

until i > j;

if l < j then QSort (l, j);

if i < r then QSort (i, r);

end;

begin {QuickSort};

if xMode<>0

then SortMode:= xMode;

QSort (1, Size);

if xMode=0 then // ПомСняСм Ρ€Π΅ΠΆΠΈΠΌ сортировки

begin

if SortMode = 1

then SortMode:=2 else SortMode:=1;

end;

end;

// ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° поиска значСния Value Π² ΡΡ‚ΠΎΠ»Π±Ρ†Π΅ Col с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Row

// Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ индСкс Π½Π°ΠΉΠ΄Π΅Π½ΠΎΠΉ строки ΠΈΠ»ΠΈ 0 Ссли Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ

function TVector. Find (Col, Row: integer; Value: Variant): integer;

var i: integer;

begin

result:= 0;

for i:=Row to FNum do

if FArr[I] [Col] = Value then

begin result:= i; exit; end;

end;

end.

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