русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Тождественность типов


Дата добавления: 2013-12-23; просмотров: 1170; Нарушение авторских прав


Параметры-переменные

Параметры-значения

Формальный параметр-значение обрабатывается как локальная по отношению к процедуре или функции переменная, за исключением того, что он получает свое начальное значение из соответствующего фактического параметра при активизации процедуры или функции. Изменения, которые претерпевает формальный параметр-значение, не влияют на значение фактического параметра.

 



Синтаксис описания параметров-значений в списке формальных параметров подпрограммы:

Ид_парам1, Ид_парам2,...:тип_параметров;

Соответствующее фактическое значение параметра-значения должно быть выражением. Фактический параметр должен иметь тип, совместимый по присваиванию с типом формального параметра-значения.

Соответствующий фактический параметр в операторе вызова процедуры или функции должен быть ссылкой на переменную. При вызове процедуры или функции формальный параметр-переменная замещается переменной, указанной в вызове. Любые изменения в значении формального параметра-переменной отражаются на переменной, переданной в качестве фактического параметра.

 



Синтаксис описания параметров-переменных в списке формальных параметров подпрограммы:

var Ид_парам11, Ид_парам12,...:тип_параметров;

 



Тип фактического параметра должен быть тождественным типу формального параметра-переменной.

Параметр-переменная используется, когда значение должно передаваться из процедуры или функции вызывающей программе.

Тождественность типов требуется только для переменных фактических и формальных параметров-переменных при вызове процедур и функций.

Две переменных, Т1 и Т2, имеют тождественный тип, если выполняется одно из следующих условий:

Т1 и Т2 описаны совместно;

при описании Т1 и Т2 используется один и тот же идентификатор типа;

 



Примеры тождественных и нетождественных описаний:

type

Mass = array [1..10] of real;

var

T1, T2 : array [1..10] of integer;

M1 : array [1..10] of integer;

M2 : array [1..10] of integer;

A1:Mass; A2:Mass;

 



В примере переменные Т1 и Т2 тождественны, т. к. описаны совместно; переменные А1 и А2 тождественны, т. к. используют для описания один и тот же идентификатор Mass; переменные М1 и М2 нетождественны, т. к. конструкция array [1..10] of integer является описанием типа.

 



В качестве примера рассмотрим следующую задачу: Задано три числа: n, m, k. Необходимо вычислить три значения:

 



 



и поменять полученные значения так, чтобы в переменной a оказалось наибольшее из трёх, в b – среднее и в c – наименьшее, т.е. выстроить их в порядке убывания.

Алгоритм основной программы достаточно прост (рис. 25). После ввода исходных значений (блок 2) производятся вычисления значений a, b, c по заданным выражениям (блоки 3, 4, 5). Далее следует алгоритм сортировки массива из трёх значений. Блоки 6, 7, 8 и 9 предназначены для нахождения максимального из трёх значений. Если переменная b содержит максимальное из трёх значений (блок 6), то первая переменная (а) обменивается значением с переменной b (блок 7). Если максимальное значение находиться в переменной c (блок 8), то первая переменная (а) обменивается значением с переменной с (блок 9). Если максимальное значение находиться в переменной а, то блоки 7 и 8 останутся не выполненными.

Рисунок 25 – Блок-схема алгоритма упорядочивания значений трёх элементов по убыванию

Таким образом, перед выполнением блока 10 максимальное из трёх значений будет находиться в переменной а.

Осталось поместить наибольшее из значений в переменных b и c в переменную b (блоки 10, 11).

Алгоритм функции Fkt(f), предназначенной для вычисления факториала заданного значения, по сути, является алгоритмом вычисления произведения целых чисел от 1 до f. Формальный параметр f является параметром-значением, т. е. при вызове функции в переменную f до начала работы подпрограммы будет записано значение фактического параметра – значения, указанного в вызове функции из основной программы.

Процедура Swap(s1, s2) выполняет перестановку значений двух переменных. Формальные параметры s1 и s2 являются параметрами-переменными. При вызове процедуры swap в качестве фактических параметров должны использоваться переменные. Любые изменения в значении переменных s1 и s2 в подпрограмме отражаются на переменных, переданных в качестве фактического параметра при вызове процедуры.

Рассмотрим подробнее, каким образом передаются параметры в вызываемые подпрограммы (табл. 13).

После запуска программы пользователь ввёл три значения: 2, 1, 2, которые были записаны соответственно в переменные n, m, k (строка 1).

Первый вызов функции Fkt (строка 2):

В основной программе (рис. 25, блок 3) при вызове функции передаётся значение переменной n (n = 2). Функция присваивает это значение параметру f. Таким образом, в начале работы алгоритма функции в переменной f находится значение 2.

По окончании работы функция возвращает основной программе значение факториала числа 2 (строка 10). Оператор в блоке 3 на рисунке 24 получает вычисленное значение факториала и записывает его в переменную а.

Второй вызов функции Fkt (строка 11):

Блок 4 (рис. 25) основной программы во второй раз вызывает функцию Fkt, но в этот раз передаёт в неё значение выражения m+2, равное трём. Полученное значение снова присваивается параметру f и снова исполняется алгоритм функции, который на этот раз возвращает значение 6 (факториал числа 3).

Оператор в блоке 4 на рисунке 24 получает это значение, заканчивает вычисление выражения 6*3 и записывает полученное значение 18 в переменную b (строка 21).

Третий и четвёртый вызовы функции Fkt (строки 22-31):

Первой из выражения Fkt(Fkt(k)+1)оператора в блоке 5 (рис. 25) вызывается вложенная функция Fkt(k). Фактический параметр, передаваемый в функцию – k (k = 2). Переменная f получает значение 2 (строка 22).

После окончания работы Функция возвращает 2 (факториал числа 2). Оператор в блоке 5 на рисунке 25 получает это значение, заканчивает вычисление выражения 2 + 1 и снова вызывает функцию Fkt (строка 26). На этот раз осуществляется внешний вызов Fkt(Fkt(k)+1). Результат работы внутреннего вызова равен 2, выражение Fkt(k)+1 даёт значение 3, которое и передаётся в функцию Fkt при её четвёртом вызове из программы (строка 27).

После окончания работы Функция возвращает 6 (факториал числа 3). Оператор в блоке 5 на рисунке 24 получает вычисленное значение факториала, записывает его в переменную с и заканчивает свою работу.

Первый вызов процедуры Swap (строка 33):

Блок 7 (рис. 25) основной программы вызывает процедуру Swap для обмена значениями между переменными a и b. Эти переменные передаются в процедуру в качестве фактических параметров. Внутри процедуры переменные a и b становятся переменными s1 и s2. Любые изменения в значении s1 и s2 отражаются на переменных a и b соответственно (строки 35, 36).

Второй вызов процедуры Swap (строка 39):

Второй раз процедура Swap вызывается из блока 11 (рис. 25). В этот раз передаются в процедуру в качестве фактических параметров переменные b и с. Внутри процедуры переменная b становиться переменной s1, а переменная c – переменной s2. После окончания работы процедуры значения в переменных b и c поменяются местами.

 



Таблица 13 – Трассировка алгоритма упорядочивания значений трёх элементов по убыванию

№ п/п № блока n m k a b c Подпрограммы
- - -  
- - - Fkt(n) -> f:=n
    № блока f P i
- - - -
- - -
- - -
- - -
- - -
- - -
- - -
- - P = 2 -> Fkt(n)= 2
- - Fkt(m+2) -> f:=m+2
    № блока f P i
- - -
- -
- -
- -
- -
- -

 

Окончание таблицы 13

 



№ п/п № блока n m k a b c Подпрограммы
- -
- -
- -
- P = 6 -> Fkt(m+2)=6
- Fkt(k) -> f = k
    № блока f P i
- -
- ...
-
- P = 2 -> Fkt(k)= 2
- Fkt(Fkt(k)+1) -> f:=3
    № блока f P i
- -
- ...
-
P = 6 -> Fkt(Fkt(k)+1)=6
 
Swap(a,b) -> s1 ≡ a s2 ≡ b
    № блока s1(a) s2(b) tmp
 
Swap(b,c) -> s1 ≡ b s2 ≡ c
    № блока s1(b) s2(c) tmp
 
                           

 

 



Реализация алгоритма в программу выглядит следующим образом:

 





<== предыдущая лекция | следующая лекция ==>
Параметры | Решение нелинейных уравнений


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.06 сек.