Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на языке Pascal


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

Boriss
Статус: Академик
Рейтинг: 1691
∙ повысить рейтинг »
_Ayl_
Статус: Студент
Рейтинг: 1438
∙ повысить рейтинг »
Micren
Статус: Профессионал
Рейтинг: 1437
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Программирование / Pascal (Паскаль)

Номер выпуска:1011
Дата выхода:15.01.2010, 00:00
Администратор рассылки:Калашников О.А., Руководитель
Подписчиков / экспертов:361 / 197
Вопросов / ответов:1 / 3

Вопрос № 175959: Уважаемые эксперты помогите пожалуйста: Удалить 2 раза в тексте слово встречающееся более трех раз. То есть вводится текст с пробелами и знаками препинания, нужно что бы программа удаляла первые два повторения слова...



Вопрос № 175959:

Уважаемые эксперты помогите пожалуйста: Удалить 2 раза в тексте слово встречающееся более трех раз. То есть вводится текст с пробелами и знаками препинания, нужно что бы программа удаляла первые два повторения слова

Отправлен: 09.01.2010, 23:46
Вопрос задал: Adskiy, Посетитель
Всего ответов: 3
Страница вопроса »


Отвечает Patriotix-N, 5-й класс :
Здравствуйте, Adskiy.
Рабочий вариант.
Код:

program str;

function symbol(s:char):boolean; //Не учитывается такой вариант - "I'm"(код 044) , если встретится такое слово, то оно будет обработано как 2. Также не учитываются вариации с цифрами(коды 048-057) - могут ли они являтся частью слов. В данном принимается, что цифры не относятся к слову и если слово будет начинаться с цифры, то оно будет обрабатываться отдельно от числа, как будто между ними стоит какой-либо знак(пробел, например).
begin
symbol:=((s >= #65) and (s<=#90))or((s>=#97) and (s<=#122))or((s >= #192) and (s<=#255))
end;

function TriplDel(a:string):string;
var
i:integer;
count:integer;
w,ws,b,c:string ;
wp:array [1..2] of integer; //Массив позиций
begin
b:=a;
for i:=1 to length(a) do
begin
if symbol(a[i]) then //Проверяем буква ли это
begin
w:= w + a[i]; //Записываем слово
end
else
begin
if symbol(a[i-1]) then //Мы только, что закончили считывaть слово
begin
if ((pos(w,ws) <> 0) //Если такая последовательность уже есть в списке удаленных
and (( symbol(ws[pos(w,ws)-1])) //Проверяем не является ли данная последовательность частью другого слова
or (symbol(ws[pos(w,ws)+length(w)]))))
or (pos(w,ws) = 0) then//Если эта последовательность еще не удалялась
begin
c:=b; //формируем новую вспомогательную строку
count:=0; //Сбрасываем счетчик
wp[2]:=0; //Сбрасываем счетчик смещения второго вхождения
while (pos(w,c)<>0) //Слово есть в строке
and (count < 4) do //не обрабатываем все найденные вхождения после 4.
begin
if (not symbol(c[pos(w,c)-1])) //Проверяем не нашли ли мы кусок другого слова
and (not symbol(c[pos(w,c)+length(w)])) then //для этого символ до найденного слова в тексте и после него, не должен быть частью друго слова, т.е. символом, определенным в функции symbol.
begin
count:=count +1; // Нашли вхождение, поэтому увеличиваем счетчик
case count of
1: wp[1]:=pos(w,c); //Устанавливаем смещение первого вхождения
2: wp[2]:=wp[2]+pos(w,c); // и второго.
4: begin
delete(b,wp[2],length(w)); //Удаляем второе
delete(b,wp[1],leng th(w)); //и первое вхождения
ws:=ws + w + ' '; //Отмечаем(добавляем к списку) слово, как уже встречавшееся
end;
end;
end;
if count < 2 then wp[2]:=wp[2]+pos(w,c)+length(w); //Смещяем значение второго вхождения на обрезаемую длинну
delete(c,1,pos(w,c)+length(w)); //Обрезаем строку с начала до конца найденного слова, чтобы не находить его следующий раз.
end;
end;
w:=''; //Обнуляем ключевое слово
end;
end;

end;
TriplDel:=b; //Возвращяемое значение
end;


var
s:string;
begin
s:='1 hello odin 2 hello 1 hi 2 shine 3 hi 4 hi 3 hello ras yes. I 5 hi am fine! 4 hello, 6 hi 7 hi';
writeln(TriplDel(s));
readln;
end.

Раб ота:
Код:

Вход:
1 hello odin 2 hello 1 hi 2 shine 3 hi 4 hi 3 hello ras yes. I 5 hi am fine! 4 hello, 6 hi 7 hi

Выход:
1 odin 2 1 2 shine 3 4 hi 3 hello ras yes. I 5 hi am fine! 4 hello, 6 hi 7 hi

-----
Лучше знать ничего обо всем, чем все ни о чем.

Ответ отправил: Patriotix-N, 5-й класс
Ответ отправлен: 12.01.2010, 21:40

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 258578 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает lanakarta, 2-й класс :
    Здравствуйте, Adskiy.
    мой вариант

    Приложение:

    Ответ отправил: lanakarta, 2-й класс
    Ответ отправлен: 13.01.2010, 17:02

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 258596 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Зенченко Константин Николаевич, Модератор :
    Здравствуйте, Adskiy.

    Вариант с использованием только строк.
    Удачи!

    Приложение:

    -----
    Итерация от человека. Рекурсия — от Бога. — Л. Питер Дойч

    Ответ отправил: Зенченко Константин Николаевич, Модератор
    Ответ отправлен: 13.01.2010, 19:19
    Украина, Киев
    Тел.: +38-097-953-66-19
    Адрес: Украина, Киев

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 258597 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.13 от 28.12.2009

    В избранное