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

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° комплСкса ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ рСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска подстроки

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

ΠŸΡƒΡΡ‚ΡŒ Π·Π°Π΄Π°Π½Ρ‹ массивы символов Ρ‚ΠΈΠΏΠ° char: строка S ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ N, подстрока P Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ M (см. Π±Π»ΠΎΠΊ 2). Поиск Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ послС поиска подстроки P Π²ΠΎ Π²ΡΠ΅Ρ… строках S, это позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎ Π²ΡΠ΅Ρ… Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… вхоТдСниях P Π² S. Поиск считаСтся ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌ, Ссли количСство ΡΠΎΠ²ΠΏΠ°Π²ΡˆΠΈΡ… символов Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ Π΄Π»ΠΈΠ½Π΅ подстроки (см. Π±Π»ΠΎΠΊΠΈ 7βˆ’9). Алгоритм содСрТит условиС, ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹… Π§ΠΈΡ‚Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ >

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° комплСкса ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ рСализация Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска подстроки (Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚, курсовая, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Π°Ρ)

http://www.r

ΠšΡƒΡ€ΡΠΎΠ²Π°Ρ Ρ€Π°Π±ΠΎΡ‚Π° Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° комплСкса ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска подстроки ΠŸΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ записка ΠŸΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ записка содСрТит 37 страниц, 7 рисунков, 1 Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ, 4 источника, 2 прилоТСния.

ЦСлью Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ являСтся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ комплСкс, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ поиска подстроки Π² Ρ‚СкстС.

Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Π±Π°Π·Π΅ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ ΠΏΡ€ΠΎΠ²Π΅Π΄Π΅Π½ΠΎ обоснованиС ΠΈ Π²Ρ‹Π±ΠΎΡ€ срСдств Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ комплСкса.

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° структура, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ комплСкса, класс абстрактного Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… — список (Π΄Π°Π»Π΅Π΅ АВД — список). На ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ комплСкс Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ Π‘++ Π² ΡΡ€Π΅Π΄Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Visual Studio.

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ комплСкса Π±Ρ‹Π»Π° использована соврСмСнная тСхнология ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ программирования ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ирования графичСского ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠ³ΠΎ интСрфСйса, такая, ΠΊΠ°ΠΊ Windows Forms.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

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

ОписаниС структуры Π΄Π°Π½Π½Ρ‹Ρ…

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° структуры ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π­ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ

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

Бписок Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Ρ‹

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А. ГрафичСская Ρ‡Π°ΡΡ‚ΡŒ

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π‘. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ ΠΏΡ€ΠΎΡ†Π΅ΡΡΠ΅ выполнСния курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ комплСкс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ поиска подстроки Π² Ρ‚СкстС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ прямого поиска ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΠšΠ½ΡƒΡ‚Π°-ΠœΠΎΡ€Ρ€ΠΈΡΠ°-ΠŸΡ€Π°Ρ‚Ρ‚Π°. Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ АВД ΠΈΠ»ΠΈ с ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ описания. Π”ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° тСстирования трудоёмкости ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ. Π­Ρ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ прСдставлСна Π½Π° Π³Ρ€Π°Ρ„ΠΈΠΊΠ°Ρ…. Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π°Π½Π°Π»ΠΈΠ· тСорСтичСских ΠΈ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΎΡ†Π΅Π½ΠΎΠΊ эффСктивности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². Π Π°Π±ΠΎΡ‚Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ прСдставлСна ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π°ΠΌΠΈ интСрфСйса ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ПО Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ программирования Π‘++.

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ Быстрый поиск Ρ‚ΠΎΡ‡Π½ΠΎ Π·Π°Π΄Π°Π½Π½ΠΎΠΉ подстроки Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅ являСтся ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΡΠ°ΠΌΡ‹Ρ… ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡ поиска ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Однако эта Π·Π°Π΄Π°Ρ‡Π° являСтся Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ Π²Π°ΠΆΠ½ΠΎΠΉ. Данная функция встроСна Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ тСкстовыС Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Ρ‚ΠΎ сущСствСнно ускоряСт процСсс поиска ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (Π·Π°ΠΌΠ΅Π½Ρƒ) Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚ΠΎΠ².

Π’ Π½Π°ΡΡ‚оящСС врСмя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ поиска подстроки Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅ инкапсулированы Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ высокоуровнСвыС языки программирования. Но ΡΡ‚ΠΎΠΈΡ‚ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π°Π»Π΅ΠΊΠΎ Π½Π΅ ΡΠ°ΠΌΡ‹Π΅ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½Ρ‹Π΅, ΠΈ Π΅ΡΠ»ΠΈ основной Π·Π°Π΄Π°Ρ‡Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ являСтся Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ подстроки Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π½Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ поиска. Π’Π°ΠΊΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π·Π°Π±Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ примСнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ поиска Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ся ΠΎΠ΄Π½ΠΈΠΌΠΈ тСкстовыми Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ ΠΈ Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…. Алгоритмы поиска ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ поисковыми Ρ€ΠΎΠ±ΠΎΡ‚Π°ΠΌΠΈ ΠΏΡ€ΠΈ индСксации страниц, ΠΈ ΠΎΡ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΠΈ нахоТдСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов Π² Ρ‚СкстС зависит Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Π‘ΠΏΠ°ΠΌ-Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… сСрвисов Ρ‚Π°ΠΊΠΆΠ΅ занимаСтся поиском Π² Ρ‚СкстС писСм ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… Ρ„Ρ€Π°Π·. ВсС это Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΠ± Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ поиска подстроки Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅.

ОписаниС структуры Π΄Π°Π½Π½Ρ‹Ρ….

АВД — массив структур struct line, содСрТит int id — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ строки, char str[255] - строка. line *arr — ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡΠ°ΠΌ массив. Массив сразу создаётся с Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ n = 0. Π Π°Π·ΠΌΠ΅Ρ€ n ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ‚ся ΠΏΡ€ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнтов. АВД — список ΠΈΠΌΠ΅Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ: Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π°, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнта, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ элСмСнта. Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ АВД Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π² ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΎΠΌ интСрфСйсС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ АВД см. ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ 1.

Π”Π°Π½Π½Ρ‹Π΅:

ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹:

int id — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ элСмСнта массива структур;

char str[255] - строка.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π΄Π°Π½Π½Ρ‹Ρ…:

Массив структур Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ n.

ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ:

Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ° ΠΈΠ· Ρ„Π°ΠΉΠ»Π°:

Π’Ρ…ΠΎΠ΄: имя Ρ„Π°ΠΉΠ»Π° с Π²Ρ…ΠΎΠ΄Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ wchar_t file[255];

ΠŸΡ€ΠΎΡ†Π΅ΡΡ: Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массива ΠΈΠ· Ρ„Π°ΠΉΠ»Π°;

Π’Ρ‹Ρ…ΠΎΠ΄: Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ списка n;

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строку:

Π’Ρ…ΠΎΠ΄: String^ str — строка для добавлСния;

ΠŸΡ€ΠΎΡ†Π΅ΡΡ: Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½ΠΎΠΉ строки Π² ΠΌΠ°ΡΡΠΈΠ², выполняСтся Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Addline ();

Π’Ρ‹Ρ…ΠΎΠ΄: Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива n+1;

Π£Π΄Π°Π»ΠΈΡ‚ΡŒ строку:

Π’Ρ…ΠΎΠ΄: int number — ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ удаляСмой строки;

ΠŸΡ€ΠΎΡ†Π΅ΡΡ: поиск ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° строки ΠΈ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ Π΅ΠΌΡƒ значСния -10;

Π’Ρ‹Ρ…ΠΎΠ΄: Π½ΠΎΠ²Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ size-1;

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ массива структур:

ΠŸΡ€ΠΎΡ†Π΅ΡΡ: ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ массива структур;

ΠšΠΎΠ½Π΅Ρ† АВД.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹Ρ… Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Алгоритм прямого поиска подстроки.

ΠŸΡƒΡΡ‚ΡŒ Π·Π°Π΄Π°Π½Ρ‹ массивы символов Ρ‚ΠΈΠΏΠ° char: строка S ΠΊΠ°ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ N, подстрока P Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ M (см. Π±Π»ΠΎΠΊ 2). Поиск Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ послС поиска подстроки P Π²ΠΎ Π²ΡΠ΅Ρ… строках S, это позволяСт ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΠΎ Π²ΡΠ΅Ρ… Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… вхоТдСниях P Π² S. Поиск считаСтся ΡƒΠ΄Π°Ρ‡Π½Ρ‹ΠΌ, Ссли количСство ΡΠΎΠ²ΠΏΠ°Π²ΡˆΠΈΡ… символов Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π½ΠΎ Π΄Π»ΠΈΠ½Π΅ подстроки (см. Π±Π»ΠΎΠΊΠΈ 7−9). Алгоритм содСрТит условиС, ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ Π·Π° ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹ строки (см. Π±Π»ΠΎΠΊ 10). ΠŸΡ€ΠΎΡ…ΠΎΠ΄ ΠΏΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ символу строки осущСствляСтся счСтчиками (см. Π±Π»ΠΎΠΊ 4, Π±Π»ΠΎΠΊ 6).

Алгоритм ΠšΠ½ΡƒΡ‚Π°-ΠœΠΎΡ€Ρ€ΠΈΡΠ°-ΠŸΡ€Π°Ρ‚Ρ‚Π°.

Π’ ΡΡ‚ΠΎΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ΅ подстрока (ΠΎΠ±Ρ€Π°Π·) Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ N ΡΡ€Π°Π²Π½ΠΈΠ²Π°Π΅Ρ‚ся со ΡΡ‚Ρ€ΠΎΠΊΠΎΠΉ S Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ M ΠΈ Π΅ΡΠ»ΠΈ встрСчаСтся нСсовпадСниС, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ сравнСниС начинаСтся с ΠΏΠ΅Ρ€Π²ΠΎΠΉ Π½Π΅ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅. Если совпадСния Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½Π΅Ρ‚, Ρ‚ΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΠ΅ начинаСтся со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° вводится Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ массив для вычислСния сдвига Π½Π° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΌ шагС — D. Π­Ρ‚ΠΎΡ‚ массив ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π½Π°Π»ΠΈΠ·Π° ΠΎΠ±Ρ€Π°Π·Π° Π  ΠΈ Π·Π°Π²ΠΈΡΠΈΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ³ΠΎ подстроки. Π”ΠΎ Π½Π°Ρ‡Π°Π»Π° самого поиска подстроки Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ значСния сдвигов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ поискС. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ Π² ΠΌΠ°ΡΡΠΈΠ² D ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ = -1, Ссли производится сдвиг Π½Π° Ρ†Π΅Π»Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Π·. Π§Π΅ΠΌ мСньшС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ D, Ρ‚Π΅ΠΌ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠ΅Π΅ число ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ производится сдвиг ΠΏΠΎ ΡΡ‚Ρ€ΠΎΠΊΠ΅. Π‘Π΄Π²ΠΈΠ³ для ячСйки j Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΠ΅Ρ‚ся ΠΊΠ°ΠΊ j-d[j]. ΠžΡΠ½ΠΎΠ²Π½Ρ‹ΠΌ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ КМП-Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° прямого поиска являСтся осущСствлСния сдвига слова Π½Π΅ Π½Π° ΠΎΠ΄ΠΈΠ½ символ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, Π° Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ количСство символов. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ сдвиг, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²Π΅Π»ΠΈΡ‡ΠΈΠ½Ρƒ сдвига. Для ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡ эффСктивности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сдвиг Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС Π±Ρ‹Π» Π±Ρ‹ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большим.

Π‘Π»ΠΎΠΊ схСмы Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² прСдставлСны см. ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ А.

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° структуры ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ поиск подстрока На ΠΎΡΠ½ΠΎΠ²Π°Π½ΠΈΠΈ Π°Π½Π°Π»ΠΈΠ·Π° тСхничСского задания Π±Ρ‹Π»Π° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° поиска подстроки. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ основной структуры Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ массив структур.

Разработанная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° состоит ΠΈΠ· 4 основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ:

void ShowStruct () — функция Π²Ρ‹Π²ΠΎΠ΄Π° массива Π½Π° ΡΠΊΡ€Π°Π½;

int LineFind (array^ fstr, int m) — функция прямого поиска подстроки. Π’Ρ…ΠΎΠ΄: искомая подстрока, Ρ€Π°Π·ΠΌΠ΅Ρ€ искомой строки.

Π’Ρ‹Ρ…ΠΎΠ΄: Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1 Ссли поиск ΡƒΡΠΏΠ΅ΡˆΠ΅Π½, 0 — Ссли Π½Π΅ ΡƒΡΠΏΠ΅ΡˆΠ΅Π½.

int algorithm_KMP (array^ fstr, int l) — функция поиска Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Π‘ΠΎΠΉΠ΅Ρ€Π°-ΠœΡƒΡ€Π°. Π’Ρ…ΠΎΠ΄: искомая подстрока, адрСс строки Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ строк. Π’Ρ‹Ρ…ΠΎΠ΄: Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ адрСс строки.

int Addline () — функция добавлСния строки Π² ΠΌΠ°ΡΡΠΈΠ² структур. Π’Ρ‹Ρ…ΠΎΠ΄: Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ 1 — Ссли Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ, 0 — Ссли Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π΅ΡƒΠ΄Π°Ρ‡Π½ΠΎ.

Помимо основных Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ АВД Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΉ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠΈ:

private:System:Void Form1_Load (System:Object^sender, System: EventArgs^ e) — функция открытия Ρ„ΠΎΡ€ΠΌΡ‹.

private: System: Void button1_Click (System:Object^ sender, System: EventArgs^ e) — функция поиска.

private: System: Void button2_Click (System:Object^ sender, System: EventArgs^ e) — функция Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° массива структур.

private: System: Void button3_Click (System:Object^ sender, System: EventArgs^ e) — функция удалСния массива структур ΠΈ Π·Π°ΠΊΡ€Ρ‹Ρ‚ия Ρ„ΠΎΡ€ΠΌΡ‹.

private:System:Void button4_Click (System:Object^ sender, System: EventArgs^ e) — функция добавлСния строки Π² ΠΌΠ°ΡΡΠΈΠ² структур.

private:System:Void button5_Click (System:Object^ sender, System: EventArgs^ e) — функция удалСния строки ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π° структур.

private:System:Void ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ToolStripMenuItem_Click (System:Object^ sender, System: EventArgs^ e) — функция очищСния всСх ΠΏΠΎΠ»Π΅ΠΉ ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ массива структур.

private:System:Void ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒToolStripMenuItem_Click (System:Object^ sender, System: EventArgs^ e) — функция Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° для чтСния.

Бтруктурная схСма ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ прСдставлСна Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ А. Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ см. ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π‘.

ОписаниС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ тСкста ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ. Помимо этого Ρ‚Π°ΠΊΠΆΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° функция удалСния строки. Из ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… формируСтся массив структур, Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π² Π΄Π°Π»ΡŒΠ½Π΅ΠΉΡˆΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ посрСдством Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ добавлСния ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡ строки. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π½Π°ΠΉΠ΄Π΅Π½Π½ΠΎΠΉ подстроки Π² Ρ‚СкстС ΠΈ Π²Ρ€Π΅ΠΌΡ поиска, Π²Ρ‹Π²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹Π΅ поля. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ выводятся Π½Π° ΡΠΊΡ€Π°Π½, см. Рис4−5.

Π Π°Π±ΠΎΡ‚Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² прСдставлСна ΡΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚Π°ΠΌΠΈ.

Для заполнСния списка строками ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ тСкста ΠΈΠ· Ρ„Π°ΠΉΠ»Π°: для Π½Π°Ρ‡Π°Π»Π° Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» (Π€Π°ΠΉΠ» — ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ) см. Π ΠΈΡ1.

Рис1. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° Рис2. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ строки Π—Π°Ρ‚Π΅ΠΌ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив структур с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ½ΠΎΠΏΠΊΠΈ «Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив». ΠŸΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ввСсти строки Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ½ΠΎΠΏΠΊΡƒ «Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строку». Кнопка добавлСния Ρ‚Π°ΠΊΠΆΠ΅ прСдоставляСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строку ΠΊ Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½ΠΎΠΌΡƒ ΠΈΠ· Ρ„Π°ΠΉΠ»Π° тСксту, см. Π ΠΈΡ2.

Кнопка «Π£Π΄Π°Π»ΠΈΡ‚ΡŒ строку» Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ удалСния строки ΠΈΠ· Ρ‚Скста, см. Π ΠΈΡ3.

Рис3. Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ строки Рис4. Поиск ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹.

Рис5.Поиск ΠΈ Π²Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π­ΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ ИсслСдованиС эффСктивности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² ВСстированиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π½Π° Π²Ρ…ΠΎΠ΄Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°. Π’ ΠΊΠ°Ρ‡Π΅ΡΡ‚Π²Π΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π±Ρ‹Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ тСкстовыС Ρ„Π°ΠΉΠ»Ρ‹ содСрТащиС английский тСкст. Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ поиска ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° прСдставлСно Π² Π’Π°Π±Π»ΠΈΡ†Π΅ 1 ΠΈ Π ΠΈΡ 6.

ВрСмя

ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ символов

ΠŸΡ€ΡΠΌΠΎΠΉ поиск

Алгоритм КМП

0.1 393

0.1 272

0.039

0.2 970

0.4 723

0,3 294

0,097

0,1

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

Рис 6. Π“Ρ€Π°Ρ„ΠΈΠΊ зависимости Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡ‚ ΠΊΠΎΠ»-Π²Π° символов.

Анализируя Π³Ρ€Π°Ρ„ΠΈΠΊ Рис 6 ΠΈ Π’Π°Π±Π»ΠΈΡ†Ρƒ 1 ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ КМП Π΄Π°Π΅Ρ‚ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° нСсовпадСнию ΠΏΡ€Π΅Π΄ΡˆΠ΅ΡΡ‚Π²ΡƒΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ число совпадСний, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² ΡΡ‚ΠΎΠΌ случаС ΠΎΠ±Ρ€Π°Π· сдвигаСтся сразу Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΉ. Но ΡΡ‚ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ Π½Π΅ Ρ‚Π°ΠΊ часто, поэтому Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΏΡ€ΡΠΌΡ‹ΠΌ поиском, Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»Π΅Π½ ИсслСдованиС трудоёмкости.

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

Рис 7. Π—Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ‚ΡŒ трудоСмкости ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

Π“Ρ€Π°Ρ„ΠΈΠΊ Рис 7 ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ большС количСство символов Π² ΡΠΏΠΈΡΠΊΠ΅ строк, Ρ‚Π΅ΠΌ большС потрСбуСтся произвСсти ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ для получСния Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°. Π’ ΠΊΠΎΠ΄Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π·Π° ΠΊΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтарных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ счСтчик kol.

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

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ написания курсового ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° мною Π±Ρ‹Π»ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Ρ‹ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹: Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ поиска подстроки Π² Ρ‚СкстС, АВД — массив структур, ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° тСстирования трудоёмкости для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° прямого поиска. ПослС Ρ‡Π΅Π³ΠΎ, Π±Ρ‹Π»ΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π³Ρ€Π°Ρ„ΠΈΠΊ эффСктивности Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² поиска ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊ зависимости трудоёмкости прямого поиска ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° тСкста. Π’Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΡΠ½ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ записка содСрТит описаниС АВД — список ΠΈ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° Ρ€ΠΈΡΡƒΠ½ΠΊΠ°Ρ…. КомплСкс ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ Π½Π° ΡΠ·Ρ‹ΠΊΠ΅ программирования Π‘++ Π² ΡΡ€Π΅Π΄Π΅ Visual Studio.

Π’ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ возмоТности:

Π€ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массива строк ΠΈΠ· Ρ„Π°ΠΉΠ»Π°;

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ строки Π² ΠΌΠ°ΡΡΠΈΠ²;

Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ строки ΠΈΠ· ΠΌΠ°ΡΡΠΈΠ²Π°;

ΠžΡ‡ΠΈΡΡ‚ΠΊΠ° массива;

ΠŸΡ€ΡΠΌΠΎΠΉ поиск;

Поиск Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠΌ ΠšΠ½ΡƒΡ‚Π°-ΠœΠΎΡ€Ρ€ΠΈΡΠ°-ΠŸΡ€Π°Ρ‚Ρ‚Π°;

Π’Ρ‹Π²ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ² Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΠΎΠ»Π΅.

1. Π”. МакконнСл. ΠžΡΠ½ΠΎΠ²Ρ‹ соврСмСнных Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ². М.: ВСхносфСра, 2010. 368 с.

2. Н. Π’ΠΈΡ€Ρ‚. Алгоритмы ΠΈ ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…. М.: НСвский Π”ΠΈΠ°Π»Π΅ΠΊΡ‚, 2009. 352 с.

3. Π . Π‘Π΅Π΄ΠΆΠ²ΠΈΠΊ. Π€ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ C++. Части 1−4. М.: Диасофт,

ΠŸΠ Π˜Π›ΠžΠ–Π•ΠΠ˜Π•, А ΠŸΠ Π˜Π›ΠžΠ–Π•ΠΠ˜Π• Π‘

#pragma once

#include

#include

#include

#include

#include

#include

#include

#include

namespace KursachSia_Kod {

using namespace System;

using namespace System: Runtime:InteropServices;

using namespace System: ComponentModel;

using namespace System: Collections;

using namespace System: Windows:Forms;

using namespace System: Data;

using namespace System: Drawing;

using namespace System: IO;

using namespace std;

struct line

{

char str[255];

int id;

};

line *arr;

int n=-1,m=0,choice=0,longstr=0,kol=0;

wchar_t file[255];

/// Бводка для Form1

public ref class Form1: public System: Windows:Forms:Form

{

public:

Form1(void)

{

InitializeComponent ();

//TODO: Π΄ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ ΠΊΠΎΠ΄ конструктора

}

protected:

/// ΠžΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ рСсурсы.

~Form1()

{

if (components)

{

delete components;

}

}

private: System: Windows:Forms:RadioButton^ radioButton1;

protected:

private: System: Windows:Forms:RadioButton^ radioButton2;

private: System: Windows:Forms:TextBox^ textBox1;

private: System: Windows:Forms:TextBox^ textBox2;

private: System: Windows:Forms:Button^ button1;

private: System: Windows:Forms:TextBox^ textBox3;

private:

private:

private: System: Windows:Forms:Label^ label1;

private: System: Windows:Forms:Label^ label2;

private: System: Windows:Forms:Label^ label3;

private: System: Windows:Forms:Button^ button2;

private: System: Windows:Forms:Button^ button3;

private: System: Windows:Forms:Label^ label6;

private: System: Windows:Forms:Label^ label4;

private: System: Windows:Forms:ToolTip^ toolTip1;

private: System: Windows:Forms:Button^ button4;

private: System: Windows:Forms:TextBox^ textBox4;

private: System: Windows:Forms:Button^ button5;

private: System: Windows:Forms:TextBox^ textBox5;

private: System: Windows:Forms:Label^ label7;

private: System: Windows:Forms:Label^ label8;

private: System: Windows:Forms:MenuStrip^ menuStrip1;

private: System: Windows:Forms:ToolStripMenuItem^ Ρ„Π°ΠΉΠ»ToolStripMenuItem;

private: System: Windows:Forms:ToolStripMenuItem^ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒToolStripMenuItem;

private: System: Windows:Forms:ToolStripMenuItem^ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ToolStripMenuItem;

private: System: Windows:Forms:OpenFileDialog^ openFileDialog1;

private: System: ComponentModel:IContainer^ components;

private:

/// ВрСбуСтся пСрСмСнная конструктора.

#pragma region Windows Form Designer generated code

/// ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ конструктора — Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠΉΡ‚Π΅

/// содСрТимоС Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Π° ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π° ΠΊΠΎΠ΄Π°.

void InitializeComponent (void)

{

this->components = (gcnew System: ComponentModel:Container ());

this->radioButton1 = (gcnew System: Windows:Forms:RadioButton ());

this->radioButton2 = (gcnew System: Windows:Forms:RadioButton ());

this->textBox1 = (gcnew System: Windows:Forms:TextBox ());

this->textBox2 = (gcnew System: Windows:Forms:TextBox ());

this->button1 = (gcnew System: Windows:Forms:Button ());

this->textBox3 = (gcnew System: Windows:Forms:TextBox ());

this->label1 = (gcnew System: Windows:Forms:Label ());

this->label2 = (gcnew System: Windows:Forms:Label ());

this->label3 = (gcnew System: Windows:Forms:Label ());

this->button2 = (gcnew System: Windows:Forms:Button ());

this->button3 = (gcnew System: Windows:Forms:Button ());

this->label6 = (gcnew System: Windows:Forms:Label ());

this->label4 = (gcnew System: Windows:Forms:Label ());

this->toolTip1 = (gcnew System: Windows:Forms:ToolTip (this->components));

this->button4 = (gcnew System: Windows:Forms:Button ());

this->textBox4 = (gcnew System: Windows:Forms:TextBox ());

this->button5 = (gcnew System: Windows:Forms:Button ());

this->textBox5 = (gcnew System: Windows:Forms:TextBox ());

this->label7 = (gcnew System: Windows:Forms:Label ());

this->label8 = (gcnew System: Windows:Forms:Label ());

this->menuStrip1 = (gcnew System: Windows:Forms:MenuStrip ());

this->Ρ„Π°ΠΉΠ»ToolStripMenuItem = (gcnew System: Windows:Forms:ToolStripMenuItem ());

this->ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒToolStripMenuItem = (gcnew System: Windows:Forms:ToolStripMenuItem ());

this->ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ToolStripMenuItem = (gcnew System: Windows:Forms:ToolStripMenuItem ());

this->openFileDialog1 = (gcnew System: Windows:Forms:OpenFileDialog ());

this->menuStrip1->SuspendLayout ();

this->SuspendLayout ();

// radioButton1

this->radioButton1->AutoSize = true;

this->radioButton1->Location = System: Drawing:Point (235, 28);

this->radioButton1->Name = L" radioButton1″ ;

this->radioButton1->Size = System: Drawing:Size (201, 17);

this->radioButton1->TabIndex = 0;

this->radioButton1->TabStop = true;

this->radioButton1->Text = L" ΠŸΡ€ΡΠΌΠΎΠΉ поиск подстроки Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅" ;

this->radioButton1->UseVisualStyleBackColor = true;

this->radioButton1->CheckedChanged += gcnew System: EventHandler (this, &Form1:radioButton1_CheckedChanged);

// radioButton2

this->radioButton2->AutoSize = true;

this->radioButton2->Location = System: Drawing:Point (235, 61);

this->radioButton2->Name = L" radioButton2″ ;

this->radioButton2->Size = System: Drawing:Size (101, 17);

this->radioButton2->TabIndex = 1;

this->radioButton2->TabStop = true;

this->radioButton2->Text = L" Алгоритм КМП" ;

this->radioButton2->UseVisualStyleBackColor = true;

this->radioButton2->CheckedChanged += gcnew System: EventHandler (this, &Form1:radioButton2_CheckedChanged);

// textBox1

this->textBox1->Location = System: Drawing:Point (12, 41);

this->textBox1->Multiline = true;

this->textBox1->Name = L" textBox1″ ;

this->textBox1->ScrollBars = System: Windows:Forms:ScrollBars:Both;

this->textBox1->Size = System: Drawing:Size (195, 235);

this->textBox1->TabIndex = 2;

this->textBox1->TextChanged += gcnew System: EventHandler (this, &Form1:textBox1_TextChanged);

// textBox2

this->textBox2->Location = System: Drawing:Point (272, 124);

this->textBox2->Name = L" textBox2″ ;

this->textBox2->ScrollBars = System: Windows:Forms:ScrollBars:Vertical;

this->textBox2->Size = System: Drawing:Size (147, 20);

this->textBox2->TabIndex = 3;

// button1

this->button1->Location = System: Drawing:Point (12, 295);

this->button1->Name = L" button1″ ;

this->button1->Size = System: Drawing:Size (75, 23);

this->button1->TabIndex = 4;

this->button1->Text = L" Поиск" ;

this->button1->UseVisualStyleBackColor = true;

this->button1->Click += gcnew System: EventHandler (this, &Form1:button1_Click);

// textBox3

this->textBox3->AcceptsReturn = true;

this->textBox3->ImeMode = System: Windows:Forms:ImeMode:NoControl;

this->textBox3->Location = System: Drawing:Point (213, 180);

this->textBox3->Multiline = true;

this->textBox3->Name = L" textBox3″ ;

this->textBox3->ReadOnly = true;

this->textBox3->ScrollBars = System: Windows:Forms:ScrollBars:Vertical;

this->textBox3->Size = System: Drawing:Size (263, 54);

this->textBox3->TabIndex = 5;

// label1

this->label1->AutoSize = true;

this->label1->Location = System: Drawing:Point (269, 108);

this->label1->Name = L" label1″ ;

this->label1->Size = System: Drawing:Size (152, 13);

this->label1->TabIndex = 6;

this->label1->Text = L" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΈΡΠΊΠΎΠΌΡƒΡŽ подстроку" ;

// label2

this->label2->AutoSize = true;

this->label2->Location = System: Drawing:Point (46, 25);

this->label2->Name = L" label2″ ;

this->label2->Size = System: Drawing:Size (107, 13);

this->label2->TabIndex = 7;

this->label2->Text = L" Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ Ρ„Π°ΠΉΠ»Π°" ;

// label3

this->label3->AutoSize = true;

this->label3->Location = System: Drawing:Point (295, 159);

this->label3->Name = L" label3″ ;

this->label3->Size = System: Drawing:Size (106, 13);

this->label3->TabIndex = 8;

this->label3->Text = L" Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ поиска" ;

// button2

this->button2->Location = System: Drawing:Point (12, 339);

this->button2->Name = L" button2″ ;

this->button2->Size = System: Drawing:Size (111, 23);

this->button2->TabIndex = 9;

this->button2->Text = L" Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ массив" ;

this->button2->UseVisualStyleBackColor = true;

this->button2->Click += gcnew System: EventHandler (this, &Form1:button2_Click);

// button3

this->button3->Location = System: Drawing:Point (401, 441);

this->button3->Name = L" button3″ ;

this->button3->Size = System: Drawing:Size (75, 23);

this->button3->TabIndex = 11;

this->button3->Text = L" Π’Ρ‹Ρ…ΠΎΠ΄" ;

this->button3->UseVisualStyleBackColor = true;

this->button3->Click += gcnew System: EventHandler (this, &Form1:button3_Click);

// label6

this->label6->AutoSize = true;

this->label6->Location = System: Drawing:Point (247, 250);

this->label6->Name = L" label6″ ;

this->label6->Size = System: Drawing:Size (125, 13);

this->label6->TabIndex = 14;

this->label6->Text = L" ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ символов: «;

// label4

this->label4->AutoSize = true;

this->label4->Location = System: Drawing:Point (247, 274);

this->label4->Name = L" label4″ ;

this->label4->Size = System: Drawing:Size (43, 13);

this->label4->TabIndex = 12;

this->label4->Text = L" ВрСмя:" ;

// button4

this->button4->Location = System: Drawing:Point (12, 383);

this->button4->Name = L" button4″ ;

this->button4->Size = System: Drawing:Size (111, 23);

this->button4->TabIndex = 16;

this->button4->Text = L" Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ строку" ;

this->button4->UseVisualStyleBackColor = true;

this->button4->Click += gcnew System: EventHandler (this, &Form1:button4_Click);

// textBox4

this->textBox4->Location = System: Drawing:Point (139, 386);

this->textBox4->Name = L" textBox4″ ;

this->textBox4->Size = System: Drawing:Size (237, 20);

this->textBox4->TabIndex = 17;

// button5

this->button5->Location = System: Drawing:Point (12, 430);

this->button5->Name = L" button5″ ;

this->button5->Size = System: Drawing:Size (111, 23);

this->button5->TabIndex = 18;

this->button5->Text = L" Π£Π΄Π°Π»ΠΈΡ‚ΡŒ строку" ;

this->button5->UseVisualStyleBackColor = true;

this->button5->Click += gcnew System: EventHandler (this, &Form1:button5_Click);

// textBox5

this->textBox5->Location = System: Drawing:Point (139, 433);

this->textBox5->Name = L" textBox5″ ;

this->textBox5->Size = System: Drawing:Size (237, 20);

this->textBox5->TabIndex = 19;

// label7

this->label7->AutoSize = true;

this->label7->Location = System: Drawing:Point (196, 414);

this->label7->Name = L" label7″ ;

this->label7->Size = System: Drawing:Size (122, 13);

this->label7->TabIndex = 20;

this->label7->Text = L" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ Π½ΠΎΠΌΠ΅Ρ€ строки" ;

// label8

this->label8->AutoSize = true;

this->label8->Location = System: Drawing:Point (210, 367);

this->label8->Name = L" label8″ ;

this->label8->Size = System: Drawing:Size (86, 13);

this->label8->TabIndex = 21;

this->label8->Text = L" Π’Π²Π΅Π΄ΠΈΡ‚Π΅ строку" ;

// menuStrip1

this->menuStrip1->Items->AddRange (gcnew cli: array< System: Windows:Forms:ToolStripItem^ >(1) {this->Ρ„Π°ΠΉΠ»ToolStripMenuItem});

this->menuStrip1->Location = System: Drawing:Point (0, 0);

this->menuStrip1->Name = L" menuStrip1″ ;

this->menuStrip1->Size = System: Drawing:Size (487, 24);

this->menuStrip1->TabIndex = 22;

this->menuStrip1->Text = L" menuStrip1″ ;

// Ρ„Π°ΠΉΠ»ToolStripMenuItem

this->Ρ„Π°ΠΉΠ»ToolStripMenuItem->DropDownItems->AddRange (gcnew cli: array< System: Windows:Forms:ToolStripItem^ >(2) {this->ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒToolStripMenuItem,

this->ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ToolStripMenuItem});

this->Ρ„Π°ΠΉΠ»ToolStripMenuItem->Name = L" Ρ„Π°ΠΉΠ»ToolStripMenuItem" ;

this->Ρ„Π°ΠΉΠ»ToolStripMenuItem->Size = System: Drawing:Size (48, 20);

this->Ρ„Π°ΠΉΠ»ToolStripMenuItem->Text = L" Π€Π°ΠΉΠ»" ;

// ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒToolStripMenuItem

this->ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒToolStripMenuItem->Name = L" ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒToolStripMenuItem" ;

this->ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒToolStripMenuItem->Size = System: Drawing:Size (126, 22);

this->ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒToolStripMenuItem->Text = L" ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ" ;

this->ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒToolStripMenuItem->Click += gcnew System: EventHandler (this, &Form1:ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒToolStripMenuItem_Click);

// ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ToolStripMenuItem

this->ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ToolStripMenuItem->Name = L" ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ToolStripMenuItem" ;

this->ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ToolStripMenuItem->Size = System: Drawing:Size (126, 22);

this->ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ToolStripMenuItem->Text = L" ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ" ;

this->ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ToolStripMenuItem->Click += gcnew System: EventHandler (this, &Form1:ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ToolStripMenuItem_Click);

// openFileDialog1

this->openFileDialog1->FileName = L" openFileDialog1″ ;

// Form1

this->AllowDrop = true;

this->AutoScaleDimensions = System: Drawing:SizeF (6, 13);

this->AutoScaleMode = System: Windows:Forms:AutoScaleMode:Font;

this->ClientSize = System: Drawing:Size (487, 465);

this->Controls->Add (this->label8);

this->Controls->Add (this->label7);

this->Controls->Add (this->textBox5);

this->Controls->Add (this->button5);

this->Controls->Add (this->textBox4);

this->Controls->Add (this->button4);

this->Controls->Add (this->label6);

this->Controls->Add (this->label4);

this->Controls->Add (this->button3);

this->Controls->Add (this->button2);

this->Controls->Add (this->label3);

this->Controls->Add (this->label2);

this->Controls->Add (this->label1);

this->Controls->Add (this->textBox3);

this->Controls->Add (this->button1);

this->Controls->Add (this->textBox2);

this->Controls->Add (this->textBox1);

this->Controls->Add (this->radioButton2);

this->Controls->Add (this->radioButton1);

this->Controls->Add (this->menuStrip1);

this->MainMenuStrip = this->menuStrip1;

this->Name = L" Form1″ ;

this->RightToLeftLayout = true;

this->Text = L" Form1″ ;

this->Load += gcnew System: EventHandler (this, &Form1:Form1_Load);

this->menuStrip1->ResumeLayout (false);

this->menuStrip1->PerformLayout ();

this->ResumeLayout (false);

this->PerformLayout ();

}

#pragma endregion

int LineFind (array^ fstr, int m)

{

int i=0,j=0,s=0,k=-1,res=0;

while (true)

{

k++;kol++;

s = strlen (arr[k]. str);

if (arr[k].id ≠ -10)

{

i=-1;kol++;

while (true)

{

i++;

j=0;kol++;

while ((j

{

kol++;

j++;

if ((j==m)||(i==s-m))

{

kol++;

if (j==m)

{

kol++;

textBox3->Text +="ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ° Π½Π°ΠΉΠ΄Π΅Π½Π° Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅ «+ (k) + «ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ «+ (i) + «rn» ;

res=1;

}

}

}

if (i>s) break;

}

if (k==n)

break;

}

}

return res;

}

int Addline ()

{

String^ str = textBox4->Text;

longstr = longstr + str->Length;

if (str->Length≠0)

{

n++;

arr[n]. id=n;

char* str2 = (char*)(void*)Marshal:StringToHGlobalAnsi (str);

strcpy (arr[n]. str, str2);

textBox1->Text += arr[n]. id + ": «+ gcnew String (arr[n]. str) + «rn» ;

//kolstr = kolstr + n;

//label5->Text = «ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ элСмСнтарных ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ: «+ (n);

return 1;

}

else

return 0;

}

void ShowStruct ()

{

for (int i=0;i<=n;i++)

if (arr[i]. id ≠ -10)

textBox1->Text += arr[i]. id + ": «+ gcnew String (arr[i]. str) + «rn» ;

}

int algorithm_KMP (array^ fstr, int l)

{

int i=0, j=-1, N, M;

N = strlen (arr[l]. str);

M = fstr->Length;

int *d =(int*)malloc (M*sizeof (int)); // динамичСский массив Π΄Π»ΠΈΠ½Ρ‹ М

// ВычислСниС прСфикс-Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

d[0]=-1;

while (i

{

kol++;

while ((j>=0) && (fstr[j]≠fstr[i]))

{

j = d[j];

kol++;

}

i++;

j++;

if (fstr[i]==fstr[j])

{

d[i]=d[j];

kol++;

}

else

{

d[i]= j;

kol++;

}

}

/* поиск */

for (i=0,j=0;(i

while ((j>=0)&&(fstr[j]≠arr[l]. str[i]))

{

j=d[j];

kol++;

}

free (d); /* освобоТдСниС памяти массива d */

if (j==M)

return i-j;

else /* i==N */

return -1;

}

private: System: Void textBox1_TextChanged (System:Object^ sender, System: EventArgs^ e)

{

}

private: System: Void Form1_Load (System:Object^ sender, System: EventArgs^ e)

*.txt

private: System: Void button2_Click (System:Object^ sender, System: EventArgs^ e)

{

textBox1->Clear ();

if (wcslen (file)≠0)

{

ifstream input;

input.open (file);

while (!input.eof ())

{

n++;

input>>arr[n]. str;

longstr=longstr + strlen (arr[n]. str);

arr[n].id = n;

}

input.close ();

ShowStruct ();

label6->Text = «ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ символов: «+ longstr;

}

else

MessageBox:Show («Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»: Π€Π°ΠΉΠ» — ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ»);

}

private: System: Void button1_Click (System:Object^ sender, System: EventArgs^ e)

{

if (n ≠ -1)

{textBox3->Clear ();

int a, b=0;

kol = 0;

double Time1, Time2;

array^ fstr = textBox2->Text->ToCharArray ();

m = fstr->Length;

if (m ≠ 0)

{

Time1 = omp_get_wtime ();

if (choice==1)

{

if (LineFind (fstr, m)==0)

textBox3->Text = «ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°» ;

kol=0;

}

if (choice==2)

{

for (int l=0;l<=n;l++)

{

kol++;

a=algorithm_KMP (fstr, l);

if (a ≠ -1)

{

textBox3->Text +="ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ° Π½Π°ΠΉΠ΄Π΅Π½Π° Π² ΡΡ‚Ρ€ΠΎΠΊΠ΅ «+ (l) + «ΠΏΠΎ Π°Π΄Ρ€Π΅ΡΡƒ «+ (a) + «rn» ;

b=1;

}

}

if (b == 0)

textBox3->Text = «ΠŸΠΎΠ΄ΡΡ‚Ρ€ΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Π°» ;

kol=0;

}

Time2 = omp_get_wtime ();

Time2 = Time2 — Time1;

label4->Text ="ВрСмя: «+ String: Format («{0:F5}», Time2);

}

else

MessageBox:Show («Π’Π²Π΅Π΄ΠΈΡ‚Π΅ ΠΈΡΠΊΠΎΠΌΡƒΡŽ подстроку»);

}

else

MessageBox:Show («ΠœΠ°ΡΡΠΈΠ² структур Π½Π΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½»);

}

private: System: Void radioButton1_CheckedChanged (System:Object^ sender, System: EventArgs^ e)

{

choice = 1;

}

private: System: Void radioButton2_CheckedChanged (System:Object^ sender, System: EventArgs^ e)

{

choice = 2;

}

private: System: Void button3_Click (System:Object^ sender, System: EventArgs^ e)

{

delete[] arr;

this->Close ();

}

private: System: Void button4_Click (System:Object^ sender, System: EventArgs^ e)

{

if (Addline ()==1)

{

label6->Text = «ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ символов: «+ longstr;

MessageBox:Show («Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½»);

}

else

MessageBox:Show («ΠžΡˆΠΈΠ±ΠΊΠ° ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнта»);

}

private: System: Void button5_Click (System:Object^ sender, System: EventArgs^ e)

{

if (n≠-1)

{

int number=-1;

if (textBox5->Text ≠ «»)

{

number = Convert: ToInt32(textBox5->Text);

if (number≠-1)

{

for (int i=0;i<=n;i++)

if (arr[i]. id == number)

{

longstr = longstr — strlen (arr[i]. str);

arr[i].id=-10;

}

label6->Text = «ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ символов: «+ longstr;

textBox1->Clear ();

ShowStruct ();

}

MessageBox:Show («Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ»);

}

else

MessageBox:Show («ΠŸΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка ΠΏΡ€ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠΈ»);

}

else

MessageBox:Show («Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚Π΅ массив структур»);

}

private: System: Void ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒΠœΠ°ΡΡΠΈΠ²Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€ToolStripMenuItem_Click (System:Object^ sender, System: EventArgs^ e)

{

textBox1->Clear ();

textBox2->Clear ();

textBox3->Clear ();

textBox4->Clear ();

textBox5->Clear ();

longstr = 0;

label6->Text = «ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ символов: «;

label4->Text ="ВрСмя: «;

delete[] arr;

arr=new line[10 000];

n=-1;

}

private: System: Void ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒToolStripMenuItem_Click (System:Object^ sender, System: EventArgs^ e)

{

openFileDialog1->ShowDialog ();

if (openFileDialog1->FileName == nullptr) return;

try

{

String^ filename = openFileDialog1->FileName;

pin_ptr whs =PtrToStringChars (filename);

wcscpy_s (file, whs);

auto MyReader = gcnew IO: StreamReader (openFileDialog1->FileName, System: Text:Encoding:GetEncoding (1251));

textBox1->Text= MyReader->ReadToEnd ();

MyReader->Close ();

}

catch (IO:FileNotFoundException^ Битуация)

{

MessageBox:Show (Битуация->Message + «nΠ€Π°ΠΉΠ» Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½», «ΠžΡˆΠΈΠ±ΠΊΠ°», MessageBoxButtons: OK, MessageBoxIcon: Exclamation);

}

catch (Exception^ Битуация)

{

MessageBox:Show (Битуация->Message, «ΠžΡˆΠΈΠ±ΠΊΠ°», MessageBoxButtons: OK, MessageBoxIcon: Exclamation);

}

}

};

}

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