ВУЗ:
Составители:
Рубрика:
11
k. После вызова процедуры i имеет своё прежнее значение 5, k – новое
значение 6.
Таким образом, при передаче по ссылке процедура передаёт адрес
фактического параметра. Изменения соответствующего формального
параметра внутри процедуры изменяют и фактический параметр. При
передаче по значению процедура передаёт копию значения параметра.
Изменения соответствующего формального параметра изменяет лишь эту
копию. Итак, выходные
параметры процедуры всегда должны задаваться в
виде передаваемых по ссылке параметров.
3) Передача нетипизированных (бестиповых) параметров.
Способ передачи нетипизированных параметров по ссылке возможен
только в Турбо Паскале, при этом тип параметра не фиксируется. В этом
случае спецификация формального параметра имеет вид:
var идентификатор;
В этом случае при вызове процедуры фактический параметр
соответствует формальному нетипизированному параметру, и должен
представлять собой переменную любого типа, но
не выражение.
Так как тип формального параметра не задан, то строго говоря, такой
параметр не совместим ни с какой другой переменной. Поэтому
единственным способом использования таких параметров в теле
подпрограммы является наделение
их определённым типом. Этого можно
добиться двумя способами:
1) применив к ним операцию приведения типа;
2) описав в подпрограмме локальные переменные определённого типа с
совмещением её в памяти с нетипизированным параметром.
Пример 1:
Вычислить количество и сумму цифр 3-х чисел.
Обозначение: Sumkol – это процедура, которая подсчитывает сумму
цифр целого числа. При подсчёте суммы цифр числа А будем использовать
операции деления div и mod.
div – деление без остатка mod – остаток от деления.
S-сумма цифр;
S:=S+Amod 10;
K -количество цифр в цикле;
K:=K+1;
12
Выделяем количество единиц: S:=S+Amod10; K:=K+1; затем А
заменяем A:=Adiv10; Проверяем А=0, нет, повторяем выделение десятков,
сотен, и т
. д.
Рис. 1. Блок-схема процедуры Рис. 2. Блок-схема основной
sumkol программы
program. quersum_bestimmung;
var i:word;S,K,m:byte;
procedure sumkol (var K,S:byte; A:word;) {описание процедуры}
begin
S:=0; K:=0;
while A<>0 do
begin
S:=S+Amod10; K:=K+1; A:=Adiv10;
end; end;
begin
for m:=1 to 3 do begin {исполняемая часть программы}
writeln (′ввод целого числа′);
readln (i);
sumkol (K,S,i); {вызов процедуры}
конец
S:=0; K:=0
нет
A<>0
д
а
S:=S+A mod 10
A:=A div 10
K:=K+1
начало
Ввод i
m:=1,3
конец
Ввод
целого
числа
начало
Вызов
sumkol
Печать кол-ва К
и суммы цифр
числа i
k. После вызова процедуры i имеет своё прежнее значение 5, k новое Выделяем количество единиц: S:=S+Amod10; K:=K+1; затем А значение 6. заменяем A:=Adiv10; Проверяем А=0, нет, повторяем выделение десятков, Таким образом, при передаче по ссылке процедура передаёт адрес сотен, и т. д. фактического параметра. Изменения соответствующего формального начало параметра внутри процедуры изменяют и фактический параметр. При передаче по значению процедура передаёт копию значения параметра. начало Изменения соответствующего формального параметра изменяет лишь эту m:=1,3 конец копию. Итак, выходные параметры процедуры всегда должны задаваться в S:=0; K:=0 виде передаваемых по ссылке параметров. Ввод 3) Передача нетипизированных (бестиповых) параметров. целого Способ передачи нетипизированных параметров по ссылке возможен нет числа A<>0 конец только в Турбо Паскале, при этом тип параметра не фиксируется. В этом случае спецификация формального параметра имеет вид: да var идентификатор; Ввод i S:=S+A mod 10 В этом случае при вызове процедуры фактический параметр A:=A div 10 соответствует формальному нетипизированному параметру, и должен Вызов представлять собой переменную любого типа, но не выражение. sumkol Так как тип формального параметра не задан, то строго говоря, такой K:=K+1 параметр не совместим ни с какой другой переменной. Поэтому Печать кол-ва К единственным способом использования таких параметров в теле и суммы цифр подпрограммы является наделение их определённым типом. Этого можно числа i добиться двумя способами: 1) применив к ним операцию приведения типа; Рис. 1. Блок-схема процедуры Рис. 2. Блок-схема основной 2) описав в подпрограмме локальные переменные определённого типа с sumkol программы совмещением её в памяти с нетипизированным параметром. program. quersum_bestimmung; Пример 1: var i:word;S,K,m:byte; Вычислить количество и сумму цифр 3-х чисел. procedure sumkol (var K,S:byte; A:word;) {описание процедуры} begin Обозначение: Sumkol это процедура, которая подсчитывает сумму S:=0; K:=0; цифр целого числа. При подсчёте суммы цифр числа А будем использовать while A<>0 do операции деления div и mod. begin div деление без остатка mod остаток от деления. S:=S+Amod10; K:=K+1; A:=Adiv10; S-сумма цифр; end; end; begin S:=S+Amod 10; for m:=1 to 3 do begin {исполняемая часть программы} K -количество цифр в цикле; writeln (′ввод целого числа′); K:=K+1; readln (i); sumkol (K,S,i); {вызов процедуры} 11 12
Страницы
- « первая
- ‹ предыдущая
- …
- 4
- 5
- 6
- 7
- 8
- …
- следующая ›
- последняя »