ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π°ΡΠ°Π»ΡΠ½ΠΈΠΊΠ° ΠΆΠΈΠ»ΠΈΡΠ½ΠΎ-ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠ»ΡΠΆΠ±Ρ
ΠΡΠ±ΠΈΡΠ°Π΅ΠΌ Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅ΠΌ Π½Π°Π·ΡΠ²Π°ΡΡ ΠΎΠΏΠΎΡΠ½ΡΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ. Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π²ΡΠ±ΠΎΡ ΠΎΠΏΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π±Π΅Π·ΡΠ°Π·Π»ΠΈΡΠ΅Π½. Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π²ΡΠ±ΠΈΡΠ°ΡΡΡΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΌΠ΅Π΄ΠΈΠ°Π½Π°, Π½ΠΎ Π±Π΅Π· Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎ ΡΠΎΡΡΠΈΡΡΠ΅ΠΌΡΡ Π΄Π°Π½Π½ΡΡ Π΅Ρ ΠΎΠ±ΡΡΠ½ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ. ΠΠ·Π²Π΅ΡΡΠ½ΡΠ΅ ΡΡΡΠ°ΡΠ΅Π³ΠΈΠΈ: Π²ΡΠ±ΠΈΡΠ°ΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ΅Π΄Π½ΠΈΠΉ ΠΈΠ»ΠΈ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π°ΡΠ°Π»ΡΠ½ΠΈΠΊΠ° ΠΆΠΈΠ»ΠΈΡΠ½ΠΎ-ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠ»ΡΠΆΠ±Ρ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΠ£Π Π‘ΠΠΠΠ ΠΠ ΠΠΠΠ’
ΠΏΠΎ ΠΊΡΡΡΡ «Π‘ΡΡΡΠΊΡΡΡΡ ΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ Π² ΠΠΠ»
Π½Π° ΡΠ΅ΠΌΡ
«ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π°ΡΠ°Π»ΡΠ½ΠΈΠΊΠ° ΠΆΠΈΠ»ΠΈΡΠ½ΠΎ-ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠ»ΡΠΆΠ±Ρ»
Π’Π΅ΠΌΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΡΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° — «ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π°ΡΠ°Π»ΡΠ½ΠΈΠΊΠ° ΠΆΠΈΠ»ΠΈΡΠ½ΠΎ-ΡΠΊΡΠΏΠ»ΡΠ°ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠ»ΡΠΆΠ±Ρ». ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎ Π·Π°Π΄Π°Π½ΠΈΡ ΠΊ ΠΊΡΡΡΠΎΠ²ΠΎΠΌΡ ΠΏΡΠΎΠ΅ΠΊΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ ΡΠΈΠΏΠ° Π²Π΅ΠΊΡΠΎΡ ΠΈ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΡ 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.