6108
.pdfМИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Нижегородский государственный архитектурно-строительный университет»
Никитенкова С.П.
ПРОГРАММИРОВАНИЕ
Учебно-методическое пособие по подготовке к лекциям, практическим занятиям
(включая рекомендации по организации самостоятельной работы), по выполнению курсовой работы
для обучающихся по дисциплине «Программирование» по направлению подготовки 09.03.03 Прикладная информатика
профиль Прикладная информатика в экономике
Нижний Новгород
2022
УДК 004.9
Никитенкова С.П./ Программирование: учебно-методическое пособие /С.П. Никитенкова; Нижегородский государственный архитектурно-строительный университет – Нижний Новгород: ННГАСУ, 2022. –26с.– Текст: электронный.
В настоящем учебно-методическом пособии по дисциплине «Программирование» даются конкретные рекомендации учащимся для освоения как основного, так и дополнительного материала дисциплины и тем самым способствующие достижению целей, обозначенных в учебной программе дисциплины. Цель учебно-методического пособия — это помощь в усвоении лекций, в подготовке к практическим занятиям, а также в написании курсовой работы.
Учебно-методическое пособие предназначено для обучающихся в ННГАСУ по дисциплине «Программирование» по направлению подготовки 09.03.03 Прикладная информатика, профиль Прикладная информатика в экономике.
© С.П. Никитенкова, 2022
© ННГАСУ, 2022
2
Оглавление |
|
|
1. Общие положения .......................................................................................................................... |
4 |
|
1.1 |
Цели изучения дисциплины и результаты обучения ........................................................... |
4 |
1.2 |
Содержание дисциплины........................................................................................................ |
5 |
1.3 |
Порядок освоения материала ................................................................................................. |
9 |
2. Методические указания по подготовке к лекциям ................................................................... |
10 |
|
2.1 |
Общие рекомендации по работе на лекциях ...................................................................... |
10 |
2.2 |
Общие рекомендации при работе с конспектом лекций ................................................... |
10 |
2.3 |
Общие рекомендации по изучению материала лекций ..................................................... |
10 |
2.4 |
Контрольные вопросы .......................................................................................................... |
14 |
3. Методические указания по подготовке к практическим занятиям ......................................... |
16 |
|
3.1 |
Общие рекомендации по подготовке к практическим занятиям...................................... |
16 |
3.2 |
Примеры задач для практических занятий ......................................................................... |
16 |
Задача 1............................................................................................................... |
16 |
|
4. Методические указания по организации самостоятельной работы........................................ |
20 |
|
4.1 |
Общие рекомендации для самостоятельной работы ......................................................... |
20 |
4.2 |
Темы для самостоятельного изучения ................................................................................ |
22 |
4.3 |
Учебно-методическое обеспечение самостоятельной работы.......................................... |
23 |
4.4 |
Задания для самостоятельной работы ................................................................................. |
23 |
5. Методические указания по организации курсовых работ ....................................................... |
24 |
3
1. Общие положения
1.1 Цели изучения дисциплины и результаты обучения
Основными целями освоения учебной дисциплины «Программирование» являются: формирование у обучающихся базовых знаний по алгоритмизации, программированию и использованию инструментальных средств разработки программ, необходимые для успешного освоения дисциплин профессионального, математического и естественнонаучного цикла (базовых и вариативных частей), изучение которых связано с применением средств информационно-коммуникационных технологий, созданием эффективных алгоритмов решения задач, разработкой программного обеспечения для различных предметных областей. Освоение дисциплины должно обеспечить базовые знания в области алгоритмизации и программирования, которые дадут возможность выпускнику успешно работать в сфере организации процессов жизненного цикла информационных систем, обладать универсальными и предметно-специализированными компетенциями.
В процессе освоения дисциплины студент должен
Знать:
основные конструкции языков программирования высокого уровня,
основы построения схем алгоритмов, принципы работы компиляторов,
особенности и синтаксические конструкции объектно-ориентированного программирования;
классификацию языков программирования и тенденции их развития;
парадигмы программирования, современные технологии разработки программного обеспечения, процесс разработки, возможности современных языков программирования;
Уметь:
уметь квалифицированно и обоснованно выбрать язык программирования для оптимального решения поставленной задачи,
решать задачи, используя различные методы разработки алгоритмов и выбирая наиболее подходящие алгоритмы и средства их реализации в зависимости от постановки задачи;
Владеть:
методами и инструментальными средствами разработки программ на языке программирования высокого уровня, их тестирования и отладки, работы в интегрированных средах программирования;
навыками самостоятельного решения задач, творческого подхода к поставленной задаче, сформированной способностью к изучению новых средств разработки программ.
Данная дисциплина позволит студентам не только систематизировать полученные теоретические знания, укрепить исследовательские навыки, но и даст возможность ориентироваться в новом предметном поле экономической информатики.
4
1.2 Содержание дисциплины
№ |
Наименование раздела дисципли- |
Содержание раздела |
п/п |
ны |
дисциплины |
|
|
|
1 |
Введение в программирование |
Обзор тенденций развития современных язы- |
|
|
ков программирования. Парадигмы програм- |
|
|
мирования. Императивное (процедурное) про- |
|
|
граммирование. Структурное программирова- |
|
|
ние. Функциональное программирование. Ло- |
|
|
гическое программирование. Объектноориен- |
|
|
тированное программирование Выбор языка |
|
|
программирования для решения задач в кон- |
|
|
кретной предметной области. |
|
|
|
2 |
Основы алгоритмизации |
Основные принципы алгоритмизации, процесс |
|
|
работы программы, обработка компьютером |
|
|
данных. Этапы разработки программного |
|
|
обеспечения. Жизненный цикл программного |
|
|
продукта. |
|
|
|
3 |
Операторы и инструкции языка |
Понятие оператора. Понятие блока. Оператор |
|
программирования |
условия. Использование логических операций. |
|
|
Приоритет операций. Оператор выбора. Опера- |
|
|
тор цикла: циклы с предусловием, с постусло- |
|
|
вием, с параметром. |
|
|
|
4 |
Функции |
Декомпозиция задачи на подзадачи. Програм- |
|
|
мирование сверху вниз и снизу вверх. Входные |
|
|
и выходные данные подпрограммы. Область |
|
|
видимости имен. Локальные и глобальные |
|
|
идентификаторы Вызов процедуры и функции. |
|
|
Аргументы формальные и фактические. Струк- |
|
|
турная декомпозиция. |
|
|
|
5 |
Массивы |
Массивы одномерные и многомерные. Дина- |
|
|
мические массивы. Типовые задачи с массива- |
|
|
ми: доступ к элементу, обход элементов, ини- |
|
|
циализация элементов. Представление тексто- |
|
|
вой информации. Функции для работы со |
|
|
строками |
|
|
|
6 |
Указатели. Операции над указате- |
Понятие указателя. Операции получения адре- |
|
лями. |
са объекта и разыменования указателя. Опера- |
|
|
ции над указателями. Алгоритмы обработки |
|
|
числовых массивов с использованием указате- |
|
|
лей. |
|
|
|
|
|
5 |
7 |
Файлы. Модули |
Понятие файла. Текстовые и бинарные файлы. |
||
|
|
Последовательный и |
произвольный методы |
|
|
|
доступа к файлам. Заголовочный файл и функ- |
||
|
|
ции для организации последовательного до- |
||
|
|
ступа. Режимы открытия файлов. Особенности |
||
|
|
произвольного доступа к элементам бинарных |
||
|
|
файлов. Алгоритмы формирования, просмотра |
||
|
|
и корректировки файлов. |
|
|
|
|
|
||
8 |
Структуры |
Пользовательский тип данных (структура). |
||
|
|
Статические и структуры данных. Описание. |
||
|
|
Примеры использования. Динамические струк- |
||
|
|
туры данных: списки, очереди, деревья. Общие |
||
|
|
свойства динамических структур данных. |
||
|
|
|
||
9 |
Объектно-ориентированная пара- |
Абстракция, инкапсуляция, наследование по- |
||
|
дигма программирования. |
лиморфизм |
|
|
|
|
|
|
|
10 |
Классы, объекты, интерфейсы |
Определение класса. |
Объекты. |
Создание и |
|
|
уничтожение объектов класса. Конструкторы и |
||
|
|
деструкторы. Способы реализации инкапсуля- |
||
|
|
ции. Интерфейс и реализация контейнерных |
||
|
|
классов для моделирования структур данных. |
||
|
|
Статические члены объектов |
|
|
|
|
класса. Вложенные и локальные классы. При- |
||
|
|
меры описания и использования классов. Се- |
||
|
|
риализация/ десериализация |
|
|
|
|
|
||
11 |
Наследование |
Организация иерархии классов. Интерфейсы. |
||
|
|
Модификаторы доступа. Абстрактные классы |
||
|
|
и виртуальные функции. Множественное |
||
|
|
наследование. Проблема множественного |
||
|
|
наследования. Виртуальное наследование как |
||
|
|
средство разрешения коллизий |
|
|
|
|
|
||
12 |
Полиморфизм |
Виды полиморфизма. Статический полимор- |
||
|
|
физм. Перегрузка функций, методов, операто- |
||
|
|
ров и т.д. |
|
|
|
|
Динамический полиморфизм. |
Виртуальные |
|
|
|
функции и методы. |
|
|
|
|
|
||
13 |
Массивы и Коллекции. |
Преимущество коллекций. Стандартизация об- |
||
|
|
работки групп объектов с помощью коллекций. |
||
|
|
Интерфейсы коллекций |
|
|
|
|
|
||
14 |
Графика. 2D и 3D графика. Визуа- |
Основные графические классы. Графические |
||
|
лизация данных. Анимация |
примитивы. Методы |
класса Graphics. Постро- |
|
|
|
ение графиков |
|
|
|
|
|
||
15 |
Многопоточное программирова- |
Потоки и процессы. Класс Thread. Назначение |
||
|
ние |
приоритета потока. Управление и синхрониза- |
||
|
|
|
|
|
6
ция потоков
Материал дисциплины сгруппирован по следующим разделам: 1. Введение в программирование.
Понятия языка программирования. Многообразие языков программирование. История и эволюция языков программирования. Основные понятия программирования. Понятие алгоритма. Жизненный цикл программного обеспечения. Парадигмы программирования: структурного программирования, объектно-ориентированного программирования, функционального программирования, логического программирования. Тенденции развития языков программирования.
2. Основы алгоритмизации.
Этапы разработки программы. Определение цели задачи, ее содержание и общий подход к решению, эффективность используемого алгоритма. Определение исходных данных и результат, ограничения на их значения. Теорема Бёма — Якопини. Разработка или выбор алгоритма решения задачи. Формирование общей структуры программы с последующей детализацией и разбивкой на подпрограммы, способ хранения информации (набор переменных, массивов и т. п.). Кодирование
— запись алгоритма на языке программирования. Отладка и тестирование программы. Анализ результатов.
3. Операторы и инструкции языка программирования.
Обзор языка C/C++. История создания, развития и стандартизации C++ . Совместимость C и C++ . Поддержка нескольких парадигм программирования. Структурное программирование . Процедурное программирование. Модульное программирование. Объектно-ориентированное программирование e. Обобщенное программирование. Эффективность. Возможности языка С/C++ как языка программирования высокого и низкого уровня. Компиляция и интерпретация языков программирования. Базовые типы данных: целочисленные , числа с плавающей точкой, символьный, логический. Переменные и константы. Операции и выражения. Преобразования типов. Условный оператор. Оператор множественного выбора switch . Циклы: с предусловием , с постусловием, цикл for . Управление циклами. Ввод-вывод. Ввод-вывод из языка C . Потоковый вводвывод С++. Функции . Функции, возвращаемые значения, параметры и аргументы. Объявление и определение функций. Локальные и глобальные переменные. Дополнительные сведения о функциях. Рекурсия.
4. Функции Декомпозиция задачи на подзадачи. Программирование сверху вниз и снизу вверх. Входные
и выходные данные подпрограммы. Область видимости имен. Локальные и глобальные идентификаторы Вызов процедуры и функции. Аргументы формальные и фактические. Структурная декомпозиция.
5. Структурированные типы данных. Массивы.
Объявление массивы. Одномерные и многомерные массивы. Типовые задачи на массивы: сортировка одномерных массивов, перемножение матриц, транспонирование матриц и т.д. Массивы и функции. Массив как аргумент функции. Понятие указателей. Ссылки в C++. Связь указателей и массивов. Вычисления с указателями. Передача аргументов функций как указателей. Динамические массивы.
6. Указатели. Операции над указателями.
7
Понятие указателя. Операции получения адреса объекта и разыменования указателя. Операции над указателями. Указатели и массивы в языке программирования C++, установка указателя на массив, перебор массива с помощью указателей.
7. Работа с файлами. Модули Понятие файла. Текстовые и бинарные файлы. Последовательный и произвольный методы
доступа к файлам. Заголовочный файл и функции для организации последовательного доступа. Режимы открытия файлов. Особенности произвольного доступа к элементам бинарных файлов. Алгоритмы формирования, просмотра и корректировки файлов. Строки и символьные массивы данных. Функции для работы со строчным типом данных. Запись и чтение информации файла. Шифрование текстовых данных. Потоки и файлы. Основы файловой системы. Указатель файла, открытие файла, закрытие файла, запись символа, чтение символа и т.д. Буферный ввод/вывод. Функции fread() и fwrite(). Ввод/вывод при прямом доступе. Модульный принцип разработки программы.
8. Структуры.
Понятие структуры. Массив структур. Динамические структуры. Запись и чтение структуры из файла. Примеры использования. Списки, очереди, деревья. Общие свойства динамических структур данных.
9. Объектно-ориентированная парадигма программирования.
Введение в Объектно-ориентированное программирование. Понятие класса и объекта. Базовые понятия объектно-ориентированное программирования: инкапсуляция, наследование, полиморфизм. Сравнение структурного и объектно-ориентированного подхода к разработке программ.
10. Классы, объекты, интерфейсы Определение класса. Объекты. Создание и уничтожение объектов класса. Конструкторы и
деструкторы. Способы реализации инкапсуляции. Интерфейс и реализация контейнерных классов для моделирования структур данных. Статические члены класса. Вложенные и локальные классы. Примеры описания и использования классов. Сериализация/ десериализация. Абстракция и инкапсуляция. Модификаторы доступа и наследование. Статический и динамический полиморфизм. Абстрактный класс. Интерфейс. Отличие. Переопределение, перегрузка и сокрытие методов.
11. Наследование Организация иерархии классов. Интерфейсы. Модификаторы доступа. Абстрактные классы и
виртуальные функции. Множественное наследование. Проблема множественного наследования. Виртуальное наследование как средство разрешения коллизий
12. Полиморфизм Виды полиморфизма. Статический полиморфизм. Перегрузка функций, методов, операторов и т.д.
Динамический полиморфизм. Виртуальные функции и методы. 13. Массивы и Коллекции.
Преимущество коллекций. Стандартизация обработки групп объектов с помощью коллекций. Интерфейсы коллекций
14. Графика. 2D и 3D графика. Визуализация данных. Анимация
Основные графические классы. Графические примитивы. Методы класса Graphics. Построение графиков
15. Многопоточное программирование
Потоки и процессы. Класс Thread. Назначение приоритета потока. Управление и синхронизация потоков.
8
1.3 Порядок освоения материала
Материал дисциплины изучается в соответствии с порядком, определённым в следующей таблице:
|
|
|
Таблица 1 |
|
Порядок освоения дисциплины |
|
|
|
|
|
|
№ |
Раздел дисциплины |
|
№№ предшествующих разделов |
|
|
|
|
1 |
Введение в программирование |
|
- |
|
|
|
|
2 |
Основы алгоритмизации |
|
1 |
|
|
|
|
3 |
Операторы и инструкции языка программирования |
|
1,2 |
|
|
|
|
4 |
Функции |
|
3,4 |
|
|
|
|
5 |
Массивы |
|
3,4,5 |
|
|
|
|
6 |
Указатели. Операции над указателями. |
|
5,6 |
|
|
|
|
7 |
Файлы. Модули |
|
5,6,7 |
|
|
|
|
8 |
Структуры |
|
5,6,8 |
|
|
|
|
9 |
Объектно-ориентированная парадигма программирова- |
|
5,6,8 |
|
ния. |
|
|
|
|
|
|
10 |
Классы, объекты, интерфейсы |
|
2,4,9 |
|
|
|
|
11 |
Наследование |
|
9,10 |
|
|
|
|
12 |
Полиморфизм |
|
9,10,11 |
|
|
|
|
13 |
Массивы и Коллекции. |
|
5, 10 |
|
|
|
|
14 |
Графика. 2D и 3D графика. Визуализация данных. |
|
9,10 |
|
Анимация |
|
|
|
|
|
|
15 |
Многопоточное программирование |
|
9,10,11 |
|
|
|
|
9
2. Методические указания по подготовке к лекциям
2.1 Общие рекомендации по работе на лекциях
Лекция является главным звеном дидактического цикла обучения. Ее цель — формирование основы для последующего усвоения учебного материала. В ходе лекции преподаватель в устной форме, а также с помощью презентаций передает обучаемым знания по основным, фундаментальным вопросам изучаемой дисциплины.
Назначение лекции состоит в том, чтобы доходчиво изложить основные положения изучаемой дисциплины, ориентировать на наиболее важные вопросы учебной дисциплины и оказать помощь в овладении необходимых знаний и применения их на практике.
Личное общение на лекции преподавателя со студентами предоставляет большие возможности для реализации образовательных и воспитательных целей.
При подготовке к лекционным занятиям студенты должны ознакомиться с презентаций, предлагаемой преподавателем, отметить непонятные термины и положения, подготовить вопросы с целью уточнения правильности понимания. Рекомендуется приходить на лекцию подготовленным, так как в этом случае лекция может быть проведена в интерактивном режиме, что способствует повышению эффективности лекционных занятий.
2.2Общие рекомендации при работе с конспектом лекций
Входе лекционных занятий необходимо вести конспектирование учебного материала. Конспект помогает внимательно слушать, лучше запоминать в процессе осмысленного записывания, обеспечивает наличие опорных материалов при подготовке к семинару, зачету, экзамену.
Полезно оставить в рабочих конспектах поля, на которых делать пометки из рекомендованной литературы, дополняющие материал прослушанной лекции, а также подчеркивающие особую важность тех или иных теоретических положений.
Вслучае неясности по тем или иным вопросам необходимо задавать преподавателю уточняющие вопросы. Следует ясно понимать, что отсутствие вопросов без обсуждения означает в большинстве случаев неусвоенность материала дисциплины.
2.3Общие рекомендации по изучению материала лекций
Раздел 1. Введение в программирование.
Цель: вызвать интерес к изучению курса, сформировать представление и систематизировать знаний о развитии технологий программирования, о разработке программного продукта.
Понятия языка программирования. Многообразие языков программирование. История и эволюция языков программирования. Основные понятия программирования. Понятие алгоритма. Жизненный цикл программного обеспечения. Парадигмы программирования: структурного про-
10