Помощь - Поиск - Пользователи - Календарь
Полная версия: Глобальные переменные и процедуры
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
Дмитрий
Извините за глупый вопрос, но просмотрев форум и FAQ я так и не нашел ответ dry.gif Как нужно задавать переменные, чтобы в процессе выполнения процедуры изменялись переменные? Причем необходимо именно через процедуры, а не через функции(это специально оговоренно в задании).
klem4
Код

procedure p(var x : integer);
begin
   x := 100;
end;
APAL
Или:
Код

Var
  a : byte;
...
Procedure Test;
Begin
...
   a:=200;
...
End;
...
volvo
klem4, заголовок посмотри blum.gif

Дмитрий, если тебе нужно именно использование глобальных переменных, то при таком описании:
Код
Var x: integer;

Procedure Y;
Begin
  X := 100;
End;

как раз глобальные переменные и используются... Вариант klem4 показывает, как использовать Var-параметры, но они не обязательно должны быть глобальными. Вот, например, локальные Var-параметры:

Код
procedure B(var x: integer);
begin
  x := 100;
end;

Procedure A;
Var x: integer;
begin
  procedure B(x);
end;


klem4 : 10.gif
APAL
2Volvo: Так и я про то же... ;)
Дмитрий
Возможно я неточно спросил, имелось ввиду следущее:
Код

var x:integer;
procedure 123( );
begin
x:=12;
end;
begin
x:=10;
123(x);
writeln(x);
end.

Что нужно написать в скобках procedure 123(); чтобы в результате работы программы вывелось 12, а не 10? (Насколько я понял в данном случае необходимо передать параметр по ссылке, но у меня не работала программа, когда в скобках я писал var x:integer;). ( Мне необходимо чтобы одна процедура например заполняла несколько массивов в зависимости от параметров, поэтому использование каких-либо конкретных глобальных переменных неприемлемо =(( )
Код

procedure enter (var arra:arr; n:integer);
var i:integer;
begin
writeln('Введите длину массива');
readln(n);
for i:=1 to n do begin
readln(arra[i]);
end;
end;

В результате работы такой процедуры у меня заполняется массив, но во второй переменной нету длины полученного массива. =(( ( вызов осуществляю вот так: enter(a,na);)
trminator
Измени
Код
procedure enter (var arra:arr; n:integer);

на
Код
procedure enter (var arra:arr; var n:integer);

А то у тебя только первый параметр по ссылке передавался.

Но к глобальным переменным это имеет мало отношения.
volvo
Второй Var не забывай ... Перед каждой новой переменной нужно Var проставлять заново, иначе эта переменная будет считаться "переданной по значению", и ее изменение не передастся в вызывающий блок...
Код
procedure enter (var arra:arr; var n:integer);
var i:integer;
begin
  writeln('Введите длину массива'); readln(n);
  for i:=1 to n do begin
    readln(arra[i]);
  end;
end;
Дмитрий
Помогло! Спасибо за помощь. Ушел учить матчасть =)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.