Добавил:
kostikboritski@gmail.com Выполнение курсовых, РГР технических предметов Механического факультета. Так же чертежи по инженерной графике для МФ, УПП. Писать на почту. Дипломы по кафедре Вагоны Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
72
Добавлен:
12.08.2017
Размер:
8.79 Mб
Скачать
    1. Процедуры и функции

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

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

procedure<имя>(<список формальных параметров>);

<раздел описаний процедуры>

begin

<раздел операторов процедуры>

end;

В списке формальных параметровперечисляются переменные и указываются их типы. Различаютпараметры-аргументы(входные данные для процедуры) ипараметры-результаты(для возвращения в основную программу результатов работы процедуры), причем перед списком переменных-результатов каждого типа указывается словоvar. Например, для многократных вычислений и вывода значения функцииможно описать процедуру, гдеx− формальный параметр-аргумент, аf− формальный параметр-результат.

procedure prim(x:real; var f:real);

begin

f:=sqrt(abs(х))-sin(x);

writeln('f(',x:4:2,')=',f:7:4);

end;

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

Вызовом подпрограммыназывается упоминание в программе имени подпрограммы. Параметры, задаваемые при этом, называютсяфактическими:

<имя процедуры>(<список фактических параметров>)

В качестве фактических параметров-аргументов могут использоваться константы, переменные, выражения, а в качестве параметров-результатов − только переменные. Вызвать описанную выше процедуру primв основной программе можно так:

prim(7; y); {подсчет значения функции f при x = 7. Результат присваивается переменной y }

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

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

Пример 2.Задать массив, состоящий из десяти вещественных элементов. Определить синус каждого элемента массива. Каждый отрицательный элемент полученного массива заменить единицей.

Решение.

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

Program mas2;

var

M: array[1..10] of real; {описание одномерного массива}

i, n: integer;

procedure vyvod; {процедура вывода элементов массива}

begin

{цикл для вывода 10-ти элементов массива}

for i:=1 to 10 do writeln('M[',i,']=',M[i]:5:2);

end;

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

writeln('Введи 10 элементов массива');

for i:=1 to 10 do {цикл для ввода 10-ти элементов M}

begin

write('M[',i,']=');

readln(M[i]); {ввод элемента с текущим индексом i}

end;

vyvod; {вызов процедуры вывода}

for i:=1 to 10 do M[i]:=sin(M[i]);

vyvod; {вызов процедуры вывода}

for i:=1 to 10 do

if M[i]<0 then M[i]:=1;

vyvod; {вызов процедуры вывода}

end.

Задание 2.Составить программу решения задачи из таблицы 1 с использованием процедур пользователя (для ввода, вывода элементов массивов, выполнения базовых операций суммирования, вычисления произведений, нахождения минимального элемента и т. д.).

Другая разновидность подпрограмм − функция пользователя− возвращает в точку вызова только один параметр-результат простого стандартного типа. В общем виде функцию описывают перед разделом операторов, после описания процедур пользователя (если таковые имеются):

function<имя функции>(<список формальных параметров-аргументов>):

<тип функции (результата)>;

<раздел описаний функции>

begin

<раздел операторов функции, содержащий оператор присваивания>

end;

В разделе операторов функциидолжен присутствовать оператор присваивания имени функции значения некоторого выражения:

<имя функции>:=<выражение>

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

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

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

Пример 3.Вычислить значение выражения.

Решение.

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

Program res1;

var x, res: real;

{описание функции с формальным параметром t}

function tg(t:real):real;

begin

tg:=sin(t)/cos(t);

end;

begin

writeln('Введи число x');

readln(x);

{при вызове функции тангенс используются фактические параметры}

res:=(tg(x/2)+sqr(1/tg(x)))/(1+2*tg(3*sqr(x)));

writeln('x=',x:4:1,' res=',res:5:2);

end.

Пример 4.Вычислить сумму рядапри положительных значениях переменнойx.

Решение.

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

Program sum1;

var x, un, S: real;

i, m: integer;

{описание функции с формальным параметром n}

function fact(n:integer):real;

var j:integer;

begin

fact:=1;

for j:=1 to n do fact:=fact*j;

end;

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

writeln('Введи число x>0');

readln(x);

writeln('Введи число членов ряда');

readln(m);

{начальные значения степенного выражения и суммы ряда}

un:=x/2;

S:=un;

{подсчет текущих значений степенного выражения и суммы ряда}

for i:=1 to m-1 do

begin

un:=un*sqr(x/2);

S:=S+un*fact(2*i)/(sqr(fact(i))*(2*i+1))

end;

writeln('S=',S:6:5);

end.

Задание 3.Составить программу для вычисления суммы или произведения ряда при произвольных значениях переменнойxи (таблица 2).

Таблица 2 − Суммы и произведения

Вариант

Ряд

Вариант

Ряд

1

7

2

8

3

9

4

10

5

11

6

12

Соседние файлы в папке экзамен информатика