Помощь - Поиск - Пользователи - Календарь
Полная версия: Процедура шалит
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Morfey85
Написал подпрограму, рамотает так как надо но как только ставлю ее процедурой выводит кое что лишенее. Немогу понять почему sad.gif
Объясните в чем причина плиз...
Код

uses crt;
{Procedure ShowRec;}
var
  A:array[0..20,0..10] of char;
  fi:text;
  x,y,j:word;
  ch:char;
begin  {ShowRec}
  clrscr;
  x:=0;y:=0;
  assign(fi,'rec.txt');
  {$I-}
    reset(fi);
  {$I+}
  repeat
    read(fi,ch);
    A[x,y]:=ch;
    inc(x);
    if x=20 then
      begin
        inc(y);
        x:=0;
      end;
  until eof(fi);
  while y<>10 do
    begin
      A[x,y]:=' ';
      inc(x);
      if x=20 then
        begin
          inc(y);
          x:=0;
        end;
    end;
  j:=1;
  for y:=0 to 9 do
    begin
      Write(j,'.  ');inc(j);
      for x:=0 to 20 do
        begin
          write(A[x,y]);
        end;
      writeln;
    end;
end.  {ShowRec}
{
begin
  ShowRec;
end.}



в файле rec.txt находится следущий текст:
Morfey___________123Scorp____________103Zorg______________98Den_________________
__68
volvo
Цитата(Morfey85 @ 9.04.2006 14:00)
Объясните в чем причина плиз...

Все просто: в случае, когда ты работаешь БЕЗ процедуры, у тебя все переменные являются ГЛОБАЛЬНЫМИ. А глобальные переменные компилятор обнуляет...

Как только ты оформляешь процедуру - переменные становятся ЛОКАЛЬНЫМИ. Компилятор с ними ничего сделать не может, ибо во время компиляции их просто не существует - память под них выделяется в стеке во время выполнения программы, когда управление передается процедуре. И, естественно, в переменных находится мусор. Все переменные, кроме A ты обнуляешь? Обнуляй и массив тоже:
Procedure ShowRec;
var
A:array[0..20,0..10] of char;
fi:text;
x,y,j:word;
ch:char;
begin {ShowRec}
clrscr;
FillChar(A, sizeof(A), ' '); { Заполняем весь массив пробелами }
x:=0;y:=0;
... { дальше - все как и было }
Morfey85
Спасибо. Помогло.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.