Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Министерство образования Российской Федерации
КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
им. А.Н.ТУПОЛЕВА
-------------------------------------------------------------------------------------------
А.Р. Бикмурзина
Методические указания к выполнению курсовой работы
по дисциплине
«Программирование на языке высокого уровня»
(для направления «Информатика и вычислительная техника»)
Казань 2009
Требования к курсовой работе
Основная цель курсовой работы - научиться разрабатывать на языке высокого уровня (С/С++) сложные программы, имеющие многофункциональную структуру.
Работа должна быть выполнена в течение одного семестра. Для выданного преподавателем задания необходимо разработать и отладить на компьютере программу на языке С (или С++) и оформить отчет по курсовой работе. Список заданий приведен в приложении 2.
Оценка курсовой работы зависит от качества выполнения и оформления курсовой работы, от результатов и сроков ее защиты.
Программа должна иметь многофункциональную структуру: состоять не из одной главной функции main(), но и еще из нескольких подпрограмм. Можно оформить отдельные функции в виде отдельных модулей, которые компилируются раздельно, а потом с помощью компоновщика объединяются в единый загрузочный модуль (exe-файл).
Всю необходимую функциям информацию следует передавать в виде параметров, а не через глобальные переменные, изменение которых трудно отследить.
Программа должна удовлетворять требованиям структурного программирования, должна содержать комментарии, поясняющие назначение каждой функции, ее параметров, локальных переменных и отдельных ее частей. Программа должна быть хорошо читаемой и понятной не только Вам, но и любому пользователю, знакомому с языком С (С++). Для наглядности программы соблюдайте ступенчатую форму записи, имена функций и переменных выбирайте осмысленные (Вам самим это поможет при отладке программы).
Программа должна быть отлажена. Для этого нужно обдуманно подобрать набор тестов, на котором будет проверяться работа программы, причем делать это нужно не после написания программы, а до написания (тесты "черного ящика") и в процессе написания (тесты "белого ящика").
О содержании отчета по курсовой работе смотрите ниже, в приложении приведен пример отчета.
Технология создания сложных программ хорошо изложена в учебных пособиях Хохлова Д.Г. "Основы технологии модульного программирования" [1] и Павловской Т.А. "C/C ++. Программирование на языке высокого уровня" (часть I) [2]. Необходимо следовать их рекомендациям. Не поленитесь, прочитайте литературу, иначе много времени будет потрачено впустую, а желание программировать может вообще пропасть, когда вместо красивой и надежной программы Вы получите огромного неуправляемого “монстра”. Научитесь профессиональному подходу к созданию сложных программ.
В книге [3] Вы можете посмотреть примеры решения задач, подобных Вашей задаче.
Этапы разработки программ
Разработка любой сложной программы осуществляется поэтапно [1,2].
I этап. Разобравшись в постановке задачи, нужно создать так называемую внешнюю спецификацию программы, которая включает в себя:
Входные и выходные данные должны быть представлены в удобной для пользователя форме.
На этом этапе полезно подобрать тесты “черного ящика” для проверки программы (т.е. рассматривая программу как черный ящик, подобрать такой набор тестов, чтобы учесть все возможные ситуации, в том числе и ошибочные). Это поможет лучше понять задачу.
II этап. Разработка внутренних структур для представления входных, выходных и промежуточных данных.
От выбора структур данных будет во многом зависеть алгоритм решения задачи. Например, если выходные данные должны представлять собой сортированную таблицу, можно создать в памяти таблицу в виде вектора, а затем выполнить ее сортировку, а можно создать динамическую сортированную таблицу в виде списка.
III этап. Проектирование структуры программы.
На этом этапе применяется технология нисходящего проектирования программ. Задача разбивается на подзадачи, которые можно рассматривать раздельно. Каждая подзадача оформляется как отдельная функция (подпрограмма). Для каждой подпрограммы составляется внешняя спецификация, аналогичная приведенной выше.
Затем при пошаговой детализации каждая подзадача может быть разбита на еще более мелкие подзадачи, которые также оформляются как отдельные функции. При разработке структуры функции вначале нужно выбрать наиболее эффективный метод решения задачи и записать в обобщенной форме алгоритм (например, в виде укрупненной блок-схемы), затем решить, какие части алгоритма (блоки схемы) целесообразно представить в виде отдельных функций.
Здесь важно продумать интерфейс способ взаимодействия функций. Интерфейс функции определяется ее заголовком (где указываются имя функции, ее параметры и тип возвращаемого значения).
На этом этапе нужно также решить, из каких модулей будет состоять программа. Модуль может содержать одну или несколько взаимосвязанных функций и общие для функций данные. Каждый модуль помещается в отдельный файл (с расширением .c или .cpp) и компилируется автономно. Получившиеся в результате компиляции объектные модули объединяются в единый исполняемый модуль (exe-файл) с помощью компоновщика (Linker).
Разбиение программы на модули уменьшает время перекомпиляции программы и облегчает процесс отладки, позволяя отлаживать программу по частям. Чем более независимы модули, тем легче отлаживать программу.
Одна из основных задач хорошо продумать интерфейс модулей. Интерфейсом модуля являются заголовки всех функций и описания доступных извне типов, переменных и констант.
Примечание. Описания глобальных типов данных, констант, переменных и прототипы всех функций лучше поместить в отдельный файл с расширением .h , а в остальные файлы (с расширением .c или .cpp) включать эти описания с помощью директивы #include “имя.h” . Глобальные переменные, правда, лучше не использовать (тогда интерфейс каждой функции будет полностью определяться ее заголовком).
Таким образом, на данном этапе строится модульная и функциональная структура программы и определяется интерфейс между модулями и функциями, а также разрабатываются обобщенные алгоритмы функций.
Процесс проектирования структуры программы является итерационным, поскольку в сложных программах невозможно сразу продумать все детали.
IV этап. Структурное программирование и тестирование программы.
Процесс программирования и тестирования также организуется по принципу «сверху-вниз». Вначале описывается главная функция программы, затем функции следующего уровня и т. д. Параллельно разрабатываются тесты для проверки каждой функции и каждого модуля. Набор тестов должен быть достаточно большим.
Тесты подбираются по методам «черного и белого ящиков». В методах «черного ящика» программа (подпрограмма) рассматривается, как черный ящик: известно только какие выходные данные должны получиться при определенных входных данных. Каждый тест должен содержать определенные входные данные и ожидаемый результат. Тесты должны охватывать как правильные, так и неправильные входные данные. Например, если входные данные читаются из заданного файла, то следует взять и «неправильные тесты»: например, когда файла с заданным именем нет в указанной папке, когда файл пустой. Тесты «черного ящика» следует подбирать еще на предыдущем этапе.
В тестах «белого ящика» учитывается алгоритм программы (подпрограммы). Каждая ветвь в структурах ветвления (операторы if, switch), каждый цикл должны проверяться при тестировании. Например, программа выводит меню из четырех пунктов, и в зависимости от номера выбранного пункта либо вызывает одну из трех подпрограмм, либо завершает свою работу (см. пример программы в приложении). Необходимо взять, по крайней мере, пять тестов: по одному для каждого пункта меню и с неверным номером пункта меню.
Прежде чем тестировать программу на компьютере полезно выполнить ручное тестирование. Это поможет выявить и исправить ошибки еще до ввода программы.
При написании программы и ее тестировании по принципу «сверху-вниз» функции нижнего уровня (еще не написанные) заменяются так называемыми «заглушками». В простейшем случае «заглушки» просто выдают сообщение о том, что подпрограмма вызвана. Например, для проверки работы главной функции программы, описанной в приложении 1, вместо каждой из трех вызываемых подпрограмм (Date, MiddleAge, Diagnos) можно написать «заглушку». Пример для функции Date:
void Date (FILE *f)
{ puts ("\nФункция Date вызвана ");
}
После отладки главной функции и написания определения, например, функции Date, «заглушка» этой функции заменяется на ее определение и выполняется тестирование этой функции (совместно с главной). Затем постепенно добавляются и проверяются остальные функции.
Если в процессе тестирования функции результаты окажутся неверными, то нужно будет отладить эту функцию. В процессе отладки может измениться не только алгоритм функции, но и появиться новые подпрограммы, т.е. может измениться функциональная структура программы.
Содержание отчета по курсовой работе
После отладки программы следует оформить отчет по курсовой работе. Отчет должен содержать полную документацию к разработанной программе. Пример отчета смотрите в приложении 1.
В первом разделе приводится формулировка задания в том виде, в каком она дана преподавателем.
Второй раздел должен содержать описание применения программы. В этом разделе нужно дать всю необходимую информацию для пользователей: как запустить программу, как подготовить для нее входные данные (исходный файл и данные, вводимые с клавиатуры при выполнении программы), какие будут выходные данные, какие сообщения может выдавать программа и в каких случаях (в том числе и сообщения об ошибках).
В третьем разделе дается подробное описание программы: метод решения задачи, модульная (функциональная) структура программы, описание каждого модуля. При описании модуля указывается, из каких функций состоит модуль, и дается подробное описание каждой функции.
Описание функции должно включать ее назначение, интерфейс (заголовок функции с пояснением ее параметров и возвращаемого значения), описание локальных переменных и алгоритма функции в виде блок-схемы (если структура линейная, то можно дать словесное описание алгоритма).
Приложения к отчету должны содержать листинг программы, примеры (один или несколько) входного файла и результаты тестирования программы.
Литература
1. Хохлов Д.Г. Основы технологии модульного программирования. Учебное пособие. - Казань. Изд-во Казан. гос. техн. ун-та , 2005. - 63 с.
2. Павловская Т.А. С/С++. Программирование на языке высокого уровня. - СПб: Питер, 2004г. - 461с.
3. Павловская Т.А., Щупак Ю.А. С/С++. Структурное программирование: Практикум. - СПб: Питер, 2002 г. - 240с.
4. Хохлов Д.Г. Структуры данных и комбинаторные алгоритмы. Учебное пособие. - Казань: Изд-во Казан. гос. техн. ун-та, 2005. - 102 с.
5. Хохлов Д.Г., Захарова З.Х. Практикум по структурам данных и комбинаторным алгоритмам: Учебное пособие.- Казань: Изд-во Казан. гос. техн. ун-та, 2005. - 48 с.
6. Бикмурзина А.Р. Лабораторный практикум по программированию. - Казань: Изд-во Казан. гос. техн. ун-та, 2000г.