Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
laba_kar8.docx
Скачиваний:
6
Добавлен:
10.05.2015
Размер:
125.97 Кб
Скачать

Министерство образования и науки Российской Федерации

ФГБОУВПО Тульский государственный университет

КАФЕДРА АВТОМАТИКИ И ТЕЛЕМЕХАНИКИ

Модули в Borland Pascal

Лабораторная работа № 8

по курсу «Теоретические основы проектирования

информационных систем»

Вариант № 21

Выполнил: студент группы 220421 _________ Яковлев С.С.

(подпись)

Проверил: к.т.н. доцент _________ Карцева А.С.

(подпись)

Тула 2013

Цель и задача работы

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

Задание на работу

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

13. Тип «Органайзер» (добавление, удаление событий рабочего дня, поиск по названию, времени, определение наложения событий)

Теоретическая справка

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

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

Основным принципом модульного программирования является принцип «разделяй и властвуй». Модульное программирование – это организация программы как совокупности небольших независимых блоков, называемых модулями, структура и поведение которых подчиняются определенным правилам.

Использование модульного программирования позволяет упростить тестирование программы и обнаружение ошибок. Аппаратно-зависимые подзадачи могут быть строго отделены от других подзадач, что улучшает мобильность создаваемых программ.

Термин «модуль» в программировании начал использоваться в связи с внедрением модульных принципов при создании программ. В 70-х годах под модулем понимали какую-либо процедуру или функцию, написанную в соответствии с определенными правилами. Например: «Модуль должен быть простым, замкнутым (независимым), обозримым (от 50 до 100 строк), реализующим только одну функцию задачи, имеющим одну входную и одну выходную точку».

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

Таким образом, Парнас первым выдвинул концепцию скрытия информации (information hiding) в программировании. Однако существовавшие в языках 70-х годов только такие синтаксические конструкции, как процедура и функция, не могли обеспечить надежного скрытия информации, поскольку подвержены влиянию глобальных переменных, поведение которых в сложных программах бывает трудно предсказуемым.

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

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

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

Впервые специализированная синтаксическая конструкция модуля была предложена Н. Виртом в 1975 г. и включена в его новый язык Modula . Насколько сильно изменяются свойства языка, при введении механизма модулей, свидетельствует следующее замечание Н.Вирта, сделанное им по поводу более позднего языка Модула-2: «Модули – самая важная черта, отличающая язык Модула-2 от его предшественника Паскаля».

По своей организации и характеру использования в программе модули Паскаля близки к модулям-пакетам (PACKAGE) языка программирования Ада. В них так же, как и в пакетах Ады, явным образом выделяется некоторая «видимая» интерфейсная часть, в которой сконцентрированы описания глобальных типов, констант, переменных, а также приводятся заголовки процедур и функций. Появление объектов в интерфейсной части делает их доступными для других модулей и основной программы. Тела процедур и функций располагаются в исполняемой части модуля, которая может быть скрыта от пользователя.

Модули представляют собой прекрасный инструмент для разработки библиотек прикладных программ и мощное средство модульного программирования. Важная особенность модулей заключается в том, что компилятор размещает их программный код в отдельном сегменте памяти. Длина сегмента не может превышать 64 Кбайт, однако количество одновременно используемых модулей ограничивается лишь доступной памятью, что позволяет создавать большие программы.

Схема алгоритма

Ниже приведена схема алгоритма программы-органайзера (рис. ).

Данная программа предназначена для работы с органайзером

Начало

Приветствие

1

2

'

Выберите необходимое действие: '

'[1] - Добавление события в список'

'[2] - Удаление существующего события'

'[3] - Вывод списка сособытий на экран'

'[4] - Поиск по параметрам'

'[5] - Выход из программы'

key

key - число

key=1

Введите порядковый номер добавляемого события. Не более ',aii,' и не менее 0.');

'Предыдущая запись была под номером ',size,'

Ошибка. Повторите ввод

size

key – число, 0<size<100

Рисунок 1 – Схема алгоритма выбора вкладки ввода события

add(c,size)

key=2

deletesize

key – число,

0<deletesize<100

Введите порядковый номер удаляемого события. Не более ',aii,' и не менее 0.');

'Предыдущая запись была под номером ',size,'

Ошибка. Повторите ввод

key=3

del(c,deletesize)

output(c);

key=2

buf

buf – число,

0<=buf<=1

Ошибка. Повторите ввод

buf=1

'Выберите вариант поиска: ' '[1] - по названию события’

[0] - по дате события'

searchflag:=false

нет

да

searchflag:=true

search(c,searchflag)

да

нет

Работа программы успешно завершена

Конец

Ниже приведена схема алгоритма ввода размера ввода новой записи, расположенного в модуле org (рис. 2-5).

1

Подпрограмма для ввода размеров матрицы arr (n*m), заменяемых строк str1, str2 и заполнения массива

int** input(int* m,int* n,int* str1,int* str2,int* flag)

локальные переменные:

inputfile:text* – счетчик элементов массива

pr:int – переменная для проверки ввода

j:int – переменная цикла

i:int – переменная цикла

inputname[razm]:char – адрес файла ввода

arr:int – указатель на динамический массив

Начало

2

Рис. 2 – Схема алгоритма ввода адреса файла ввода и размеров массива, считываемого из файла.

Далее приведена схема алгоритма перемещения отрицательных элементов в начало массива (рис. 5-8).

Подпрограмма для ввода размеров матрицы arr (n*m), заменяемых строк str1, str2 и обработки массива. После этого результаты выводятся на диспей и в файл вывода

void actionandoutput(int* m,int* n,int* str1,int* str2,int** arr,int* flag)

локальные переменные:

outputfile:*text – Вводимый файл

i:integer – Счетчик столбцов матрицы

j:string – Счетчик строк матрицы

outputname:char[razm] – Адрес файла вывода

buf:int – буферная переменная для замены строк

Начало

1

Рис. 6 – Схема алгоритма перемены строк местами, ввода адреса файла вывода

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