Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прак. ОАиП 230401.doc
Скачиваний:
16
Добавлен:
17.02.2016
Размер:
375.81 Кб
Скачать

Контрольные вопросы и задания:

  1. В чём заключается особенность объявления данных динамической структуры?

  2. Что выполняет операция разыменования?

  3. С помощью каких процедур происходит распределение памяти под динамические переменные?

  4. Какие состояния может принимать указательная переменная?

  5. Каким образом выражаются динамические свойства несвязанных динамических данных?

  6. В чём заключаются отличия при обработке стека и очереди?

Рекомендуемая литература: 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.8, 2.3, 2.4, 2.5.

Практическое занятие №12

Тема: Разработка собственного модуля

Цель: закрепление знаний и навыков по созданию пользовательских модулей, изучение с практической стороны преимуществ модульного программирования.

Вид работы: фронтальный.

Время выполнения: 2 часа.

Теоретический материал:

Модуль (UNIT) – программная единица, текст которой компилируется независимо (автономно). Внутренняя структура модуля (тексты программ и т.д.) скрыта от пользователя.

Заголовок модуля

UNITимя модуля;

Интерфейсная часть

INTERFACEначало раздела объявлений;

USESиспользуемые при объявлении модули;

LABELподраздел объявления доступных глобальных меток;

CONSTподраздел объявления доступных глобальных констант;

TYPEподраздел объявления доступных глобальных типов;

VARподраздел объявления доступных глобальных переменных;

PROCEDUREзаголовки доступных процедур;

FUNCTIONзаголовки доступных функций;

Реализационная часть

IMPLEMENTATIONначало раздела реализации;

USESиспользуемые при реализации модули;

LABELподраздел объявления скрытых глобальных меток;

CONSTподраздел объявления скрытых глобальных констант;

TYPEподраздел объявления скрытых глобальных типов;

VARподраздел объявления скрытых глобальных переменных;

PROCEDUREтела доступных и скрытых процедур;

FUNCTIONтела доступных и скрытых функций;

Инициализационная часть

BEGIN

Операторы, которые выполняются при подключении модуля;

END.

Задания:

  1. Создайте модуль для вычисления факториала некоторого числа. В основной программе, не объявляя никаких переменных, осуществите вывод на экран факториалов чисел a и b.

  2. Напишите программу для ввода некоторого числа X и вывода факториала этого числа. В программе должны использоваться два модуля: модуль для проверки, является ли число X целым и положительным, модуль для вычисления факториала (можно применить модуль, созданный для решения предыдущей задаче).

Ход работы:

В тетрадь оформите листинги программ и модулей с комментариями

1. Основная программа, согласно условию, будет содержать подключение модуля, ввод чисел a и b, вызов функции для каждого числа и вывод результата на экран. Текст программы можно представить так:

usees unitF; {подключение модуля}

begin

writeln(‘введите два числа’);

readln(a,b); {ввод переменных, описанных в модуле}

f1:=factor(a);{вызов функции, описанной в модуле; вычисление факториала от a}

f2:=factor(b); {вызов функции, описанной в модуле; вычисление факториала от b}

writeln(‘факториал числа а = ’, f1);

writeln(‘факториал числа b = ’, f2);

readln;

end.

Модуль создаётся отдельно от основной программы. Его название должно совпадать с именем файла, в котором он записан (unitF). Для удобства использования модули сохраняют с расширениями pas и tpu, т.к. откомпилированный модуль нельзя исправить. В интерфейсной части модуля описываются переменные a, b типа integer и переменные f1, f2 типа longint (для записи результата используется тип с наибольшим диапазоном из целых типов), описывается функция factor. В реализационной части находится не только описание функции, но и сама функция. Инициализационная часть будет пустой. Текст модуля unitF (файлы unitF.tpu и unitF.pas):

unit unitF; {заголовок модуля}

interface {интерфейсная часть}

var a, b: integer; {описание переменных доступных из вызывающий модуль программ}

f1, f2: longint;

function factor(x: integer): longint; {описание доступной программам функции}

implementation {реализационная часть}

function factor(x: integer): longint; {тело функции}

var i: inttger; {локальные переменные}

f: longint;

begin

f;=1;

for i:= 1 to x do {цикл для вычисления факториала}

f:=f*i;

factor:=f; {имени функции всегда присваивается результат}

end; {завершение функции}

end. {закрытие модуля, пустая инициализационная часть}

2. Решение этой задачи упрощается тем, что в предыдущей уже разработан модуль для вычисления факториала. Следовательно, необходимо создать ещё один модуль и исправить вызывающую программу. В модуле proverka находится функция: является ли число, от которого вычисляется факториал, положительным и целым, это проверяется так:

ost:=x-round(x); {определение дробной части числа x}

if (x>=0) and (ost=0) then writeln(‘факториал числа = ’,factor(round(x)))

else writeln(‘от данного числа не возможно найти факториал’);

Если x неотрицательное и целое число, то вызывается функция для вычисления факториала из модуля unitf - factor.