исправьте ошибку

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
sergo2005
Сообщения: 2
Зарегистрирован: 10 сен 2005, 01:55

Напиcать программу, которая считывает текстовый файл, выравнивает содержащийся в нем текст по правой границе и выводит результат в другой текстовый файл.

Вот я написал чего-то , но ничего не работает помогите, исправьте ошибку, если нетрудно:


var
f1,f2:text;
s:string;
i:byte;
x,y:integer;
begin
assign(f1,'c:\gop.txt');
reset(f1);
assign(f2,'c:\gor.txt');
rewrite(f2);
i:=1;
while not seekEof(f1) do
begin
readln(f1,s);
i:=1;
while s=' ' do
begin delete(s,1,1);
inc(i);
writeln(f2,s);
end;
end;
end.
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

эта программа, как я понял убирает лишние пробелы слева.
Тебе же надо...
1) Найти длинну самой длинной строки:

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

while not eof(f1) do 
begin 
  Readln(f1, s); 
  if Len < Length(s) then Len := Length(s); 
end;
2) Добить каждую строку слева пробелами до длинны самой длинной строки и сохранить:

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

while not eof(f1) do 
begin 
  Readln(f1, s); 
  while Length(s) < Len do s := ' ' + s; 
  writeln(s); 
end; 
С уважением, Lost Angel...
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Если в условии была опечатка и выронянять нужно всё же по левой границе, т.е. убить все проблемы, то всё равно в программе ишибка. После удаления символа из строки все инкексы автоматически сдвигаются. Я к тому, что inc (i) делать не следует, достаточно в цикле постоянно проверять первый элемент строки.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить