Инвертирование слов
Модератор: Модераторы
Инвертирование слов
asd
Последний раз редактировалось Trasebit 20.03.2015 21:03:44, всего редактировалось 1 раз.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Код: Выделить всё
for j:=x to length(a) doстранноватое, имхо, условие.
бы сделал примерно по такому алгоритму.
Код: Выделить всё
Взять строку-источник.... пока не конец строки проверяем условие (пробел или нет)
если нет, то берем первый символ и записываем его в буферную строку первым символом
Если да, то записываем буферную строку в строку-приемник и добавляем пробел. очищаем буфер
конец цикла
записать строку в файл
куча циклов for заменена одним while
- Paster Fob
- постоялец
- Сообщения: 188
- Зарегистрирован: 22.02.2011 20:53:36
- Откуда: Новосибирск.
Код: Выделить всё
const
sf=[' ','.',',','!','?','-'];
procedure ReadFile(var af:text;var st:string);
var
sc:string;
ch:char;
begin
sc:='';
repeat
read(af,ch);
if not(ch in sf) then
sc:=ch+sc
else begin
sc:=sc+ch;
st:=st+sc;
sc:='';
end;
until eof(af);
end;
var
f:text;
s:string;
begin
Assign(f,'C:\Files for Program Pascal\files\Testin.txt');
reset(f);
s:='';
ReadFile(f,s);
close(f);
Assign(f,'C:\Files for Program Pascal\files\Testout.txt');
rewrite(f);
write(f,s);
Close(f);
writeln('Готово!');
readln;
end.Зачем заморачиваться с массивом,можно проще сделать.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Paster Fob
Я бы все же сделал предусловие -- могут подсунуть и пустой файл. Тогда прога вылетит с ошибкой.
Я бы все же сделал предусловие -- могут подсунуть и пустой файл. Тогда прога вылетит с ошибкой.
Код: Выделить всё
procedure Rev(b, e: integer; var s: string);
var t: char;
begin
while b<e do begin
t:=s[b]; s[b]:=s[e]; s[e]:=t;
inc(b); dec(e);
end;
end;
const
blanks = [#0..#127]-['0'..'9','A'..'Z','a'..'z'];
var
fi, fo: Text;
s: string;
i, j: integer;
begin
Assign(fi,'in.txt'); Assign(fo,'out.txt');
Reset(fi); Rewrite(fo);
while not EOF(fi) do begin
ReadLn(fi,s);
i:=Length(s);
while i>0 do begin
while (s[i] in blanks) and (i>0) do dec(i);
j:=i; while not (s[i] in blanks) and (i>0) do dec(i);
Rev(i+1,j,s);
end;
WriteLn(fo,s);
end;
Close(fi); Close(fo);
end.
Добавлено спустя 7 часов 54 минуты 57 секунд:
Или ещё проще:
Код: Выделить всё
const
blanks = [#0..#127]-['0'..'9','A'..'Z','a'..'z'];
var
fi, fo: Text;
bi, bo: array [0..1024*4-1] of byte; {*}
s: string;
c: char;
begin
Assign(fi,'in.txt'); Assign(fo,'out.txt');
Reset(fi); Rewrite(fo);
SetTextBuf(fi,bi,sizeof(bi)); SetTextBuf(fo,bo,sizeof(bo)); {*}
s:='';
while not EOF(fi) do begin
Read(fi,c);
if c in blanks then begin
Write(fo,s,c); s:='';
end else s:=c+s;
end;
Write(fo,s);
Close(fi); Close(fo);
end.
qqw
Последний раз редактировалось Trasebit 20.03.2015 21:04:06, всего редактировалось 1 раз.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
Trasebit писал(а):начала пытался реализовать способ форумчанина с ником Лекс Айрин, но что-то у меня с синтаксисом не срослось, а потом постоянно вылетало несоответствие типов.
Вообще-то мой алгоритм здесь уже превратили в программу... пример bormant вариант 2 тождественен алгоритму.. Только он использует прямую работу с файлами. Впрочем, с учетом буферизации один в один. Да и выбранный Вами отличается только нюансами.
Не понимаю как может быть несоответствие типов, если тут везде используются только строки?
Trasebit писал(а):Кстати, если запустить код, а файл пуст, то ошибки нет. В этом случае единственным результатом программы будет создание пустого файла.
а она почти наверняка вылезла, но была подавлена стандартной процедурой обработки ошибок. Для проверки просто запретите директивами
обработку ошибок для операций ввода-вывода и прогоните прогу еще раз.
Trasebit писал(а):Это условие нужно ,чтобы цикл продолжался с начала следующего слова.
Слишком сложно.
А вот теперь акт изощренного издевательства: компилируем работающую программу под linux с текущей локалью UTF8, и долго думаем, почему алгоритм внезапно перестал работать 
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
SSerge, а тут и думать нечего... все придумано за нас
Для UTF8 нужно пользоваться своими функциями.
