Переменные в процедуре
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
- 3005 reads
vedro-compota
Tue, 04/07/2020 - 15:06
Permalink
Переменная z глобальная - ее
а разве в самой процедуре можно получить доступ к переменной из программы таким образом? Проверяли этот код?
_____________
матфак вгу и остальная классика =)
fgh
Tue, 04/07/2020 - 17:08
Permalink
Доступ в процедуре , но другим способом
Спасибо за замечание, поменять глобальную переменную
непосредственно из процедуры в тело программы - нельзя, но
использовать значение глобальной переменной извне в процедуре можно. Пример:
vedro-compota
Tue, 04/07/2020 - 15:07
Permalink
желательно добавить ссылку на
желательно добавить ссылку на урок, которому относится обсуждение
_____________
матфак вгу и остальная классика =)