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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° частотного словаря сочСтаний слов

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

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

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° частотного словаря сочСтаний слов (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

ΠšΡƒΡ€ΡΠΎΠ²Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π°

«ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° частотного словаря сочСтаний слов»

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

ВрСбуСтся Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ дляформирования частотного словаря сочСтаний ΠΏΠ°Ρ€ словдля Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ тСкста. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

— ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° тСкстов, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ копирования-вставки ΠΈΠ»ΠΈ располоТСнных Π² Ρ‚Скстовом Ρ„Π°ΠΉΠ»Π΅ (Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° с Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΌΠΈ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ. txt ΠΈ.rtf);

— Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ символы, ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ раздСлитСлями слов;

— ΡΠΎΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ словаря словосочСтаний ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ тСксту (ΠΏΠΎΠ΄ словосочСтаниСм ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°ΡŽΡ‚ΡΡ Π΄Π²Π° слова, располоТСнныС рядом Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ);

— ΡΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ созданного Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ словаря Π² Ρ„Π°ΠΉΠ» ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Ρ‚Скстовых Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² (.txtΠΈΠ»ΠΈ.rtf);

— Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ сортировки словосочСтаний словаря ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ ΠΈ ΠΏΠΎ Ρ‡Π°ΡΡ‚ΠΎΡ‚Π΅ ΠΈΡ… ΡƒΠΏΠΎΡ‚рСблСния Π² Ρ‚СкстС;

— ΠΏΠΎΠΈΡΠΊ словосочСтания ΠΈ Ρ‡Π°ΡΡ‚ΠΎΡ‚Ρ‹ Π΅Π³ΠΎ употрСблСния Π² ΡΠ»ΠΎΠ²Π°Ρ€Π΅;

— ΠΎΡ‚сутствиС Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρƒ символами Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистра Π² Ρ…ΠΎΠ΄Π΅ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСкста ΠΈ ΡΠ»ΠΎΠ²Π°Ρ€Ρ.

Π—Π°Π΄Π°Ρ‡Π° создания ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰Π΅ΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΠΎΠΌ, опрСдСляСмым Π·Π°Π΄Π°Π½ΠΈΠ΅ΠΌ, ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ простых ΠΏΠΎΠ΄Π·Π°Π΄Π°Ρ‡:

— Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ тСкста ΠΈΠ· Ρ„Π°ΠΉΠ»Π°;

— Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ тСкста списка словосочСтаний, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт соотвСтствуСт Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ слову ΠΈΠ· Ρ‚Скста;

— Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ пСрСмСщСния словаря Π² Ρ„Π°ΠΉΠ» тСкстового Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°;

— ΠΏΠΎΠΈΡΠΊ словосочСтания Π² ΡΠ»ΠΎΠ²Π°Ρ€Π΅;

— ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° словосочСтаний Π² ΡΠ»ΠΎΠ²Π°Ρ€Π΅ ΠΏΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΡƒ;

— Π½Π΅Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€Ρƒ.

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

ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ тСстированиС интСрфСйс ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ

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

Β· количСство шагов Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для упорядочСния;

Β· количСство сравнСний элСмСнтов;

Β· количСство пСрСстановок, выполняСмых ΠΏΡ€ΠΈ сортировкС. [1]

Π‘Π°ΠΌΡ‹ΠΌ простым ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ сортировки являСтся Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ «ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠ°». Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡΠ½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ идСю, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΡŒΡ‚Π΅, Ρ‡Ρ‚ΠΎ массив (Ρ‚Π°Π±Π»ΠΈΡ†Π°) располоТСн Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎ. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ с Π±ΠΎΠ»ΡŒΡˆΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‚ Π²Π²Π΅Ρ€Ρ… Π½Π°ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ². ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ вдоль массива, начиная ΠΏΡ€ΠΎΡ…ΠΎΠ΄ «ΡΠ½ΠΈΠ·Ρƒ», бСрСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт ΠΈ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ сравниваСтся с ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ. ΠŸΡ€ΠΈ этом:

Β· Ссли встрСчаСтся Π±ΠΎΠ»Π΅Π΅ «Π»Π΅Π³ΠΊΠΈΠΉ» (с ΠΌΠ΅Π½ΡŒΡˆΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ) элСмСнт, Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ мСстами;

Β· ΠΏΡ€ΠΈ встрСчС с Π±ΠΎΠ»Π΅Π΅ «Ρ‚яТСлым» элСмСнтом, послСдний становится «ΡΡ‚Π°Π»ΠΎΠ½ΠΎΠΌ» для сравнСния, ΠΈ Π²ΡΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ с Π½ΠΈΠΌ.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ наибольший элСмСнт оказываСтся Π² ΡΠ°ΠΌΠΎΠΌ Π²Π΅Ρ€Ρ…Ρƒ массива.

Π’ΠΎ Π²Ρ€Π΅ΠΌΡ Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° вдоль массива находится Π²Ρ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Π΅ элСмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ помСщаСтся ΠΏΠΎΠ΄ элСмСнтом, Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅, Ρ‚. Π΅. Π½Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ свСрху ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, ΠΈ Ρ‚. Π΄.

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π°Ρ…, Π½Π΅Ρ‚ нСобходимости Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ€Π°Π½Π΅Π΅ «Π²ΡΠΏΠ»Ρ‹Π²ΡˆΠΈΠ΅» элСмСнты, Ρ‚.ΠΊ. ΠΎΠ½ΠΈ Π·Π°Π²Π΅Π΄ΠΎΠΌΠΎ большС ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Π²ΠΎ Π²Ρ€Π΅ΠΌΡ j-Π³ΠΎ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π° Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ся элСмСнты, стоящиС Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡΡ… Π²Ρ‹ΡˆΠ΅ j.

Алгоритм Π΄Π°Π½Π½ΠΎΠΉ сортировки считаСтся ΡƒΡ‡Π΅Π±Π½Ρ‹ΠΌ ΠΈ ΠΏΡ€Π°ΠΊΡ‚ичСски Π½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ся Π²Π½Π΅ ΡƒΡ‡Π΅Π±Π½ΠΎΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹, вмСсто Π½Π΅Π³ΠΎ Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ эффСктивныС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ сортировки. Π’ Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΌΠ΅Ρ‚ΠΎΠ΄ сортировки ΠΎΠ±ΠΌΠ΅Π½Π°ΠΌΠΈ Π»Π΅ΠΆΠΈΡ‚ Π² ΠΎΡΠ½ΠΎΠ²Π΅ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ ΡˆΠ΅ΠΉΠΊΠ΅Ρ€Π½Π°Ρ сортировка ΠΈ ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄Π°Π»ΡŒΠ½Π°Ρ сортировка. [1]

ШСйкСрная сортировка (сортировка пСрСстановками) — Ρ€Π°Π·Π½ΠΎΠ²ΠΈΠ΄Π½ΠΎΡΡ‚ΡŒ ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²ΠΎΠΉ сортировки. Анализируя ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠ²ΠΎΠΉ сортировки ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΄Π²Π° ΠΎΠ±ΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΡΡ‚Π²Π°.

Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, Ссли ΠΏΡ€ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΏΠΎ Ρ‡Π°ΡΡ‚ΠΈ массива пСрСстановки Π½Π΅ ΠΏΡ€ΠΎΠΈΡΡ…одят, Ρ‚ΠΎ ΡΡ‚Π° Ρ‡Π°ΡΡ‚ΡŒ массива ΡƒΠΆΠ΅ отсортирована ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΈΠ· Ρ€Π°ΡΡΠΌΠΎΡ‚рСния. [1]

Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΏΡ€ΠΈ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠΈ ΠΎΡ‚ ΠΊΠΎΠ½Ρ†Π° массива ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт «Π²ΡΠΏΠ»Ρ‹Π²Π°Π΅Ρ‚» Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ элСмСнт сдвигаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π²ΠΏΡ€Π°Π²ΠΎ. [1]

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

Π›ΡƒΡ‡ΡˆΠΈΠΉ случай для этой сортировки — отсортированный массив (О (n)), Ρ…ΡƒΠ΄ΡˆΠΈΠΉ — отсортированный Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС (O (nΠ†)). [1]

ΠŸΠΈΡ€Π°ΠΌΠΈΠ΄Π°Π»ΡŒΠ½Π°Ρ — Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сортировки, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π² Ρ…ΡƒΠ΄ΡˆΠ΅ΠΌ, Π² ΡΡ€Π΅Π΄Π½Π΅ΠΌ ΠΈ Π² Π»ΡƒΡ‡ΡˆΠ΅ΠΌ случаС (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ) заИ (n log n) ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈ сортировкС n ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ². ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ примСняСмой слуТСбной памяти Π½Π΅ Π·Π°Π²ΠΈΡΠΈΡ‚ ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массива (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, O (1)). [1]

ΠœΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΡƒΡΠΎΠ²Π΅Ρ€ΡˆΠ΅Π½ΡΡ‚Π²ΠΎΠ²Π°Π½Π½Π°Ρ сортировка ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠΎΠΌ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ элСмСнт всплываСт (min-heap) / Ρ‚ΠΎΠ½Π΅Ρ‚ (max-heap) ΠΏΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠΌ путям.

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΈΡ€Π°ΠΌΠΈΠ΄ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ — это Ρ‚Π°ΠΊΠΎΠ΅ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Ρ‹ условия:

1. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ лист ΠΈΠΌΠ΅Π΅Ρ‚ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ Π»ΠΈΠ±ΠΎ, Π»ΠΈΠ±ΠΎ, - максимальная Π³Π»ΡƒΠ±ΠΈΠ½Π° Π΄Π΅Ρ€Π΅Π²Π°.

2. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π»ΡŽΠ±ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Π΅ большС, Ρ‡Π΅ΠΌ значСния Π΅Ρ‘ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ².

Удобная структура Π΄Π°Π½Π½Ρ‹Ρ… для ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π° — Ρ‚Π°ΠΊΠΎΠΉ массив Array, Ρ‡Ρ‚ΠΎ Array[1] - элСмСнт Π² ΠΊΠΎΡ€Π½Π΅, Π° ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ элСмСнта Array[i] - Array[2i] ΠΈ Array [2i+1].

Алгоритм сортировки Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· Π΄Π²ΡƒΡ… основных шагов:

1. ВыстраиваСм элСмСнты массива Π² Π²ΠΈΠ΄Π΅ ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π³ΠΎ Π΄Π΅Ρ€Π΅Π²Π°:

Array[i]? Array[2i]

Array[i]? Array [2i+1], ΠΏΡ€ΠΈ n/2? i? 1.

Π­Ρ‚ΠΎΡ‚ шаг Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

2. Π‘ΡƒΠ΄Π΅ΠΌ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты ΠΈΠ· ΠΊΠΎΡ€Π½Ρ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π·Π° Ρ€Π°Π· ΠΈ ΠΏΠ΅Ρ€Π΅ΡΡ‚Ρ€Π°ΠΈΠ²Π°Ρ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ. Π’ΠΎ Π΅ΡΡ‚ΡŒ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ шагС ΠΎΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Π΅ΠΌ Array[1] ΠΈ Array[n], ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Π΅ΠΌ Array[1], Array[2], …, Array [n-1] Π² ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ. ЗатСмпСрСставляСм Array[1] ΠΈ Array [n-1], ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅ΠΌ Array[1], Array[2], …, Array [n-2] Π² ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Π΄Π΅Ρ€Π΅Π²ΠΎ. ΠŸΡ€ΠΎΡ†Π΅ΡΡ продолТаСтся Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€, ΠΏΠΎΠΊΠ° Π² ΡΠΎΡ€Ρ‚ΠΈΡ€ΡƒΡŽΡ‰Π΅ΠΌ Π΄Π΅Ρ€Π΅Π²Π΅ Π½Π΅ ΠΎΡΡ‚анСтся ΠΎΠ΄ΠΈΠ½ элСмСнт. Π’ΠΎΠ³Π΄Π° Array[1], Array[2], …, Array[n] - упорядочСнная ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π­Ρ‚ΠΎΡ‚ шаг Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ.

Π’Ρ‹Π±ΠΎΡ€ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° сортировки пСрСстановкамиобусловлСн Π΅Π³ΠΎ простотой ΠΈ Π±Ρ‹ΡΡ‚родСйствиСм ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ описанными Π²Ρ‹ΡˆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ.

Π’ ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π»Π΅ΠΆΠΈΡ‚ ΠΎΠ±ΠΌΠ΅Π½ сосСдних элСмСнтов массива. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт массива, начиная с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ, сравниваСтся со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ, ΠΈ Π΅ΡΠ»ΠΈ ΠΎΠ½ Π±ΠΎΠ»ΡŒΡˆΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ, Ρ‚ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ мСстами. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, элСмСнты с ΠΌΠ΅Π½ΡŒΡˆΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€ΠΎΠ΄Π²ΠΈΠ³Π°ΡŽΡ‚ΡΡ ΠΊ Π½Π°Ρ‡Π°Π»Ρƒ массива (Π²ΡΠΏΠ»Ρ‹Π²Π°ΡŽΡ‚), Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ с Π±ΠΎΠ»ΡŒΡˆΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ — ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ массива (Ρ‚ΠΎΠ½ΡƒΡ‚). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ сортировки ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ ΠΈΠ½ΠΎΠ³Π΄Π° Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ «ΠΏΡƒΠ·Ρ‹Ρ€ΡŒΠΊΠ°». Π­Ρ‚ΠΎΡ‚ процСсс повторяСтся ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·, сколько элСмСнтов Π² ΠΌΠ°ΡΡΠΈΠ²Π΅, минус Π΅Π΄ΠΈΠ½ΠΈΡ†Π°. [3]

На Ρ€ΠΈΡ. 1.1 Ρ†ΠΈΡ„Ρ€ΠΎΠΉ 1 ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΎ исходноС состояниС массива ΠΈ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅, Ρ†ΠΈΡ„Ρ€ΠΎΠΉ 2 — состояниС послС пСрСстановок Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅ ΠΈ ΠΏΠ΅Ρ€Π΅ΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΌ ΠΏΡ€ΠΎΡ…ΠΎΠ΄Π΅, ΠΈ Ρ‚. Π΄.

Рис. 1.1. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° пСрСстановками ΠŸΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° сортировки, запускаСтся Π½Π°ΠΆΠ°Ρ‚ΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° (Button1). ЗначСния элСмСнтов массива вводятся ΠΈΠ· ΡΡ‡Π΅Π΅ΠΊ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° stringGrid1. Π’ΠΎ Π²Ρ€Π΅ΠΌΡ сортировки, послС выполнСния ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ² элСмСнтов массива, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ массив Π² ΠΏΠΎΠ»Π΅ ΠΌΠ΅Ρ‚ΠΊΠΈ Label2.

Листинг 1.1. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° массива ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΎΠ±ΠΌΠ΅Π½Π° [3]

procedure TForm1. Button1Click (Sender: TObject);

const

SIZE=5;

var

a:array [1.SIZE] of integer;

k:integer; // Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ элСмСнт массива

i:integer; // индСкс для Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π° массива

changed:boolean; // TRUE, Ссли Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ†ΠΈΠΊΠ»Π΅ Π±Ρ‹Π»ΠΈ ΠΎΠ±ΠΌΠ΅Π½Ρ‹

buf:integer; // Π±ΡƒΡ„Π΅Ρ€ для ΠΎΠ±ΠΌΠ΅Π½Π° элСмСнтами массива

begin

// вводмассива

for i:=1 to SIZE do

a[i]: = StrToInt (StringGrid1. Cells [i-1, 0]);

label2.caption:='';

// сортировка массива repeat

Changed:=FALSE; // ΠΏΡƒΡΡ‚ΡŒ Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ Ρ†ΠΈΠΊΠ»Π΅ Π½Π΅Ρ‚ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ²

for k:=l to SIZE-1 do

if a[k] > a [k+l] then

begin // обмСняСм k-ΠΉ ΠΈ k+1-ΠΉ элСмСнты

buf:= a[k]; a[k]: = a [k+l]; a [k+l]: = buf;

changed:= TRUE;

end;

// выводмассива

for i:=l to SIZE do

Label2.caption:=label2.caption+' '+IntTostr (a[i]);

Label2.caption:=label2.caption+#13;

untilnot changed; // СслинСбылообмСнов, Π·Π½Π°Ρ‡ΠΈΡ‚

// массивотсортирован

Label2.caption:=label2.caption

+#13+'MaccΠΈΠ² отсортирован.';

end;

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ максимальноС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ΅ количСство Ρ†ΠΈΠΊΠ»ΠΎΠ² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сосСдних элСмСнтов массива Ρ€Π°Π²Π½ΠΎ количСству элСмСнтов массива минус ΠΎΠ΄ΠΈΠ½. ВмСстС с Ρ‚Π΅ΠΌ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ массив Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ упорядочСн Π·Π° ΠΌΠ΅Π½ΡŒΡˆΠ΅Π΅ число Ρ†ΠΈΠΊΠ»ΠΎΠ². НапримСр, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ чисСл 5 1 2 3 4, Ссли Π΅Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ прСдставлСниС массива, Π±ΡƒΠ΄Π΅Ρ‚ упорядочСна Π·Π° ΠΎΠ΄ΠΈΠ½ Ρ†ΠΈΠΊΠ», ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Ρ‚Ρ€Π΅Ρ… Ρ†ΠΈΠΊΠ»ΠΎΠ² Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ смысла.

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Π²Π²Π΅Π΄Π΅Π½Π° логичСская пСрСмСнная changed, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ FALSE. ΠŸΡ€ΠΎΡ†Π΅ΡΡ сортировки (Ρ†ΠΈΠΊΠ» repeat) Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, Ссли послС выполнСния ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ сосСдних элСмСнтов массива (Ρ†ΠΈΠΊΠ» for) Π½ΠΈ ΠΎΠ΄ΠΈΠ½ элСмСнт массива Π½Π΅ Π±Ρ‹Π» ΠΎΠ±ΠΌΠ΅Π½Π΅Π½ с ΡΠΎΡΠ΅Π΄Π½ΠΈΠΌ, ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, массив ΡƒΠΆΠ΅ упорядочСн.

Рис. 1.2. Π­Ρ‚Π°ΠΏΡ‹ сортировки массива ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΎΠ±ΠΌΠ΅Π½Π° послС Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ процСсса сортировки Для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ поиска Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹.

Π›ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ поиск — Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ нахоТдСния Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ значСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠ΅. Π”Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ являСтся ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ поиска ΠΈ Π² ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΎΡ‚ Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ, Π½Π΅ Π½Π°ΠΊΠ»Π°Π΄Ρ‹Π²Π°Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΈΡ… ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Поиск значСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ осущСствляСтся простым сравнСниСм ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠ³ΠΎ рассматриваСмого значСния (ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ поиск происходит слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ΠΎΡ‚ ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΊ Π±ΠΎΠ»ΡŒΡˆΠΈΠΌ) ΠΈ, Ссли значСния ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚ (с Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ), Ρ‚ΠΎ ΠΏΠΎΠΈΡΠΊ считаСтся Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½Π½Ρ‹ΠΌ. [2]

Если ΠΎΡ‚Ρ€Π΅Π·ΠΎΠΊ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π»ΠΈΠ½Ρƒ N, Ρ‚ΠΎ Π½Π°ΠΉΡ‚ΠΈ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ с Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ Π΄ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π·Π° Π²Ρ€Π΅ΠΌΡ. Π’.ΠΎ. асимптотичСская ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° —. Π’ ΡΠ²ΡΠ·ΠΈ с ΠΌΠ°Π»ΠΎΠΉ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли ΠΎΡ‚Ρ€Π΅Π·ΠΎΠΊ поиска содСрТит ΠΎΡ‡Π΅Π½ΡŒ ΠΌΠ°Π»ΠΎ элСмСнтов, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ памяти ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ / Π°Π½Π°Π»ΠΈΠ·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π² ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ ΠΏΡ€ΠΈ нСпосрСдствСнном ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Π»ΡŽΠ±ΠΎΠ³ΠΎ источника. Π’Π°ΠΊ ΠΆΠ΅, Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΉ поиск часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска максимума / ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ°.

Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ (Π±ΠΈΠ½Π°Ρ€Π½Ρ‹ΠΉ) поиск (Ρ‚Π°ΠΊΠΆΠ΅ извСстСн ΠΊΠ°ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄ дСлСния ΠΏΠΎΠΏΠΎΠ»Π°ΠΌ ΠΈ Π΄ΠΈΡ…отомия) — классичСский Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска элСмСнта Π² ΠΎΡ‚сортированном массивС (Π²Π΅ΠΊΡ‚ΠΎΡ€Π΅), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠΉ Π΄Ρ€ΠΎΠ±Π»Π΅Π½ΠΈΠ΅ массива Π½Π° ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ‹. [4]

Частным случаСм Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска являСтся ΠΌΠ΅Ρ‚ΠΎΠ΄ бисСкции, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ примСняСтся для поиска ΠΊΠΎΡ€Π½Π΅ΠΉ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΠΎΡ‚Ρ€Π΅Π·ΠΊΠ΅.

Листинг 1.2. ДвоичныйпоискэлСмСнтавмассивС. [5]

functionRecurceFind (L, R: Integer): Integer;

var

M: Integer;

begin

if R < L then

begin

Result:=L; // Result:= -1 Сслипоискточный

Exit;

end;

M:= (L + R) div 2;

if A[M] = X then

begin

Result:= M;

Exit;

end;

if A[M] > X then

Result:=RecurceFind (L, M — 1)

else

Result:=RecurceFind (M + 1, R)

end;

begin

Result:=RecurceFind (Low (A), High (A));

end;

Π’Ρ‹Π±ΠΎΡ€ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π΄Π²ΠΎΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска обусловлСн простотой ΠΈ Π±Ρ‹ΡΡ‚родСйствиСм ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ Π²Ρ‹ΡˆΠ΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΠ³ΠΎ поиска.

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

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

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… индСксов массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ. ΠœΠ°ΡΡΠΈΠ²Ρ‹ с ΠΎΠ΄Π½ΠΈΠΌ индСксом Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ, с Π΄Π²ΡƒΠΌΡ — Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ ΠΈ Ρ‚. Π΄. ΠžΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив нСстрого соотвСтствуСт Π²Π΅ΠΊΡ‚ΠΎΡ€Ρƒ Π² ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅, Π΄Π²ΡƒΠΌΠ΅Ρ€Π½Ρ‹ΠΉ — ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅.

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

3. ОписаниС ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ procedureTForm1. Button1Click (Sender: TObject)

Данная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° позволяСт Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ· Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы Windows. ΠŸΡ€ΠΈ этом открываСтся Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ с ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ. ДСлаСтся это с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° TOpenDialog. Бвойство Filter ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ Ρ„Π°ΠΉΠ»ΠΎΠ². ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ„Π°ΠΉΠ»Ρ‹ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ.txtΠΈ.rtf. ΠŸΡƒΡ‚ΡŒ ΠΊ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ Ρ„Π°ΠΉΠ»Ρƒ записываСтся Π² Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ FailΡ‚ΠΈΠΏΠ° String, послС Ρ‡Π΅Π³ΠΎ открываСтся Ρ„Π°ΠΉΠ» ΠΏΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ ΠΏΡƒΡ‚ΠΈ, ΠΈ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π° копируСтся Π² ΠΏΠΎΠ»Π΅ ΠœΠ•ΠœΠž1.

procedure TForm1. Button2Click (Sender: TObject):

ДаннаяпроцСдуранаподобииprocedureTForm1. Button1Click (Sender:TObject) ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» настройки с Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Слями ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π΅Π³ΠΎ Π² MEMO3.

procedureTForm1. Button3Click (Sender: TObject):

Данная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° выполняСт ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ Π·Π°Π΄Π°Ρ‡Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ — создаСт ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ. На ΠΏΠ΅Ρ€Π²ΠΎΠΌ этапС Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ создаСтся массив Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ razd, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹ΠΉ ΠΈΠ· ΠΏΠΎΠ»Ρ MEMO3. Π—Π°Ρ‚Π΅ΠΌ тСкст ΠΈΠ· MEMO1 построчно считываСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ строкового Ρ‚ΠΈΠΏΠ° s. Если ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ символ этой строки оказываСтся Ρ€Π°Π²Π½Ρ‹ΠΌ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ, Ρ‚ΠΎ ΡΠ»ΠΎΠ²ΠΎ записываСтся Π² ΠΌΠ°ΡΡΠΈΠ² строк slova, Π³Π΄Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ слову соотвСтствуСт ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΎΠ² массива. Π”Π°Π»Π΅Π΅ ΠΈΠ· ΠΏΠ°Ρ€ элСмСнтов массива slova формируСтся массив frazi, элСмСнтами ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ всС словосочСтания тСкста. ПослС этого запускаСтся Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиска ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… словосочСтаний. ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ числа ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… элСмСнтов Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ fraziпроисходит ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ всСх ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… элСмСнтов Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ провСряСмого ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ счСтчика Π½Π° ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… элСмСнтов. ПослС ΠΎΠ±Ρ…ΠΎΠ΄Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΡƒ массиву Π² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌΡ‹ΠΉ элСмСнт дописываСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ счСтчика, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰Π΅Π΅ частоту употрСблСния словосочСтания Π² Ρ‚СкстС ΠΈ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ ΠΊ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ словосочСтания. Π”Π°Π»Π΅Π΅ происходит сортировка (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ пСрСстановок) ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ словаря ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ.

На Π²Ρ…ΠΎΠ΄Π΅ ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Ρ‹ подаСтся тСкст ΠΈΠ· MEMO1. На Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π² MEMO2 выводится отсортированный ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π²ΠΈΠ΄Π° <οΏ½ΠΊΠΎΠ»-Π²ΠΎ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π΅Π½ΠΈΠΉ> `…'<�словосочСтаниС>.

procedure TForm1. Button4Click (Sender: TObject):

Данная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° позволяСт ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ Ρ€Π°Π½Π΅Π΅ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π² Ρ‚Скстовой Ρ„Π°ΠΉΠ». Π’ Π½Π΅ΠΉ Ρ‚Π°ΠΊΠΆΠ΅ открываСтся Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ с ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ пСрСмСнная Ρ‚ΠΈΠΏΠ° TSaveDialog. ΠŸΡƒΡ‚ΡŒ ΠΊ Ρ„Π°ΠΉΠ»Ρƒ записываСтся Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ SlvrΡ‚ΠΈΠΏΠ° String. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ для записи Π² Ρ„Π°ΠΉΠ» бСрСтся ΠΈΠ· ΠΏΠΎΠ»Ρ MEMO2.

procedureTForm1. Button5Click (Sender: TObject):

Данная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° выполняСт сортировку словаря ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ пСрСстановок. Если Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ свойстваIndexItemΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° RadioGroupΡ€Π°Π²Π½ΠΎ 0, Ρ‚ΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ сортируСтся ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ, ΠΈΠ½Π°Ρ‡Π΅ ΠΏΠΎ Ρ‡Π°ΡΡ‚ΠΎΡ‚Π΅.

procedure TForm1. Button6Click (Sender: TObject)):

Данная ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° осущСствляСт Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск ΠΏΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ. На Π²Ρ…ΠΎΠ΄Π΅ подаСтся ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ frazi, Π½Π° Π²Ρ‹Ρ…ΠΎΠ΄Π΅ Π² LabelзаписываСтся Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ поиска.

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

Π—Π°Π΄Π°Ρ‡Π° Π±Ρ‹Π»Π° Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ DelphiΠ² ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ срСдС Embarcadero RAD Studio XE2. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ состоит ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ модуля Unit1. Π’ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Ρ‹ Ρ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° тСкстового Π²Π²ΠΎΠ΄Π°, ΠΊΠ½ΠΎΠΏΠΊΠ° открытия Ρ„Π°ΠΉΠ»Π°, ΠΊΠ½ΠΎΠΏΠΊΠ° открытия Ρ„Π°ΠΉΠ»Π° с Π½Π°ΡΡ‚Ρ€ΠΎΠΉΠΊΠ°ΠΌΠΈ, ΠΊΠ½ΠΎΠΏΠΊΠ° создания словаря, ΠΊΠ½ΠΎΠΏΠΊΠ° сохранСния словаря ΠΈ ΠΏΠΎΠ»Π΅ для Π²Π²ΠΎΠ΄Π° слов для поиска (рис. 4.1)

Рис. 4.1. Π“Π»Π°Π²Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π² ΠΏΠΎΠ»ΡΡ… «Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ тСкст» ΠΈ «Π‘писок Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ» Π±Ρ‹Π»ΠΈ символы. Для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΊΠ½ΠΎΠΏΠΊΠ°ΠΌΠΈ открытия Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ тСкст нСпосрСдствСнно Π² ΠΏΠΎΠ»Π΅ (рис. 4.2).

Рис. 4.2. Π’Π²ΠΎΠ΄ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ тСкста ΠΈ ΡΠΏΠΈΡΠΊΠ° Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ.

ПослС этого ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°ΠΆΠ°Ρ‚ΡŒ ΠΊΠ½ΠΎΠΏΠΊΡƒ «ΠŸΡƒΡΠΊ!» ΠΈ Π² ΠΏΠΎΠ»Π΅ «Π§Π°ΡΡ‚ΠΎΡ‚Π½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ словосочСтаний» появится информация (рис. 4.3).

Рис. 4.3. БоставлСнный ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ словосочСтаний ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎ Ρ‡Π°ΡΡ‚ΠΎΡ‚Π΅ ΠΈΠ»ΠΈ ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ, Π²Ρ‹Π±Ρ€Π°Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡƒΠ½ΠΊΡ‚ Π² ΠΏΠΎΠ»Π΅ «Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° словаря» ΠΈΠ½Π°ΠΆΠ°Π² ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°» (рис. 4.4).

Рис. 4.4. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΏΠΎ Ρ‡Π°ΡΡ‚ΠΎΡ‚Π΅ Поиск словосочСтания ΠΏΠΎ ΡΠ»ΠΎΠ²Π°Ρ€ΡŽ осущСствляСтся ΠΏΡƒΡ‚Π΅ΠΌ Π²Π²ΠΎΠ΄Π° Π² ΠΏΠΎΠ»Π΅ «ΠŸΠΎΠΈΡΠΊ» Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠΉ Ρ„Ρ€Π°Π·Ρ‹ ΠΈ ΠΊΠ»ΠΈΠΊΠ° Π½Π° ΠΊΠ½ΠΎΠΏΠΊΡƒ «ΠŸΠΎΠΈΡΠΊ» ΠΈΠ»ΠΈ наТатия ΠΊΠ½ΠΎΠΏΠΊΠΈ EnterΠ½Π° ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Π΅. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ поиска выводятся ΠΏΠΎΠ΄ ΠΏΠΎΠ»Π΅ΠΌ «ΠŸΠΎΠΈΡΠΊ» (рис. 4.5).

Рис. 4.5. Поиск словосочСтания «Π½Π΅ ΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅»

ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ½ΠΎΠΏΠΊΠΈ «Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ» (рис. 4.6).

Рис. 4.6. Π‘ΠΎΡ…ΠΎΠ°Π½Π΅Π½ΠΈΠ΅ словаря Π½Π° ΠΆΠ΅ΡΡ‚ΠΊΠΎΠΌ дискС ΠŸΡ€ΠΈ сохранСнии Ρ„Π°ΠΉΠ»Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Ρ‡Π΅Ρ€Π΅Π· Ρ‚ΠΎΡ‡ΠΊΡƒ Π² ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π° ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ (.txt ΠΈΠ»ΠΈ. rtf).

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

1. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма: MSWindowsXP/Vista/7 с ΡƒΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΌ

NET Framework (вСрсии 2.0 ΠΈ ΡΡ‚Π°Ρ€ΡˆΠ΅). ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ памяти: 8 Мб ΠžΠ—Π£, 8 Мб ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ³ΠΎ мСста Π½Π° ΠΆΡ‘стком дискС.

2. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ с Ρ‚Скстовыми Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ².txtΠΈ.rtf. Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΠΈ вводятся Π² ΡΡ‚Ρ€ΠΎΠΊΡƒ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΠ±Π΅Π»! Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ — ΠΎΠ΄ΠΈΠ½ символ.

3. Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ прилоТСния Π½Π΅ ΡƒΡ‡ΠΈΡ‚ываСтся рСгистр.

4. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚ тСксты, Π·Π°Π½ΠΈΠΌΠ°ΡŽΡ‰ΠΈΠ΅ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 32 Кб ΠΏΠ°ΠΌΡΡ‚ΠΈ Π² ΡΠΈΠ»Ρƒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Memo.

6. ВСстированиС прилоТСния

ВСстированиС Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π»ΠΎΡΡŒ Π² ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ работоспособности прилоТСния Π²Π½Π΅ зависимости ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΌΠ° Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ³ΠΎ тСкста. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ€ΠΈΡΡƒΠ½ΠΊΠ°Ρ… 4.1−4.3.

Рис. 6.1 ВСкст, состоящий ΠΈ 79 слов Рис. 6.2 ВСкст, состоящий ΠΈΠ· 2146 слов Рис. 6.3 ВСкст, состоящий ΠΈΠ· 3910 слов

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

ΠŸΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ «showmessage» ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½ Ρ‚Π΅ΡΡ‚ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΎΠ±ΡŠΡ‘ΠΌΠ°Ρ… Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ВСствыдавал ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π΅Π½Π½Ρ‹Ρ… характСристиках Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ объСм ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ тСкста (Ρ‚Π°Π±. 6.1) ΠΈ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ словосочСтаний, пСрСстановок ΠΏΡ€ΠΈ сортировкС ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄ΠΎΠ² частСй массива ΠΏΡ€ΠΈ поискС (Ρ‚Π°Π±. 6.2).Π‘ΡΡ‹Π»Π°ΡΡΡŒ Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ тСстирования, ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄, Ρ‡Ρ‚ΠΎ врСмя составлСния словаря Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ зависит ΠΎΡ‚ ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²Π° входящСй ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π’Π°Π±. 6.1 Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ составлСния словаря ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΌΠ° тСкста

ОбъСм тСкста

ВрСмя

100 строк

200 строк

500 строк

1000 строк

Π’Π°Π±. 6.2 Кол-Π²ΠΎ пСрСстановок ΠΏΡ€ΠΈ сортировкС ΠΈ ΠΎΠ±Ρ…ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΈ поискС.

ОбъСм словаря

ВрСмя сортировки

Кол-Π²ΠΎ пСрСстановок ΠΏΡ€ΠΈ сортировкС

Кол-Π²ΠΎ ΠΎΠ±Ρ…ΠΎΠ΄ΠΎΠ² ΠΏΡ€ΠΈ поискС

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

ЛинСйная Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ² являСтся ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ провСряСмых Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ².

ΠΠ΅Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎΡΡ‚ΡŒ послСднСго Π³Ρ€Π°Ρ„ΠΈΠΊΠ° обусловлСна Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ»-Π²ΠΎ словосочСтаний зависит Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ ΠΎΠ±ΡŠΠ΅ΠΌΠ° тСкста, Π½ΠΎ ΠΈ ΠΎΡ‚ количСства ΠΏΡ€Π΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² Π½Π΅ΠΌ

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

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

1. А. Π―. ΠΡ€Ρ…Π°Π½Π³Π΅Π»ΡŒΡΠΊΠΈΠΉ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Delphi. — ΠœΠΎΡΠΊΠ²Π°: Изд-Π²ΠΎ Π‘ΠΈΠ½ΠΎΠΌ-ΠŸΡ€Π΅ΡΡ, 2003;1152 с.

2. Π•. П. ΠœΠ°Ρ€ΠΊΠΎΠ². ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Delphi 7. — Π‘Π°Π½ΠΊΡ‚-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³: Изд-Π²ΠΎ Π‘Π₯Π’-ΠŸΠ΅Ρ‚Π΅Ρ€Π±ΡƒΡ€Π³, 2005 — 784 с.

3. Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ ΠΎΠ±ΠΌΠ΅Π½Π° // Π£Ρ€ΠΎΠΊΠΈ программированияURL: http://progclub.ru/? param=book&name=delphi7_dlya_nachinaushih&dir=glava5&file=index14 (Π΄Π°Ρ‚Π° обращСния: 20.05.2012).

4. Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск // ВикипСдия — свободная энциклопСдия URL: http://ru.wikipedia.org/wiki/Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск (Π΄Π°Ρ‚Π° обращСния: 20.05.2012).

5. Π”Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ поиск // DelphiΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ URL: http://www.delphisources.ru/pages/faq/base/binary_int_array_search.html (Π΄Π°Ρ‚Π° обращСния: 20.05.2012).

6. DelphiTOpenDialog // DelphiΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅URL: http://www.delphisources.ru/pages/faq/faq_delphi_basics/TOpenDialog.php.html (Π”Π°Ρ‚Π° обращСния: 20.05.2012).

7. Delphi TSaveDialog // DelphiΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅URL: http://www.delphisources.ru/pages/faq/faq_delphi_basics/TSaveDialog.php.html (Π”Π°Ρ‚Π° обращСния: 20.05.2012).

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ВСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

unitUnit1;

interface

uses

Winapi. Windows, Winapi. Messages, System. SysUtils, System. Variants, System. Classes, Vcl. Graphics,

Vcl. Controls, Vcl. Forms, Vcl. Dialogs, Vcl. StdCtrls, Vcl. ExtCtrls;

type

TForm1 = class (TForm)

Memo1: TMemo;

Memo2: TMemo;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Edit1: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Memo3: TMemo;

Button6: TButton;

RadioGroup1: TRadioGroup;

Button5: TButton;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

procedure Button1Click (Sender: TObject);

procedure Button2Click (Sender: TObject);

procedure Button4Click (Sender: TObject);

procedure Button3Click (Sender: TObject);

procedure Button6Click (Sender: TObject);

procedure Button5Click (Sender: TObject);

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

private

{Private declarations}

public

{Public declarations}

end;

var

Form1: TForm1;

Fail, Slvr, Razdel: string;

frazi: array of string;

implementation

{$R *.dfm}

procedure TForm1. Button1Click (Sender: TObject); // ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ

varOpenDialog: TOpenDialog;

Tekst: TextFile;

s:string;

begin

Memo1. Clear;

Memo1. Lines. Add (' ');

openDialog:= TOpenDialog. Create (self);

openDialog. InitialDir:= GetCurrentDir;

// Волько Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Ρ‹

openDialog. Options:= [ofFileMustExist];

// Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ. txt ΠΈ.rtf Ρ„Π°ΠΉΠ»Ρ‹

openDialog. Filter:=

'Text Files|*.txt;*.rtf';

// Диалоготкрытияфайла

ifopenDialog. Execute

then

begin

Fail:=openDialog. FileName;

AssignFile (Tekst, Fail);

Reset (Tekst);

while not eof (Tekst) do

begin

ReadLn (Tekst, s);

Memo1. Lines. Add (s);

end;

Memo1. Lines. Delete (0);

end;

end;

procedure TForm1. Button2Click (Sender: TObject); // Настройки

varOpenDialog: TOpenDialog;

Tekst: TextFile;

s:string;

begin

if Memo3. Lines. Count=0 then Memo3. Lines. Add ('');

openDialog:= TOpenDialog. Create (self);

openDialog. InitialDir:= GetCurrentDir;

// Волько Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π½Ρ‹Π΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Π°ΠΉΠ»Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Ρ‹

openDialog. Options:= [ofFileMustExist];

// Π Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ. txt ΠΈ.rtf Ρ„Π°ΠΉΠ»Ρ‹

openDialog. Filter:=

'Text Files|*.txt;*.rtf';

// Диалоготкрытияфайла

ifopenDialog. Execute

then

begin

Razdel:=openDialog. FileName;

AssignFile (Tekst, Razdel);

Reset (Tekst);

while not eof (Tekst) do

begin

ReadLn (Tekst, s);

Memo3. Lines. Add (s);

end;

Memo3. Lines. Delete (0);

end;

end;

procedure TForm1. Button3Click (Sender: TObject); // ΠŸΡƒΡΠΊ

vari, p, j, k, e, p1, h, x, t: integer;

slova: array of string;

razd: array of char;

s, s1: string;

buf: string;

priz:boolean;

begin

Memo2. Clear;

setlength (slova, 0); // ΠΎΠ±Π½ΡƒΠ»Π΅Π½ΠΈΠ΅ словаря

setlength (razd, 0); // обнулСния списка Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ

i:=0;

p:=0;

j:=1;

////////////////////////////

s:=memo3. Lines[0]; //

while j<= length (s) do //

begin //

setLength (razd, p+1); //

razd[p]: =s[j]; // // созданиС массива с Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Слями

p:=p+1; //

j:=j+2; //

end; //

///////////////////////////

setlength (razd, length (razd)+1);

razd [length (razd) — 1]: = #13;

setlength (razd, length (razd)+1);

razd [length (razd) — 1]: = #9;

p:= 0;

j:= 1;

i:= 0;

t:=GetTickCount (); // Π½Π°Ρ‡Π°Π»ΠΎ Π·Π°ΠΌΠ΅Ρ€Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

whilei<>memo1. Lines. Count do

begin

s:= memo1. Lines[i]; // просмотрi-ΠΉ строки

whilepos (' ', s)=1 do delete (s, 1,1); // удаляСмотступы

{Π§Ρ‚ΠΎΠ±Ρ‹ символ '-' Π½Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΠ»ΡΡ ΠΊΠ°ΠΊ слово}

h:= 1;

while h<=length (s) — 2 do

begin

for p1:= 0 to length (razd) — 1 do

if s[h]='-' then if s [h+1]=razd[p1] then

delete (s, h, 1);

h:= h+1;

end;

whilelength (s)>0 do // Ссли ΠΊΠΎΠ½Π΅Ρ† строки, Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ Π½Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ

begin

k:= 0;

e:= -1;

{ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° строки Π½Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ раздСлитСля}

while k<= length (razd) — 1 do

begin

if (s[j]= razd[k]) then e:= 1;

k:= k+1

end;

ife>0 then // Ссли провСряСмый символ оказался Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΌ

begin

// Заносим слово Π² ΠΌΠ°ΡΡΠΈΠ² 'slova'

//////////////////////////////////////////////////////////////////////////

begin //

if s[j]='.' then s1:= copy (s, 1, j) else if s[j]='!' //

then s1:= copy (s, 1, j) else if s[j]='?' then s1:= copy (s, 1, j) //

else s1:= copy (s, 1, j-1); //

s1:= AnsiUpperCase (s1); // ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ всСх Π±ΡƒΠΊΠ² Π² ΡΠ»ΠΎΠ²Π΅ Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр //

if (length (s1)=0) or (s1='-') then begin j:= j+1; delete (s, 1,1); end //

else begin //

setLEngth (slova, p+1); //

slova[p]: =s1; //

p:= p+1; //

delete (s, 1, j); //

j:=1; end; end; end //

else j:= j+1; //

end; //

i:= i+1; //

end; //

//////////////////////////////////////////////////////////////////////////

{ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° слов ΠΎΡ‚ ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»Π΅ΠΉ}

For i:=0 to length (slova) — 1 do

For k:=0 to length (razd) — 1 do

whilepos (razd[k], slova[i])>0 do delete (slova[i], pos (razd[k], slova[i]), 1);

{БоставляСм Ρ„Ρ€Π°Π·Ρ‹ ΠΈΠ· ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… слов}

p:= 0; i:= 0;

whilei<= Length (slova) — 2 do

begin

j:= pos ('.', slova[i]);

if j=0 then if pos ('!', slova[i])=0 then if pos ('?', slova[i])=0 then

ifslova[i]<>'' then if slova [i+1]<>'' then

begin

setLEngth (frazi, p+1);

frazi[p]: =slova[i]+' '+slova [i+1];

p:= p+1;

end;

i:= i+1;

end;

{Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π²ΡˆΠΈΡ…ΡΡ Π·Π½Π°ΠΊΠΎΠ² прСпинания}

fori:= 0 toLength (frazi) — 1 do

begin

s:= frazi[i];

j:= length (s);

if s[j]='.' then delete (s, j, 1) else if s[j]='!'

then delete (s, j, 1) else if s[j]='?' then delete (s, j, 1);

frazi [i]: = s;

end;

{ΠŸΠΎΠ΄ΡΡ‡Π΅Ρ‚ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… Ρ„Ρ€Π°Π·}

h:= High (frazi);

i:= 0;

whilei<= h do begin

S:=frazi[i];

e:= 1;

for j:= h downtoi + 1 do begin

iffrazi[j] = S then begin

Inc (e);

for k:= j to h — 1 do frazi[k]: = frazi [k + 1];

Dec (h);

end;

end;

p:= length (frazi[i]);

ifpos (' ', frazi[i])<>p then

frazi[i]: = IntToStr (e) + '…' + S

else begin x:= i+1;

end;

Inc (i);

end;

SetLength (frazi, h + 1);

{Чистка словаря отсловосочСтаний с ΠΏΡƒΡΡ‚Ρ‹ΠΌΠΈ строками вмСсто слов}

k:=0;

while k <= length (frazi) — 1 do

begin

p:= length (frazi[k]);

ifpos (' ', frazi[k])=p then begin for i:=K+1 to Length (frazi) — 1 do

frazi [i-1]: = frazi[i];

SetLength (frazi, Length (frazi) — 1); end; inc (k);

end;

t:=GetTickCount () — t; // ΠΊΠΎΠ½Π΅Ρ† Π·Π°ΠΌΠ΅Ρ€Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

{Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ° Ρ„Ρ€Π°Π· ΠΏΠΎ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ}

repeat

priz:=false;

fori:= 0 to length (frazi) — 2 do

begin

p:= pos ('.', frazi[i])+8;

p1:= pos ('.', frazi [i+1])+8;

s:= copy (frazi[i], p, length (frazi[i]));

s1:= copy (frazi [i+1], p1, length (frazi[i+1]));

if (s>s1) then

begin

buf:= frazi[i];

frazi[i]:= frazi [i+1];

frazi [i+1]: =buf;

priz:=true;

end;

end;

untilpriz=false;

{Π’Ρ‹Π²ΠΎΠ΄ словаря Π² ΠΌΠ΅ΠΌΠΎ}

Memo2. Clear;

fori:= 0 to length (frazi) — 1 do

begin

Memo2. Lines. Add (' ');

Memo2. Lines[i]: =frazi[i];

end;

Label6. Caption:= 'ВрСмяработы t='+inttostr (t);

end;

procedure TForm1. Button4Click (Sender: TObject); // Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ

var

saveDialog:TSaveDialog;

begin

saveDialog:= TSaveDialog. Create (self);

saveDialog. InitialDir:= GetCurrentDir;

// Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅ΠΌΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒΡ„Π°ΠΉΠ»Ρ‹Ρ‚ΠΈΠΏΠ°. txt ΠΈ.rtf

saveDialog. Filter:= 'Text Files|*.txt|Text Files|*.rtf';

// ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΈΠ°Π»ΠΎΠ³ сохранСния Ρ„Π°ΠΉΠ»Π°

ifsaveDialog. Execute

then

begin

Slvr:=saveDialog. FileName;

Memo2. Lines. SaveToFile (Slvr);

end;

end;

procedure TForm1. Button5Click (Sender: TObject); // Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°

vari, p, p1: integer;

buf, s, s1: string;

priz:boolean;

begin

{Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΏΠΎΠ°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ}

if RadioGroup1. ItemIndex=0 then begin

repeat

priz:=false;

fori:= 0 to length (frazi) — 2 do

begin

p:= pos ('.', frazi[i])+8;

p1:= pos ('.', frazi [i+1])+8;

s:= copy (frazi[i], p, length (frazi[i]));

s1:= copy (frazi [i+1], p1, length (frazi[i+1]));

if (s>s1) then

begin

buf:= frazi[i];

frazi[i]:= frazi [i+1];

frazi [i+1]: =buf;

priz:=true;

end;

end;

untilpriz=false;

{Π’Ρ‹Π²ΠΎΠ΄ Π² ΠΌΠ΅ΠΌΠΎ}

Memo2. Clear;

fori:= 0 to length (frazi) — 1 do

begin

Memo2. Lines. Add (' ');

Memo2. Lines[i]: =frazi[i];

end;

end

else begin

{БортировкапочастотС}

repeat

priz:=false;

fori:= 0 to length (frazi) — 2 do

begin

p:= pos ('.', frazi[i]);

p1:= pos ('.', frazi [i+1]);

s:= copy (frazi[i], 1, p-1);

s1:= copy (frazi [i+1], 1, p-1);

if p

buf:= frazi[i];

frazi[i]:= frazi [i+1];

frazi [i+1]: =buf;

priz:=true;

end;

if (s

begin

buf:= frazi[i];

frazi[i]:= frazi [i+1];

frazi [i+1]: =buf;

priz:=true;

end;

end;

untilpriz=false;

{Π’Ρ‹Π²ΠΎΠ΄ Π² ΠΌΠ΅ΠΌΠΎ}

Memo2. Clear;

fori:= 0 to length (frazi) — 1 do

begin

Memo2. Lines. Add (' ');

memo2.lines[i]: = frazi[i];

end; end;

end;

procedure TForm1. Button6Click (Sender: TObject); // Поиск

varobr:string;

i, k, j, p, p1: integer;

s, s1, buf: string;

priz:boolean;

begin

label1. Caption:='';

repeat

priz:=false;

fori:= 0 to length (frazi) — 2 do

begin

p:= pos ('.', frazi[i])+8;

p1:= pos ('.', frazi [i+1])+8;

s:= copy (frazi[i], p, length (frazi[i]));

s1:= copy (frazi [i+1], p1, length (frazi[i+1]));

if (s>s1) then

begin

buf:= frazi[i];

frazi[i]:= frazi [i+1];

frazi [i+1]: =buf;

priz:=true;

end;

end;

untilpriz=false;

obr:=AnsiUpperCase (edit1. Text);

i:=0; j:=length (frazi) — 1;

k:=0;

whilei<= j do

begin

k:= i + (j — i) div 2;

p:= pos ('.', frazi[k])+8;

s:= copy (frazi[k], p, length (frazi[k]));

s1:= copy (frazi[k], 1, p-9);

ifobr> s then

i:= k + 1

else if obr< s then

j:= k — 1

else

break;

end;

if s= obr then

Label1. Caption:='БловосочСтаниС «'+s+'» встрСчаСтся Π² Ρ‚СкстС '+s1+' Ρ€Π°Π· (-Π°)'

elseLabel1. Caption:='БловосочСтаниС Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ';

if Edit1. Text='' then label1. Caption:='';

end;

procedure TForm1. Edit1KeyPress (Sender: TObject; var Key: Char);

begin

if Key = #13 then Button6Click (Button6);

end;

end.

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