IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

 
 Ответить  Открыть новую тему 
> Процедура шалит, Написал подпрограму, рамотает так как надо но как только ставлю ее про
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


Написал подпрограму, рамотает так как надо но как только ставлю ее процедурой выводит кое что лишенее. Немогу понять почему 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

Сообщение отредактировано: Morfey85 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата(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;
... { дальше - все как и было }
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 19
Пол: Мужской

Репутация: -  0  +


Спасибо. Помогло.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 24.10.2017 7:33
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"