![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 06.03.2012
Сообщений: 17
|
![]()
Составте программу, удаляющую из текста слова, которые встречаются в нем N раз.
вот что получилось: uses crt; var s,s1,a:string; i:integer; k:byte absolute s; begin s:='';s1:=''; clrscr; write('Input phrase: ');readln(s); while s[1]=' ' do delete(s,1,1); while s[k]=' ' do dec(k); while pos(' ',s)<>0 do delete (s,pos(' ',s),1); a:='';s:=s+' '; repeat s1:=copy(s,1,pos(' ',s)-1); delete(s,1,length(s1)+1); if pos(s1,s)=0 then a:=a+' '+s1; until length(s)=0; write('Modified string: ',a); readln end. но она делает не совсе то что надо. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
Ну, в этой программе даже отдаленно нет кода, который хотя бы подсчитывал количество вхождений того или иного слова.
Кроме того, в программе вообще отсутствует константа или переменная N, заявленная в условии. Лично я не знаю, как бы эту задачу можно было решить _просто_, т.е. так, чтобы объем программы увеличился не более, чем в 2-3 раза. Может, не совсем точно сформулировано условие? |
![]() |
![]() |
![]() |
#3 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
вот один из вариантов решения. т.к. мы видим, что речь идёт о TurboPascal и под текстом понимается строка (string), то она не может быть длинее, чем 255 символов. следовательно, в этой строке не может быть более 128 слов. дальше уже всё просто. массив words : array[1..128] of string; дальше берём любой парсер, разбирающий строку на отдельные слова (простейший - поискать на форуме (с) Stilet, вот ТУТ, например, можно взять. дальше возможны варианты. можно завести массив счётчиков, сколько встречается i-е слово. а можно и сортировкой воспользоваться. я бы лично отсортировал полученный массив слов. ну, дальше просто, идём (однопроходный цикл) по осортированному массиву, подсчитывая одинаковые слова. если счётчик совпал с N - то удаляем текущее слово из исходной строки. всё. профит. p.s. вся программа будет примерно 35-40 строк кода... |
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
Да, первой приходит в голову именно мысль насчет массива из 128 строк. Правда, я бы не стал сортировать, а завел отдельный массив счетчиков (или даже объединил счетчик в одну структуру со строкой) и проверял повторения при первом проходе.
Но я сомневаюсь, что полный алгоритм уместится в 24-36 сток (чтобы, как я сказал, увеличить объем программы не более чем в 2-3 раза). В принципе, не страшно, но... У меня, например, модуль для хранения "слов" содержит несколько сотен строк. Он, правда, позволяет за разумное время обрабатывать миллиарды запросов и хранить десятки миллионов уникальных "слов", но это просто пример, показывающий, что любая задача может быть решена на разных уровнях. И, соответственно, с разным объемом кода. У меня обычно получается достаточно объемный код. Поэтому я решение данной задачи вряд ли бы впихнул в 36 строк. |
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
ну вот, около 50 строк кода (у TC строк в коде 20, поэтому в ~2.5 раза больше
![]() Код:
код писал около 18 минут... что, разумеется, для подобной задачи непростительно много... ![]() |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Обработка текста и чисел в паскале. | ali23210275 | Помощь студентам | 9 | 09.04.2012 22:15 |
Обработка файла на Турбо Паскаль - Удалить из файла файл вещественных чисел максимальную компоненту | chudo*** | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 24.12.2011 22:51 |
Дано n вещественных чисел а1, а2,…,аn. Определите число соседств двух чисел разного знака (Паскаль) | bambam | Помощь студентам | 1 | 29.11.2011 11:36 |
Обработка текста в C++ | Novichel | Помощь студентам | 25 | 16.04.2011 19:12 |
Обработка текста [Паскаль] | Zigi | Помощь студентам | 1 | 13.12.2010 18:44 |