
- •Министерство образования и науки Российской Федерации
- •Инструкция по мерам безопасности и правилам поведения в компьютерном классе Общее положения:
- •Методические указания по выполнению лабораторных работ
- •Лабораторная работа № 1 Основы работы с персональным компьютером Цель
- •Задание для самостоятельной подготовки
- •Основы теории
- •Задание
- •Порядок выполнения работы
- •Требования к отчету
- •Задание к работе
- •Порядок выполнения работы
- •Требования к отчету
- •Задание к работе
- •Порядок выполнения работы
- •Требования к отчету
- •100.101
- •111.000
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задание
- •Порядок выполнения работы
- •Требования к отчету
- •Контрольные вопросы
- •Лабораторная работа № 6.
- •Задание
- •Порядок выполнения работы
- •Задание
- •Порядок выполнения работы
- •Требования к отчету
- •Задания
- •Порядок выполнения работы
- •Требования к отчету
- •Контрольные вопросы
- •Лабораторная работа № 9.
- •Задание
- •Задание
- •Порядоквыполненияработы
- •Требования к отчету
- •Задание
- •Порядок выполнения работы
- •Отчет о работе
- •Задание
- •Задание
- •Порядок выполнения работы (на примере)
- •Требования к отчету
- •Задание к работе
- •Порядок выполнения работы
- •Отчет о работе
- •Задание
- •Примеры выполнения работы
- •Требования к отчету
- •Контрольные вопросы
- •Лабораторная работа № 15
- •Задание
- •Порядок выполнения работы
- •Требования к отчету
- •Контрольные вопросы
- •Лабораторная работа № 16
- •Задание
- •Порядок выполнения работы
- •Задания
- •Требования к отчету
- •Задание
- •Порядок выполнения работы
- •Отчет о работе
- •Задание
- •Порядок выполнения работы
- •Отчет о работе
- •Задание
- •Порядок выполнения работы
- •Отчет о работе
- •Реализация последовательных списков с использованием массивов
- •Задания
- •Требования к отчету
- •Контрольные вопросы
- •Лабораторная работа № 22.
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Требования к отчету
- •1.5 Алгоритм добавления звена к очереди.
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Требования к отчету
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Требования к отчету
- •Использование fread() и fwrite()
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задание
- •Порядок выполнения работы
- •Требования к отчету
- •Контрольные вопросы
- •Лабораторная работа № 28.
- •Задание
- •Требования к отчету
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задание
- •Порядок выполнения работы
- •Требования к отчету
- •Задания к работе
- •Порядок выполнения работы
- •Задание
- •Пример выполнения задания
- •Контрольные вопросы
- •Требования к отчету
- •Задание
- •Порядок выполнения работы
- •Требования к отчету
- •Контрольные вопросы
- •Лабораторная работа №33.
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Шифрование при помощи задачи о ранце
- •Популярные системы шифрования
- •Задание
- •Порядок выполнения работы
- •Контрольные вопросы
- •Требования к отчету
- •Литература
- •Internet-ресурсы
Отчет о работе
Отчет должен содержать:
Тему и цель работы.
Исходные данные задания.
Листинг программы.
Результат работы программы.
Ответы на контрольные вопросы.
Выводы о проделанной работе.
Контрольные вопросы
Что такое «Структурное программирование»?
Какие существуют конструкции структурного программирования?
Какую структуру имеет программа?
Какие операторы служат для организации разветвляющихся программ и организации циклов?
В чем суть теоремы Бома-Якопини?
Лабораторная работа № 19.
Программные модули в языках программирования
Цель
Формирование практических навыков составления программ с использованием методики модульного программирования.
Задание на самостоятельную работу
Изучить основные понятия модульного программирования [7], стр. 72-101, [8], стр. 150-154.
Изучить содержание и порядок выполнения лабораторной работы.
Основы теории
Модульность в языках программирования — принцип, согласно которому программное средство (ПС, программа, библиотека, 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(например, для использования типов, определенных в этом файле).