Переменные в процедуре
Primary tabs
Этот пост поясняет урок"Процедуры и функции в Паскаль. Как объявлять и использовать " .
Если вы обьявили три переменных в процедуре, то вы обязаны при вызове этой процедуры тоже писать три переменные. Количество обьявленных переменных должно быть равно количеству переменных в синтаксисе процедуры при ее использовании. Например:
procedure sum(x, y,z: integer); // начало объявления процедуры три параметра, объявлем все три переменных
begin
z := x + y; // тело процедуры
writeln(z);
end;
begin
write('chisla ');
readln(a, b); // мы можем ввести два параметра, но можем ввести и три readln (a,b,c);
sum(a,b,c); // обязательно пишем именно три парамерта
readln();
end.
Теперь рассмотрим на примере, что такое "переменная по ссылке" и "переменная по значению":
Механизм обращения к "переменным по значению": мы можем извне с помощью переменной 'c' изменить переменную 'z' в процедуре, но при этом вызвать переменную 'z' напрямую оператором writeln (writeln (z)) нельзя и нельзя вывести ее через эту новую переменную 'с' в теле программы. Пример:
program project1;
var
a, b, c: integer; // объявляем глобальные переменные программы
procedure sum(x, y,z: integer); // если a,b,z переменные по значению
begin
z := x + y; // тело процедуры
end;
begin
write('chisla ');
readln(a, b);
sum(a,b,c);
writeln (c); // выведется значение '0'
// writeln (z); // вообще приведет к ошибке
readln();
end.
Ссылка — это способ обратиться к переменной с помощью другого имени.Ссылки - это средство доступа к содержимому одной переменной под разными именами. Механизм обращения к "переменной по ссылке": мы можем извне с помощью переменной 'c' изменить переменную 'z' в процедуре и при этом вызвать переменную 'z' через эту новую переменную 'с' в теле программы. Пример:
program project1;
var
a, b, c: integer; // объявляем глобальные переменные программы
procedure sum(x, y: integer; var z:integer); // если a,b,z переменные по значению
begin
z := x + y; // тело процедуры
end;
begin
write('chisla ');
readln(a, b);
sum(a,b,c);
writeln (c); // выведется значение 'z'
// writeln (z); // также, приведет к ошибке
readln();
end.
Для лучшего понимания обратите внимание на следующий пример где z глобальная переменная (! ЗДЕСЬ ОШИБКА В КОДЕ - ПРАВИЛЬНЫЙ КОД В КОММЕНТАРИИ ПОД ДАННЫМ ПОСТОМ) :
program project1;
var
a, b, c,z: integer; // объявляем глобальные переменные программы
procedure sum(x, y: integer); // начало объявления процедуры
begin
z := x + y; // тело процедуры
writeln(z);
end;
begin
write('chisla ');
readln(a, b);
sum(a, b);
readln();
// writeln (z); // мы вызываем в теле программы переменную 'z'
end.
Переменная 'z' глобальная - ее можно поменять где угодно и вне процедуры. При этом обратите внимание что вводим мы только a и b - readln(a, b) выведется значение z = a+b , при этом мы можем отдельно вызвать в теле программы writeln(z); Если Переменная 'z' неглобальная и "по значению" - ее нельзя поменять вне программы. Пример:
var
a, b, c: integer; // объявляем глобальные переменные программы
procedure sum(x, y,z: integer); // начало объявления процедуры
begin
z := x + y; // тело процедуры
writeln(z);
end;
begin
write('chisla ');
readln(a, b);
sum(a,b,c);
// writeln (z); приведет к ошибке
writeln (с); // можно вывести 'z' через переменную 'c'
readln();
end.
Если после этого вызвать оператор writeln(z) - то это приведет к ошибке. Но ! Если сделать переменную 'z' переменой по ссылке, то тогда мы сможем вывеси через новую переменную, например через переменную 'c' с оператором writeln(c) выведем значение переменной 'z'.
- Log in to post comments
- 4313 reads
vedro-compota
Tue, 04/07/2020 - 15:06
Permalink
Переменная z глобальная - ее
а разве в самой процедуре можно получить доступ к переменной из программы таким образом? Проверяли этот код?
_____________
матфак вгу и остальная классика =)
fgh
Tue, 04/07/2020 - 17:08
Permalink
Доступ в процедуре , но другим способом
Спасибо за замечание, поменять глобальную переменную
непосредственно из процедуры в тело программы - нельзя, но
использовать значение глобальной переменной извне в процедуре можно. Пример:
program project1; var a, b, c,z: integer; // объявляем глобальные переменные программы procedure sum(x, y,c: integer); // начало объявления процедуры begin c := x + y+z; // тело процедуры z:=99; // значение "из процедуры" не повлияет на значение глобальной переменной в программе writeln(c); end; begin write('chisla '); readln(a, b); z:=1; // здесь значение глобальной переменной // повлияет на выполнение процедуры sum(a, b,c); readln(); writeln (z); // мы вызываем в теле программы переменную 'z' end.vedro-compota
Tue, 04/07/2020 - 15:07
Permalink
желательно добавить ссылку на
желательно добавить ссылку на урок, которому относится обсуждение
_____________
матфак вгу и остальная классика =)