Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

!Экзамен зачет 2024 год / Kontrolnaya_2_semestr

.docx
Скачиваний:
0
Добавлен:
26.01.2024
Размер:
16.83 Кб
Скачать

МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ

Федеральное государственное автономное образовательное учреждение высшего образования «Самарский национальный исследовательский университет имени академика С.П. Королева» (Самарский университет)

Институт информатики и кибернетики Кафедра информационных систем и технологий

Контрольная работа

по дисциплине «Программирование»

Выполнил(а) студент(ка) Иванов Иван Иванович

Курс 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

Соседние файлы в папке !Экзамен зачет 2024 год