алгоритмизация и программирование

advertisement
АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ
Учебная программа дисциплины
Федеральное агентство по образованию
Владивостокский государственный университет экономики
и сервиса
АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ
Учебная программа дисциплины
по специальности
230201.65 Информационные системы и технологии
Владивосток
Издательство ВГУЭС
2014
ББК **.**
Учебная программа по дисциплине «Алгоритмизация и
программирование»
составлена
в
соответствии
с
требованиями ГОС ВПО (для специальности 230201.65).
Предназначена для студентов специальности 230201.65
Информационные системы и технологии.
Составитель: Гриняк В.М., канд. техн. наук, доцент,
кафедра
Информационных
систем
и
прикладной
информатики.
Утверждена на заседании кафедры ИСПИ от 19.03.2014 г.,
протокол № 9
Утверждена на заседании Учёного совета института ИИБС
от 29.04.2014г., протокол № 7
©
Издательство Владивостокского
государственного университета
экономики и сервиса, 2014
Введение
К числу наиболее актуальных проблем в
программировании относятся вопросы выбора и реализации
алгоритмов решения базовых задач. Причины введения
дисциплины «Алгоритмизация и программирование»
заключаются в необходимости знакомства слушателей с
базовыми задачами программирования и основными
структурами данных, применяющихся в системном и
прикладном программировании.
Изучение
дисциплины
«Алгоритмизация
и
программирование» тесно связано с такими дисциплинами,
как «Программирование», «Информатика». Для изучения
дисциплины необходимы знания в области математики в
объеме университетского курса. Знания и навыки,
получаемые студентами в результате изучения дисциплины,
необходимы для таких дисциплин как «Технология
программирования», «Параллельное программирование».
Особенность изучаемой дисциплины состоит в том,
что студенты получают как теоретические знания, так и (в
основном) практические навыки в области кодирования.
Преподавание дисциплины ведется с использованием языка
С++, основного языка профессиональной разработки
программ. Лабораторные занятия по дисциплине связаны с
использованием средств вычислительной техники.
Данная программа построена в соответствии с
требованиями
Государственного
образовательного
стандарта 230201.65 Информационные системы и
технологии.
1. Организационно-методические указания
1.1 Цели и задачи изучения дисциплины
Целью изучения дисциплины «Алгоритмизация и
программирование» является теоретическая и практическая
подготовка студентов в области программирования в такой
степени, чтобы они могли выбирать необходимые
структуры для представления данных и алгоритмы их
эффективной обработки.
Основные задачи изучения дисциплины:
- формирование у студентов знаний о представлении
данных в памяти компьютера;
- ознакомление с базовыми структурами данных: массивы,
списки, стеки, очереди, деревья, множества, графы;
- выработка практических навыков правильного выбора
структуры данных для эффективного решения задач
обработки данных;
- изучение рекурсивного метода решения задач и условий
его эффективного применения.
- знакомство с базовыми задачами программирования.
1.2 Перечень компетенций, приобретаемых при
изучении дисциплины
Изучение дисциплины формирует следующие
профессиональные компетенции:
умение формализовать
прикладную
задачу и
интерпретировать её в терминах программирования;
- умение декомпозировать исходную задачу до уровня
базовых структур и алгоритмов их обработки;
- умение выбрать адекватный задаче метод реализации
типовых алгоритмов обработки данных.
При этом студент должен знать базовые структуры
данных, их преимущества и недостатки, алгоритмы работы
с базовыми структурами данных, а также уметь описать
задачу обработки данных, обосновать выбор структуры
представления данных, выбрать алгоритмы обработки
данных, описать решение задачи с использованием
модульного или объектно-ориентированного подхода,
реализовать задачу на языке программирования C, C++ или
Pascal.
1.3. Основные виды занятий и особенности их
проведения
Дисциплина «Алгоритмизация и программирование»
изучается студентами очной формы обучения в четвертом
семестре. Общее количество аудиторных часов – 34, из них:
лекций – 17 час, лабораторных работ – 17 часа. На
самостоятельную работу отводится 40 час. Итоговая
аттестация – зачет.
1.4 Взаимосвязь аудиторной и самостоятельной
работы студентов при изучении дисциплины
При
проведении
лекций
учитывается,
что
значительная часть материала. На лекциях внимание
акцентируется на определениях и простых примерах
решения задач обработки структур данных. Изучение
сложных вопросов выносится на лабораторные занятия и на
курсовое проектирование.
Практические занятия компьютерные, проводятся с
использованием программного пакета Turbo C++ Explorer
для изучения примеров работы со структурами данных и
решения задач. Это дает возможность формировать
необходимые знания и практические навыки.
Контроль усвоения материала проводится по
результатам выполнения экспресс-контрольных работ и
индивидуальных домашних заданий. Для помощи студенту
в освоении теоретического материала лекционных занятий
и
самостоятельной
работы
предусматриваются
консультации ведущего преподавателя.
Для защиты лабораторных работ в рамках
самостоятельной работы студента предусмотрено время для
оформления отчета и освоения теоретического материала
для ответов на контрольные вопросы.
Помимо посещения лекций и лабораторных занятий
для освоения теоретического материала и приобретения
навыков проектирования и обработки сложных структур
данных предусматривается выполнение курсового проекта в
рамках самостоятельной работы студента.
1.5 Виды контроля и отчетности по дисциплине
В ходе изучения дисциплины предусматриваются
следующие виды контроля знаний студентов: текущий,
промежуточный .
Текущая аттестация знаний студентов включает:
- экспресс контрольные работы на лекционных занятиях;
- защиту отчетов по выполняемым лабораторным работам;
- промежуточную защиту курсовых проектов;
- оценку знаний и умений студентов при проведении
консультаций по лекционным и лабораторным занятиям.
Текущие аттестации проводятся в соответствии с
Положением о рейтинговой системе оценки успеваемости
студентов
во
Владивостокском
государственном
университете экономики и сервиса. Предусматривается две
текущие аттестации на 78 и 1314 неделях семестра.
Текущая аттестация
может
быть проведена в форме устного или письменного опроса
или теста по разделам дисциплины, изученных студентом в
период между аттестациями, при этом учитывается
количество выполненных и защищенных лабораторных
работ, а также количество выполненных контрольных работ
за отчетный период.
Форма
аттестации
предлагается
ведущим
преподавателем и утверждается на заседании кафедры.
Результаты
аттестации
заносятся
в
ведомость
установленной формы.
Промежуточная аттестация проводится в форме
зачета в четвертом семестре. Условием получения зачёта
студентом является успешное прохождение двух текущих
аттестаций в соответствии с требованиями Положения о
рейтинговой системе оценки успеваемости студентов во
ВГУЭС. Кроме того, студент должен выполнить и защитить
все лабораторные работы.
1.6 Техническое и программное обеспечение
дисциплины
При изучении дисциплины на лекционных занятиях
используется презентационное оборудование. Практические
занятия
проводятся
в
компьютерном
классе
с
установленным программным обеспечением Turbo C++
Explorer.
2. Содержание курса
2.1 Перечень тем лекционных занятий
Введение Структуры данных и алгоритмы их
обработки как способ эффективного решения задач
программирования. Модульный подход и его преимущества
в разработке программного обеспечения. Предмет и задачи
дисциплины «Алгоритмизация и программирование», ее
место в подготовке инженера. Структура дисциплины.
Тема 1. Структуры данных Структуры данных:
классификация; способы размещение элементов; основные
операции над структурами.
Тема 2. Нелинейные структуры данных Деревья:
ориентированные,
упорядоченные
и
бинарные;
представление
деревьев
в
памяти
компьютера:
последовательное и связанное размещение элементов;
операции над деревьями.
Тема 3. Задачи сортировки Задачи сортировки;
внутренняя и внешняя сортировки; алгоритмы сортировки;
анализ сложности и эффективности алгоритмов поиска и
сортировки.
Тема 4. Быстрый поиск Быстрый поиск: бинарный
и последовательный поиски в массивах, хеширование.
Тема 5. Использование деревьев в задачах поиска
Использование деревьев в задачах поиска: бинарные,
случайные бинарные, оптимальные и сбалансированные
деревья поиска.
Тема 6. Графы и их представление в компьютере
Графы и их представление в компьютере; алгоритмы,
оперирующие со структурами типа графа
Тема 7. Алгоритмы на графах Алгоритмы поиска
на графах: исчерпывающий поиск: перебор с возвратом,
метод ветвей и границ, динамическое программирование.
Тема 8. Файлы Файлы: организация и обработка,
представление деревьями: B-деревья.
Тема 9. Теория сложности алгоритмов Теория
сложности алгоритмов: NP-сложные и труднорешаемые
задачи.
2.2 Перечень заданий для лабораторных работ.
1. Описать три функции - CreateMatrix(), GetElement(),
SetElement(),
которые
бы
реализовывали
соответственно: создание в памяти двумерного
массива со смежным размещением элементов типа
2.
3.
4.
5.
6.
7.
8.
int, чтение значения элемента с индексом i, j,
присвоение значения элементу с индексом i, j. При
этом значения границ изменения индексов n1, k1, n2,
k2 должны быть произвольно заданы в программе.
Описать три функции - CreateString(), DeleteString() и
ConcString(),
которые
бы
реализовывали
соответственно: создание строки, уничтожение
строки и конкатенацию (склейку) двух строк. Строки
при этом представить в виде вектора переменной
длины с признаком конца.
Описать функции - CreateList(), DeleteList(),
AddToList(), InputInList(), RemoveFromList(), которые
бы
реализовывали
соответственно:
создание
односвязного списка, его уничтожение, добавление
элемента в конец списка, вставку элемента внутрь
списка и удаление элемента с заданным номером.
Реализовать алгоритм сортировки пузырьковым
методом, построить зависимость среднего числа
сравнений, необходимых для завершения сортировки
от числа элементов в структуре.
Реализовать алгоритм двоичного поиска. Сравнить
его эффективность с алгоритмом прямого перебора.
Написать программу поиска всех замкнутых
маршрутов длины n<15 по рёбрам треугольника abc.
Длину ребра принять равной 1. Начальная и
конечная точка искомых маршрутов – вершина a.
Реализовать
алгоритм
ближайшего
соседа
построения минимального остовного дерева графа.
Реализовать алгоритм определения кратчайшего
пути на графе, если заданы две любые его вершины.
3. Методические рекомендации по изучению курса
3.1 Перечень и тематика самостоятельных работ
студентов,
методические
указания
и
формы
отчетности
В рамках общего объема часов, отведенных для
изучения дисциплины, предусматривается выполнение
следующих видов самостоятельных работ студентов (СРС):
контрольные работы (индивидуальные домашние задания),
самостоятельное изучение теоретического материала с
самоконтролем по приведенным ниже вопросам, изучение
теоретического материала при подготовке к защите
лабораторных работ, итоговое повторение теоретического
материала, выполнение курсового проекта.
Для самостоятельного изучения дисциплины выносится
часть материала по всем темам дисциплины с
самоконтролем по контрольным вопросам и возможностью
консультации у ведущего преподавателя общим объемом 46
часов СРС.
Для выполнения лабораторных работ в соответствии с
разделом 2.2 настоящей учебной программы студент
должен предварительно освоить теоретический материал
соответствующих тем.
Подготовленная курсовая работа должна содержать
набор программ и пояснительную записку, оформляемых в
соответствии со стандартами ВГУЭС. Целью работы
является закрепление теоретических знаний и приобретение
практических навыков в соответствии с содержанием
дисциплины. С учетом самостоятельного изучения
теоретического материала с контролем на защите работы
объем СРС составляет 40 часов.
До
выхода
на
сессию
студенты-заочники
самостоятельно изучают материал тем 1 - 9 с
самоконтролем по приведенным вопросам с объемом СРС
72 часа.
На сессии студенты выполняют две лабораторные
работы из перечня раздела 2.2 настоящей рабочей
программы.
Студент
должен
предварительно
самостоятельно
освоить
теоретический
материал
соответствующих разделов. Для защиты работы он должен
знать теоретический материал и продемонстрировать
практические знания.
3.2 Перечень тем курсовых работ:
1. Разработать приложение, представляющее собой простой
графический
редактор,
реализующий
следующие
пользовательские функции:
- загрузка изображения из файла или создание
«нового» графического образа;
- редактирование изображения с возможностью
прорисовки на нём точек, отрезков, прямоугольников
и окружностей с выбором их цвета;
- «отмена» последнего изменения изображения;
- сохранение изображения в файл стандартного
графического формата (например, *.bmp).
2. Разработать приложение, предназначенное для
демонстрации работы алгоритма пузырьковой сортировки,
реализующее следующие функции:
- загрузка из файла исходного массива чисел;
- пошаговое выполнение алгоритма (пользователь
нажимает клавишу «далее»);
- на каждом шаге алгоритма - отображение текста (или
блок-схемы) алгоритма с выделением выполняемого
в настоящий момент шага;
- на каждом шаге алгоритма - отображение состояния
сортируемого массива;
- при завершении сортировки выдачу сообщения
пользователю, что сортировка завершена.
3. Разработать приложение, предназначенное для
демонстрации работы алгоритма сортировки вставками,
реализующее следующие функции:
- загрузка из файла исходного массива чисел;
- пошаговое выполнение алгоритма (пользователь
нажимает клавишу «далее»);
- на каждом шаге алгоритма - отображение текста (или
блок-схемы) алгоритма с выделением выполняемого
в настоящий момент шага;
- на каждом шаге алгоритма - отображение состояния
сортируемого массива;
- при завершении сортировки выдачу сообщения
пользователю, что сортировка завершена.
4. Разработать приложение, предназначенное для
демонстрации работы алгоритма сортировки Флойда,
реализующее следующие функции:
- загрузка из файла исходного массива чисел;
- пошаговое выполнение алгоритма (пользователь
нажимает клавишу «далее»);
- на каждом шаге алгоритма - отображение текста (или
блок-схемы) алгоритма с выделением выполняемого
в настоящий момент шага;
- на каждом шаге алгоритма - отображение состояния
сортируемого массива;
- при завершении сортировки выдачу сообщения
пользователю, что сортировка завершена.
5. Разработать приложение «робот в лабиринте»,
реализующее следующие функции:
- загрузку из файла конфигурации лабиринта,
отражение лабиринта на экране;
- установку первоначального положения робота в
лабиринте;
- «перемещение» робота по лабиринту с помощью
клавиш или кнопок на форме, при этом должна
учитываться конфигурация лабиринта (робот не
может проходить сквозь стены).
6. Разработать приложение типа «Стреляющий танк».
Должна быть предусмотрена возможность регулировки
пользователем положения «танка», угла наклона его
«орудия» и положения «мишени». Суть работы программы
состоит в том, чтобы пользователь поразил «мишень» из
«танка» за то или иное число выстрелов, меняя угол
наклона его «орудия». Снаряды из орудия летят согласно
закону движения тела без трения о воздух соответствующей
задачи физики.
7. Разработать приложение для демонстрации физического
опыта «математический маятник». Пользователь должен
иметь возможность регулировать высоту, с которой
начинается качание маятника и длину его плеча. Движение
маятника должно подчиняться закону движения идеального
математического маятника соответствующей задачи
физики.
8. Разработать приложение для демонстрации физического
опыта «колебание груза на пружине по горизонтали».
Пользователь должен иметь возможность регулировать
расстояние, на которое оттягивается пружина, и массу груза
(жёсткость пружины задаётся постоянной). Движение груза
должно подчиняться закону движения груза на пружине без
трения соответствующей задачи физики.
9. Разработать приложение типа «звёздное небо».
Программа должна отображать «мерцающие» звёзды по
типу «одна звезда появилась – одна звезда погасла», так, что
общее количество звёзд остаётся постоянным. Цвет вновь
появляющихся звёзд должен выбираться случайным
образом. Должна быть предусмотрена возможность
регулировки количества «звёзд» на экране и частоты их
«мерцания».
10. Разработать приложение для демонстрации видов
графиков основных алгебраических функций: y = ax^2 + bx
+ c, y = ax^3 + bx^2 + cx +d, y = a*sin x + b, y = a*cos x + b,
y= a* tg x + b, y = a*log n x + b, y = ax + b. Графики должны
«красиво» отображаться на осях координат с возможностью
регулирования пользователем коэффициентов a, b, c, d, n и
масштаба.
11. Разработать приложение типа «наполни из бутылки три
стакана». Пользователь должен иметь возможность
«включать» и «отключать» наполнение каждого из трех
стаканов и видеть, сколько воды в каждом стакане и
сколько осталось в бутылке. После того, как вода в бутылке
закончилась, пользователю выдается сообщение, удалось
или не удалось ему поделить воду «поровну».
12.
Разработать
приложение
типа
«матричный
калькулятор».
Программа
должна
предоставлять
пользователю возможность задать размерность матриц,
интерактивно внести коэффициенты матриц и выполнить
следующие операции: сложение матриц, вычитание матриц,
умножение матриц, умножение матрицы на число,
возведение матрицы в степень.
13. Дано множество значений скалярной величины x (см.
список). Проанализировать множество значений и выделить
из него 4 кластера. Результатом работы являются
найденные значения центров кластеров и принадлежащие
им элементы данных.
14. Дано множество значений векторной величины x – точек
на плоскости (см. список). Проанализировать множество
значений и выделить из него 3 кластера. Результатом
работы являются найденные значения центров кластеров и
принадлежащие им элементы данных.
15. Дано множество значений векторной величины x – точек
в пространстве (см. список). Проанализировать множество
значений и выделить из него 2 кластера. Результатом
работы являются найденные значения центров кластеров и
принадлежащие им элементы данных.
16.
Разработать
2
функции,
переводящие
последовательность символов в целое и вещественное
число, либо возвращающие 0 в случае невозможности
процедуры преобразования. При разработке алгоритма
использовать встроенные функции преобразования типа
atoi(), atof(), StrToInt(), StrToFloat() и т.п. нельзя. Создать
программу-оболочку, демонстрирующую работу этих
функций.
17. Разработать функцию – генератор простых чисел,
воспользовавшись первой формулой Вилланса. Создать
программу-оболочку, красиво демонстрирующую работу
этой функции.
18. Разработать функцию – генератор простых чисел,
воспользовавшись третьей формулой Вилланса. Создать
программу-оболочку, красиво демонстрирующую работу
этой функции.
19. Разработать функцию – генератор простых чисел,
воспользовавшись четвертой формулой Вилланса. Создать
программу-оболочку, красиво демонстрирующую работу
этой функции.
20. Разработать функцию – генератор простых чисел,
воспользовавшись
формулой
Вормелла.
Создать
программу-оболочку, красиво демонстрирующую работу
этой функции.
3.3 Методические рекомендации по работе с
литературой
Для изучения теоретического материала по
дисциплине можно предложить классические учебники [13], содержащие сведения о базовых структурах данных и
основных алгоритмах. Параллельно с ними для изучения
тем 1-5 рекомендуется обратиться к учебнику [4], где ряд
вопросов изложен в очень доступной форме. Для
закрепления материала и глубокой проработки тем 2-5
рекомендуется классический труд [5]. который выгодно
отличается строгостью изложения и широким применением
математического аппарата, вместе с тем она доступна
студентам первого курса.
При выполнении лабораторных работ и курсовых
работ можно обратиться к изданиям [1] и [5-8].
Для подготовки к зачету и интенсификации
самостоятельной
работы
студентам
предлагается
презентация учебного материала и конспект лекций,
находящиеся на портале раздаточных материалов ВГУЭС.
3.4 Контрольные вопросы для самостоятельной
оценки качества освоения дисциплины
CТРУКТУРЫ ДАННЫХ
1. Что понимается под структурой данных?
2. Что понимается под понятиями логической и
физической структуры данных?
3. Какие два основных типа структур выделяются в
зависимости от характера взаимного расположения
их элементов в памяти?
4. Какие типы структур выделяются по признаку
изменчивости количества их элементов и связей
между ними?
5. Какие основные операции определены для любой
структуры данных?
6. В чём состоит смысл операции обновления?
7. В чём состоит логическая структура вектора?
8. Какие существуют способы представления векторов
в памяти машины?
9. Что такое дескриптор?
10. В чём состоит логическая структура массива?
11. В чём состоит принцип физического размещения
массива с помощью векторов Айлиффа?
12. В чём состоит физическая структура записи?
13. Что такое стек?
14. В чём состоит операция определения текущего числа
элементов в стеке?
15. Что такое очередь?
16. Какие существуют способы размещения очереди в
памяти машины (как полустатической структуры)?
17. Какие существуют способы физического размещения
строк?
В чём состоят операции включения и исключения в
связных списках?
НЕЛИНЕЙНЫЕ СТРУКТУРЫ ДАННЫХ
18. Что называется деревом?
19. В чём состоит принцип связного размещения
деревьев памяти машины?
20. В чём состоит принцип размещения деревьев на
смежной памяти?
21. Какие существуют основные операции над
деревьями?
22. В чём состоит операция включения/исключения
элемента для деревьев, реализуемых на смежной
памяти?
23. В чём состоит операция включения/исключения
элемента для деревьев, реализуемых на связной
памяти?
ЗАДАЧИ СОРТИРОВКИ
24. В чём состоит задача сортировки? Что является
критерием эффективности алгоритма поиска?
25. В чём состоит метод «пузырьковой сортировки»?
26. В чём состоит метод «сортировки вставками»?
27. В чём состоит метод «сортировки перечислением»?
28. В чём состоит метод «сортировки всплытием
Флойда»?
29. Какова сложность перечисленных алгоритмов
сортировки?
БЫСТРЫЙ ПОИСК
30. В чём состоит задача поиска? Что является
критерием эффективности алгоритма поиска?
31. В чём состоит алгоритм последовательного поиска?
32. В чём состоит алгоритм двоичного поиска?
33. Какова сложность перечисленных алгоритмов
поиска?
ИСПОЛЬЗОВАНИЕ ДЕРЕВЬЕВ В ЗАДАЧАХ ПОИСКА
34. В чём состоит принцип использования деревьев в
задачах поиска?
35. Что называется деревом сравнений?
36. Как используются деревья сравнений в задачах
поиска?
ГРАФЫ И ИХ ПРЕДСТАВЛЕНИЕ В КОМПЬЮТЕРЕ.
АЛГОРИТМЫ ПОИСКА НА ГРАФАХ.
37. Какие имеются основные подходы к представлению
структур типа графа в памяти компьютера?
38. Какие типы задач оперируют со структурами типа
граф?
39. В чём состоит задача поиска кратчайшего пути на
графе? Алгоритмы её решения?
40. В чём состоит задача оптимального обхода всех
вершин графа? Алгоритмы её решения?
ФАЙЛЫ
41. В чём состоит принцип размещения данных на
дисковых накопителях?
42. С помощью структур какого типа размещаются
данные на дисках посредством файловой системы
типа FAT?
43. Что такое кластер?
4. Список рекомендованной литературы
1.
2.
3.
4.
Основная
Уоррен
Г.
Алгоритмические
трюки
для
программистов / Г. Уоррен. – М.: Издательский дом
«Вильямс», 2007.
Алексеев В.Е. Графы и алгоритмы. Структуры
данных. Модели вычислений: учебник для студ.
вузов. / В. Е. Алексеев, В. А. Таланов. - М.: БИНОМ,
2006.
Макконелл Дж. Основы современных алгоритмов:
учебное пособие для студ. вузов. / Д. Макконнелл,
пер. с англ. под ред. С. К Ландо, доп. М. В. Ульянова.
- 2-е изд., доп. - М. : Техносфера, 2006.
Давыдов В.Г. Программирование и основы
алгоритмизации: учебное пособие для студ. вузов /
В. Г. Давыдов. - 2-е изд., стереотип. - М.: Высш. шк.,
2005.
Дополнительная
5. Кнут Д. Искусство программирования для ЭВМ. Т3.
Сортировка и поиск. / Д. Кнут. - М.: Мир, 1978.
6. Холл П. Вычислительные структуры. Введение в
нечисловое программирование. / П. Холл. - М.: Мир,
1978.
7. Кормен Т. Алгоритмы: построение и анализ. / Т.
Кормен, Ч. Лейзерстон, Р. Ривест, К. Штайн. - М.:
Издательский дом «Вильямс», 2007.
8. Микрюков
В.Ю.
Алгоритмизация
и
программирование: учебное пособие для студ.
образоват. учреждений сред. проф. образования. / В.
Ю. Микрюков. - Ростов Н/Д : Феникс, 2007.
Download