- •1 Семестр
- •18 Занятий
- •1. Линейные и разветвляющиеся алгоритмы
- •Вычисления по формулам. Стандартные математические функции
- •Побитовые операции
- •Область на плоскости
- •Условный оператор
- •Логическое выражение в условном операторе
- •Ветвления
- •2. Циклы
- •Целочисленная арифметика. Приведение типов
- •Вложенные циклы. Схема Горнера
- •2.3. Перебор значений
- •2.4. Итерационные циклы. Вычисления с точностью
- •2.5. Нахождение простых чисел
- •2.6. Вычисления без хранения последовательности значений
- •Массивы. Указатели
- •Обработка одномерных массивов
- •Построение новой матрицы по части заданной матрицы
- •Обход матрицы
- •Упорядоченность значений в матрицах
- •Алгоритм Эратосфена для нахождения простых чисел
- •Преобразование матриц
- •*** Использование массивов для представления «длинных» чисел
- •*** Экономичное хранение матриц. Матричная алгебра
- •Строки. Структуры
- •Использование строкового типа
- •Перевод из одной cистемы счисления в другую
- •Выделение слов в строке
- •Массив слов
- •Создание собственных процедур для обработки строк
- •Функции
- •5.1. Передача параметров по значению и по ссылке
- •5.2. Перегрузка и шаблон функций
- •5.3. Возврат ссылок
- •5.4. Рекурсия
- •5.5. *** Перебор с возвратом
- •2 Семестр (15 занятий)
- •5.6. Вычисление корня уравнения. Передача имени функции в качестве параметра. Аргументы по умолчанию
- •5.7. Вычисление интеграла. Передача имени функции в качестве параметра
- •5.8. Сортировка массивов
- •5.9. *** Сортировка массивов
- •6. Файлы
- •6.1. Использование структур для битового представления чисел
- •6.2. Файлы чисел
- •6.3. Файлы записей
- •7. Динамические структуры данных
- •7.1. Динамическое выделение памяти для массивов
- •7.2. Линейный список
- •7.3. Линейные списки
- •7.4. Двухсвязные списки
- •7.5. Деревья
- •7.6. *** Более сложные связанные динамические структуры данных
- •7.7. *** Графы
- •8.1. Класс «Многоразрядное число»
- •8.2 Класс «Массив»
- •8.3 Класс «Линейный список»
- •8.4. *** Класс «Двусвязный список»
- •8.5 *** Класс «Бинарное дерево»
- •8.6 *** Класс «Граф»
- •Наследование. Полиморфизм
- •9.1. Наследование
- •9.2. Полиморфизм. Виртуальные методы
- •9.3. *** Полиморфизм. Виртуальные методы
7.7. *** Графы
Создать подходящий тип данных для представления графа. Написать и протестировать процедуры обеспечивающие добавление вершины в граф, вывода элементов графа на экран, выполнить следующие задания.
-
Найти все вершины заданного графа, недостижимые от заданной его вершины.
-
Определить, что для любой пары вершин заданного орграфа одна из этих вершин достижима от другой.
-
Определить, является ли связным заданный граф.
-
Найти длину кратчайшего цикла в графе.
-
Для двух выделенных вершин графа построить соединяющий их простой путь.
-
Найти самый длинный простой путь в графе.
-
Найти все вершины графа, к которым существует путь заданной длины от выделенной его вершины.
-
Найти все вершины орграфа, от которых существует путь заданной длины к выделенной вершине.
-
Источником орграфа назовем вершину, от которой достижимы все другие вершины; стоком – вершину, достижимую от всех других вершин. Найти все источники и стоки данного орграфа.
-
Найти такую вершину заданного графа, которая принадлежит каждому пути между двумя выделенными (различными) вершинами и отлична от каждой из них.
-
Найти диаметр графа, т. е. максимум расстояний между всевозможными парами его вершин.
-
Найти медиану графа, т. е. такую его вершину, что сумма расстояний от нее до остальных вершин минимальна.
-
Классы
8.1. Класс «Многоразрядное число»
8.1.1. Объявить класс для решения задачи и определить его методы.
Реализовать:
-
три вида конструктора (без аргументов, инициализации, копирования),
-
деструктор,
-
ввод данных с клавиатуры,
-
вывод данных на экран,
-
указанные в задании операции реализовать посредством перегрузки операций (операции реализовать и как методы класса, и как внешние дружественные функции).
Объявление класса разместить в заголовочном файле, определения методов – во втором файле, определение главной функций программы – в третьем файле. Выполнить задание, используя объекты этого класса.
Дополнительно к требуемым в заданиях операциям перегрузить операцию индексирования []. Максимально возможный размер массива задать константой. В отдельном поле size должно храниться максимальное для данного объекта количество элементов массива; реализовать метод get_size(), возвращающий установленную длину. Если количество элементов массива изменяется во время работы, определить в классе поле count. Первоначальные значения size, count устанавливаются конструктором. Обеспечить работу с безопасным массивом, т.е. контролировать выход индекса элемента массива за допустимый описанием объекта диапазон.
-
Объявить класс «128-разрядное целое положительное десятичное число». Реализовать операции: сложения, умножения этих чисел.
-
Объявить класс «128-разрядное целое положительное десятичное число. Реализовать операции: сравнения, сдвигов на n разрядов (десятичных).
-
Объявить класс «256-разрядное целое положительное десятичное число. Реализовать операции: сложения, умножения этих чисел.
-
Объявить класс «256-разрядное целое положительное десятичное число». Реализовать операции: сравнения, сдвигов на n разрядов (десятичных).
-
Объявить класс «64-разрядное целое двоичное число со знаком». Реализовать операции: сложения, умножения. Создать методы для перевода десятичного числа в двоичное, и наоборот.
-
Объявить класс «64-разрядное целое положительное двоичное число». Реализовать операции: сравнения, сдвигов на n разрядов, поразрядные. Создать методы для перевода десятичного числа в двоичное, и наоборот.
-
Объявить класс «128-разрядное целое двоичное число со знаком». Реализовать операции: сложения, умножения. Создать методы для перевода десятичного числа в двоичное, и наоборот.
-
Объявить класс «128-разрядное целое положительное двоичное число». Реализовать операции: сравнения, сдвигов на n разрядов, поразрядные. Создать методы для перевода десятичного числа в двоичное, и наоборот.
-
Объявить класс «64-разрядное целое шестнадцатиричное положительное число». Реализовать операции: сложения, умножения. Создать методы для перевода десятичного числа в шестнадцатиричное, и наоборот.
-
Объявить класс «64-разрядное целое шестнадцатиричное положительное число». Объявить класс «256-разрядное целое положительное двоичное число». Реализовать операцию сложения для тех и других чисел. Создать методы для перевода двоичного числа в шестнадцатиричное, и наоборот.
-
Объявить класс «64-разрядное целое положительное число в p-ричной с/с (2≤p≤16)». Реализовать операции: сложения, умножения. Создать методы для перевода десятичного числа в р-ричное и наоборот.
-
Объявить класс «64-разрядное целое положительное число в p-ричной с/с (2≤p≤16)». Реализовать операции: сравнения, сдвигов на n разрядов. Создать методы для перевода десятичного числа в р-ричное и наоборот.
8.1.2. Реализовать задание, используя объявление и методы соответствующего параметризированного класса из стандартной библиотеки шаблонов STL.