русс | укр

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

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

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

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


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

ПРОЦЕДУРЫ


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


 

Структура процедуры по форме совпадает со структурой программы, то есть содержит заголовок, раздел объявлений объектов процедуры и раздел операторов:

Procedureимя_процедуры[(список параметров)];{Заголовок }

{раздел объявления локальных объектов процедуры:

констант, типов, переменных:}

Const…

Type…

Var…

Begin

{операторная часть или тело процеуры}

End;

Список параметров содержит так называемые формальные параметры, отделяемые друг от друга точкой с запятой. Список формальных параметров заключается в круглые скобки. Квадратные скобки здесь показывают, что параметры процедуры могут отсутствовать ( в этом случае говорят, что «процедура без параметров»). Каждый из формальных параметров - это произвольная переменная с указанием после двоеточия ее типа. Все формальные параметры процедур можно разделить на две группы:

1)к первой группе относятся формальные параметры, значения которых только вводятся при обращении к процедуре из основной программы, то есть они используются как входные переменные;- в заголовке процедуры они описываются как переменные имя:тип;

2)ко второй группе относятся формальные параметры, значения которыхмогут как вводиться, так и выводиться из процедуры, то есть передаваться основной программе, так как они являются результатом работы процедуры.Такие формальные параметры в заголовке процедуры записываются, начиная со слова Var. Это указывает на то, что их значения при обращении к процедуре обязательно передаются основной программе.

Например, в заголовке процедуры proc1

Procedureproc1(b,k:integer;x:real;Vars1,s2:real);

переменные b,k,x – только входные; переменные s1,s2 – могут быть и входными, но также являются и выходными, то есть в них записываются те результаты выполнения процедуры , которые передаются основной программе, вызывающей эту процедуру.



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

Proc1(5,17,25.3, R1,R2); - означает, что переменными b,k,x присваиваются соответственно числа 5, 17, 25.3, а результаты выполнения процедуры присваиваются переменным R1,R2, которые должны быть объявлены в основной программе и поэтому называются глобальными.

Пример 11. В программе вводятся N вещественных чисел и каждое число возводится во вторую и в четвертую степень. Результаты выдаются на монитор. Исходные числа и результаты расчета представим в виде одномерных массивов. В программе предусмотрим создание процедуры vect_kv формирования вектора (одномерного массива) квадратов чисел. Эту процедуру объявим в основной программе. В целом программа будет выглядеть так:

Program main_1;

Type T=array[1..20] of real;

Var {Раздел объявления переменных основной программы: объявляются глобальные переменные i, j, k, mas_ish, mas_rez2, mas_rez4 и процедура vect_kv:}

i,j,k:integer;

mas_ish, mas_rez2, mas_rez4:array[1..20] of real;

procedure vect_kv(n,:integer; A:T; Var B:T);

{Здесь n,A – должны задаваться из вызывающей программы при обращении к процедуре, В – передаваться в вызывающую программу как результат работы процедуры, поэтому формальный параметр В предваряется словом Var}

{Объявление локальных переменных процедуры:}

var i:integer; {Это не ошибка, а коллизия обозначений: здесь i – локальная переменная, область действия которой ограничивается только телом процедуры. При выходе из процедуры ее значение становится неопределенным. Совпадение имени локальной переменной i с именем глобальной переменной i, объявленной в основной программе, только по форме, но в принципе это разные переменные. В случае совпадения имен глобальной и локальной переменной при вхождении программы в процедуру действие такой глобальной переменной приостанавливается, а при выходе из процедуры ее значение восстанавливается. Для устранения недоразумений рекомендуется задавать не совпадающие имена локальных и глобальных переменных }

{Раздел операторов процедуры, то есть тело процедуры:}

Begin

for i:=1 to n do B[i]:=sqr(A[i]);

end;

begin {Начало операторной части основной программы}

write(‘Задайте количество элементов исходного массива K=’);

read(k);

writeln(‘введите элементы массива’);

for j:=1 to k do

begin write(‘Элемент ’, j,’-й: ’); read(mas_ish[j])

end;

{Вызов процедуры для формирования массива квадратов исходных чисел::}

vect_kv(k, mas_ish, mas_rez2);

{Вызов процедуры для формирования массива чисел

в четвертой степени:}

vect_kv(k, mas_rez2, mas_rez4);

{Печать результатов:}

writeln(‘Массив квадратов исходных чисел:’);

for j:=1 to k do write(‘Элемент ’, j,’-й: ’,mas_rez2[j],’ ‘);

writeln;

writeln(‘Массив исходных чисел в четвертой степени:’);

for j:=1 to k do write(‘Элемент ’, j,’-й: ’,mas_rez4[j],’ ‘)

writeln;

writeln (‘Для выхода из программы нажать клавишу Enter’);

readln

end.

Ниже в примерах 12 и 13 приводятся описания процедур выдачи на экран ПК одномерного массива (вектора) и двумерного массива (матрицы), которые можно рассматривать как типовые при обработке произвольных векторов и матриц, размеры которых позволяют располагать их в пределах размеров экрана ПК.

 

Пример 12. Процедура RowPrint выдает на экран ПК в строку M элементов одномерного массива вещественных чисел (при печати числа представляются в форме с фиксированной точкой, для которой в данной процедуре предусмотрен форматный вывод: для каждого числа – всего 8 позиций, при этом 3 позиции – для дробной части) {Тип массива А должен быть объявлен в вызывающей программе Type TA=array[1..30] of real;}:

procedure RowPrint(M:integer; A:TA);

var i:integer; {i – локальная переменная}

Begin

for i:=1 to N do write(A[i]:8:3)

end;

Пример 13.Процедура RwColPrnt выдает на экран ПК элементы матрицы вещественных чисел в виде таблицы – N строк, M столбцов(формат выдачи на печать тот же, что и в предыдущем примере, тип массива ТТА объявлен заранее, в вызывающей программе в виде Type TTA=array[1..20,1..10] of real):

procedure RwColPrnt(N,M:integer; A:TTA);

var i,j:integer;{i,j – локальные переменные}

Begin

for i:=1 to N do{цикл по строкам}

Begin

for j:=1 to M do write(A[i,j]:8:3);{цикл по элементам строки}

writeln{перевод курсора на следующую строку}

End

end;

Замечание. В частности, процедура может не иметь параметров. Например, стандартные процедуры Readln, Writeln, Clrscr или следующая подпрограмма, оформленная в виде процедуры, выдающая на монитор все символы, представляемые в ПК кодами от 0 до 255:

Procedure cod_char;

Var i:byte;

Begin

for i:=1 to 255 do write(i:4,’ :‘,chr(i):2); writeln;

readln

End;

В основной программе эта процедура вызывается на выполнение следующим образом Cod_Char; и результатом ее выполнения будет строка из 255 пар “КОД : СИМВОЛ”.

Пример 14. В этом примере рассматривается применение двух процедур при решении следующей задачи: вычислить частичные суммы гармонического ряда

R (n) = 1 + 1/2 + 1/3 + ... + 1/n

и результат представить в форме рационального числа А/B, то есть в виде отношения числитель/знаменатель, где числитель и знаменатель – целые числа.

В программе предусмотрены две процедуры:

Proc1 – сокращает дробь на наибльший общий делитель;

Proc2 – находит сумму двух дробей с приведением к общему знаменателю.

 

program Harm_row;

var an,bn,bk,i:integer;

 

{Объявление и описание проседуры proc1:}

procedure proc1(var a,b:integer);{процедура реализут известный алгоритм поиска наибольшего общего делителя: }

var a1,b1,r:integer;

begin{начало операторной части процедуры}

a1:=a;b1:=b;

while b1<>0 do

begin r:=a1 mod b1;{находится остаток от деления на цело

числителя a1 на знаменатель b1}

a1:=b1;b1:=r{производится замена: знаменатель

становится числителем, остаток - знаменателем}

end;

if a1>1 then

begin a:=a div a1;b:=b div a1{числитель и знаменатель дроби

сокращаются на наибольший общий делитель}

End

end;{ конец proc1}

 

{Объявление и описание проседуры proc2:}

procedure proc2(var a,b:integer; a1,a2,b1,b2:integer);

{В данном варианте процедуры proc2 формальные переменные

a1,a2,b1,b2 – входные, a,b – выходные: }

begin a:=a1*b2+a2*b1;b:=b1*b2

end;{конец процедуры proc2 - вариант 1 }

 

{Второй вариант процедуры proc2 отличается меньшим числом формальных параметров: параметры a1, b1 становятся и выходными, а параметры a2,b2 – только входные:}

procedure proc2(var a1,b1:integer; a2,b2:integer);

begin a1:=a1*b2+a2*b1;b1:=b1*b2; {Для проверки корректности хода вычислений часто бывает полезно выдавать на экран ПК значения промежуточных расчетов. Здесь, например, это можно сделать применением процедуры контрольной печати дроби, получающейся прикаждом обращении к процедуре proc2: writeln('контр. печать проц2: ',a1:2,'/',b2:2);}

end; {proc2 – вариант второй}

 

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

an:=1;bn:=1;{Числитель и знаменатель первого элемента равны 1}

writeln('Задай номер последнего элемента ряда: ');

readln(bk);writeln('Результаты вычисления суммы по шагам:');

for i:=2 to bk do

begin proc2(an,bn,1,i); {выбран второй вариант процедуры proc2}

proc1(an,bn);

writeln('Шаг ',i,'-й: ',an:2,'/',bn:2)

end; writeln('Вычисление закончено. Нажми Enter');readln

end.



<== предыдущая лекция | следующая лекция ==>
Различаются два вида подпрограмм: процедуры и функции. | ФУНКЦИИ


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


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

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

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


 


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

 
 

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

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