PDA

Просмотр полной версии : ПАСКАЛЬ-ПОИСК



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

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

Заранее благодарю.

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


var inp,outp: text;
i,j,k: integer;
s,s2,slovo: string;
begin
j:=1;
assign(inp,'input.txt'); reset(inp);
assign(outp,'output.txt'); rewrite(outp);
while not eof(inp) do begin
read(inp,s);
for i:= 1 to length(s) do if (s[i]=' ') 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); - сразу говорю, так не работает корректно.

Хыиуду
11.05.2007, 10:14
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
11.05.2007, 10:51
Один вопрос по условию: что значит слова-перевертыши?Предполагаю, что имеются в виду слова-палиндромы. Т.е. слова, которые пишутся одинаково в обоих направлениях (слева направо и справа налево)


Пробывал вместо 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);