Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Поменять местами слова в файле

Автор: Gooman 13.01.2011 21:43

Нужно написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова. Спасибо, кто откликнется.

Автор: sheka 13.01.2011 22:29

Где-то в http://forum.pascal.net.ru/index.php?showforum=18 было разделение строки на слова.
Разделяешь, заносишь в a kое слово, а в b k+1ое. выводишь на экран сначала b, а потом а.

Автор: Lapp 14.01.2011 11:17

Цитата(Gooman @ 13.01.2011 17:43) *
считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова.

Вот, у меня как-то так вышло..
Боюсь, я переусложнил местами. Если кто-то сделает проще, с удовольствием гляну.

const
ABC: set of char = ['A'..'Z']+['a'..'z']+['0'..'9'];

var
s: string;
w: array [1..4] of string;
i,j,k: integer;
f: text;
c: char;

begin
Assign(f,'in.txt');
Reset(f);
while not EoF(f) do begin
ReadLn(f,s);
k:=0;
for i:=1 to Length(s) do begin
if s[i] in ABC then begin
if (i=1) or not (c in ABC) then begin
Inc(k);
if k=1 then Inc(k)
end
end
else begin
if (i=1) or (c in ABC) then begin
Inc(k);
if k=1 then Inc(k)
end
end;
if k=5 then begin
Write(w[1]);
Write(w[4]);
Write(w[3]);
Write(w[2]);
for j:=1 to 4 do w[j]:='';
k:=1
end;
c:= s[i];
w[k]:= w[k]+c
end;
Write(w[1]);
if k=4 then Write(w[4]) else Write(w[2]);
Write(w[3]);
if k=4 then Write(w[2]);
WriteLn
end;
readln
end.