Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MET1.doc
Скачиваний:
18
Добавлен:
16.11.2019
Размер:
1.02 Mб
Скачать

Тема № 8 Разработка и отладка программ с использованием подпрограмм-функций

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

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

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

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

Подпрограмма-функция Структура функции

FUNCTION имя (список формальных параметров с указанием типов): тип функции (результата);

Раздел описаний ;

BEGIN

Последовательность операторов ;

имя:=выражение (результата);

END ;

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

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

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

FUNCTION SUM(A:MAS;N:INTEGER):REAL;

VAR S:REAL;

I:INTEGER;

BEGIN

S:=0;

FOR I:+1 TO N DO S:=S+A[I];

SUM:=S;{Результат присваивается переменной SUM или имени функции}

END;

Примеры

  1. Вычислите функцию Z

Z = a/4!+ b/10!- c/8! ,

где a = max Xi; b = max Yj; c = max Fk; 4! =1234 ("четыре факториал");

i=1,10 J=1,12 K=1,15

Xi, Yj, Fk - элементы одномерных массивов {X1,X2,...,X10}, {Y1,Y2,...,Y10}, {F1,F2,...,F15}. Используйте две подпрограммы-функции: вычисления факториала и максимального элемента массива.

PROGRAM PODPR;

TYPE MAS = ARRAY [1..15] OF REAL;

VAR XMAX, YMAX, FMAX, Z : REAL;

J : INTEGER;

X, Y, F : MAS;

{ Функция вычисления факториала }

FUNCTION FAC ( N : INTEGER ) : REAL;

VAR P : REAL; I : INTEGER;

BEGIN P := 1;

FOR I := 1 TO N DO P := P*I;

WRITELN ( ’P=’, P:10:4 );

FAC:= P;

END;

{ Процедура вычисления максимального элемента }

FUNCTION MAX(K:INTEGER; S:MAS): REAL;

VAR SMAX:REAL;

I: INTEGER;

BEGIN SMAX := S[1];

FOR I:=1 TO K DO

IF S[I]> SMAX THEN SMAX:= S[I];

WRITELN (’MAX=’, SMAX );

MAX:=SMAX;

END;

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

BEGIN

FOR J:=1 TO 10 DO READ (X[J]);

FOR J:=1 TO 12 DO READ (Y[J]);

FOR J:=1 TO 15 DO READ (F[J]);

MAX (10, X, XMAX); MAX (12, Y, YMAX);

MAX (15, F, FMAX);

Z:= MAX (10, X) /FAC(4) + MAX (12, Y)/FAC(10) - MAX (15, F)/FAC(8);

WRITELN (’Z=’, Z); END.

2. Даны действительные числа s, t. Вычислите

f(t, -2*s, 1.17)+f(2.2, t, s-t), где f(a, b, c)=(2a-b-sin(c))/(5+c).

PROGRAM F;

USES CRT;

VAR S, T, P:REAL;

FUNСTION FN(A,B,C:REAL):REAL;

BEGIN

FN:=(2*A-B*SIN(C))/(5+ABS(C));

END;

BEGIN

CLRSCR;

WRITELN(‘ S,T’);

READLN(S,T);

P:=FN(T, -2*S, 1.17)+FN(2.2, T, S-T);

WRITELN(‘P=‘,P:7:3);

END.

Варианты заданий

  1. Составьте программу вычисления Z = , где xmax и xmin – наибольший и наименьший элементы вещественного массива X(10), а ymax и ymin – наибольший и наименьший элементы вещественного массива Y(8). Нахождение наибольшего и наименьшего элемента массива выполните в подпрограмме-функции.

  2. Даны три массива А(10), В(8), С(9). Вычислите с помощью подпрограмм-функций Х1= /10!; Х2= /8!; Х3= /9! .

  3. Вычислите координаты центра тяжести системы N материальных точек с массами М1, М2, …, МN и координатами (x1, y1, z1), (x2, y2, z2),…, (xn,yn, zn) по следующим выражениям:

X= ; Y = ; Z = .

Вычисление сумм оформите в виде подпрограмм-функций.

  1. Вычислите средние значения m и среднеквадратичные отклонения s при

m = , s =

для трех выборок (массивов) данных. Здесь n – количество элементов для каждого массива, аi – элемент массива.

  1. Даны два вещественных числа x и y. Вычислите

z = (sign(x) +sign(y)) sign(x+y),

где sign(a) =

При решении задачи опишите и используйте подпрограмму-функцию sign.

  1. Пусть функция спроса на товар представляет собой зависимость QD = a - bХ, где QD - объем спроса на товар или его количество в тысячах единиц в определенный период времени (неделю), а Х - цена за единицу товара. Задайте подпрограммы-функции спроса на данный товар в четырех округах города (т.е. задайте коэффициенты а, b) и определите рыночный спрос на этот товар в городе как сумму функций спроса в его округах. Каков будет рыночный спрос при заданных максимальной и минимальной, а также средней ценах за товар?

7. Пусть функция предложения товара представляет собой зависимость QS = a + bХ, где QS - предложение товара в определенный период времени (неделю), а Х - цена за единицу товара. Задайте подпрограммы-функции предложения товара четырьмя фирмами города (т.е. задайте коэффициенты а и b) и определите рыночное предложение на данный товар в городе как сумму функций предложения всех фирм. Каково будет рыночное предложение при заданных максимальной и минимальной, а также средней ценах за товар?

8. Пусть функция спроса имеет вид QD = a1 - b1Х, а функция предложения - QS = a2 + b2Х. Определите точку рыночного равновесия, т.е. точку пересечения этих двух функций; выведите на печать величины равновесного объема рынка и равновесной цены. Если цена на товар понизится (повысится), то что будет наблюдаться на рынке - избыток товара или его дефицит? Используйте в работе подпрограммы-функции спроса и предложения.

9. Рассчитайте текущую дисконтированную стоимость (RD) оборудования при следующих условиях:

а) i = 10 %, R1 = 200;

б) i = 20 %, R1 = 200, R2 = 400, R3 = 600;

в) i = 5 %, R1 = 100, R2 = 200, R3 = 400, R4 = 500, R5 = 600;

г) i = 10 %, R1 = 100, R2 = 200, R3 = 400, R4 = 500, R5 = 1000,

где Rt - годовой доход в t-м году, тыс. рублей; i - процентная ставка банка на заем для покупки данного оборудования, а дисконтированная стоимость

RD = .

10. Дано вещественное число z. Вычислите

Y = sh(z) *tg(z+1) –tg2 (2+sh (z-1)).

При решении задачи определите и используйте функции тангенса и гиперболического синуса sh (x) = (ex – e-x)/2.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]