/2024-MP

Практика по курсам "Методы программирования" и "Программная инженерия" РФФ ННГУ

Primary LanguageJupyter Notebook

2024-MP

Практика по курсам "Методы программирования" и "Программная инженерия" РФФ ННГУ

Презентация по курсу (обновляемая)

Для работы необходим python 3.9 и выше. Библиотеки: numpy, pandas, matplotlib, tensorflow, Pillow. Редактор любой. Из неплохих: IDLE (родной, идёт вместе с установщиком), Visual Studio Code, notepad++, PyCharm, vim (для любителей сначала страдать, потом наслаждаться).

Работа с блокнотами онлайн, с возможностью подключения удалённых мощностей гугла (GPU, TPU): https://colab.research.google.com/

Таблица, где я буду отмечать сданные работы: 2024-Методы программирования Сервер в Дискорд, где буду дублировать: https://discord.gg/MzPkCYf4Dh (получить роль в канале "Основной") Мой контакт: nsmorozov@rf.unn.ru

Внутри папки группы создать папку имени себя (фамилия и имя). В своей папке можете делать все что угодно, в чужие не залезать, в корневую тоже. Я буду ориентироваться на файлы, где в названии будет номер лабораторной.

Название пулл-реквеста должно начинаться с квадратных скобок, в которых перечислены номера сдаваемых лабораторных работ. Не больше одного активного реквеста, если надо довнести -- надо обновить текущий.

Крайний срок приема работ 27.05.2024 до 11:00

[1] Работа со структурами данных

Исходные данные:

  • предметы в школьном аттестате (не меньше 14), как словарь (dictionary) из названия и оценки (можно выдумать);
  • полное имя с фамилией и дату рождения любого актера из вестерна 1960х годов как кортеж (tuple);
  • список (list) из имени и фамилии, составленные случайно по таблице из самых популярных (с сайта http://topnamesinrussia.tilda.ws), свой город взять по номеру равному дню в месяце вашего рождения,длина списка не меньше 30 элементов (имя + фамилия);
  • имя из прилагательного и существительного, которое вы бы дали своему домашнему тамандуа (строка).

Действия:

  1. вывести среднюю оценку в аттестате;
  2. вывести уникальные имена среди взятых из таблицы популярных;
  3. общая длина всех названий предметов;
  4. уникальные буквы в названиях предметов;
  5. имя вашего домашнего тамандуа в бинарном виде;
  6. количество дней от даты рождения актера вестерна до текущей даты (должна быть всегда актуальной);
  7. FIFO очередь, в которую можно добавлять строковые названия стройматериалов, вводимые с клавиатуры (до команды остановки), после введения - вывести все;
  8. по введеному с клавиатуры индексу, поменять имя в отсортированном списке популярных имен и фамилий на имя, под которым наиболее известен, китайский император династии Чжоу (смотреть по списку всех на странице императоров Китая) под номером, получаемым из даты рождения актера вестерна: number = (day + month**2 + year) % 39 + 1;
  9. создать и напечатать связный список странных названий населенных пунктов любым способом (например, как словарь, где ключ - имя, а значение -- ссылка на индекс следующего элемента), удалить элемент по введеному с клавиатуры названию, вставить город "Конец" в указанное с клавиатуры место по индексу (города можно взять, например, тут).

[2] Алгоритмы сортировки

Исходные данные:

  • список целых чисел от 0 до 999999;
  • список из 99999 случайных вещественных чисел в диапазоне [-1, 1];
  • 42000 разных точки комплексной плоскости, лежащие внутри окружности радиуса r = birth_day / birth_month (можно случайных, можно равномерно распределённых), сортировать по модулю числа;
  • отрывок из книги (любой, на свой выбор) не менее 10000 слов, разбитый в список по словам.

Действия:

Реализовать для каждого из исходных списков один из представленных алгоритмов сортировки (подробнее почитать о них тут). Выбор тех четырех алгоритмов, которые будут использованы конкретно у вас:

import random

random.sample(range(1, 18), 4) # вернет список из 4 случайных значений в заданном диапазоне

  1. shaker sort, сортировка перемешиванием;
  2. bubble sort, сортировка пузырьком;
  3. comp sort, сортировка расческой;
  4. insertion sort, сортировка вставкой;
  5. Shellsort, сортировка Шелла;
  6. tree sort, сортировка деревом;
  7. Gnome sort, гномья сортировка;
  8. selection sort, сортировка выбором;
  9. Heapsort, пирамидальная сортировка;
  10. Quicksort, быстрая сортировка;
  11. Merge sort, сортировка слиянием;
  12. Counting sort, сортировка подсчетом;
  13. Bucket sort, блочная (карманная) сортировка;
  14. Radix sort, поразрядная сортировка;
  15. least significant digit;
  16. most significant digit;
  17. bitonic sort, битонная сортировка;
  18. timsort, гибридная сортировка.

[3] Алгоритмы поиска пути и структурное программирование

Исходные данные:

  • файл с текстовым представлением лабиринта;
  • координаты аватара (если задали в стене, то переместить в любую соседнюю свободную);
  • координаты ключа от выхода (если задали в стене, то переместить в любую соседнюю свободную);
  • координаты выхода (на одной из внешних границ);
  • правила нахождения пути до ключа и до выхода.

Действия

  1. В папке _3 запустить скрипт gen_lab_origin.py, подождать его работу несколько минут;

  2. Полученный файл maze-for-u.txt переместить в свою папку;

  3. Найти любой маршрут от начальной координаты аватара до ключа, используя (выбрать или все, или по номеру сезона, в который вы родились, начиная с зимы):

    a. алгоритм Дейкстры; b. поиск в ширину; c. поиск в глубину; d. жадный алгоритм.

  4. Используя А* со следующими параметрами (вес g(x), вес h(x), максимальная длина хранимого списка возможных шагов), найти оптимальный путь до ближайшего выхода;

  5. Сохранить в файл 'maze-for-me-done.txt', в котором точка ключа будет указана как '*', а сам маршрут построен точками к ключу и запятыми от него к выходу.

[4] Моделирование, сопрограммы и объектно-ориентированное программирование

Промоделировать работу радиолокационной системы, состоящей из одного радара, излучающего радиоимпульсы по азимуту (от 0 до 360 градусов) и углу места (от 0 до 90 градусов). И N летающих объектов, от которых радиоимпульсы отражаются и возвращаются к радару через время t.

Исходные данные

Декартовы координаты радара в м. Количество летающих объектов, их декартовы координаты в м и проекции скоростей в м/с.

Действия

Сделать декомпозицию задачи на классы. Класс "радар" сделать, используя паттерн Singleton. Создать требуемое количество объектов каждого класса. Вывести текущие сферические координаты объектов относительно радара. Ввести с клавиатуры время в секундах и вывести сферические координаты относительно радара через это время.