русс | укр

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

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

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

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


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

Процедуры без параметров.


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


Описание процедуры имеет вид:

procedure имя;

{описание локальных переменных}

Begin

{операторы}

end;

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

Рассмотрим пример вычисления наименьшего общего кратного двух натуральных чисел НОК (X, Y), которое можно вычислить, используя наибольший общий делитель этих чи­сел, по формуле:

HOK(X,Y) = Х*У/НОД(Х,У).

При составлении программы оформим как процедуру без параметров программу Р7 — вычисление НОД по алгоритму Евклида. Результат работы процедуры будет заносится в ячей­ку с именем М, переменная М описана как глобальный пара­метр и используется и главной программой, и процедурой. В программе будем вычислять НОК нескольких чисел, занеся их в массив С. Этот массив формируется в разделе констант главной программы. Если данные определяются в разделе констант, то они не требуют дополнительного описания в разделе переменных (var). Переменная Х сначала содержит зна­чение первого числа, а затем ей присваивается результат — НОК двух первых чисел. Переменная Y имеет своим значени­ем второе число из пары, для которой вычисляется наимень­шее общее кратное. Таким образом, при каждом шаге цикла вычисляется НОК двух чисел, первое из которых Х содержит результат предыдущего шага.

Вызов процедуры НОД вычисления наибольшего общего делителя осуществляется только по имени: NOD;

Рассмотрим пример выполнения программы вычисления НОК нескольких чисел.

 

Х := НОК (X, Y)
Y:=C[i]    
М := НОД (X, Y)    

Текст программы имеет вид:



program Р21;

const c:array [1 .. 5]of integer = (36, 54, 72, 18, 15);

var x, y, i, m:integer;

procedure NOD; {заголовок процедуры}

vara, b:integer; {описание локальных переменных}

Begin

a: = x; b: = у; {сохранение исходных данных}

while а <> b do

ifa > bthen a: = a — b

else b: = b — a;

m: = а; {результат работы процедуры присваивается глобальной переменной}

end; {конец процедуры}

begin {начало главной программы}

x: = с[1 ];

fori: = 2to5 do

Begin

y:= c[i];

NOD; {вызов процедуры без параметров}

x: = x * у div m {div — деление нацело для целочисленных данных}

end;

write (‘ НОК = ‘, x)

end. {конец главной программы}

Процедуры с параметрами. Для удобства передачи данных в процедуру и получения из нее результата используютсяфор­мальные и фактические параметры. Формальные — условные обозначения в описании процедуры — описываются в ее заго­ловке, фактические — с которыми требуется выполнить про­цедуру — перечисляются при вызове процедуры, формальные и фактические параметры должны соответствовать по количе­ству, типу и порядку следования. Формальные параметры описываются только в заголовке процедуры и больше нигде. Их описание похоже на описание данных в разделе перемен­ных и может также содержать словоvar. Словоvar в заголов­ке процедуры ставится перед теми параметрами, имена кото­рых соответствуют выходным данным. Фактические парамет­ры, соответствующие формальным, перед которыми стоит словоvar, могут быть только именами переменных. Перед именами формальных переменных, являющимися входными данными процедуры, словоvar указывать не обязательно. Ес­ли перед формальным параметром в заголовке процедуры нет словаvar, то ему может соответствовать формальный пара­метр, имеющий вид выражения соответствующего типа. Если для входных данных процедуры при описании формальных параметров указано словоvar, то им также соответствуют фактические параметры — имена переменных.

Например, процедураNOD с параметрами может иметь за­головок:

procedure NOD (a, b: integer; var k: integer);

Вызов этой процедуры:NOD (x, у, m);

или:NOD (36, 54, m);

Переменные в заголовке процедуры — формальные пара­метры, заменяемые при выполнении процедуры на конкрет­ные значения переменных х и у или числа 36 и 54. В заголов­ке процедуры NOD описаны формальные параметры: a и b — входные данные, для которых находится наибольший общий делитель; k — результат работы процедуры. При вызове про­цедуры переменная а примет значение x, а переменная b — значение у. Результат работы процедуры при вызове попадет в ячейку с именем т, которой соответствует формальный пара­метр k.

Программа при использовании процедуры с параметрами примет вид:

program Р22;

const с: array[1 ..5] of integer= (36,54,72,18,15);

varx, у, i, m:integer;

procedureNOD (a, b: integer; vark :integer); {заголовок процедуры}

begin

while a <> b do

ifa > bthena: = a - b

elseb: = b - a;

k: = а {значение переменной k— результат работы процедуры}

end; {конец процедуры}

begin {начало главной программы}

х:= с[1];

fori: = 2 to5do

Begin

y:= c[i];

NOD (x, y, m); {вызов процедуры с фактическими

параметрами}

х: = х * у div m

end;

write (‘ НОК = ‘, х)

end. {конец главной программы}

Например. Найдем с помощью процедуры среднее арифме­тическое, наибольший и наименьший элементы массива.

program Р23;

constn = 10;

typeR =array[ 1 ..n ]of real;

varY: R; A, B, C:real;i:integer;

procedureStat (X : R; var S, min, max:real);

Begin

S: = 0; min: = x [1]; max: = x [1];

fori: = 1tondo

Begin

S: = S+x[i];

ifx [ i ] < minthenmin: = x [ i ];

ifx [ i ] > maxthenmax: = x [ i ]

end;

S: = S/n

end;

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

fori: = 1ton do

read(Y [ i ]);

Stat (Y, А, В, С); {вызов процедуры}

writeln;

write(‘среднее = ‘, А, ‘наименьшее = ‘, В, ‘наибольшее = ‘,C);

End.

В программе Р23 появился новый раздел описаний — раз­дел типов данныхtype. В этом разделе можно описать новый тип данных через уже известные типы, которые могут быть так же ранее описаны в данном разделе. Тип данных R — это массивы из n вещественных чисел, R — имя типа. В дальней­шем этот тип позволяет сократить описания, он используется в главной программе при описании исходного массива Y и в заголовке процедуры при описании формального параметра — массива X.

Главная программа состоит из трех основных этапов: 1) ввода данных — массива Y; 2) вызова процедурыStat с фактическими параметрами — массивом Y и получаемыми ре­зультатами, попадающими соответственно в ячейки А (сред­нее значение), В (наименьшее) и С (наибольшее); 3) печати результатов работы программы.

Подпрограммы-функции.

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

function имя_функции (описание входных данных):

тип_результата;

{описания локальных переменных}

Begin

{операторы}

имя_функции: = результат;

end;

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

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

Функция вызывается с помощью указателя. Указатель — это имя функции, после которого в круглых скобках перечис­лены фактические параметры — аргументы функции. Указатель имеет вид:

имя_функции(список фактических параметров)

Указатель может появиться в выражении соответствующего типа, в условиях операторов if, while и repeat после словаuntil,а также в операторе печатиwrite. Примерами являются встро­енные арифметические функции, такие, как sin(x):

write (sin(x));

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

program Р24;

constс:array[1 .. 5]of integer =(36,54,72,18,15);

varx, у, i:integer;

functionNOD (a, b: integer): integer;{заголовок функции}

Begin

whilea < > bdo

ifa > bthena: = a - b

elseb: = b - a;

NOD: = а{результат работы функции присваивается ее имени}

end;{конец описания функции}

begin{начало главной программы}

x: = с [ 1 ];

fori: = 2to5 do

Begin

y: = с [ i ];

x: = x * у div NOD (x, у) {вызов функции}

end;

write(‘ HOK = ‘.x)

end.{конец главной программы}



<== предыдущая лекция | следующая лекция ==>
Краткие теоретические сведения | Методические указания по работе и задания


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


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

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

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


 


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

 
 

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

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