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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Β«Π’Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ справочник»

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

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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Β«Π’Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ справочник» (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

  • Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅
  • ВСхничСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅
  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  • 1. ВСорСтичСский ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»
  • 2. ОписаниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ…
    • 2.1 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° для хранСния справочника
    • 2.2 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° для хранСния Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ²
    • 2.3 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ„Π°ΠΉΠ»Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ
  • 3. ОписаниС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ
  • 4. ОписаниС структуры прилоТСния ΠΈ ΠΈΠ½Ρ‚СрфСйса ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ
  • 5. БистСмныС трСбования ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ ограничСния
  • 6. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования прилоТСния
  • 7. Анализ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… характСристик ΠΈ Π²Ρ‹Π²ΠΎΠ΄Ρ‹
  • Π—Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅
  • Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹
  • ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ВСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ВСхничСскоС Π·Π°Π΄Π°Π½ΠΈΠ΅

Π’ Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Π΅ трСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ справочник, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ свСдСния: ЀИО, адрСс, элСктронная ΠΏΠΎΡ‡Ρ‚Π°, Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ (ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ, домашний).

Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΠΌ постановку Π·Π°Π΄Π°Ρ‡ΠΈ ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ условия, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π΄ΠΎΠ»ΠΆΠ½Π° ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π° Ρ‚Π°ΠΊΠΆΠ΅ трСбования ΠΊ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ:

1. Π’Π²ΠΎΠ΄ исходных Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Ρ€Π°Π½Π΅Π΅ созданного справочника ΠΈ ΠΏΠΎΠ΄Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π² ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ справочник.

2. ΠšΠΎΡ€Ρ€Π΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ…: Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π½Π° ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ нСсколько Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° ΠΊΠ°ΠΊ ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹Ρ…, Ρ‚Π°ΠΊ ΠΈ Π΄ΠΎΠΌΠ°ΡˆΠ½ΠΈΡ…; Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°; ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π° ΠΈΠ· ΡΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠ°.

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

4. Π’ ΡΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠ΅ рСализуСтся динамичСский поиск. Поиск Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ: Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ, Π½ΠΎΠΌΠ΅Ρ€Ρƒ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρƒ, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ.

5. Π’Ρ‹Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΠ± Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π΅ Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ.

РСшСниС Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π°Π·Π±ΠΈΡ‚ΡŒ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡ Ρ‚Π°ΠΊΠΈΡ…, ΠΊΠ°ΠΊ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ справочник, Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ запись, поиск ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌ, Π²Ρ‹Π²ΠΎΠ΄ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ. НаиболСС Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ для поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ поиска ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ. Π’Ρ‹Π±ΠΎΡ€ подходящих Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ основаны Π½Π° ΠΏΡ€ΠΎΡΡ‚ΠΎΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΡΡ„фСктивности Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

1. ВСорСтичСский ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»

Π’ Π΄Π°Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹, Π½ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹ΠΌΠΈ ΠΈΠ· Π½ΠΈΡ… ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки ΠΈ ΠΏΠΎΠΈΡΠΊΠ°.

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

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ прямого Π²Ρ‹Π±ΠΎΡ€Π°. Π‘ΡƒΡ‚ΡŒ этой сортировки Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ выбираСтся элСмСнт с Π½Π°ΠΈΠΌΠ΅Π½ΡŒΡˆΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, мСняСтся мСстами с ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ элСмСнтом, Π·Π°Ρ‚Π΅ΠΌ этот процСсс повторяСтся с ΠΎΡΡ‚Π°Π²ΡˆΠΈΠΌΠΈΡΡ элСмСнтами Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° список Π±ΡƒΠ΄Π΅Ρ‚ отсортирован.

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

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

Рис 1.3 Π‘Ρ…Π΅ΠΌΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° прямого ΠΎΠ±ΠΌΠ΅Π½Π° Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ прямого ΠΎΠ±ΠΌΠ΅Π½Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ эта сортировка Π±ΠΎΠ»Π΅Π΅ проста Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Π° для Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ. Π”Ρ€ΡƒΠ³ΠΈΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ сортировки слоТны Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, поэтому ΠΎΡ‚ Π½ΠΈΡ… Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΎΡ‚ΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ.

Π’Π°ΠΆΠ½Ρ‹ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ для Π΄Π°Π½Π½ΠΎΠΉ курсовой Ρ€Π°Π±ΠΎΡ‚Ρ‹ являСтся Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска подстроки Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅. Рассмотрим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹.

Алгоритм основанный Π½Π° ΠΌΠ΅Ρ‚ΠΎΠ΄Π΅ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ поиска. ΠžΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΠΌ S — слово, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ищСтся ΠΎΠ±Ρ€Π°Π·Π΅Ρ† X. ΠŸΡƒΡΡ‚ΡŒ m ΠΈ n — Π΄Π»ΠΈΠ½Ρ‹ слов S ΠΈ X ΡΠΎΠΎΡ‚вСтствСнно. МоТно ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ со ΡΠ»ΠΎΠ²ΠΎΠΌ X Π²ΡΠ΅ подслова S, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ 1,2,…, m-n+1 Π² ΡΠ»ΠΎΠ²Π΅ S; Π² ΡΠ»ΡƒΡ‡Π°Π΅ равСнства выводится ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ позиция. Алгоритм прост Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ сравнСний Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ O ((m-n+1)*n+1).

Алгоритм Π Π°Π±ΠΈΠ½Π°. Π’ ΡΠ»ΠΎΠ²Π΅ A, Π΄Π»ΠΈΠ½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρ€Π°Π²Π½Π° m, ΠΌΡ‹ ΠΈΡ‰Π΅ΠΌ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† X Π΄Π»ΠΈΠ½Ρ‹ n. Π’Ρ‹Ρ€Π΅ΠΆΠ΅ΠΌ «ΠΎΠΊΠΎΡˆΠ΅Ρ‡ΠΊΠΎ» Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ n ΠΈ Π±ΡƒΠ΄Π΅ΠΌ Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌΡƒ слову. Нас интСрСсуСт, Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ‚ Π»ΠΈ слово Π² «ΠΎΠΊΠΎΡˆΠ΅Ρ‡ΠΊΠ΅» с Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·Ρ†ΠΎΠΌ. Π‘Ρ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Π±ΡƒΠΊΠ²Π°ΠΌ Π΄ΠΎΠ»Π³ΠΎ. ВмСсто этого фиксируСм Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Ρ‡ΠΈΡΠ»ΠΎΠ²ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ Π½Π° ΡΠ»ΠΎΠ²Π°Ρ… Π΄Π»ΠΈΠ½Ρ‹ n, Ρ‚ΠΎΠ³Π΄Π° Π·Π°Π΄Π°Ρ‡Π° свСдСтся ΠΊ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ чисСл, Ρ‡Ρ‚ΠΎ, нСсомнСнно, быстрСС. Если значСния этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° ΡΠ»ΠΎΠ²Π΅ Π² «ΠΎΠΊΠΎΡˆΠ΅Ρ‡ΠΊΠ΅» ΠΈ Π½Π° ΠΎΠ±Ρ€Π°Π·Ρ†Π΅ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹, Ρ‚ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ Π½Π΅Ρ‚. Волько Ссли значСния ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ совпадСниС ΠΏΠΎ Π±ΡƒΠΊΠ²Π°ΠΌ. ΠžΠ±Ρ‰Π΅Π΅ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΅ΡΡ‚ΡŒ O (n+m). Π”Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ограничСния Π½Π° Ρ‚Скст ΠΈ ΠΈΡΠΊΠΎΠΌΡƒΡŽ строку.

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

2. ОписаниС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ…

2.1 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° для хранСния справочника

На ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ (Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ способы прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΏΠ°ΠΌΡΡ‚ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°: 1) список 2) массив 3) Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля 4) Π΄Π΅Ρ€Π΅Π²ΡŒΡ ΠΈ Ρ‚. Π΄.

Для хранСния Π΄Π°Π½Π½Ρ‹Ρ… Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ использовали двухсвязный список. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт списка состоит ΠΈΠ· Π΄Π²ΡƒΡ… ΠΏΠΎΠ»Π΅ΠΉ: ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ, Π³Π΄Π΅ хранятся Π΄Π°Π½Π½Ρ‹Π΅ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π° (ЀИО, адрСс, элСктронная ΠΏΠΎΡ‡Ρ‚Π°, Π½ΠΎΠΌΠ΅Ρ€Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ²) ΠΈ ΠΏΠΎΠ»Ρ связок, Π³Π΄Π΅ содСрТится ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΈ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅Π³ΠΎ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ.

ГрафичСски структура списка выглядит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Рис. 2.1 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° двусвязного списка Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ список Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅:

LinkAbonent = ^Abonent; //ссылка Π½Π° Π·Π°ΠΏΠΈΡΡŒ Π°Π±ΠΎΠ½Π΅Π½Ρ‚

Abonent = record //Π°Π±ΠΎΠ½Π΅Π½Ρ‚

Name:AnsiString; // имяабонСнта

SurName:AnsiString;// фамилия

SecondName:AnsiString; // отчСство

Tel:LinkTel; //списоктСлСфоновабонСнта

Adress:AnsiString; // адрСсабонСнта

Mail:AnsiString;// ΠΏΠΎΡ‡Ρ‚Π°

nextAbonent: LinkAbonent; //ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉΠ°Π±ΠΎΠ½Π΅Π½Ρ‚Π²ΡΠΏΠΈΡΠΊΠ΅Π°Π±ΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

backAbonent: LinkAbonent; //ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ

index:Integer; //порядковыйномСротобраТаСмогоабонСнта

show:Integer; //отобраТаСтся ΠΈΠ»ΠΈ Π½Π΅Ρ‚ Π°Π±ΠΎΠ½Π΅Π½Ρ‚

end;

Достоинство этой структуры Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠΌΠΈΠΌΠΎ возмоТности ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€, — это простота Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’Π°ΠΊΠΆΠ΅, благодаря Π½Π°Π»ΠΈΡ‡ΠΈΡŽ ссылок, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт Π² ΡΠΏΠΈΡΠΊΠ΅, Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ ΠΌΠ°ΡΡΠΈΠ²Π°, ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π°Π½ΠΈΠΌΠ°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹ΠΉ объСм памяти. АдрСс ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта Π² Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠΌ спискС ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ опрСдСляСтся адрСсом самого списка. Π›Ρ‘Π³ΠΊΠΎΡΡ‚ΡŒ добавлСния ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ элСмСнтов Ρ‚Π°ΠΊ ΠΆΠ΅ являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΄ΠΎΡΡ‚оинств Π΄Π°Π½Π½ΠΎΠΉ структуры.

2.2 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° для хранСния Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ²

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

ГрафичСскоС прСдставлСниС Π΄Π°Π½Π½ΠΎΠΉ структуры:

Рис. 2.2 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° односвязного списка Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° хранСния Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ прСдставлСна Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π²ΠΈΠ΄Π΅:

Telephone = record // Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½

telephone: AnsiString; // Π½ΠΎΠΌΠ΅Ρ€Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°

typeTel: TypeTelephone; //Ρ‚ΠΈΠΏ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π° (ΠΌΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ»ΠΈ домашний)

nextTelephone: LinkTel; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°

end;

ΠžΠ΄Π½ΠΎΡΠ²ΡΠ·Π½Ρ‹ΠΉ список оказался Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ подходящСй структурой для хранСния Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°. Π­Ρ‚Π° структура Π»Π΅Π³ΠΊΠ° Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Π° для Π΄Π°Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡ΠΈ.

2.3 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Ρ„Π°ΠΉΠ»Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ

Π€Π°ΠΉΠ» Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠ³ΠΎ справочника с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΌ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ tlb, Π²ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ хранится Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°Ρ…: ЀИО, адрСс, ΠΏΠΎΡ‡Ρ‚Π°, Π½ΠΎΠΌΠ΅Ρ€Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ². Π”Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Ρ‚ΡŒ Π² Ρ‚Π°ΠΊΠΈΡ… прилоТСния ΠΊΠ°ΠΊ Π±Π»ΠΎΠΊΠ½ΠΎΡ‚.

3. ОписаниС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

Данная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· Π±ΠΎΠ»ΡŒΡˆΠΎΠ³ΠΎ числа ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ОпишСм ΠΈΡ….

New Abonent (SurName, Name, SecondName, Adress, Mail: AnsiString; Tel: LinkTel) — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° добавлСния Π½ΠΎΠ²ΠΎΠ³ΠΎ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π° Π² Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ справочник.

Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: фамилия, имя, отчСство, адрСс, ΠΏΠΎΡ‡Ρ‚Π° ΠΈ Π½ΠΎΠΌΠ΅Ρ€Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°. Π’ ΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π΅ вызываСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° Add Abonent.

nextStep (cur, new: AnsiString): Step — функция ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰Π°Ρ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ двиТСния ΠΏΡ€ΠΈ сортировки Π°Π±ΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Π² ΡΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠ΅. Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΈ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт. Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ элСмСнта ΠΏΡ€ΠΈ сортировки.

Add Abonent (Abonent: Link Abonent) — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° добавлСния Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠΈ списка Π°Π±ΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π°Π±ΠΎΠ½Π΅Π½Ρ‚ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠ³ΠΎ справочника. Из ΡΡ‚ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ ΠΈΠ΄Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ nextStep.

Add Telephone (TelList: LinkTel; Telephone: AnsiString; TypeTel: TypeTelephone) — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° добавлСния Π½ΠΎΠΌΠ΅Ρ€Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°. Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: список Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°, Π½ΠΎΠ²Ρ‹ΠΉ Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°, Ρ‚ΠΈΠΏ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π½ΠΎΠΌΠ΅Ρ€Π°.

openTelBook (fileName: AnsiString) — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, производящая Π·Π°Π³Ρ€ΡƒΠ·ΠΊΡƒ ΠΈΠ»ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ. Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: тСлСфонная ΠΊΠ½ΠΈΠ³Π°.

saveTelBook (fileName: AnsiString): Integer — функция сохранСния Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠ³ΠΎ справочника. Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ справочник.

freeMemBook () — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° освобоТдСния памяти Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠ³ΠΎ справочника.

showListAbonent (listBox: TListBox) — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° отобраТСния списков Π°Π±ΠΎΠ½Π΅Π½Ρ‚ΠΎΠ².

showAbonent (abonent: LinkAbonent; SG1, SG2: TStringGrid) — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° отобраТСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎΠ± Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π΅. Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: Π°Π±ΠΎΠ½Π΅Π½Ρ‚. Из Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ вызываСтся ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° showAllTel.

showAllTel (telList: LinkTel; SG: TStringGrid) -ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° отобраТСния Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°. Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: список Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°.

liveSearch (findStr: AnsiString; typeS: TypeSearch) — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π°, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰Π°Ρ ΠΆΠΈΠ²ΠΎΠΉ поиск Π² Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΌ справочникС. Π’Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅: искомая подстрока, Ρ‚ΠΈΠΏ искомого элСмСнта.

Create Telephone Book (): Integer — ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° созданиС Π½ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ, Ссли создан Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ справочник.

Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π²ΠΈΠ΄ (рис. 3.1):

Рис. 3.1 Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ

4. ОписаниС структуры прилоТСния ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ°ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈΠΌΠ΅Π΅Ρ‚ простой интСрфСйс для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Рассмотрим Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Рис. 4.1 Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Рис. 4.2 Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

1. Π€Π°ΠΉΠ». ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ, ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ справочник, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ справочник.

2. Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΎΠΊΠ½Π΅ выводится Π°Π±ΠΎΠ½Π΅Π½Ρ‚Ρ‹ занСсСнныС Π² Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ.

3. Поисковая строка. Π’ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΠΈ ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ ΠΊΠ°ΠΊΠΎΠΉ поиск рСализуСтся, Π² ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡƒΡŽ строку Π±ΡƒΠ΄ΡƒΡ‚ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅.

4. ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ поиск Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Поиск ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΏΠΎ Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ, Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Ρƒ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ.

5. Кнопки ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ Π°Π±ΠΎΠ½Π΅Π½Ρ‚, Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚ ΠΈΠ· Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠ³ΠΎ справочника.

6. ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°: Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ, имя, отчСство, адрСс, ΡΠ»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½ΡƒΡŽ ΠΏΠΎΡ‡Ρ‚Ρƒ, Π½ΠΎΠΌΠ΅Ρ€Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² ΠΈ Ρ‚ΠΈΠΏ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°.

7. Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΊΠ°ΠΊΠΎΠΌ-Π»ΠΈΠ±ΠΎ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Ρ‹ Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ.

Для открытия Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ Ρ‰Π΅Π»ΠΊΠ½ΠΈΡ‚Π΅ Π»Π΅Π²ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ ΠΌΡ‹ΡˆΠΈ Π½Π° ΠΏΠΎΠ»Π΅ «Ρ„Π°ΠΉΠ»», Π²Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ дСйствиС «ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ», появится Π½ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰Π΅Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ справочник ΠΈΠ· Ρ€Π°Π½Π΅Π΅ сохранСнных (рис.7).

Рис. 7 ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ Рис. 8. Π’Ρ‹Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ. Π‘Π½Π°Ρ‡Π°Π»Π° Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°, ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ, Ρ‰Ρ‘Π»ΠΊΠ½Π΅ΠΌ ΠΏΠΎ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° выдаст Π½Π°ΠΌ ΠΎΠΊΠ½ΠΎ, содСрТащСС Π΄Π°Π½Π½Ρ‹Π΅ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π° (рис.3), Π΄Π°Π»Π΅Π΅ Π½Π°ΠΆΠΈΠΌΠ°Π΅ΠΌ снова ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ ΠΈ Π²Ρ‹Π±ΠΈΡ€Π°Π΅ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€ (рис.4).

Рис. 9. Π’Ρ‹Π±ΠΎΡ€ ΠΏΡ€ΠΈΠ½Ρ‚Π΅Ρ€Π° ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»ΡŒΠ½ΡƒΡŽ структуру. Π’ Π΅Π΅ ΡΠΎΡΡ‚Π°Π² Π²Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ состоит ΠΈΠ· Π²ΡΠ΅Ρ… ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

5. БистСмныС трСбования ΠΈ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ΡΡ ограничСния

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€ΡΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ характСристиками:

1. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма: Windows 98/NT/XP/VISTA/7 с ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΌ. ΠŸΠ°ΠΌΡΡ‚ΡŒ: 108 ΠšΠ±Π°ΠΉΡ‚ свободного мСста Π½Π° ΠΆΡ‘стком дискС. ΠšΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π°, ΠΌΡ‹ΡˆΡŒ.

2. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Ρƒ записСй Π² Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΏΠΎ ΠΎΠ±ΡŠΡ‘ΠΌΡƒ записСй Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ памяти.

3. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° *.tlb, созданный Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. Она Π½Π΅ ΠΏΡ€Π΅Π΄ΠΎΡ…Ρ€Π°Π½Π΅Π½Π° ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, поэтому Ссли Ρ„Π°ΠΉΠ» ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½, ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠΈ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° являСтся Π½Π΅ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄Π΅Π½Π½Ρ‹ΠΌ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ свободно Ρ€Π°ΡΠΏΡ€ΠΎΡΡ‚Ρ€Π°Π½ΡΡ‚ΡŒΡΡ.

6. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования прилоТСния

ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ написанной ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ Π±Ρ‹Π» ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ тСст ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΡ‘ΠΌΠ°Ρ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ВСст Π²Ρ‹Π΄Π°Π²Π°Π» ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Ρ… характСристиках Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ количСство пСрСстановок ΠΏΡ€ΠΈ сортировкС, количСство пСрСстановок ΠΏΡ€ΠΈ поискС. НаиболСС Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΌ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ являСтся количСство Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½Ρ‹Ρ… пСрСстановок, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ.

ВСст производился ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ: Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство записСй Π² Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ справочник ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ, сколько для Π½Π΅Π³ΠΎ Π±Ρ‹Π»ΠΎ сдСлано пСрСстановок ΠΏΡ€ΠΈ сортировкС ΠΈ ΠΏΡ€ΠΈ поискС. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π½Π° Π΄Π΅ΡΡΡ‚ΠΈ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΎΠ±ΡŠΡ‘ΠΌΠ°Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСста ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Π½ΠΈΠΆΠ΅:

Рис. 6.1 Кол-Π²ΠΎ пСрСстановок сортировки ΠΏΡ€ΠΈ 1000 записСй Рис. 6.2 Кол-Π²ΠΎ пСрСстановок поиска ΠΏΡ€ΠΈ 1000 записСй Рис. 6.3 Кол-Π²ΠΎ пСрСстановок сортировки ΠΏΡ€ΠΈ 5000 записСй Рис. 6.4 Кол-Π²ΠΎ пСрСстановок сортировки ΠΏΡ€ΠΈ 5000 записСй

7.Анализ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… характСристик ΠΈ Π²Ρ‹Π²ΠΎΠ΄Ρ‹

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования для дСсяти Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… объСмов Π΄Π°Π½Π½Ρ‹Ρ… прСдставлСны Π½ΠΈΠΆΠ΅ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΠΈ Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ°Ρ…:

Π’Π°Π±Π»ΠΈΡ†Π° 1

Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ пСрСстановок ΠΏΡ€ΠΈ сортировкС ΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ ΠΎΡ‚ ΠΎΠ±ΡŠΡ‘ΠΌΠ°

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ записСй

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ пСрСстановок ΠΏΡ€ΠΈ сортировкС

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ пСрСстановок ΠΏΡ€ΠΈ поискС

Рис. 7.1 Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ пСрСстановок ΠΏΡ€ΠΈ сортировки ΠΎΡ‚ ΠΎΠ±ΡŠΡ‘ΠΌΠ° записСй Рис. 7.2 Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ пСрСстановок ΠΏΡ€ΠΈ поискС ΠΎΡ‚ ΠΎΠ±ΡŠΡ‘ΠΌΠ° записСй Взглянув Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡŒ ΠΈΠ· Ρ‚Π΅ΠΎΡ€ΠΈΠΈ количСство пСрСстановок ΠΏΡ€ΠΈ сортировки ΠΈ ΠΏΡ€ΠΈ поискС Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ растёт ΠΎΡ‚ ΠΎΠ±Ρ‰Π΅Π³ΠΎ количСства записСй Π² Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅. ΠŸΡ€ΠΈ увСличСния объСма записСй возрастаСт количСство пСрСстановок.

Из Π³Ρ€Π°Ρ„ΠΈΠΊΠ° Π²ΠΈΠ΄Π½ΠΎ, врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ справочника Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ зависит ΠΎΡ‚ ΠΎΠ±ΡŠΡ‘ΠΌΠ° Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ….

Рис. 7.3 Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ справочника ΠΎΡ‚ ΠΎΠ±ΡŠΡ‘ΠΌΠ° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, практичСскоС сопоставлСниС Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ слоТности с Ρ‚СорСтичСской ΠΎΡ†Π΅Π½ΠΊΠΎΠΉ вСсьма Π·Π°Ρ‚Ρ€ΡƒΠ΄Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для этого Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡΡ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Ρ‚ΡŒ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎΠ±Ρ‹ явно ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ слоТности пСрСстановок ΠΈ ΠΎΠ±ΡŠΡ‘ΠΌΠ° Π΄Π°Π½Π½Ρ‹Ρ….

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

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

1. Π“Π°Π³Π°Ρ€ΠΈΠ½Π° Π›. Π“. Алгоритмы ΠΈ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…: ΡƒΡ‡Π΅Π±. пособиС/Π›.Π“. Π“Π°Π³Π°Ρ€ΠΈΠ½Π°, Π’. Π”. КолдаСв. — Πœ.:, 2009. — 304 с.

2. Ахо А. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹: ΡƒΡ‡Π΅Π±. пособиС/ А. Ахо, Π₯ΠΎΠΏΠΊΡ€ΠΎΡ„Ρ‚ Π”. Π­., Ульман Π”.Π”.- М., 2003. — 384с.

3. Поиск подстроки // ВикипСдия — свободная энциклопСдияURL: http://ru.wikipedia.org/wik/Поиск_подстроки (Π΄Π°Ρ‚Π° обращСния 03.05.2012)

4. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° списка // ВикипСдия — свободная энциклопСдия URL: (Π΄Π°Ρ‚Π° обращСния 28.04.2012)

5. ДинамичСский поиск // ВикипСдия — свободная энциклопСдия URL: http://ru.wikipedia.org/wik/ДинамичСский_поиск (Π΄Π°Ρ‚Π° обращСния 17.05.2012)

Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½Ρ‹ΠΉ справочник ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ

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

ВСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

unitUnit1;

interface

uses

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

Dialogs, Menus, ExtCtrls, StdCtrls, Grids, Buttons, Mask;

type

TForm1 = class (TForm)

ListBox1: TListBox;

Panel1: TPanel;

MainMenu1: TMainMenu;

N1: TMenuItem;

Panel3: TPanel;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

Panel2: TPanel;

N2: TMenuItem;

OpenDialog1: TOpenDialog;

N3: TMenuItem;

N4: TMenuItem;

Panel4: TPanel;

Button1: TButton;

ComboBox1: TComboBox;

Button2: TButton;

Panel5: TPanel;

Button3: TButton;

Button4: TButton;

Button5: TButton;

Button6: TButton;

Button7: TButton;

Button8: TButton;

Edit2: TEdit;

RadioGroup1: TRadioGroup;

BitBtn1: TBitBtn;

Button9: TButton;

Label2: TLabel;

Button10: TButton;

N5: TMenuItem;

SaveDialog1: TSaveDialog;

N6: TMenuItem;

Label1: TLabel;

MaskEdit1: TMaskEdit;

MaskEdit2: TMaskEdit;

ComboBox2: TComboBox;

Timer1: TTimer;

Label3: TLabel;

procedure FormCreate (Sender: TObject);

procedure N2Click (Sender: TObject);

procedure N3Click (Sender: TObject);

procedure N4Click (Sender: TObject);

procedure ListBox1Click (Sender: TObject);

procedure Button1Click (Sender: TObject);

procedure Button5Click (Sender: TObject);

procedure Button6Click (Sender: TObject);

procedure Button2Click (Sender: TObject);

procedure Button4Click (Sender: TObject);

procedure Button7Click (Sender: TObject);

procedure Button3Click (Sender: TObject);

procedure Button8Click (Sender: TObject);

procedure Edit2KeyUp (Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure RadioGroup1Click (Sender: TObject);

procedure BitBtn1Click (Sender: TObject);

procedure Button9Click (Sender: TObject);

procedure Button10Click (Sender: TObject);

procedure N5Click (Sender: TObject);

procedure N6Click (Sender: TObject);

procedure FormClose (Sender: TObject; var Action: TCloseAction);

procedure MaskEdit2Change (Sender: TObject);

procedure MaskEdit1Change (Sender: TObject);

procedure ComboBox1Change (Sender: TObject);

procedure ComboBox2Change (Sender: TObject);

procedure Timer1Timer (Sender: TObject);

// procedure StringGrid2Click (Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

type

LinkTel = ^Telephone;

TypeTelephone = (Mobile, Home);

Saved = (YesSaved, NoSaved);

Step = (Equal, less, more);

Action = (Add, Edit);

TypeSearch = (SurName, Name);

Telephone = record

telephone: AnsiString;

typeTel: TypeTelephone;

nextTelephone: LinkTel; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅Π»Π½Ρ„ΠΎΠ½Π°

end;

type tmas=array [1.10] of string;

constmegafon:tmas=('920','','','','','','','','','');

tele2:tmas=('908','904','950','951','','','','','','');

mtc:tmas=('910','915','','','','','','','','');

beeline:tmas=('903','906','960','','','','','','','');

type

LinkAbonent = ^Abonent; //ссылка Π½Π° Π·Π°ΠΏΠΈΡΡŒ Π°Π±ΠΎΠ½Π΅Π½Ρ‚

Abonent = record //Π°Π±ΠΎΠ½Π΅Π½Ρ‚

Name:AnsiString;

SurName:AnsiString;

SecondName:AnsiString;

Tel:LinkTel; //списоктСлСфоновабонСнта

Adress:AnsiString;

Mail:AnsiString;

nextAbonent: LinkAbonent; //ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉΠΎΠ±Π½Π΅Π½Ρ‚Π²ΡΠΏΠΈΡΠΊΠ΅Π°Π±ΠΎΠ½Π΅Π½Ρ‚ΠΎΠ²

backAbonent: LinkAbonent; //ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΉ

index:Integer; //порядковыйномСротобраТаСмогоабонСнта

show:Integer; //отобраТаСтся ΠΈΠ»ΠΈ Π½Π΅Ρ‚ Π°Π±ΠΎΠ½Π΅Π½Ρ‚

end;

var

Form1: TForm1;

time:real;

TelephoneBook, curAbonent: LinkAbonent; //ссылка Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ списка

Π°Π±ΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² ΠΈ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π°Π±ΠΎΠ½Π΅Π½Ρ‚

save: Saved = YesSaved; //сохранСна ΠΈΠ»ΠΈ Π½Π΅Ρ‚ Ρ‚Π΅Π». ΠΊΠ½ΠΈΠ³Π°

fileName:AnsiString; //имя Ρ„Π°ΠΉΠ»Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ

telList, editTel: LinkTel; //список Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π° ΠΈ ΡΡΡ‹Π»ΠΊΠ°

Π½Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½

abAction, telAction: Action; //события: Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°;

Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½

function CreateTelephoneBook ():Integer;

procedure

AddTelephone (varTelList:LinkTel;Telephone:AnsiString;TypeTel:TypeTele

phone);

procedure

NewAbonent (SurName, Name, SecondName, Adress, Mail: AnsiString;Tel:Lin

kTel);

procedure AddAbonent (Abonent:LinkAbonent);

procedure openTelBook (fileName:AnsiString);

function saveTelBook (fileName:AnsiString):Integer;

procedure freeMemBook ();

procedure showListAbonent (listBox:TListBox);

procedure showAllTel (telList:LinkTel;SG:TStringGrid);

procedure liveSearch (findStr:AnsiString;typeS:TypeSearch);

procedure vykl ();

function proverka (mas:tmas; str: string):boolean;

implementation

uses PrintForm, ComCtrls;

{$R *.dfm}

procedure

NewAbonent (SurName, Name, SecondName, Adress, Mail: AnsiString;Tel:Lin

kTel); //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅Π½ΠΎΠ²ΠΎΠ³ΠΎΠ°Π±ΠΎΠ½Π΅Π½Ρ‚Π°

var

newAbonent:LinkAbonent;

begin

New (newAbonent);

newAbonent.Name:=Name;

newAbonent.SurName:=SurName;

newAbonent.SecondName:=SecondName;

newAbonent.Adress:=Adress;

newAbonent.Tel:=Tel;

newAbonent.Mail:=Mail;

AddAbonent (newAbonent);

end;

function nextStep (cur, new: AnsiString):Step;

//направлСниСдвиТСнияприсортировкСабонСнтов

var

i:Integer;

begin

for i:=1 to Length (cur) do

begin

if i<=Length (new) then

begin

if (cur [i]=new [i]) then

Continue;

if cur [i]

begin

Result:=Less;

exit;

end

else

begin

Result:=More;

exit;

end;

end

else

begin

Result:=More;

exit;

end;

end;

if (i-1)=Length (new) then

Result:=Equal

else

Result:=Less;

end;

procedure AddAbonent (Abonent:LinkAbonent);

//добавлСниСабонСнтаисортировкаспискаабонСнтов

var

curAbonent:LinkAbonent;

next:Step;

begin

if TelephoneBook. nextAbonent=nil then

begin

Abonent.backAbonent:=TelephoneBook;

Abonent.nextAbonent:=TelephoneBook.nextAbonent;

TelephoneBook.nextAbonent:=Abonent;

Abonent.show:=1;

exit;

end;

Form1.Timer1.Enabled:=true;

curAbonent:=TelephoneBook.nextAbonent;

while (curAbonent<>nil) do

begin

next:=nextStep (curAbonent.SurName, Abonent. SurName);

if next<>Equal then

if next=Less then

begin

if (curAbonent.nextAbonent=nil) then

break;

curAbonent:=curAbonent.nextAbonent;

end

else

begin

curAbonent:=curAbonent.backAbonent;

break;

end

else

begin

next:=nextStep (curAbonent.Name, Abonent.Name);

if next<>Equal then

if next=Less then

begin

if (curAbonent.nextAbonent=nil) then

break;

curAbonent:=curAbonent.nextAbonent;

end

else

begin

curAbonent:=curAbonent.backAbonent;

break;

end

else

begin

next:=nextStep (curAbonent.SecondName, Abonent. SecondName);

if (next=Equal) then

begin

if (curAbonent.nextAbonent=nil) then

break;

curAbonent:=curAbonent.nextAbonent;

end

else

if (next=Less) then

begin

if (curAbonent.nextAbonent=nil) then

break;

curAbonent:=curAbonent.nextAbonent;

end

else

begin

curAbonent:=curAbonent.backAbonent;

break;

end;

end;

end;

end;

Form1.Timer1.Enabled:=false;

Abonent.backAbonent:=curAbonent;

Abonent.nextAbonent:=curAbonent.nextAbonent;

if (curAbonent.nextAbonent<>nil) then

curAbonent.nextAbonent.backAbonent:=Abonent;

curAbonent.nextAbonent:=Abonent;

curAbonent.nextAbonent.show:=1;

end;

procedure

AddTelephone (varTelList:LinkTel;Telephone:AnsiString;TypeTel:TypeTele

phone); //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°

var

curTel:LinkTel;

begin

if Telephone='' then

exit;

if TelList=nil then

begin

New (TelList);

TelList.telephone:=Telephone;

TelList.typeTel:=TypeTel;

TelList.nextTelephone:=nil;

exit;

end;

curTel:=TelList;

while (curTel.nextTelephone<>nil) do

curTel:=curTel.nextTelephone;

New (curTel.nextTelephone);

curTel.nextTelephone.telephone:=Telephone;

curTel.nextTelephone.typeTel:=TypeTel;

curTel.nextTelephone.nextTelephone:=nil;

end;

procedure openTelBook (fileName:AnsiString);

//Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ°ΠΈΠ»ΠΈΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉΠΊΠ½ΠΈΠ³ΠΈ

var

fileBook: TextFile;

buffer:AnsiString;

Abonent: LinkAbonent;

typeT:Integer;

begin

AssignFile (fileBook, fileName);

Reset (fileBook);

while not Eof (fileBook) do

begin

Readln (fileBook, buffer);

if buffer='$' then

begin

New (Abonent);

Abonent.Tel:=nil;

Readln (fileBook, Abonent. SurName);

Readln (fileBook, Abonent.Name);

Readln (fileBook, Abonent. SecondName);

Readln (fileBook, Abonent. Adress);

Readln (fileBook, buffer);

if buffer='%' then

begin

Readln (fileBook, buffer);

repeat

typeT:=StrToInt (buffer [Length (buffer)]);

Delete (buffer, Length (buffer)-1,2);

if (typeT=Integer (Mobile)) then

AddTelephone (Abonent.Tel, buffer, Mobile)

else

AddTelephone (Abonent.Tel, buffer, Home);

Readln (fileBook, buffer);

until buffer='%';

end;

Readln (fileBook, Abonent. mail);

AddAbonent (Abonent);

end;

end;

CloseFile (fileBook);

end;

function saveTelBook (fileName:AnsiString):Integer;

//сохранСниСтСлСфоннойкниги

var

fileBook:TextFile;

curAbonent:LinkAbonent;

curTel:LinkTel;

begin

AssignFile (fileBook, fileName);

Rewrite (fileBook);

curAbonent:=TelephoneBook.nextAbonent;

while curAbonent<>nil do

begin

Writeln (fileBook,'$');

Writeln (fileBook, curAbonent. SurName);

Writeln (fileBook, curAbonent.Name);

Writeln (fileBook, curAbonent. SecondName);

Writeln (fileBook, curAbonent. Adress);

curTel:=curAbonent.Tel;

if curTel<>nil then

begin

Writeln (fileBook,'%');

while curTel<>nil do

begin

Writeln (fileBook, curTel. telephone+'|'+IntTostr (Integer (curTel.TypeTel)));

curTel:=curTel.nextTelephone;

end;

Writeln (fileBook,'%');

end;

Writeln (fileBook, curAbonent. mail);

curAbonent:=curAbonent.nextAbonent;

end;

CloseFile (fileBook);

Result:=1;

end;

procedurefreeMemBook (); //освобоТдСниС памяти Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ

var

curAb:LinkAbonent;

nextTel:LinkTel;

begin

curAb:=TelephoneBook.nextAbonent;

while curAb<>nil do

begin

while curAb. Tel<>nil do

begin

nextTel:=curAb.Tel.nextTelephone;

Dispose (curAb.Tel);

curAb.Tel:=nextTel;

end;

TelephoneBook.nextAbonent:=curAb.nextAbonent;

Dispose (curAb);

curAb:=TelephoneBook.nextAbonent;

end;

end;

procedure showListAbonent (listBox:TListBox);

//отобраТСниСспискаабонСнтов

var

abonent:LinkAbonent;

numAb:Integer;

begin

numAb:=0;

listBox.Clear;

abonent:=TelephoneBook.nextAbonent;

while abonent<> nil do

begin

if (abonent.show=1)then

begin

listBox.Items.Add (abonent.SurName+' '+abonent.Name+'

'+abonent.SecondName);

abonent.index:=numAb;

Inc (numAb);

end

else

abonent.index:=-1;

abonent:=abonent.nextAbonent;

end;

end;

procedure showAbonent (abonent:LinkAbonent;SG1,SG2:TStringGrid);

//ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈΠΎΠ±Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π΅

var

tel:LinkTel;

begin

with SG1 do

begin

Cols. Clear;

Cells [1,0]: =abonent.SurName;

Cells [1,1]: =abonent.Name;

Cells [1,2]: =abonent.SecondName;

Cells [1,3]: =abonent.Adress;

Cells [1,4]: =abonent.Mail;

end;

tel:=abonent.Tel;

showAllTel (tel, SG2);

end;

procedure showAllTel (telList:LinkTel;SG:TStringGrid);

//ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ²Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°

var

colTel:Integer;

curTel:LinkTel;

begin

colTel:=0;

curTel:=telList;

SG.RowCount:=2;

SG.Rows. Clear;

while (curTel<>nil)do

begin

if colTel>0 then

SG.RowCount:=SG.RowCount+1;

SG.Cells [0,SG.RowCount-1]: =curTel.telephone;

if (curTel.typeTel=Mobile)then

SG.Cells [1,SG.RowCount-1]: ='ΠœΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ'

else

SG.Cells [1,SG.RowCount-1]: ='Π”ΠΎΠΌΠ°ΡˆΠ½ΠΈΠΉ';

Inc (colTel);

curTel:=curTel.nextTelephone;

end;

end;

procedure liveSearch (findStr:AnsiString;typeS:TypeSearch); //Тивойпоиск

var

curAb:LinkAbonent;

findTemp:AnsiString;

i, show: Integer;

tel:LinkTel;

begin

if findStr='' then

vykl else

begin

curAb:=TelephoneBook.nextAbonent;

while curAb<>nil do

begin

if typeS=SurName then

findTemp:=curAb.SurName

else

begin

tel:=curAb.Tel;

while tel<>nil do

begin

curAb.show:=0;

findTemp:=tel.telephone;

if Length (findTemp)>=Length (findStr) then

for i:=1 to Length (findStr) do

begin

if (findStr [i]<>findTemp [i]) then

begin

curAb.show:=0;

break;

end;

curAb.show:=1;

end;

if curAb. show=0 then

tel:=tel.nextTelephone

else break;

end;

curAb:=curAb.nextAbonent;

Continue;

end;

if (Length (findTemp)

curAb.show:=0

else

begin

show:=1;

for i:=1 to Length (findStr) do

if findStr [i]<>findTemp [i] then

begin

show:=0;

break;

end;

if show=0 then

curAb.show:=0

else

curAb.show:=1;

end;

curAb:=curAb.nextAbonent;

end; end;

end;

function CreateTelephoneBook ():Integer; //созданиСновойкниги

var

otvet: Integer;

begin

if save=NoSaved then

begin

otvet:=Application.MessageBox ('ЀайлнСсохранён.

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ?','Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅', MB_YESNOCANCEL+

MB_ICONINFORMATION);

if (otvet=IDCANCEL)then

begin

Result:=0;

exit;

end;

if (otvet=IDYES)then

begin

saveTelBook (fileName);

end;

end;

if (TelephoneBook<>nil)then

freeMemBook ();

New (TelephoneBook);

TelephoneBook.nextAbonent := nil;

TelephoneBook.backAbonent := nil;

Result:=1;

end;

//———————————————————————————————————————;

procedure TForm1. FormCreate (Sender: TObject);

begin

StringGrid1.Cells [0,0]: ='Ѐамилия';

StringGrid1.Cells [0,1]: ='Имя';

StringGrid1.Cells [0,2]: ='ΠžΡ‚Ρ‡Π΅ΡΡ‚Π²ΠΎ';

StringGrid1.Cells [0,3]: ='АдрСс';

StringGrid1.Cells [0,4]: ='ЭлСктроннаяпочта';

StringGrid2.Cells [0,0]: ='Π’Π΅Π»Π΅Ρ„ΠΎΠ½';

StringGrid2.Cells [1,0]: ='Π’ΠΈΠΏΡ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°';

MaskEdit1.Visible:=true;

MaskEdit2.Visible:=False;

end;

procedure TForm1. N2Click (Sender: TObject); //созданиСновойкниги

begin

CreateTelephoneBook;

fileName:='';

ListBox1.Enabled:=True;

Button1.Enabled:=True;

Button3.Enabled:=True;

Button9.Enabled:=True;

BitBtn1.Enabled:=True;

Edit2.Enabled:=True;

RadioGroup1.Enabled:=True;

N5.Enabled:=True;

ListBox1.Clear;

StringGrid1.Cols. Clear;

StringGrid2.RowCount:=2;

StringGrid2.Rows. Clear;

Edit2.Text:='';

RadioGroup1.ItemIndex:=0;

end;

procedure TForm1. N3Click (Sender: TObject); //ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΊΠ½ΠΈΠ³ΠΈ

begin

time:=0;

Timer1.Enabled:=true;

if OpenDialog1. Execute then

begin

CreateTelephoneBook ();

fileName:=OpenDialog1.FileName;

openTelBook (fileName);

showListAbonent (ListBox1);

ListBox1.Enabled:=True;

Button1.Enabled:=True;

Button3.Enabled:=True;

Button9.Enabled:=True;

BitBtn1.Enabled:=True;

Edit2.Enabled:=True;

RadioGroup1.Enabled:=True;

N5.Enabled:=True;

end;

Timer1.Enabled:=false;

Label3.Caption:=FloatToStr (time)+' msec.';

end;

procedure TForm1. N4Click (Sender: TObject); //сохранСниСкниги

begin

if (fileName='')then

if SaveDialog1. Execute then

fileName:=SaveDialog1.FileName

else

exit;

if saveTelBook (fileName)=1 then

begin

save:=YesSaved;

N4.Enabled:=False;

end;

end;

procedure TForm1. ListBox1Click (Sender: TObject);

//ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈΠΎΠ±Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π΅

begin

curAbonent:=TelephoneBook.nextAbonent;

while ((curAbonent.index<>ListBox1.ItemIndex) and (curAbonent<>nil))

do

curAbonent:=curAbonent.nextAbonent;

showAbonent (curAbonent, StringGrid1, StringGrid2);

end;

procedure TForm1. Button1Click (Sender: TObject);

//Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅Π½ΠΎΠ²ΠΎΠ³ΠΎΠ°Π±ΠΎΠ½Π΅Π½Ρ‚Π°

begin

N1.Enabled:=False;

Panel5.Visible:=True;

Button1.Enabled:=False;

Button3.Enabled:=False;

Button9.Enabled:=False;

BitBtn1.Enabled:=False;

ListBox1.Enabled:=False;

Edit2.Enabled:=False;

RadioGroup1.Enabled:=False;

StringGrid1.Enabled:=True;

StringGrid1.Cols. Clear;

StringGrid2.RowCount:=2;

StringGrid2.Cells [0,1]: ='';

StringGrid2.Cells [1,1]: ='';

abAction:=Add;

telList:=nil;

end;

procedure TForm1. Button5Click (Sender: TObject);

//сохранСниСизмСнСнийданныхабонСнта

begin

if abAction=Add then

with StringGrid1 do

begin

if (Cells [1,0]<>'')or (Cells [1,1]<>'')or (Cells [1,2]<>'')then

NewAbonent (Cells [1,0], Cells [1,1], Cells [1,2], Cells [1,3], Cells

[1,4], telList)

else

begin

Application.MessageBox ('Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΏΠΎΠ»Π΅ΠΉ:

Ѐамилия, Имя или

ΠžΡ‚Ρ‡Π΅ΡΡ‚Π²ΠΎ!','НСдостаточноданных', MB_OK+MB_ICONINFORMATION);

exit;

end;

end

else

begin

with StringGrid1 do

begin

curAbonent.SurName:=Cells [1,0];

curAbonent.Name:=Cells [1,1];

curAbonent.SecondName:=Cells [1,2];

curAbonent.Adress:=Cells [1,3];

curAbonent.Mail:=Cells [1,4];

end;

curAbonent.Tel:=telList;

curAbonent.backAbonent.nextAbonent:=curAbonent.nextAbonent;

if (curAbonent.nextAbonent<>nil) then

curAbonent.nextAbonent.backAbonent:=curAbonent.backAbonent;

AddAbonent (curAbonent);

end;

N1.Enabled:=True;

Panel5.Visible:=False;

Button1.Enabled:=True;

Button3.Enabled:=True;

Button9.Enabled:=True;

ListBox1.Enabled:=True;

StringGrid1.Enabled:=False;

Edit2.Enabled:=True;

RadioGroup1.Enabled:=True;

BitBtn1.Enabled:=True;

showListAbonent (ListBox1);

ListBox1.ItemIndex:=0;

ListBox1Click (Sender);

save:=NoSaved;

N4.Enabled:=True;

end;

procedure TForm1. Button6Click (Sender: TObject); //ΠΎΡ‚ΠΌΠ΅Π½Π°ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

begin

N1.Enabled:=True;

Panel5.Visible:=False;

Button1.Enabled:=True;

Button3.Enabled:=True;

Button9.Enabled:=True;

ListBox1.Enabled:=True;

StringGrid1.Enabled:=False;

Edit2.Enabled:=True;

RadioGroup1.Enabled:=True;

BitBtn1.Enabled:=True;

ListBox1.ItemIndex:=0;

ListBox1Click (Sender);

end;

procedure TForm1. Button2Click (Sender: TObject); //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ

сохранСниС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ΠΎΠ² Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°

begin

Panel4.Visible:=False;

Button7.Enabled:=True;

Button6.Enabled:=True;

Button5.Enabled:=True;

Button8.Enabled:=True;

Button10.Enabled:=True;

StringGrid1.Enabled:=True;

if (telAction=Add)then

begin

if (MaskEdit1.Text<>'')or (MaskEdit2.Text<>'') then

if (ComboBox1.ItemIndex=0) then

AddTelephone (telList, MaskEdit1. Text, Mobile)

else

AddTelephone (telList, MaskEdit2. Text, Home);

end

else

//begin

if (ComboBox1.ItemIndex=0) then

begin

editTel.telephone:=MaskEdit1.Text;

editTel.typeTel:=TypeTelephone (ComboBox1.ItemIndex);

end else

begin

editTel.telephone:=MaskEdit2.Text;

editTel.typeTel:=TypeTelephone (ComboBox1.ItemIndex);

end;

showAllTel (telList, StringGrid2);

save:=NoSaved;

N4.Enabled:=True;

end;

procedure TForm1. Button4Click (Sender: TObject);

//отмСнаобавлСнияилиизмСнСниятСлСфонаабонСнта

begin

Panel4.Visible:=False;

Button7.Enabled:=True;

Button6.Enabled:=True;

Button5.Enabled:=True;

Button8.Enabled:=True;

Button10.Enabled:=True;

StringGrid1.Enabled:=True;

end;

procedure TForm1. Button7Click (Sender: TObject); //Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°

begin

Panel4.Visible:=True;

Button7.Enabled:=False;

Button5.Enabled:=False;

Button6.Enabled:=False;

Button8.Enabled:=False;

Button10.Enabled:=False;

StringGrid1.Enabled:=False;

MaskEdit1.Text:='';

MaskEdit2.Text:='';

end;

procedure TForm1. Button3Click (Sender: TObject);

//Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Π΄Π°Π½Π½Ρ‹Ρ…Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°

begin

if (ListBox1.ItemIndex<0)then

begin

Application.MessageBox ('ВыбиритСабонСнтадлярСдактирования!','НСвыб Ρ€Π°Π½Π°Π±ΠΎΠ½Π΅Π½Ρ‚', MB_OK+MB_ICONINFORMATION);

exit;

end;

N1.Enabled:=False;

Panel5.Visible:=True;

Button1.Enabled:=False;

Button3.Enabled:=False;

Button9.Enabled:=False;

BitBtn1.Enabled:=False;

ListBox1.Enabled:=False;

Edit2.Enabled:=False;

RadioGroup1.Enabled:=False;

StringGrid1.Enabled:=True;

telList:=curAbonent.Tel;

abAction:=Edit;

showAbonent (curAbonent, StringGrid1, StringGrid2);

end;

procedure TForm1. Button8Click (Sender: TObject);

//Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°

var

index:Integer;

begin

if (StringGrid2.Row<1)then

begin

Application.MessageBox ('ВыбиритСтСлСфондлярСдактирования!','НСвыб Ρ€Π°Π½Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½', MB_OK+MB_ICONINFORMATION);

exit;

end;

if (telList=nil)then

exit;

if StringGrid2. Row<0 then

StringGrid2.Row:=0;

index:=1;

editTel:=telList;

while ((index<>StringGrid2.Row) and (editTel<>nil)) do

begin

editTel:=editTel.nextTelephone;

Inc (index);

end;

if editTel. typeTel=Home then

begin

MaskEdit2.Text:=editTel.telephone;

MaskEdit1.Visible:=false;

MaskEdit2.Visible:=true;

end else

begin

MaskEdit1.Text:=editTel.telephone;

MaskEdit2.Visible:=false;

MaskEdit1.Visible:=true;

end;

ComboBox1.ItemIndex:=Integer (editTel.typeTel);

telAction:=Edit;

Panel4.Visible:=True;

Button7.Enabled:=False;

Button5.Enabled:=False;

Button6.Enabled:=False;

Button8.Enabled:=False;

Button10.Enabled:=False;

StringGrid1.Enabled:=False;

end;

procedure TForm1. Edit2KeyUp (Sender: TObject; var Key: Word;

//Тивойпоиск, отобраТСниСсписканайдСнных

Shift: TShiftState);

begin

time:=0;

Timer1.Enabled:=true;

liveSearch (Edit2.Text, TypeSearch (RadioGroup1.ItemIndex));

showListAbonent (ListBox1);

Timer1.Enabled:=false;

label3.Caption:=FloatToStr (time)+' msec.';

end;

procedure TForm1. RadioGroup1Click (Sender: TObject);

begin

vykl ();

if RadioGroup1. ItemIndex=1 then

begin

Edit2.Visible:=false;

ComboBox2.Visible:=true;

end

else

begin

ComboBox2.Visible:=false;

Edit2.Visible:=true;

end;

end;

procedure TForm1. BitBtn1Click (Sender: TObject);

//Π²Ρ‹Π²ΠΎΠ΄Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒΠ΄Π°Π½Π½Ρ‹Ρ…Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°

var

tel:LinkTel;

begin

if ListBox1. ItemIndex<0 then

begin

Application.MessageBox ('ΠΠ΅Π²Ρ‹Π±Ρ€Π°Π½Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π΄Π»ΡΠ²Ρ‹Π²ΠΎΠ΄Π°Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ','Π‘ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΠ΅', MB_OK+MB_ICONINFORMATION);

exit;

end;

with Form2. RichEdit1 do

begin

Clear;

Paragraph.FirstIndent:=30;

Font.Size:=14;

Paragraph.Alignment:=taCenter;

Lines.Add ('Π”Π°Π½Π½Ρ‹Π΅Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°');

Paragraph.Alignment:=taLeftJustify;

Lines.Add ('Ѐамилия — '+curAbonent.SurName);

Lines.Add ('Имя — '+curAbonent.Name);

Lines.Add ('ΠžΡ‚Ρ‡Π΅ΡΡ‚Π²ΠΎ — '+curAbonent.SecondName);

Lines.Add ('АдрСс: '+curAbonent.Adress);

Lines.Add ('ΠŸΠΎΡ‡Ρ‚Π°: '+curAbonent.Mail);

tel:=curAbonent.Tel;

if tel<>nil then

begin

Paragraph.Alignment:=taCenter;

Lines.Add ('Π’Π΅Π»Π΅Ρ„ΠΎΠ½Ρ‹Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°');

Paragraph.Alignment:=taLeftJustify;

end;

while tel<>nil do

begin

if (tel.typeTel=Mobile)then

Lines.Add ('ΠœΠΎΠ±ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ: '+tel.telephone)

else

Lines.Add ('Π”ΠΎΠΌΠ°ΡˆΠ½ΠΈΠΉ: '+tel.telephone);

tel:=tel.nextTelephone;

end;

Lines.Add ('');

end;

Form1.Enabled:=False;

Form2.Visible:=True;

end;

procedure TForm1. Button9Click (Sender: TObject); //ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅Π°Π±ΠΎΠ½Π΅Π½Ρ‚Π°

begin

if (ListBox1.ItemIndex<0)then

begin

Application.MessageBox ('ВыбиритСабонСнтадляудалСния','НСвыбранабо Π½Π΅Π½Ρ‚', MB_OK+MB_ICONINFORMATION);

exit;

end;

if (Application.MessageBox ('Π’Ρ‹Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡ…ΠΎΡ‚ΠΈΡ‚Π΅ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚?','Π£ Π΄Π°Π»Π΅Π½ΠΈΠ΅ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°', MB_YESNO+

MB_ICONINFORMATION)=IDYES)then

begin

curAbonent.backAbonent.nextAbonent:=curAbonent.nextAbonent;

if curAbonent. nextAbonent<>nil then

curAbonent.nextAbonent.backAbonent:=curAbonent.backAbonent;

Dispose (curAbonent);

showListAbonent (ListBox1);

ListBox1.ItemIndex:=0;

ListBox1Click (Sender);

save:=NoSaved;

end;

end;

procedure TForm1. Button10Click (Sender: TObject); //ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°

var

delTel, backTel: LinkTel;

index:Integer;

begin

if (StringGrid2.Row<1)then

begin

Application.MessageBox ('ВыбиритСтСлСфондляудалСния!','НСвыбрантСл Π΅Ρ„ΠΎΠ½', MB_OK+MB_ICONINFORMATION);

exit;

end;

if (telList=nil)then

exit;

if StringGrid2. Row<0 then

StringGrid2.Row:=0;

if (Application.MessageBox ('Π’Ρ‹Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡ…ΠΎΡ‚ΠΈΡ‚Π΅ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒΡ‚Π΅Π»Π΅Ρ„ΠΎΠ½?','Π£ Π΄Π°Π»Π΅Π½ΠΈΠ΅Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°', MB_YESNO+

MB_ICONINFORMATION)=IDYES)then

begin

index:=1;

delTel:=telList;

backTel:=nil;

while ((index<>StringGrid2.Row) and (delTel<>nil)) do

begin

backTel:=delTel;

delTel:=delTel.nextTelephone;

Inc (index);

end;

if backTel<>nil then

backTel.nextTelephone:=delTel.nextTelephone;

if (delTel=telList)then

telList:=nil;

Dispose (delTel);

save:=NoSaved;

end;

showAllTel (telList, StringGrid2);

end;

procedure TForm1. N5Click (Sender: TObject); //ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΊΠ½ΠΈΠ³ΠΈ

begin

if (OpenDialog1.Execute)then

begin

openTelBook (OpenDialog1.FileName);

showListAbonent (ListBox1);

end;

end;

procedure TForm1. N6Click (Sender: TObject); //Π·Π°ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΊΠ½ΠΈΠ³ΠΈ

begin

CreateTelephoneBook;

fileName:='';

N4.Enabled:=False;

N5.Enabled:=False;

ListBox1.Clear;

StringGrid1.Cols. Clear;

StringGrid2.RowCount:=2;

StringGrid2.Rows. Clear;

Edit2.Text:='';

RadioGroup1.ItemIndex:=0;

ListBox1.Enabled:=False;

Button1.Enabled:=False;

Button3.Enabled:=False;

Button9.Enabled:=False;

BitBtn1.Enabled:=False;

Edit2.Enabled:=False;

RadioGroup1.Enabled:=False;

save:=YesSaved;

end;

procedure TForm1. FormClose (Sender: TObject; var Action: TCloseAction);

begin

CreateTelephoneBook;

end;

procedure TForm1. MaskEdit2Change (Sender: TObject);

begin

if (ComboBox1.ItemIndex=0) then

begin

MaskEdit1.Visible:=true;

MaskEdit2.Visible:=false;

end

else

begin

MaskEdit1.Visible:=false;

MaskEdit2.Visible:=true;

end;

end;

procedure TForm1. MaskEdit1Change (Sender: TObject);

begin

if (ComboBox1.ItemIndex=0) then

begin

MaskEdit1.Visible:=true;

MaskEdit2.Visible:=false;

end

else

begin

MaskEdit1.Visible:=false;

MaskEdit2.Visible:=true;

end;

end;

procedure TForm1. ComboBox1Change (Sender: TObject);

begin

if (ComboBox1.ItemIndex=0) then

begin

MaskEdit1.Visible:=true;

MaskEdit2.Visible:=false;

end

else

begin

MaskEdit1.Visible:=false;

MaskEdit2.Visible:=true;

end;

end;

procedure PoiskOperator (findStrAr:tmas);

varcurAb:LinkAbonent;

findTemp, findStr: AnsiString;

i, show, j: Integer;

tel:LinkTel;

begin

curAb:=TelephoneBook.nextAbonent;

while curAb<>nil do

begin

tel:=curAb.Tel;

while tel<>nil do

begin

curAb.show:=0;

if tel. typeTel=Mobile then

begin

findTemp:=tel.telephone;

if proverka (findStrAr, findTemp) then

begin

curAb.show:=1;

break;

end

else

if curAb. show=0 then

tel:=tel.nextTelephone

else break;

end

else

begin

curAb.show:=0;

tel:=tel.nextTelephone;

Continue;

end;

end;

curAb:=curAb.nextAbonent;

Continue;

end;

end;

procedure TForm1. ComboBox2Change (Sender: TObject);

begin

time:=0;

Timer1.Enabled:=true;

if Combobox2. ItemIndex=1 then

PoiskOperator (beeline)

else

if Combobox2. ItemIndex=2 then

PoiskOperator (megafon)

else

if Combobox2. ItemIndex=3 then

PoiskOperator (mtc)

else

if Combobox2. ItemIndex=4 then

PoiskOperator (tele2);

if Combobox2. ItemIndex=0 then

vykl ();

showListAbonent (ListBox1);

Timer1.Enabled:=false;

Label3.Caption:=FloatToStr (time)+' msec.';

end;

procedure vykl ();

varcurAb:LinkAbonent;

begin

curAb:=TelephoneBook.nextAbonent;

while curAb<>nil do

begin

curAb.show:=1;

curAb:=curAb.nextAbonent;

end;

end;

function proverka (mas:tmas; str: string):boolean;

var s: string;

i:integer;

begin

proverka:=false;

s:= copy (str, 1,3);

for i:=0 to 9 do

if mas [i]=s then

begin

proverka:=true;

break;

end;

end;

procedure TForm1. Timer1Timer (Sender: TObject);

begin

time:=time+1;

end;

end.

Код ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ тСстирования:

unitUnit1;

interface

uses

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

Dialogs, StdCtrls;

type

TForm1 = class (TForm)

Edit1: TEdit;

Label1: TLabel;

Button1: TButton;

procedure Button1Click (Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

function Nam ():string;

function Tel ():string;

function Teld ():string;

type tmas=array [1.33] of string;

var

Form1: TForm1;

n:integer;

fileBook:TextFile;

const

c:tmas=('Π°','Π±','Π²','Π³','Π΄','Π΅','Ρ‘','ΠΆ','Π·','ΠΈ','ΠΉ','ΠΊ','Π»','ΠΌ','Π½','ΠΎ','ΠΏ','Ρ€','с','Ρ‚','Ρƒ','Ρ„','Ρ…','Ρ†','

Ρ‡','ш','Ρ‰','ъ','Ρ‹','ь','э','ю','я');

implementation

{$R *.dfm}

procedure TForm1. Button1Click (Sender: TObject);

var i: integer; Ne: string;

begin

AssignFile (fileBook,'c:test.tlb');

Rewrite (fileBook);

n:=StrToInt (Edit1.Text);

i:=0;

while i

begin

Writeln (fileBook,'$');

Writeln (fileBook, Nam ());

Writeln (fileBook, Nam ());

Writeln (fileBook, Nam ());

Writeln (fileBook,'');

Writeln (fileBook,'%');

Writeln (fileBook, Tel ());

Writeln (fileBook, Teld ());

Writeln (fileBook,'%');

Writeln (fileBook,'');

inc (i);

end;

CloseFile (fileBook);

end;

function Nam ():string;

vari, k: integer;

s:string;

begin

s:='';

for i:=1 to 3+random (10) do

begin

k:=round (random (33));

s:=s+c [k+1];

end;

Nam:=s;

end;

function Tel ():string;

var i: integer;

s:string;

begin

i:=1;

s:='';

while i<10 do

begin

s:=s+IntToStr (random (10));

inc (i);

end;

Tel:=s+'|1';

end;

function Teld ():string;

var i: integer;

s:string;

begin

s:='';

i:=1;

while i<10 do

begin

s:=s+IntToStr (random (10));

inc (i);

end;

Teld:=s+'|0';

end;

end.

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