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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2010, 00:30   #1
Антон Лысенко
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 181
По умолчанию Посмотрите в чём ошибка процедуры PrintFile. Программа останавливается.

Код:
program Lab_13;
uses
  SysUtils;

{$APPTYPE CONSOLE}

 type Tfile=file of char;
var f,n,g:tfile;
    c1:char; p2:boolean;
    fletter,gletter,nletter:char;
    procedure FillTextFile(var f:tfile);
  begin

  rewrite(f);
  P2:=true;
  repeat
   Writeln('input letter');
   readln(fletter);
   write(f,fletter);
   writeln('prodolzhit vvodit letters?(Y/N)');
   readln(c1);
     if (c1='N')xor(c1='n') then p2:=false;
       until not (p2);
       close(f);
  end;
   procedure PrintFile(var f:tfile;sletter:char);
   begin
   rewrite(f);
  repeat
   write(f,sletter);
   until not(eof(f));
   close(f)
   end;
   begin
     Assign(f,'f.dat');
     FillTextFile(f);
     assign(n,'n.dat');
     rewrite(n);
     assign(g,'g.dat');
     rewrite(g);
     reset(f);
     while not (eof(f)) do begin
     read(f,fletter);
   if  (ord(fletter)>64) and (ord(fletter)<91) or
       (ord(fletter)>96) and (ord(fletter)<123)then
       write(n,nletter)
   else
     write(g,gletter);
  end; PrintFile(n,nletter); PrintFile(g,gletter);
     close(g);close(n);close(f);
  readln;readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Антон Лысенко вне форума Ответить с цитированием
Старый 26.12.2010, 01:38   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

А что Вы собственно хотели добиться процедурой PrintFile?

я вообще не уверен, что в файле открытом на запись через Rewrite(f) функция EOF() будет полезной...
я уже не говорю, что until требует задания условия выхода из цикла:
т.е. вы написали буквально следующее:

Перезаписать файл
в цикле писать одну букву, прервать цикл как только указатель будет НЕ в конце файла...
закрыть файл.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.12.2010, 01:54   #3
Антон Лысенко
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 181
По умолчанию

А если так? Я вообще не понимаю как распечатать типизированный файл используя процедуру. Я понимаю что с текстовым намного проще, но нельзя!
Код:
procedure PrintFile(var f:tfile;sletter:char);
   begin
   rewrite(f);
  repeat
   reset(f,sletter);
   until(eof(f));
   close(f)
   end;
Антон Лысенко вне форума Ответить с цитированием
Старый 26.12.2010, 02:42   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы с упорством партизана ничего не хотите рассказать о своей задаче!
1) что должна делать процедура PrintFile?
2) зачем Вы в ней стираете файл?
3) зачем Вы туда передаёте символ?!

Вы что-то такое пытаетесь сделать?
Код:
procedure PrintFile(var f:tfile);
var ch : char;
begin
 reset(f);
 while Not EOF(f) do begin
   read(f,ch);
   Write(ch);
 end;
 close(f);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.12.2010, 03:20   #5
Антон Лысенко
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 181
По умолчанию

Создаю файл с англ и рус буквами (ввожу с клавы). Потом разделяю на два файла соответственно. И пытаюсь вывести эти файлы на печать.
Антон Лысенко вне форума Ответить с цитированием
Старый 26.12.2010, 03:27   #6
Антон Лысенко
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 181
По умолчанию

Мне кажется что должно быть что-то типа такого. Если правильно спасибо, за помощь!!!
Код:
program Lab_13;
uses
  SysUtils;

{$APPTYPE CONSOLE}

 type Tfile=file of char;
var f,n,g:tfile;
    c1:char; p2:boolean;
    fletter,gletter,nletter:char;
    procedure FillTextFile(var f:tfile);
  begin

  rewrite(f);
  P2:=true;
  repeat
   Writeln('input letter');
   readln(fletter);
   write(f,fletter);
   writeln('prodolzhit vvodit letters?(Y/N)');
   readln(c1);
     if (c1='N')xor(c1='n') then p2:=false;
       until not (p2);
       close(f);
  end;
   procedure PrintFile(var f:tfile;ch:char);
   begin
 reset(f);
 while Not EOF(f) do begin
   read(f,ch);
   Write(ch);
 end;
 close(f);
end;
   begin
     Assign(f,'f.dat');
     FillTextFile(f);
     assign(n,'n.dat');
     rewrite(n);
     assign(g,'g.dat');
     rewrite(g);
     reset(f);
     while not (eof(f)) do begin
     read(f,fletter);
   if  (ord(fletter)>64) and (ord(fletter)<91) or
       (ord(fletter)>96) and (ord(fletter)<123)then
       write(n,nletter)
   else
     write(g,gletter);
  end; PrintFile(n,nletter); PrintFile(g,gletter);
  readln;readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Антон Лысенко вне форума Ответить с цитированием
Старый 26.12.2010, 12:21   #7
Антон Лысенко
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 181
По умолчанию

у меня ещё вопрос: процедура PrintFile печатает весь файл или только один элемент?
Антон Лысенко вне форума Ответить с цитированием
Старый 26.12.2010, 14:21   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
у меня ещё вопрос: процедура PrintFile печатает весь файл
да. весь файл. А что, проверить сложно?...

А вот с передачей ch в качестве параметры Вы не правы!
Параметры в функции/процедуры передаются только если из значение используется внутри функции/процедуры или если нужно через них вернуть значение.
В вашем случае нет ни того, ни другого.
Поэтому незачем передавать в процедуру nletter или gletter
ОНО ТАМ НЕ НУЖНО!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.12.2010, 15:16   #9
Антон Лысенко
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 181
По умолчанию

Я проверяю: ставит пробелы. не вижу никаких символов.
Антон Лысенко вне форума Ответить с цитированием
Старый 26.12.2010, 15:23   #10
Антон Лысенко
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 181
По умолчанию

Цитата:
незачем передавать в процедуру nletter или gletter
я так понимаю вызов процедуры будет происходить так
Код:
PrintFile(n)
Антон Лысенко вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посмотрите в чем ошибка Никуля_усталая Помощь студентам 8 13.11.2010 22:05
в чём ошибка артём1 Помощь студентам 1 02.11.2010 01:11
Ф-ции и процедуры. В чём ошибка??? Программа не работает!:( katya36 Помощь студентам 3 05.03.2009 12:55
В чём ошибка??? pasha_1 Общие вопросы C/C++ 11 25.11.2008 01:26