Задачи по программированию
Структуры данных и их применение
- Многочлен \(P(x)=a_nx^n+a_{n-1}x^{n-1}+…+a_1x+a_0\) с целыми коэффициентами можно представить в виде списка. При этом, если \(a_i=0\), то соответствующий элемент не включается в список. На рисунке показано общее представление многочлена и пример для \(S(x)=-5x^6+3x^2-x+7\):
Необходимо описать тип данных, соответствующий предложенному представлению многочленов, а также разработать процедуру Add(P,Q,R) вычисления суммы многочленов Q и R, результат – многочлен P. - Задача связности. Предположим, что имеется последовательность пар целых чисел (пара p-q интерпретируется в значении “р связано с q“). Если р связано с q, a q связано с r, то р связано с r. Задача состоит в написании программы для исключения лишних пар из набора: когда программа получает очередную пару р-q, она должна добавлять эту пару только в том случае, если из предыдущих пар не следует, что что р связано с q. Пример: 3-4, 4-9, 8-0, 2-3, 5-6. К данному списку 2-9 не добавляем, так как 2-3-4-9.
- Создать список из заданного количества элементов. Выполнить циклический сдвиг этого списка на N элементов вправо или влево.
- Реализовать с помощью однонаправленного линейного списка операцию умножения длинного целого числа на N (целую цифру, то есть целое число от 0 до 9).
- Исходный файл содержит два набора положительных значений, между наборами стоит отрицательное значение. Построить два списка С1 и С2, элементы которых содержат значение из наборов 1 и 2 соответственно. Элементы расположить по возрастанию. Выполнить соединение списков
- Создать два стека и поменять информацию местами.
- Исходный файл содержит наименование некоторых объектов. Построить список, элементы которого содержат наименование и шифры данных объектов, причем элементы списка должны быть упорядочены по возрастанию значений шифров. Выполнить «сжатие» списка, удалив продублированные наименования объектов.
- Задано множество точек на двухмерной плоскости. Найти три разные точки, которые составляют треугольник наибольшего периметра. Структуру данных “множество” реализовать в виде класса.
- Задано множество точек на двухмерной плоскости. Найти такую точку, от которой сумма расстояние к другим точкам наименьшая. Структуру данных “множество” реализовать в виде класса.
- На плоскости заданы N множеств по M точек в каждой. Найти среди точек первого множества такую точку, которая принадлежит наибольшему количеству множеств. Структуру данных “множество” реализовать в виде класса.
- Создать список из стихов одного автора. Выполнить сортировку списка по возрастанию размера стихов.
- Ввести некоторое число и записать его цифры в стек. Вывести число, у которого цифры идут в обратном порядке. Предусмотреть возможность введения произвольного количества чисел.
- Система состоит из трех процессоров P1, P2, P3, очереди F, стека S и распределителя задач R. В систему поступают запросы на выполнение задач трёх типов – T1, T2 и T3, каждая для своего процессора.Поступающие запросы ставятся в очередь. Если в начале очереди находится задача Ti и процессор Pi свободен, то распределитель R ставит задачу на выполнение в процессор Pi, а если процессор Pi занят, то распределитель R отправляет задачу в стек и из очереди извлекается следующая задача. Если в вершине стека находится задача, процессор которой в данный момент свободен, то эта задача извлекается и отправляется на выполнение. Осуществить моделирование работы данной системы.
- Задано два списка, которые содержат результаты N-измерений тока (I) и напряжения (U) на неизвестном сопротивлении (R). Найти приближенное значение R методом наименьших квадратов.
- Организовать хеш-таблицу с открытой адресацией, используя процедуру поиска и вставки по ключу. Для формирования начального хеш-адреса использовать метод деления, а затем при возникновении коллизии процедуру квадратичного исследования.
- Написать программу, определяющую является ли двоичное дерево деревом поиска.
- Имеется дерево, корень которого соответствует основателю рода. Сыновья каждой вершины задают сыновей и дочерей соответствующего человека. Указываются имена двух человек (например, А и В) . Сообщить, какая из следующих ситуаций имеет место:
1) А предок В;
2) В предок А;
3) А и В имееют ближайшего общего предка С. - При запуске программы в консоли должно открыться меню с выбором “Работа со списками” или “Работа с деревьями”. При выборе какого-либо из пунктов должно открыться подменю. Подменю “Работа со списками” должно включать в себя пункты: “Включить новый элемент после i-ого по номеру элемента”, “Исключить элемент после i-ого по номеру элемента”, “Поменять местами i-ый и i-ый+1 по номерам элементы”. Подменю “Работа с деревьями” должно выполнять следующие действия: создание бинарного дерева (дерева поиска) в диалоге с пользователем (способ формирования дерева: с учётом значений ключа), обход бинарного дерева каждым из трёх способов с выдачей на экран содержимого информационных полей, включение элемента в бинарное дерево (согласно алгоритму формирования дерева), удаление заданного узла из дерева (без поддерева), удаление дерева с освобождением памяти, вывод дерева на экран. А так же определить количество листьев на заданном уровне дерева, определить количество узлов (не листьев) бинарного дерева.
- Составить программу для построения и обработки дерева общего вида или упорядоченного двоичного дерева, содержащего узлы целого типа. После того как дерево, создано с ним можно выполнять следующие действия:
Добавление нового узла (для двоичного дерева положение нового узла определяется в соответствии с требованием сохранения порядка, для дерева общего вида должен задаваться путь до добавляемого узла, добавляемый узел становится младшим сыном).
Текстовая визуализация дерева (значение каждого узла выводится на отдельной строке, с отступом пропорциональным глубине узла (шаг отступа равен двум пробелам), в порядке старшинства узлов).
Удаление узла (двоичное дерево перестраивается в соответствии с требованием сохранения целостности и порядка; для дерева общего вида удаляется все поддерево, исходящее из удаляемого узла; должно быть предусмотрено корректное освобождение памяти). Определение числа вершин, степень которых совпадает со степенью дерева. - Задан граф (орграф) в виде матрицы смежности. Составить программу
а) проверки, есть ли в графе петли;
б) поиска в графе изолированной вершины (не смежной с другими);
в) определения степени графа;
г) получения последовательности ребер. - Запрограммировать структуры данных и операции над ними для представления графа в виде
а) последовательности ребер (дуг),
б) векторов смежности,
в) матрицы смежности,
г) списков смежности,
д) матрицы весов,
е) сети,
ж) матрицы инцидентности,
з)списковой структуры.
Необходимые детали представления уточнить самостоятельно. - Дан граф (орграф). Составить описание данных для его представления и фрагмент программы
а) получения кратчайших путей и расстояний между всеми вершинами по алгоритму Флойда и вывода кратчайшего пути от вершины А до вершины В.
б) получения матрицы связности по алгоритму Уоршалла и вывода номеров вершин каждой компоненты связности графа. - Разработать программу, выполняющую обработку данных на основе рекурсивных алгоритмов.
Дано \(N\) городов и известны расстояния между ними. Не все города связаны друг с другом дорогой. Найти все возможные маршруты из города А в город В (ни в один город не заходить дважды). Определить самый длинный и самый короткий маршрут. - Система двусторонних дорог такова, что для любой пары городов можно указать соединяющий их путь. Найдите такой город, сумма расстояний от которого до остальных городов минимальна.
- Для заданной системы двусторонних дорог определите, можно ли, закрыв какие-нибудь три дороги, запретить перемещение из города А в город Б.
- Дана система двусторонних дорог. \(N\)-периферией называется множество городов, расстояние от которых до выделенного города (столицы) больше \(N\). Для данного \(N\) определите \(N\)-периферию.
- Определите, можно ли в данной системе двусторонних дорог проехать из города А в город B так, чтобы посетить город С и не проезжать ни по какой дороге более одного раза.
- За проезд по каждой дороге взымается некоторая пошлина. Найдите путь из города А в город B с минимальной величиной \(S+P\), где \(S\) – сумма длин дорог пути, а \(P\) – сумма пошлин проезжаемых дорог.
- Найдите медиану графа, то есть такую его вершину, что сумма расстояний от нее до остальных вершин минимальна.
- Разработать класс B-дерево для хранения объектов, обладающих ключом с операцией сравнения. При реализации следует пользоваться статическим полиморфизмом на основе шаблонов.