Название: организация программ с использованием подпрорамм

ЦЕЛЬ ЗАДАНИЯ:

1. Получение навыков в написании программ с использованием подпрограмм-процедур и подпрограмм-функций.

2. Изучение механизма передачи параметров по значению и ссылке.

ПОСТАНОВКА ЗАДАЧИ:

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

СОДЕРЖАНИЕ ОТЧЕТА:

1. Постановка задачи для конкретного варианта

2. Блок-схему алгоритма.

3. Текст программы.

4. Результаты счета.

МЕТОДИЧЕСКИЕ УКАЗАНИЯ:

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

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

3. Конкретные длины массивов должны быть описаны в разделе констант.

4. Приведенная ниже программа упорядочивает по не убыванию три массива разной длины (10, 5, 8) и выводит их на печать.

ПРОГРАММА:

PROGRAM MAS;

TYPE

A=ARRAY[1..20] OF REAL;

VAR

X,Y,Z:A; I,N: INTEGER;

D:TEXT;

(* ПРОЦЕДУРА ВВОДА *)

PROCEDURE WWOD(K:INTEGER; VAR M:A);

VAR J: INTEGER;

BEGIN

WRITELN('ВВЕДИТЕ',K:3,' ЭЛЕМЕНТОВ МАССИВА');

FOR J:=1 TO K DO READ(M[J]);

READLN

END;

(* ПРОЦЕДУРА СОРТИРОВКИ МАССИВОВ *)

PROCEDURE UP(K:INTEGER;VAR M:A);

VAR I,J:INTEGER; C: REAL;

BEGIN

FOR J:=K DOWNTO 2 DO

FOR I:=1 TO J-1 DO

IF M[I]>M[I+1] THEN

BEGIN

C:=M[I+1]; M[I+1]:=M[I]; M[I]:=C

END

END;

(* ПРОЦЕДУРА ВЫВОДА *)

PROCEDURE WUWOD(K:INTEGER;VAR M:A;L:BOOLEAN);

VAR J:INTEGER;

BEGIN

FOR J:=1 TO K DO

begin

IF L THEN WRITE(M[J]:6:2);

WRITE(D,M[J]:6:2)

END;

WRITELN;

WRITELN(D)

END;

BEGIN

ASSIGN(D,'LAB11.DAT');

REWRITE(D);

WWOD(10,X); WWOD(5,Y); WWOD(8,Z);

WRITELN(D,'ИСХОДНЫЕ МАССИВЫ');

WRITELN(D);

WRITELN(D,'МАССИВ X'); WUWOD(10,X,FALSE);

WRITELN(D,'МАССИВ Y'); WUWOD(5,Y,FALSE);

WRITELN(D,'МАССИВ Z'); WUWOD(8,Z,FALSE);

WRITELN(D);

UP(10,X); UP(5,Y); UP(8,Z);

WRITELN('МАССИВЫ ПОСЛЕ ПЕРЕСТАНОВКИ ');

WRITELN;

WRITELN(D,'МАССИВЫ ПОСЛЕ ПЕРЕСТАНОВКИ ');

WRITELN(D);

WRITELN(D,'МАССИВ X');WRITELN('МАССИВ X'); WUWOD(10,X,TRUE);

WRITELN(D,'МАССИВ Y');WRITELN('МАССИВ Y'); WUWOD(5,Y,TRUE);

WRITELN(D,'МАССИВ Z');WRITELN('МАССИВ Z'); WUWOD(8,Z,TRUE);

WRITELN(D,'РАБОТУ ВЫПОЛНИЛ ИВАНОВ И.И.');

CLOSE(D)

END.

Результаты работы программы

ИСХОДНЫЕ МАССИВЫ

МАССИВ X

5.00 9.00 8.00 7.00 2.00 0.00 2.00 6.00 5.00 9.00

МАССИВ Y

8.00 3.00 0.00 1.00 6.00

МАССИВ Z

9.00 4.00 0.00 6.00 2.00 4.00 6.00 7.00

МАССИВЫ ПОСЛЕ ПЕРЕСТАНОВКИ

МАССИВ X

0.00 2.00 2.00 5.00 5.00 6.00 7.00 8.00 9.00 9.00

МАССИВ Y

0.00 1.00 3.00 6.00 8.00

МАССИВ Z

0.00 2.00 4.00 4.00 6.00 6.00 7.00 9.00

РАБОТУ ВЫПОЛНИЛ ИВАНОВ И.И.

Контрольные вопросы:

1. Чем отличается подпрограмма функция от подпрограммы процедуры?

2. Что называется фактическим и формальным параметром?

3. В чем разница передачи данных по ссылке и по значению?

ЛАБОРАТОРНАЯ РАБОТА №11

НАЗВАНИЕ: ОРГАНИЗАЦИЯ ПРОГРАММ С ИСПОЛЬЗОВАНИЕМ МОДУЛЕЙ

ЦЕЛЬ ЗАДАНИЯ:

Получение практических навыков в написании программ с использованием МОДУЛЕЙ

ПОСТАНОВКА ЗАДАЧИ:

Дано два одномерных массива. Требуется вычислить функцию

название: организация программ с использованием подпрорамм - student2.ru ,

где S1 и K1 - сумма и число положительных элементов первого массива,

S2 и K2 - сумма и число отрицательных элементов второго массива.

Для вычисления суммы и числа положительных или отрицательных элементов массива использовать одну и ту же процедуру, размещенную в модуле. Процедура должна позволять решать задачи при числе элементов массива N <= 100.

СОДЕРЖАНИЕ ОТЧЕТА:

1. Постановка задачи для конкретного варианта.

2. Исходный текст модуля и программы, блок - схему алгоритма.

3. Результаты выполнения программы.

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

1. МОДУЛЬ - это автономно компилируемая программная единица, включающая в себе различные компоненты раздела описаний (типы, константы, переменные, процедуры и функции). Модуль сам по себе не является выполняемой программой - его объекты используются другими программными единицами.

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

Заголовок модуля составляется из служебного слова UNIT и следующего за ним имени модуля. Заголовок завершается символом ";" (точка с запятой). Для правильной работы среды ТУРБО-ПАСКАЛЯ это имя должно совпадать с именем дискового файла, в котором помещается исходный текст модуля. Если, например, имеем заголовок UNIT GLOBAL; то исходный текст соответствующего модуля должен размещаться в дисковом файле GLOBAL.PAS.

Интерфейсная часть начинается со служебного слова INTERFACE, за которым следует совокупность обычных описаний. Часть реализации начинается служебным словом IMPLEMENTATION и содержит описание подпрограмм, объявленных в интерфейсной части. В ней могут объявляться локальные для модуля объекты, вспомогательные типы, константы и переменные. Завершает модуль, как и программу, служебное слово END и символ точка.

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

unit cmplx;

interface

type complex=record re,im: real end;

procedure addс(x,y:complex; var z:complex);

implementation

procedure addс;

begin

z.re:=x.re+y.re;

z.im:=x.im+y.im

end

end.

В этом модуле описан тип complex и процедура addс сложения комплексных чисел. Модуль компилируется точно таким же образом, как и обычные подпрограммы. Но так как модуль не является непосредственно выполняемой единицей, то в результате его компиляции образуется дисковый файл с расширением .TPU, при этом имя файла берется из имени файла с исходным текстом модуля.

Для того чтобы получить доступ к интерфейсным объектам модуля необходимо указать в программе имя нужного TPU - файла. Соответствующая конструкция называется спецификацией используемых модулей и имеет следующий вид:

USES U1,U2,U3;

где USES- служебное слово, U1,U2,U3- имена используемых модулей.

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

2. Правильность работы программы проверить на следующих тестовых задачах:

А) 1-ый массив N=10.

элементы с 1-го по 5-ый равны 4

элементы с 6-го по 10-ый равны -2

2-ой массив N=5

все элементы массива равны -3

ОТВЕТ: Z=1.75

Б) 1-ый массив N=5

все элементы массива равны 5

2-ой массив N=3

все элементы массива равны 2

ОТВЕТ: Z ВЫЧИСЛИТЬ НЕВОЗМОЖНО

Контрольные вопросы:

1. Что называется модулем?

2. Какова структура модуля?

3. На какие части разбиты программные ресурса модуля?

4. В чем отличие локальных и глобальных переменных?

5. Как обеспечить доступ к интерфейсным объектам модуля?

Наши рекомендации