Основы алгоритмизации и программирования. Часть третья. Структурированные типы данных. Асламова В.С - 6 стр.

UptoLike

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