!Экзамен зачет 2024 год / Kontrolnaya_2_semestr
.docxМИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное автономное образовательное учреждение высшего образования «Самарский национальный исследовательский университет имени академика С.П. Королева» (Самарский университет)
Институт информатики и кибернетики Кафедра информационных систем и технологий
Контрольная работа
по дисциплине «Программирование»
Выполнил(а) студент(ка) Иванов Иван Иванович
Курс 1 Группа 6196-090301Z
Номер зачетной книжки 2019-02791
Преподаватель Семёнова Ирина Владимировна
Работа сдана на проверку ___________________________________
дата подпись
Регистрационный номер ____________________________________
Работа проверена __________________________________________
дата подпись
Оценка ___________ Подпись ___________
Самара 2023
Стек
Нужно реализовать стек ограниченного размера. Этот стек работает как обычный стек, однако при превышении максимального размера удаляет самый глубокий элемент в стеке. Таким образом, в стеке всегда будет ограниченное число элементов.
Пример работы такого стека с ограничением в 2 элемента:
// сначала стек пуст
stack.Push(10); // в стеке 10
stack.Push(20); // в стеке 20, 10
stack.Push(30); // в стеке 30, 20
stack.Push(40); // в стеке 40, 30
stack.Pop(); // возвращает 40, в стеке остаётся 30
stack.Pop(); // возвращает 30, стек после этого пуст
Операция Push должна иметь сложность O(1), то есть никак не зависеть от размера стека.
Для реализации описанного стека создайте класс LimitedSizeStack.
Листинг LimitedSizeStack.cs
Наследование и полиморфизм
Простейший сценарий, когда может потребоваться перегрузка методов и реализация интерфейсов - написание небольших структур данных, которые должны быть совместимы с листами, словарями и т.д.
Допустим, нужно разработать систему для анализа сообщений в службе техподдержки, при этом их необходимо классифицировать по имени продукту, типу сообщения и его теме. Соответственно, необходим класс, обозначающий категорию сообщений с указанными полями.
Создайте класс Category.cs. В этом классе переопределите методы Equals и GetHashCode, реализуйте интерфейс IComparable, упорядочивающий категории сначала по продукту, затем по типу и затем - по теме, а также реализуйте все операторы сравнения.
Листинг Category.cs
Работа с файлами
Допустим, что ведется разработка компьютерной игры с множеством мелких файлов. Возникла необходимость эти файлы объединить в один. По ряду причин использовать zip-сжатие не предоставляется возможным, а вместо этого необходимо изобрести свой формат.
Необходимо по известному формату написать стрим, который читает секцию файла. Этот стрим будет получать другой, базовый стрим, который содержит данные, и его задача — найти нужную секцию и прочитать. (Эта задача осмысленна, поскольку, например, Bitmap.FromStream принимает именно Stream, и вы можете подставить туда ваш стрим для того, чтобы все работало.)
Дополнительное ограничение: из базового стрима нужно читать порциями ровно по 1024 байт. Найдите стандартный способ обеспечить это условие.
Листинг ResourceStream.cs