Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2011, 20:03   #1
MaxuM
 
Регистрация: 23.11.2011
Сообщений: 4
Восклицание Работа с файлами (Pascal).

В файле символьного типа перевернуть каждую строку по порядку без использования массива.
например было:
травка зеленеет
солнышко блестит
стало:
теенелез акварт
титселб окшынлос

Таким образом можно реализовать?:

Код:
program lab;
uses crt;
var f:file of char;
    s:string;
    i,n,k:integer;
    c,d,o: char;
begin
     assign(f,'file.txt');
     reset(f);
     d:=#13;
     while not eof(f) do
     begin
           s:='';
           while c<>d do
           begin
                 read(f,c);
                 s:=s+c;
           end;
           n:=length(s) div 2;
           for i:=1 to n do
           begin
                o:=s[i];
                s[i]:=s[length(s)-i+1];
                s[length(s)-i+1]:=o;
           end;
           read(f,d);
           for i:=1 to length(s) do
           begin
           write(s[i]);
           end;
     end;
    close(f);
end.
Если да, то помогите исправить, пожалуйста, она работает неверно.

Последний раз редактировалось MaxuM; 23.11.2011 в 20:06.
MaxuM вне форума Ответить с цитированием
Старый 24.11.2011, 07:34   #2
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

а можно реализовать это например так:

Код:
var c:char; 
...
while not eof(f) do begin
 s:='';
 while not eoln(f) do begin
  read(f,c);
  s:=c+s;
 end;
 writeln(s);
end;
...
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 24.11.2011, 11:10   #3
MaxuM
 
Регистрация: 23.11.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Zer0 Посмотреть сообщение
а можно реализовать это например так:

Код:
var c:char; 
...
while not eof(f) do begin
 s:='';
 while not eoln(f) do begin
  read(f,c);
  s:=c+s;
 end;
 writeln(s);
end;
...
в типизированном файле eoln не воспринимается, только в текстовом файле.
MaxuM вне форума Ответить с цитированием
Старый 24.11.2011, 11:14   #4
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

хм... проглядел что файл типизированный
Но тогда его можно заменить условием
Код:
while not (c=#10) (или #13)
ведь переносы строк остаться должны? Или я все таки снова путаю?)
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 24.11.2011, 11:42   #5
MaxuM
 
Регистрация: 23.11.2011
Сообщений: 4
По умолчанию

у меня в задаче так же. у меня 1-ая строка переворачивается а как перейти на следущую и на другие?
MaxuM вне форума Ответить с цитированием
Старый 24.11.2011, 12:01   #6
Zer0
Форумчанин
 
Аватар для Zer0
 
Регистрация: 13.12.2007
Сообщений: 788
По умолчанию

нынче я торможу(
read(f,d); поменять на read(f);
Дальше он в принципе сам должен перейти на след строку, а тут получалось такое что Вы заменяли d, с которым сравниваете в цикле
Плюс - я не уверен, но кажется фраза "без использования массива" подразумевает запрет на использование подобных конструкций:
Код:
                o:=s[i];
                s[i]:=s[length(s)-i+1];
                s[length(s)-i+1]:=o;
благодарность - сюда (не забываем писать от кого)
Zer0 вне форума Ответить с цитированием
Старый 26.11.2011, 21:01   #7
MaxuM
 
Регистрация: 23.11.2011
Сообщений: 4
По умолчанию

Спасибо, Zer0, за помощь. Я её решил. УРА ВОТ:

Код:
program lab;
var f:file of char;
    s:string;
    i,n,k:integer;
    c,o: char;
begin
     assign(f,'file.txt');
     reset(f);
     k:=0;
     seek(f,0);
     while not eof(f) do begin
           read(f,c);
           s:='';
           while (c<>#13) and (c<>#10) do
           begin
                s:=s+c;
                read(f,c);
           end;
           n:=length(s) div 2;
           for i:=1 to n do
           begin
                o:=s[i];
                s[i]:=s[length(s)-i+1];
                s[length(s)-i+1]:=o;
           end;
           seek(f,k);
           for i:=1 to length(s) do
           begin
           write(f,s[i]);
           end;
           k:=filepos(f)+2;
           seek(f,k);
           end;
close(f);
end.
В конце текста в файле обязательно ставить ENTER
MaxuM вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
pascal.работа с файлами павля Помощь студентам 2 04.05.2011 20:23
работа с файлами (pascal) pascalforever Помощь студентам 0 22.11.2010 19:04
pascal: работа с файлами mister.gun Помощь студентам 7 14.03.2010 10:38
Pascal работа с файлами A.S.W Помощь студентам 1 07.01.2010 19:01