Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для Savant

Старожил


Сообщения: 300
Благодарности: 6

Профиль | Сайт | Отправить PM | Цитировать


DillerInc
Цитата:
По теории подпрограмме доступны те переменные,которые были уже объявлены и описаны в предшествующих подпрограммах
По теории подпрограмме доступны те переменные, которые объявлены в зоне её видимости. Т.е. глобальные переменные, объявленные вообще вне любой подпрораммы, а также еще в случае, когда одна процедура вложена в другую. Лучше наверно показать на довольно прикольном примере, который ща сочинил:
Код: Выделить весь код
program Project_test;
{$APPTYPE CONSOLE}
Код: Выделить весь код
var TEST: Integer = 5; // объявляем глобальную переменную
procedure a(SUPER: Integer);
// заметим, что переменная SUPER является объявленной локально, 
// т.е. существует только внутри процедуры a; и вложенных в неё
  procedure b;
  begin
	inc( SUPER ); // super = 2+1 = 3
	dec( TEST );  // test = 5-1 = 4 <-тут изменяем глобальную переменную TEST
  end;
var TEST: Integer; // перекрываем глобальную переменную локальной
  procedure c;
  begin
	dec( SUPER ); // super = 3-1 = 2
	inc( TEST );  // test = 2+1 = 3 <- а тут - локальную
  end;
begin
  TEST := SUPER;
  b; WriteLn(TEST,' ',SUPER); // test=2!!! super=3
  c; WriteLn(TEST,' ',SUPER); // test=3	super=2
end;
begin
  a(2);
  WriteLn(TEST); // И наконец в подтверждение выводим глобальную переменную TEST
				 // уменьшенную в процедуре b; на единицу
  ReadLn;
end.

Отправлено: 06:27, 20-01-2005 | #26