Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР № 19 Программные модули в языках программиро...docx
Скачиваний:
2
Добавлен:
14.08.2019
Размер:
73.26 Кб
Скачать

17

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

«Программные модули в языках программирования»

Цель

Получить практические навыки составления программ с использованием методики модульного программирования.

Задание на самостоятельную работу

  1. Изучить основные понятия модульного программирования [1], стр. 72-101, [2], стр. 150-154.

  2. Изучить содержание и порядок выполнения лабораторной работы.

Основы теории

Модульность в языках программирования — принцип, согласно которому программное средство (ПС, программа, библиотека, web-приложение и др.) разделяется на отдельные именованные сущности, называемые модулями. Модульность часто является средством упрощения задачи проектирования ПС и распределения процесса разработки ПС между группами разработчиков. При разбиении ПС на модули для каждого модуля указывается реализуемая им функциональность, а также связи с другими модулями.

С увеличением объема программы становится невозможным удерживать в памяти все детали. Естественным способом борьбы со сложностью любой задачиявляется ее разбиение на части. В C++ задача может быть разделена на болеепростые и обозримые с помощью функций, после чего программу можно рассматривать в более укрупненном виде — на уровне взаимодействия функций. Этоважно, поскольку человек способен помнить ограниченное количество фактов.Использование функций является первым шагом к повышению степени абстракции программы и ведет к упрощению ее структуры.

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

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

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

Скрытие деталей реализации называется инкапсуляцией. Инкапсуляция является ключевой идеей как структурного, так и объектно-ориентированного программирования. Пример инкапсуляции — помещение фрагмента кода в функцию и передача всех необходимых ей данных в качестве параметров. Чтобы использовать такую функцию, требуется знать только ее интерфейс, определяемый заголовком (имя, тип возвращаемого значения и типы параметров). Интерфейсом модуля являются заголовки всех функций и описания доступных извне типов, переменных и констант. Описания глобальных программных объектов во всех модулях программы должны быть согласованы.

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

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

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

Исходные тексты совокупности функцийдля решения какой-либо подзадачи, как правило, размещаются в отдельном модуле (файле). Такой файл называют исходным(sourcefile). Обычно он имеет расширение.с или .срр. Прототипы всех функций исходного файла выносят в отдельный так называемый заголовочныйфайл (headerfile), для него принято использовать расширение hили .hpp.

Таким образом, заголовочный файл xxx.hсодержитинтерфейсдля некоторого набора функций, а исходный файл ххх.срр содержитреализацию этого набора. Если некоторая функция из указанного набора вызывается из какого-то другого исходного модуля ууу.срр, то вы обязаны включить в этот модуль заголовочный файл ххх.hс помощью директивы include. Негласное правило стиля программирования на C++ требует включения этого же заголовочного файла (с помощью #include) и висходный файл ххх.срр.

В многофайловом проекте возможны два «вида глобальности». Если некоторая глобальная переменная glvarlобъявлена в файле ххх.срр с модификатором static, то она видима от точки определения до конца этого файла, то есть область ее видимости ограничена файлом. Если же другая глобальная переменная glvar2 объявлена в файле ххх.cppбез модификатора static, то она может быть видимой в пределах всего проекта. Правда, для того, чтобы она оказалась видимой в другом файле, необходимо иметь в этом файле ее объявление с модификатором extern(рекомендуется это объявление поместить вфайл xxx.h).

Что и как следует размещать в заголовочном файле?

В заголовочном файле принято размешать:

    • определения типов, задаваемых пользователем, констант, шаблонов;

    • объявления (прототипы)функций;

    • объявления внешних глобальных переменных (с модификатором extern);

    • пространства имен.

Теперь обратим ваше внимание на проблему повторного включения заголовочных файлов. Проблема может возникнуть при иерархическом проектировании структур данных, когда в некоторый заголовочный файл ууу.hвключается при помощи директивы #tncludeдругой заголовочный файл xxx.h(например, для использования типов, определенных в этом файле).

Задание

(номер варианта соответствует вашему номеру в журнале)

Вариант 1

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

НЕ(Ац ИЛИ Вц) И НЕ(Ац ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции НЕ, И и ИЛИ — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры. Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 2

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где a, b,c,dдействительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац МОД2Вц) ИЛИ (Ац МОД2 Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции ИЛИ и МОД2 (сложение по модулю 2) — поразрядные. Значения а, b, с, d, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 3

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

НЕ(Ац ИВц И Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции НЕ иИ — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 4

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац ИЛИ Вц) И НЕ(Ац ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции НЕ, И и ИЛИ — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 5

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац МОД2 Вц) И НЕ(Ац ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции НЕ, И, ИЛИ и МОД2 (сложение по модулю 2) — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 6

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

НЕ(Ац ИЛИ Вц ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции НЕ и ИЛИ — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 7

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, сдействительные числа

Функция F должна принимать действительное значение, если выражение (Ац МОД2Вц) ИЛИ (Ац МОД2 Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции ИЛИ и МОД2 (сложение по модулю 2) — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 8

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац ИЛИ Вц) МОД2 (Вц ИСц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции И, ИЛИ и МОД2 (сложение по модулю 2) — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 9

Вычислив и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, сдействительные числа.

Функция F должна принимать действительное значение, если выражение (Ац ИЛИ Вц) И Сц

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции Ии ИЛИ — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 10

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац ИВц) МОД2 Сц

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции Ии МОД2 (сложение по модулю 2) — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 11

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

НЕ(Ац ИЛИ Вц) И (Ац МОД2 Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции НЕ, И, ИЛИ и МОД2 (сложение по модулю 2) — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 12

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

НЕ(Ац ИЛИ Вц) И (Вц ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции НЕ, И и ИЛИ — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 13

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, Ь, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац МОД2 Вц) И НЕ(Ац ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции И, ИЛИ и МОД2 (сложение по модулю 2) — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 14

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, сдействительные числа.

Функция F должна принимать действительное значение, если выражение (Ац ИЛИ Вц) МОД2 (Ац ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции И, ИЛИ и МОД2 (сложение по модулю 2) — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 15

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, сдействительные числа.

Функция F должна принимать действительное значение, если выражение (Ац ИВц) ИЛИ (Ац И Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции Ии ИЛИ — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 16

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, сдействительные числа.

Функция F должна принимать действительное значение, если выражение (Ац ИЛИ Вц) И Сц

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции Ии ИЛИ — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 17

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

Ац ИЛИ Вц ИЛИ Сц

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операция ИЛИ — поразрядная. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 18

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а, b, с — действительные числа.

Функция F должна принимать действительное значение, если выражение

Ац И (Вц ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции Ии ИЛИ — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 19

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а,bдействительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац ИВц) ИЛИ (Вц И Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сд обозначены целые части значений а, b, с, операции Ии ИЛИ — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.

Вариант 20

Вычислить и вывести на экран в виде таблицы значения функции F на интервале от Хнач. до Хкон. с шагом dX.

где а,bдействительные числа.

Функция F должна принимать действительное значение, если выражение

(Ац ИЛИ Вц) И (Ац ИЛИ Сц)

не равно нулю, и целое значение в противном случае. Через Ац, Вц и Сц обозначены целые части значений а, b, с, операции Ии ИЛИ — поразрядные. Значения а, b, с, Хнач., Хкон., dX ввести с клавиатуры.Расчет по каждой формуле оформить в виде отдельного модуля программы.