ПАСКАЛЬ-ПОИСК

Ответить
verty
Сообщения: 20
Зарегистрирован: 23 апр 2007, 13:55

Снова обращаюсь к светлым головам за помощью, ато самому чето вообще не получается. Народ, помогите:

дан текстовый файл input.txt, состоящий из слов, разделенных пробелами. В конце предложения стоит точка. Найти самое длинное слово-перевертыш, если таких слов несколько – рассмотреть все. Найденные слова вывести на экран и в файл output.txt.

Заранее благодарю.
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

verty писал(а): Найти самое длинное слово-перевертыш, если таких слов несколько – рассмотреть все.
Один вопрос по условию: что значит слова-перевертыши?
Вот код, который соответствовал бы твоему условию, если бы там не было слова "перевертыши":
P>S (читай условие, пропустив это слово)

Код: Выделить всё

var inp,outp: text]=' ') or (s[i]='.') then begin
s2:=''; for k:= j to (i-1) do s2:=s2+s[k];
if length(s2)>length(slovo) then slovo:=s2 else
if length(s2)=length(slovo) then slovo:=slovo+' '+s2;
j:=i+1;
end;
end;
write(outp,s2);
close(inp); close(outp);
end.
Пробывал вместо for k:= j to (i-1) do s2:=s2+s[k]; делать s2:=copy(s,j,i-1); - сразу говорю, так не работает корректно.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Код: Выделить всё

function is_reverser(s:string):boolean;
var i:byte;
begin
  for i:=1 to length(s) div 2 do
     if s[i]<>s[n-i+1] then 
     begin 
        is_reverser:=false;
        exit;
     end;
     is_reverser:=true;
end;
Не устаю повторять, что в разделе "Алгоритмы" есть функция разбиения на слова
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

Колядин Максим писал(а):Один вопрос по условию: что значит слова-перевертыши?
Предполагаю, что имеются в виду слова-палиндромы. Т.е. слова, которые пишутся одинаково в обоих направлениях (слева направо и справа налево)
Пробывал вместо for k:= j to (i-1) do s2:=s2+s[k]; делать s2:=copy(s,j,i-1); - сразу говорю, так не работает корректно.
А почему эти два кода должны давать одинаковый результат, если они, так сказать, реализут разнве алгоритмы?
В первом случае в строку s2 помещаются символы исходной строки s с позиции j до (i-1) включительно. А во втором - в строку s2 помещаются символы исходной строки s с позиции j длиной i-1. Ибо третьим параметром ф-ии Copy указывается длина, а не позиция.

Коду:

Код: Выделить всё

s2 := ''; for k:= j to (i-1) do s2:=s2+s[k]
Будет соответствовать код:

Код: Выделить всё

s2:=copy (s, j, (i-1)-j+1);
Ответить