русс | укр

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

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

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

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


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

Для каждого уровня существуют свои протоколы.


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


END.

R(A); P(B);

END;

R(B);

BEGIN

PROCEDURE P;

END;

P(A);

BEGIN

VAR



PROGRAM PRIMER;

END.

BEGIN

END.

END;

FUN(A0,AN,AH,M,F1);

BEGIN

VAR



END;

. . .

BEGIN

END;

. . .

BEGIN

VAR



TYPE

CONST

PROGRAM FUNC;

TYPE

End.

Readln(n);

Readln(x);

Begin

End;

Begin

Var

Var

Program proc3;

End.

Step2;

Readln(n);

Readln(x);

End;

Begin

Var

Procedure step2;

Var

Program proc2;

End.

Step1(y,x,n);

Readln(n);

Readln(x);

End;

Begin

Var

Var

Program proc1;

END.

SUM(MAS2));

END;

BEGIN

SUM(MAS1));

END;

BEGIN

END;

BEGIN

VAR



VAR



TYPE

CONST

PROGRAM SUMMA;

Пример

END.

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

 

 

C1=3; C2=5;

AT3=ARRAY[1..C1] OF REAL;

AT5=ARRAY[1..C2] OF REAL;

I:BYTE; MAS1:AT3; MAS2:AT5;

FUNCTION SUM(A:ARRAY OF REAL):REAL;

S:REAL; K:BYTE;

S:=0;

FOR K:=0 TO high(A) DO S:=S+A[K];

SUM:=S;

BEGIN {основная программа}

FOR I:=1 TO C1 DO

WRITE ('введите ',I,

'-ый элемент первого массива : ');

READLN (MAS1[I]);

WRITELN ('Сумма элементов массива = ',

FOR I:=1 TO C2 DO

WRITE ('введите ',I,'-ый элемент второго

массива : ');

READLN (MAS2[I]);

WRITELN ('Сумма элементов массива = ‘,

 

 

Любая программа, процедура или функция представляют собой блок со своей областью описаний. Внутри этого блока могут содержаться описания других процедур и функций, а также обращения к ним. В них в свою очередь могут содержаться описания иных процедур и т.д. Блок, содержащий в своем разделе описаний другой блок (процедуру или функцию) называется внешним по отношению к нему, а тот – внутренним или подблоком.

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

Объекты, описанные в некотором внешнем блоке, доступны и могут использоваться во всех его подблоках и называются глобальными. Под этими объектами понимаются метки и имена констант, типов, переменных, процедур и функций.

 

 
 

 


Параметры I, J, K являются локальными по отношению к блоку 3. Они доступны только внутри процедуры PR3 и недоступны в блоках 2 и 1. Переменные X, Y, Z доступны в блоках 2 и 3 и недоступны в блоке 1. При этом по отношению к процедуре PR2 они являются локальными, а по отношению к процедуре PR3 – глобальными. Переменные А, В, С доступны во всех блоках и являются глобальными в блоках 2 и 3.

Возможны ситуации, когда имя локальной переменной в какой-то процедуре совпадает с именем глобальной переменной из внешнего блока

 

 
 

 

 


Имя переменной А, описанной в блоке 2 совпадает с именем глобальной переменной, описанной в блоке 1. В этом случае глобальная переменная А становится недоступна в блоках 2 и 3. Локальная переменная А из блока 2 как бы закрывает собой глобальную переменную А из блока 1. Следует иметь в виду, что это совершенно разные переменные. Любые изменения локальной переменной А никак не отразятся на значении глобальной переменной А из блока 1.

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

Рассмотрим пример программы, в которой вещественное число xвозводится в целую степеньn, причем это вычисление организуем с помощью процедуры, в которую передадим исходные параметры-значения bи m, а результат запишем в параметр-переменную a.

y,x:real;

n:byte;

procedure step1(var a:real; b:real; m:byte);

k:byte;

a:=1;

for k:=1 to m do a:=a*b;

begin {Основная программа}

write('Введите вещественное число x=');

write('Введите целое число n=');

writeln('x^n=',y);

 

Рассмотрим модификацию этой программы, в которой передачу данных осуществим через глобальные параметры.

 

 

y,x:real;

n:byte;

k:byte;

y:=1;

for k:=1 to n do y:=y*x;

begin {Основная программа}

write('Введите вещественное число x=');

write('Введите целое число n=');

writeln('x^n=',y);

 

Рассмотрим пример решения этой же задачи с помощью функции.

 

y,x:real;

n:byte;

function step3(b:real; m:byte):real;

k:byte;

y:real;

y:=1;

for k:=1 to n do y:=y*x;

step3:=y

write('Введите вещественное число x=');

write('Введите целое число n=');

writeln('x^n=',step3(x,n));

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

 

PROC0=PROCEDURE;

PROC1=PROCEDURE(VAR X,Y);

PROC2=PROCEDURE(A,B:REAL; VAR Y:BYTE);

FUNC0=FUNCTION:INTEGER;

FUNC1=FUNCTION(S:REAL):REAL;

 

 

Установлены следующие правила использования подпрограмм в качестве параметров:

· они не должны быть стандартными процедурами или функциями;

· они не должны объявляться внутри других процедур или функций;

· для установки правильных связей с между вызывающими и вызываемыми подпрограммами они должны иметь в заголовке опцию FAR, что определяет “дальнюю” модель вызова этих подпрограмм или функций;

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

 

N=10;

MASSIV=ARRAY[1..N] OF REAL;

PROC=PROCEDURE(X0,XN,H:REAL;N:INTEGER;VAR F:MASSIV);

K:INTEGER;

X0,XN,XH,YM:REAL;

PROCEDURE F1(A0,AN,AH:REAL;M:INTEGER;VAR F:MASSIV);FAR;

{задание массива значений функции F1}

PROCEDURE F2(A0,AN,AH:REAL;M:INTEGER;VAR F:MASSIV);FAR;

{задание массива значений функции F2}

FUNCTION MIN(A0,AN,AH:REAL;M:INTEGER;FUN:PROC):REAL;

F1:MASSIV;

MINF:REAL;

K:INTEGER;

MINF:=F1[1];

FOR K:=2 to M DO

IF F1[K]<MINF THEN MINF:=F1[K];

MIN:=MINF;

BEGIN {основная программа}

X0:=1; XN:=10; XH:=1;

YM:=MIN(X0,XN,XH,N,F1);

WRITELN('минимум функции Y1=',YM:4:2);

YM:=MIN(X0,XN,XH,N,F2);

WRITELN('минимум функции Y2=',YM:4:2);

 

 

Процедуры и функции в Турбо-Паскале могут быть рекурсивными, если они вызывают сами себя. При этом требуется особым образом организовать вычислительный процесс, так как при рекурсивных вычислениях необходимо сохранение информации об иерархии связей и локальных переменных всех рекурсивных вызовов, чтобы по окончании цепочки рекурсивных вызовов можно было восстановить каждое предшествующее прерванное состояние программы. Рекурсивный вызов процедурой саму себя можно считать аналогом прерывания, только программа обработки прерывания всегда одна и та же. При этом практически всегда используется стековая память. Стеком называют область памяти с последовательным доступом, работающую по принципу “Последним пришел – первым вышел”. Классическим примером рекурсии является вычисление факториала.

 

FUNCTION FACT (N:INTEGER):INTEGER;

IF N=1 THEN FACT:=1

ELSE FACT:=N*FACT(N-1);

 

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

Если процедура непосредственно вызывает саму себя, то такая рекурсия называется простой рекурсией. Возможна ситуация, когда процедура вызывает одну или несколько промежуточных процедур, которые в свою очередь вызывают первую процедуру. Такая рекурсия называется косвенной. При таком взаимном обращении процедур друг к другу нет возможности выполнить необходимое правило, что все процедуры и функции должны быть описаны до их вызова. В этом случае используется опережающее описание процедур и функций. Записывается только заголовок процедуры, за которым ставится слово FORWARD, описание же текста процедуры помещается далее в любом месте раздела описания процедур. При этом не повторяется список формальных параметров.

 

A,B:REAL;

PROCEDURE P(X:REAL);FORWARD;

PROCEDURE R(Y:REAL);

BEGIN {основная программа}

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

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

 



<== предыдущая лекция | следующая лекция ==>
SUM(MAS,C)) | Основные типы протоколов канального уровня


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


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

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

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


 


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

 
 

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

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