Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК ОАиП.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.14 Mб
Скачать

3. Массив в процедуре

Если в процедуру нужно передать в качестве параметра не просто одно значение, а массив, то фактическим парамет­ром должно быть имя массива. При этом формальный пара­метр указывается после слова Var вместе с типом массива. Само же описание массива делается в разделе Туре основной программы.

Задача 4

Найти максимальные элементы массивов a, b и номера этих элементов. Подпрограмму поиска оформить в виде процедуры.

Program Lab8_4;

Uses Crt;

{Тип данных Vector будет определять тип формального параметра}

Type Vector = Array [l .. 200] of Real;

Var a, b: Vector;

i, k: Integer;

max: Real; {максимальный элемент}

nmax: Integer; {номер максимального элемента}

{Описание процедуры нахождения максимального эле­мента в массиве}

Procedure Maxl (x: Vector; L: Integer; Var rmax: Real; Var n: Integer);

Var j: Integer;

Begin {1}

rmах: = x [1];

n: = 1;

For j: = 2 To L Do

If x [j] > rmax Then

Begin {2}

rmax: = x [j];

n: =j;

End; {2}

End; {1}

{Исполнимая часть головной программы}

Begin {3}

ClrScr;

Write ('Введите размер массивов:');

ReadLn (k);

TextColor (Yellow);

Randomize;

{Заполнение массива а с помощью датчика случайных чисел}

For i: = 1 То k Do

Begin {4}

a[i]:=Random(10);

Write ('a[', i, '] = *, a[i]:4:2);

End; {4}

{Обращение к процедуре Maxl для поиска максимально­го элемента и его номера в массиве а}

Maxl (a, k, max, nmax);

TextColor (Red);

WriteLn ('max =', max: 4: 2, 'nmax ='. nmax: 4);

WriteLn (' ');

TextColor (Yellow);

{Заполнение массива b с помощью датчика случайных чисел}

For i:= l To k Do

Begin {5}

b[i]:= Random (100);

Write ('b [', i,'] =', b [i]: 4: 2);

End; {5}

TextColor (Red);

{Обращение к процедуре Maxl для поиска максимально­го элемента и его номера в массиве b}

Maxl (b, k, max, nmax);

WriteLn ('max = ', max: 4: 2, 'nmax = ', nmax: 4);

WriteLn ('Нажмите любую клавишу');

ReadKey;

End. {3}

Протокол работы программы:

Введите размер массивов: 4

а [1] = 0.00

а [2] = 7.00

а [3] = 1.00

а [4] = 6.00

max = 7.00 птах = 2

b [1] = 2.00

b [2] = 15.00

b [3] = 27.00

b [4] = 25.00

max = 27.00 птах = 3

Пояснения к программе.

Решение этой задачи мы начали с написания процедуры поиска максимального элемента и его номера в массиве, которой присвоили имя Maxl. У этой процедуры имеем 4 параметра:

  • параметры - значения: массив х и его размер L (тип Integer). Для указания типа массива необходимо ввести но­вый тип данных (назовем его Vector);

  • параметры-переменные: rmax (в ней возвращается максимальный элемент массива х) типа Real и n (номер мак­симального элемента в массиве) типа Integer.

Заголовок процедуры выглядит так:

Procedure Maxl (x: Vector; L: Integer; Var rmax: real; Var n: Integer):

9. Организация программ с использованием функций

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

Функция описывается так:

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

<Разделы описаний и объявлений функции>;

Begin

<Раздел команд функции, где должна быть

Такая команда: имя: = выражение>;

End;

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

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

Допустимыми типами результата являются:

  • все разновидности вещественного типа;

  • строковый тип;

  • скалярный тип (то есть все разновидности целого ти­па, булев, символьный, перечислимый типы) ;

  • указатель.

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

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

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

Задача 1

Требуется найти разность факториалов F = т! - к! На­помним, что факториал представляет собой произведение я чисел натурального ряда: п! = 1 * 2 * 3.. п.

Program Lab9_1;

Uses Crt;

Var m, k: Integer;

F: Integer;

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

Funktion Fact (n: Integer): Integer;

Var p, i: Integer;

Begin

p:= l;

For i: = 1 to n Do

p: = p* i;

Fact: = p;

End;

{Исполнимая часть головной программы}

Begin

ClrScr;

Write ('Введи значения m, k:');

ReadLn (m, k);

F: = Fact (m)-Fact (k);

WriteLn ('F =', F: 5);

End.

Пояснения к программе.

Вычисление факториала мы оформили в виде функции с именем Fact: Funktion Fact (n: Integer): Integer;

Результат вычисления факториала обозначается ее име­нем. Тип функции - Integer. Формальным параметром явля­ется переменная целого типа n. Вызывается функция по сво­ему имени Fact с указанием фактических параметров т и к: F: = Fact (m)- Fact (k);

Протокол работы программы.

Введи значения m, k: 5 4

F = 96

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