- •Введение
- •1Основы программирования Тема 1.1. Введение в программирование
- •1.1.1Основные понятия программирования
- •1.1.2Первая программа
- •1.1.3Комментарии
- •1.1.4Переменные и типы данных
- •1.1.5Ключевые слова и идентификаторы
- •1.1.6Вывод информации на экран
- •1.1.8Вывод русских букв
- •1.1.9Простые вычисления
- •1.1.10Контрольные вопросы
- •Тема 1.2. Математические вычисления
- •1.2.1Операции и выражения
- •1.1.7Ввод информации с клавиатуры
- •1.2.2Оператор присваивания
- •1.2.3Приоритет операций
- •1.2.4Смешанные выражения и преобразование типов
- •1.2.5Явное преобразование типов
- •1.2.6Функции и их аргументы
- •1.2.7Математические функции
- •1.2.8Контрольные вопросы
- •Тема 1.3. Условный оператор if-else
- •1.3.1Примеры использования условных операторов
- •1.3.2Конструкция if-else
- •1.3.3Оператор ?: и сокращенная запись для if-else
- •1.3.4Логические операторы и выражения
- •1.3.5Использование оператора if без ветки else
- •1.3.6Лесенка if-else-if
- •1.3.7Контрольные вопросы
- •Тема 1.4. Условный оператор switch-case
- •1.4.1Синтаксис оператора switch-case
- •1.4.2Исключение операторов break из switch
- •1.4.3Реализация простого консольного меню
- •1.4.4Контрольные вопросы
- •Тема 1.5. Символы и строки
- •1.5.1Объявление и вывод строк
- •1.5.2Кавычки и апострофы
- •1.5.3Ввод русских символов
- •1.5.4Контрольные вопросы
- •2Циклы и массивы Тема 2.1. Цикл на базе if и goto
- •2.1.1Синтаксис оператора goto
- •2.1.2Использование оператора goto при реализации меню
- •2.1.3Оператор goto и игра «Угадай число!»
- •2.1.4Реализация цикла на базе if и goto
- •2.1.5Контрольные вопросы
- •Тема 2.2. Циклы while и do-while
- •2.2.1Назначение циклов и базовые понятия
- •2.2.2Цикл while
- •2.2.3Условие, вложенное в цикл
- •2.2.4Обработка данных в цикле
- •2.2.5Неизвестное число итераций
- •2.2.6Цикл do-while
- •2.2.7Перевод числа в другую систему счисления
- •2.2.8Бесконечный цикл while
- •2.2.9Контрольные вопросы
- •Тема 2.3. Цикл for
- •2.3.1Предпосылки к созданию цикла for
- •2.3.2Синтаксис цикла for
- •2.3.3Вариации цикла for
- •2.3.4Оператор break
- •2.3.5Бесконечный цикл for
- •2.3.6Контрольные вопросы
- •Тема 2.4. Массивы
- •2.4.1Зачем нужны массивы?
- •2.4.2Объявление массива
- •2.4.3Работа с массивом заранее неизвестного размера
- •2.4.4Сравнение и присваивание массивов
- •2.4.5Вычисление суммы элементов массива
- •2.4.6Подсчет количества элементов с нужным свойством
- •2.4.7Поиск элемента в массиве
- •2.4.8Нахождение максимального элемента в массиве
- •2.4.9Контрольные вопросы
- •Тема 2.5. Обработка строк
- •2.5.1Подготовка к работе
- •2.5.2Поиск символа в строке
- •2.5.3Вывод символов с определенным свойством
- •2.5.4Контрольные вопросы
- •3Процедуры и функции Тема 3.1. Процедуры
- •3.1.1Подпрограммы, функции, процедуры
- •3.1.2Создание и вызов процедуры
- •3.1.3Пример создания процедуры
- •3.1.4Пример вызова процедуры
- •3.1.5Распространенная ошибка
- •3.1.6Процедуры с аргументами
- •3.1.7Название процедуры
- •3.1.8Формальные и фактические аргументы
- •3.1.9Тело процедуры
- •3.1.10Создание нескольких процедур
- •3.1.11Создание заголовочного файла
- •3.1.12Контрольные вопросы
- •Тема 3.2. Функции
- •3.2.1Возвращаемое значение
- •3.2.2Определение и вызов функции
- •3.2.3Название функции
- •3.2.4Формальные и фактические аргументы
- •3.2.9Контрольные вопросы
- •3.2.5Тело функции
- •3.2.6Оператор return
- •3.2.7Глобальные и локальные переменные
- •3.2.8Прототипы функций
- •Тема 3.3. Рекурсивные функции
- •3.3.1Понятие рекурсивной функции
- •3.3.2Рекурсивные процедуры
- •3.3.3Рекурсивные функции, принимающие более одного аргумента
- •3.3.4Контрольные вопросы
- •Тема 3.4. Логические функции
- •3.4.1Примеры громоздких логических конструкций
- •3.4.2Создание и вызов логической функции
- •3.4.3Сравнивать с true не обязательно
- •3.4.4Вызов логических функций внутри циклов
- •3.4.5Контрольные вопросы
- •Тема 3.5. Прикладной программный интерфейс (api)
- •3.5.1 Простой вложенный цикл
- •3.5.2Вынесение вложенного цикла в функцию
- •3.5.3Зависимость вложенных циклов
- •3.5.4 Два цикла, вложенные в третий
- •3.5.5Понятие api
- •3.5.6Вложенные циклы и вывод цифр
- •3.5.7Контрольные вопросы
- •4Простые структуры данных Тема 4.1. Матрицы
- •4.1.1Основные понятия
- •4.1.2Объявление матрицы
- •4.1.3Инициализация матрицы
- •4.1.4Вывод матрицы на экран
- •4.1.5Вывод ровных столбцов матрицы
- •4.1.6Заполнение матрицы в автоматическом режиме
- •4.1.7Работа с матрицей заранее не известного размера
- •4.1.8Заполнение матрицы случайными числами
- •4.1.9Заполнение матрицы с условием
- •4.1.10Обработка матрицы
- •4.1.11Обработка строк и столбцов
- •4.1.12Комбинированная обработка матрицы
- •4.1.13Контрольные вопросы
- •Тема 4.2. Массивы строк
- •4.2.1Объявление и инициализация массива строк
- •4.2.2Присвоение элементов массива строк
- •4.2.3Вывод и ввод массива строк
- •4.2.4Обращение к отдельным символам массива строк
- •4.2.5Сортировка массива строк
- •4.2.6Пример работы с массивом строк
- •4.2.7Контрольные вопросы
- •Тема 4.3. Файлы
- •4.3.1Запись информации в файл
- •4.3.2Чтение информации из файла
- •4.3.3Распространенная ошибка
- •4.3.4Контрольные вопросы
- •Тема 4.4. Структуры
- •4.4.1Причины использования структур
- •4.4.2Объявление структуры
- •4.4.3Обращение к полям структуры и оператор «точка»
- •4.4.4Ввод и вывод содержимого структуры
- •4.4.5Вложенные структуры
- •4.4.6Массив структур
- •4.4.7Вывод массива структур в виде таблицы
- •4.4.8Сортировка массива структур
- •4.4.9Передача структур в качестве аргументов функций
- •4.4.10Возврат структуры в качестве значения функции
- •4.4.11Контрольные вопросы
- •Тема 4.5. Реализация динамических структур данных на основе массива
- •4.5.1Пометка элементов
- •4.5.2Пометка элементов с оберткой
- •4.5.3Реализация стека на основе массива
- •4.5.4Реализация очереди на основе массива
- •4.5.5Реализация списка на основе массива
- •4.5.6Контрольные вопросы
- •Глоссарий
- •Литература
- •Основное (обязательное) обеспечение
- •Дополнительное обеспечение
4.5.4Реализация очереди на основе массива
Очередь (queue) – эта динамическая структура данных, позволяющая добавлять элементы в конец и удалять из начала. Название этой структуры происходит от названия обычной очереди, например, в магазине, когда человек может встать только в конец очереди, а уходит из начала (мы не рассматриваем случай, когда человеку надоело стоять, и он ушел из середины). Очередь называют FIFO-структурой (Fist In – First Out, первым пришел – первым ушел).
Реализация очереди на основе массива во многом напоминает реализацию стека. Отличие заключается в операции удаления: поскольку удаляется первый элемент, то следующие элементы нужно сдвинуть так, чтобы второй элемент стал первым, третий – вторым и т.д. Операция же добавления не отличается, т.к. и в стек, и в очередь элементы добавляются в конец. По этой причине рассмотрим только операцию удаления.
void remove() {
if (n==0) {
cout << "Queue is empty\n";
} else {
//Сдвиг элементов
for (int i=0; i<n-1; i++) {
contents[i] = contents[i+1];
}
n--;
}
}
4.5.5Реализация списка на основе массива
Существуют разные списки, но их классификация не является целью нашего занятия, а важным является то, что список (list) – это такая структура данных, которая позволяет вставлять и удалять элементы в любое место. Идея реализации списка на основе массива напоминает реализации стека и очереди. Следует только учитывать, что при добавлении в произвольное место мы не можем раздвинуть элементы, но должны сдвинуть следующие элементы вправо, чтобы освободилось место для нового. При удалении же следует сдвинуть элементы влево, чтобы занять позицию удаленного элемента (как это сделано в очереди, где элементы сдвигались, чтобы занять позицию первого элемента).
void insert(double x, int pos) {
//Сдвиг элементов вправо
for (int i=n-1; i>=pos; i--) {
contents[i+1] = contents[i];
}
contents[pos] = x;
n++;
}
}
4.5.6Контрольные вопросы
Что такое динамическая структура данных?
Как реализовать динамический массив, используя пометку элементов.
Какие операции поддерживает стек?
Какие операции поддерживает очередь?
Какие операции поддерживает список?
Что такое LIFO-структура и FIFO-структура?
Реализуйте динамический массив, используя пометку элементов и пометку элементов с оберткой.
Реализуйте стек на основе массива.
Реализуйте очередь на основе массива.
Реализуйте список на основе массива.
Глоссарий
Алгоритм – последовательность шагов (действий), позволяющая решить определенную задачу.
Аргументы фактические – аргументы, указываемые при вызове функции.
Аргументы формальные – аргументы, указываемые при объявлении функции.
Аргумент функции – параметр, который можно передать в тело функции извне.
Блок-схема – представление алгоритма в виде диаграммы.
Выражение смешанное – выражение, в котором присутствуют величины разных типов.
Декрементирование – уменьшение на 1.
Идентификатор – название какого-либо элемента программного кода, вводимого программистом.
Инкрементирование – увеличение на 1.
Инициализация переменной – присвоение значения переменной при ее объявлении.
Итерация – одно повторения команд, расположенных в теле цикла.
Ключевое слово – слова, зарезервированные
Комментарий – фрагмент исходного кода, игнорируемый компилятором.
Компиляция – процесс преобразования исходного кода в исполняемый файл.
Константа – постоянная величина.
Массив – это набор переменных одного типа, обращение к которым производится по имени массива и индексу элемента.
Матрица – двумерный массив.
Метод – это функция в объектно-ориентированном программировании.
Объявление функции – указание сигнатуры функции в программном коде.
Объявление переменной – указание типа и имени переменной в программном коде.
Операнд – величина, над которой производится операция.
Операция бинарная – операция, производящая действия над двумя операндами.
Операция логическая – операция, производящая действия над операндами логического типа. Логическими операциями являются «и», «или», «не», «xor».
Операция унарная – операция, производящая действия над одним операндом.
Определение функции – указание сигнатуры и тела функции.
Очередь (queue) – структура данных, поддерживающая две основные операции: добавление элемента в конец и удаление элемента из начала. Очередь по-другому называется FIFO-структурой.
Ошибка алгоритмическая – ошибка, которая заключается в том, что программа запускается (не содержит синтаксических ошибок), но не приводит к запланированному результату.
Ошибка времени исполнения (run-time error) – ошибка, которая возникает в момент работы программы.
Ошибка синтаксическая – ошибка, которая заключается в том, что программный код не подчиняется правилам языка программирования.
Переменная (variable) – именованная ячейка памяти.
Переменная локальная – переменная, объявленная внутри тела цикла, функции, условного оператора и т.д.
Переменная глобальная – переменная, объявленная вне тела цикла, функции, условного оператора и т.д.
Приведение типа – явное преобразование типа величины в выражении.
Процедура (procedure) – это функция, которая не возвращает значения.
Псевдокод (pseudocode) – представление алгоритма на языке, напоминающем язык программирования.
Рекурсивная функция – функция, вызывающая сама себя.
Сигнатура функции – совокупность следующих свойств у функции: тип возвращаемого значения, имя и формальные аргументы.
Среда разработки интегрированная (integrated development environment) – приложение, включающее в себя редактор программного кода и набор инструментов, облегчающих разработка программ.
Стек (stack) – структура данных, поддерживающая две основные операции: добавление элемента в конец и удаление элемента из конца. Стек по-другому называется LIFO-структурой.
Строка (string) – последовательность символов.
Структура (structure) – набор переменных разных типов, объединенных общим именем.
Структура данных динамическая – структура данных, которая может изменять свой размер в процессе работы программы.
Тело цикла – совокупность команд, повторяемых в цикле.
Тело функции – совокупность команд, выполняемых функцией.
Тестирование – процесс поиска алгоритмических ошибок и ошибок времени исполнения в программе.
Тип переменной – множество возможных значений переменной.
Условный оператор – оператор, позволяющий выбирать путь выполнения программы в зависимости от некоторого условия.
Файл – именованная последовательность байтов
Функция (function) – это подпрограмма, которая выполняет отдельную задачу.
Функция логическая – функция, которая возвращает значение логического типа, принимающего два значения: «истина» и «ложь».
Цикл вложенный – цикл, расположенный в теле другого цикла.
