КУРСОВАЯ РАБОТА (Методичка). Методические указания к курсовому проектированию по дисциплине Методы программирования и прикладные алгоритмы для студентов специальности 075400
Скачать 254.5 Kb.
|
Уфимский государственный авиационный технический университет Кафедра вычислительной техники и защиты информации Методические указания к курсовому проектированию по дисциплине «Методы программирования и прикладные алгоритмы» для студентов специальности 075400 – Комплексная защита объектов информатизации Семестр 4 Доцент., к.т.н. Селиванова М. В. Зав. кафедрой ВТиЗИ, проф., д.т.н. Васильев В.И. Уфа – 2001 Содержание
1. Цели и задачи курсовой работы Выполнение курсовых работ направлены на формирование у обучаемых навыков самостоятельной научно-исследовательской и практической деятельности, грамотного оформления полученных результатов, умения представить результаты своей работы в виде научного доклада и защитить их в последующей дискуссии. Целью курсовой работы по дисциплине «Методы программирования и прикладные алгоритмы» является: дальнейшее развитие и закрепление знаний, полученных на лекционных и лабораторных занятиях в области методов программирования и прикладных алгоритмов; совершенствование практических навыков работы на ПЭВМ; развитие профессиональных навыков работы с CASE-средствами. 2. Тематика курсовых работ Для выполнения курсовых работ студенты должны самостоятельно освоить объектно-ориентированный язык программирования Visual C++ с решением на нем задачи, поставленной перед ними руководителем курсовой работы. В процессе решения студенты разрабатывают математическое, алгоритмическое и программное обеспечение, анализируют полученные результаты и делают соответствующие выводы. В качестве перспективных задач в рамках данного направления могут быть рекомендованы: анализ эффективности различных алгоритмов (сортировки, поиска, на графах ...); разработка универсальных программ (пакетов программ) для решения систем линейных алгебраических и дифференциальных уравнений; разработка графических редакторов и программ графической обработки; разработка баз данных (БД) средствами (функциями) объектно-ориентированных сред программирования; специальные задания (индивидуальные и комплексные работы) выдаются преподавателем. Примерные темы курсовых работ: 1) Разработка прикладного алгоритма и его реализация на языке С++: а) Написать программу-таймер, которая по истечении заданного промежутка времени, величина которого вводится с клавиатуры, выдает звуковой сигнал. б) Разработать программу для просмотра и редактирования базы данных студентов (ФИО, оценки, полученные на занятиях и экзамене); данные хранятся во внешнем текстовом файле. в) Реализовать алгоритм обменной поразрядной сортировки. Сортируемые последовательности генерировать случайным образом, исходные данные и результат, полученный после сортировки, представлять в виде набора точек в декартовой системе координат. г) Реализовать алгоритмы последовательного и двух его улучшений. Определить функцию изменения времени вычисления от объема исходных данных для трех алгоритмов и О-сложность (динамический массив случайных целых чисел) д) Реализовать алгоритм точного поиска подстроки в строке Боуера-Мура. Определить функцию изменения времени вычисления от объема исходных данных и О-сложность алгоритма (файл с исходным текстом указывает пользователь). е) Построение графика функции по координатам точек (полином), заданных во внешнем файле, методом наименьших квадратов. 2) Разработка программы на языке С++ для построения сложных геометрических фигур на плоскости (исходные данные, вводимые пользователем приведены на схемах, кроме построения контура, выделенного утолщенной линией, необходимо осуществлять проверку исходных данных на соответствие полученному варианту – обязательное пересечение окружностей и т.п.): а) б) в) г) д) е) 3) Разработка прикладного алгоритма и его реализация на языке С++(комплексный): а) Расчет площади фигуры, ограниченной выбранными пользователем функциями (полиномы n-ой, задаваемые с помощью коэффициентов), методом Монте-Карло. б) Построение графика функций и закрашивание вычисляемой в задании (а) площади. 3. Порядок выполнения курсовой работы 3.1. Курсовая работа выполняется студентами индивидуально в соответствии с заданием, полученным от преподавателя. 3.2. Выполнение курсовой работы фиксируется преподавателем (в процентах) в зависимости от выполнения временного графика (в течение 8 календарных недель). 3.3. Для выполнения курсовой работы студентам предоставляется время в дисплейных классах кафедры. 3.4. Руководитель курсового проектирования проводит консультации на кафедре в назначенное им время. 3.5. Защита курсового проекта осуществляется на ПЭВМ после представления студентами материалов, перечисленных в пункте 4. 4. Основные требования к выполнению и оформлению курсовой работы 4.1. Работа оформляется в принятом для научных работ виде, включает в себя текст пояснительной записки и, в качестве приложений, дискеты, содержащие программы (тексты и исполняемые файлы), данные, а также объемные приложения, включение которых в текст работы является нецелесообразным. 4.2. В процессе работы над курсовым проектом студент обязан: ознакомиться с рекомендуемой литературой; cогласовать с руководителем курсового проекта информационные аспекты (математическую основу, технологию и инструментальные средства) для решения задачи; разработать алгоритмическое и программное обеспечение (Windows application) на основе объектно-ориентированного подхода; решить поставленную задачу; оформить пояснительную записку к курсовой работе. 4.3. Пояснительная записка к курсовой работе содержит: титульный лист с указанием наименования вуза, кафедры, темы курсового проекта, Ф.И.О. студента, факультета, группы, Ф.И.О. преподавателя, принявшего курсовой проект, дату выполнения курсового проекта; постановку задачи и описание исходных данных; разработку математического обеспечения работы; разработку алгоритма программы в виде блок-схемы по ГОСТ 19.701-90; краткое описание функциональных возможностей среды программирования, в которой выполнена курсовая работа; описание работы программы; полученные результаты при решении поставленной задачи (графики, таблицы, экранные формы, отчеты и т.д.); выводы; список литературы; приложение, содержащее текст разработанной программы (функции). 4.4. В процессе разработки программных средств при курсовом проектировании необходимо обеспечить дружественный интерфейс для пользователя (кнопки, панели, интерактивный режим, меню, систему помощи и т.д.). 4.5. Во время защиты курсовой работы студенты должны быть готовы продемонстрировать работоспособность разработанного ими программного продукта и ответить на вопросы преподавателя. 5. Оценка курсовой работы. Курсовая работа оценивается руководителем курсового проектирования по четырехбалльной системе (отлично, хорошо, удовлетворительно, неудовлетворительно) по каждому из следующих параметров: оценка результатов работы; оценка оформления и срока представления работы; оценка защиты результатов работы. Примечание: вместо защиты курсовой работы студент может сделать доклад на студенческой или иной научной конференции. В этом случае оценка защиты определяется руководителем курсового проектирования или заведующим кафедрой. Окончательная оценка работы определяется как среднее арифметическое всех оценок с округлением до ближайшего целого. 6. Список рекомендуемой литературы Буч Г. Дж. Объектно-ориентированный анализ и проектирование. – М.: Мир, 1998. – 620с. Дунаев С.П. Доступ к базам данных. – М.: МИФИ,1999. – 490с. Ахаян Р.В., Горев А.В. Эффективная работа с СУБД. – Санкт-Петербург: Питер, 1998. – 720с. Хомоненко А.Д. Основы современных компьютерных технологий. – Санкт-Петербург: КоронаПринт, 1998. – 448с. Шилдт Г. Самоучитель С++.2–е изд. /Пер. с англ.–СПб.: БХВ –Петербург, 1997.– 512с. Шилдт Г. Справочник программиста по С/С++.: Пер. с англ.: Учебное пособие. – М.: Издательский дом «Вильямс», 2000. – 448с. Страуструп Б. Язык программирования С++ (2–ред)./Пер. с англ.–М.: Радио и связь, 1995. – 352с. Культин Н.Б. С/С++ в задачах и примерах. – СПб.: БХВ- Петербург, 2001. – 288с. Visual C++ 5.0. Руководство разработчика.: Пер. с англ./ Д. Беннет, С. Маконин, В.В. Мейфилд и др. – К.; М.; СПб.: Диалектика, 1998. – 768с. Кнут, Дональд. Эрвин. Искусство программирования, том 3. Сортировка и поиск. 2-е изд. : Пер. с англ. : Уч. пос. — М. : Издательский дом "Вильямc" 2000. — 832 с. : ил. Вирт Н. Алгоритмы + структуры данных = программы: Пер. с англ.–М.: Мир, 1985. – 406 с. Вирт Н. Алгоритмы и структуры данных: Пер. с англ. – М.: Мир, 1989. – 360с. ПРИЛОЖЕНИЕ А (справочное) 1. Классы (язык C++) Важнейшие концепции объектно-ориентированного программирования (инкапсуляция, наследование, полиморфизм) отражены в новом типе данных – class, который был разработан в С++,. Классы служат для того, чтобы свойства (данные-члены) и методы для обработки этих свойств (функции-члены) объединить в один тип данных. Классы могут предоставить различные права доступа к отдельным своим членам, они могут создавать иерархии классов посредством наследования. Объектно-ориентированное программирование характеризуется тремя основными свойствами: 1. Инкапсуляция – это комбинирование записей с процедурами и функциями, манипулирующими полями этих записей. Объединение в одном классе свойств и методов называется инкапсуляцией. С данным термином тесно связаны понятия сокрытия информации и хорошо разработанного интерфейса. Классы должны общаться к своим свойствам преимущественно через свои методы. Эти методы образуют интерфейс между классом и программой. После выполнения описания класса для программиста важно, чтобы он мог использовать класс только через его интерфейс. О корректной обработке вызова функции и корректном поведении класса заботится сам класс. 2. Наследование. Определение класса и его дальнейшее использование для построения иерархии порожденных классов с возможностью для каждого порожденного класса, относящегося к иерархии, доступа к коду и данным всех порождающих классов. 3. Полиморфизм. Присваивание действию одного имени, которое затем совместно используется вниз и вверх по иерархии классов, причем каждый класс иерархии выполняет это действие способом, именно ему подходящим. Объявление класса: Тип_класса имя_класса [: базовые классы] { список_членов_класса } ; Базовые классы — список классов, разделяемых запятыми, элементы которых наследуются определяемым (производным) классом. Свойства класса Классы содержат собственные поля данных. Если образуется объект класса, то в его распоряжение предоставляется память для свойств (данных-членов). Каждый объект, следовательно, имеет собственную копию свойств. Одновременно создание объекта используется для того, чтобы инициализировать данные-члены. Эту задачу берет на себя конструктор класса. Классы задают свою собственную область определения, т.е. свойства уничтожаются вместе с объектом, эти действия выполняет деструктор класса. Свойства класса: могут быть описаны с атрибутом доступа public, protected или private; могут быть описаны как static; статические члены класса не копируются при создании объекта, а остаются в единственном экземпляре для всех объектов класса; статические члены класса должны определяться где-либо в программе, но не в рамках описания класса, и к ним можно обращаться не только через объекты, но и через имена классов: имя_класса:: static_член_класса; могут быть описаны как const; члены класса, которые описываются как const, могут быть инициализированы только один раз и после этого больше не могут быть изменены (следовательно, они должны инициализироваться конструктором); описание класса заканчивается точкой с запятой. Классы, описываемые в рамках определения какой-либо функции, называются локальными. Внутри класса разрешается определять типы, следовательно, один класс может быть описан внутри другого. Методы класса Методы класса: имеют доступ ко всем свойствам класса; представляют единственную возможность доступа к private-свойствам своего класса; могут быть описаны как public, protected или private; могут быть описаны как static; могут быть описаны как const; методы класса, описанные как const, не могут изменять значения свойств и могут возвращать указатель или ссылку только на свойства класса, описанные как const. Они являются единственными методами класса, которые могут вызываться для свойства-константы; методы могут быть определены как внутри класса, так и за его рамками. Атрибуты доступа Атрибуты доступа public, private и protected регулируют возможность доступа к членам класса изнутри или извне класса (табл.1). Следовательно, они являются важным инструментом инкапсуляции. Прежде всего, с помощью этих атрибутов доступ к отдельным членам класса может быть ограничен. Таблица 1 Атрибуты доступа к членам класса
Специальные методы класса Конструктор выделяет память для объекта класса и инициализирует данные-члены класса. Он вызывается автоматически для каждого объекта. Для того чтобы каждый класс имел в своем распоряжении конструктор, компилятор классов, кроме явно объявленного конструктора, предоставляет конструктор по умолчанию. Создание объекта регулируется путем описания одного или нескольких собственных конструкторов. Для конструкторов существует несколько важных правил: Имя конструктора совпадает с именем его класса; Конструктор не имеет никакого возвращаемого значения (даже void); Классу без конструктора предоставляется конструктор по умолчанию; Если конструктор описан явно, то конструктор по умолчанию не генерируется; Конструкторы могут быть перегружены; Перегрузка чаще всего используется для передачи конструктору аргументов, предназначенных для инициализации данных-членов класса; Конструкторы не наследуются. Деструкторы вызываются автоматически, если объекты классов становятся недействительными (например, при выходе за область определения или при вызове оператора delete для указателя на объект класса). Деструктор уничтожает объект и освобождает зарезервированную память. Для деструкторов действительны правила, аналогичные правилам для конструкторов: Имя деструктора также совпадает с именем его класса, но предваряется символом «» (тильдой): имя_класса() Деструктор не имеет никакого возвращаемого значения (даже void); Деструктор не может быть описан с ключевым словом static и const; Если в классе деструктор явно не описан, то компилятор генерирует деструктор по умолчанию; Деструктор не наследуется; Указатель на деструктор не может быть определен. Деструкторы отличаются от конструкторов следующими особенностями: Деструкторам не могут передаваться аргументы, следовательно: деструкторы могут переопределяться, но не перегружаться, деструкторы могут описываться как virtual, деструкторы классов, производных от базовых классов, имеющих виртуальные деструкторы, автоматически становятся виртуальными; Деструкторы могут вызываться явно; Деструктор в некоторых случаях должен быть обязательно задан явно (например, если область памяти выделена с помощью оператора new). |