русс | укр

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

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

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

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


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

Область действия переменных при использовании подпрограмм.


Дата добавления: 2015-01-16; просмотров: 1008; Нарушение авторских прав


 

Объекты, описанные внутри блока, являются по отношению к нему локальными и не доступны внешним блокам.

Формальные параметры являются локальными переменными в пределах данной подпрограммы.

Объекты, описанные во внешнем блоке доступны и могут быть использованы в любом его подблоке, т.e. они являются глобальными.

Пример.

procedure t1; var y1, y2: real; procedure sq1; var a, b, c, d: real; begin { Переменные a, b, c, d являются локальными для sq1, область их действия – процедура sq1 } …………………………………… end; begin { Переменные y1, y2 - нелокальные для sq1, область их действия – t1 и sq1 } end;

 

Локальные переменные, описанные в подпрограмме прекращают свое существование после работы подпрограммы. (Память выделенная под них в начале работы очищается)

Все что описано выше блока (подпрограммы) в основной программе будет видно и может быть использовано в этом блоке. Поэтому, чтобы не нарушать принцип локальности и не допустить ошибок в случае совпадений имен переменных, лучше поместить раздел описаний переменных (Var) ниже всех подпрограмм.

 

31.Способы передачи параметров в подпрограммы.

Механизм передачи параметров в процедуры:

1. В момент вызова процедуры выделяется память под переменные процедуры.

2. Формальные параметры получают значения фактических.

3. Связь между параметрами и значениями разрывается.

4. Процедура завершила работу – память освобождается.

 

Передача параметров различных видов

1. При вызове подпрограммы в формальные параметры-значения передаются копии фактических. Далее связь между фактическими и формальными параметрами прерывается.

2. При вызове подпрограммы в формальные параметры-переменные передаются адреса фактических параметров переменных. Фактическое значение по указанному адресу меняется – реализуется возврат значений.



3. При вызове подпрограммы в формальные параметры-константы передаются адреса фактических параметров. Фактическое значение по указанному адресу не меняется. Экономим память и гарантируем сохранение значений исходных данных.

4. Бестиповые параметры передаются по адресу. Перед использованием бестиповых параметров требуется выполнить приведение формального бестипового параметра к какому-либо типу.

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


32.Рекурсивное описание процедур и функций.

Объект называется рекурсивным, если он содержит сам себя или определен через самого себя.

Рекурсия в программировании – один из важнейших принципов посторения подпрограмм, когда процедуры и функции могут вызывать сами себя.

Наличие условия в теле рекурсивной функции (или процедуры), при котором она больше себя не будет вызывать, очень важно. В противном случае, как и в ситуации с циклами, может произойти так называемое зацикливание.

Существует два вида рекурсий:

1. Прямая рекурсия – подпрограмма вызывает саму себя.

Вычисление факториала:

function f(n: integer):longint;
begin
if n = 0 then f := 1
else
f := n*f(n-1);
end; Рекурсивные вызовы:
f(5) = 5 * f(4) = 5 * 4 * f(3) = 5 * 4 * 3 * f(2) = 5 * 4 * 3 * 2 * f(1) = 5 * 4 * 3 * 2 * 1 * f(0) = 5 * 4 * 3 * 2 * 1 * 1 = 120

Возведение в степень рекурсивно:


function power (x:real; n:integer):real;
begin
if n=0 then power:=1
else
if n mod 2=0 then power:=power (x*x,n div 2)
else power:=x*power (x*x, n div 2);

end;
var y:real;
begin
y:=power (2,5);
writeln (y:2:2);
readln;
end.

Рекурсивные вызовы :

Power (2,5)=2*power (4,2)=2*power (16,1)=2*16*power (256,0)=2*16*1=32

2. Косвенная рекурсия – опережающее описание (a вызывает b, b вызывает a).

Приведем пример программы, иллюстрирующей косвенные рекурсивные вызовы процедур. В этой программе процедуры Rec1 и Rec2 рекурсивно вызывают друг друга, поочередно уменьшая свои фактические параметры. Легко видеть, что обе процедуры работают с одной глобальной переменной А, которая передается в них по ссылке. Критерием завершения работы является обращение этой переменной в ноль.

Обратите внимание, что в программе необходимо предварительное определение второй процедуры Rec2, так как ее вызов встречается в процедуре Rec1, т.е. перед ее полным описанием.

Program KosvRecurs; Var A : integer; Procedure Rec2 (Var Y:integer); Forward; Procedure Rec1 (Var X:integer); Begin X := X-1; if X>0 then Rec2; writeln (X) End; Procedure Rec2 (Var Y:integer); Begin Y := Y div 2; if Y>2 then Rec1; writeln (Y) End; Begin A := 15; Rec1(A); End.

Косвенная рекурсия используется при описании типа указатель на запись (в которой находится поле - указатель на такую же запись).

type ptr=^rec;

rec=record

str:string;

p:ptr;

end;



<== предыдущая лекция | следующая лекция ==>
Описание и вызов функций в Паскале. | Динамические типы данных. Простейшие действия с указателями.


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


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

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

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


 


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

 
 

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

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