Code Monkey home page Code Monkey logo

2022-mp's Introduction

2022-MP,

ННГУ, курс "Методы программирования" 2022г.

Презентация по курсу (обновляемая): https://docs.google.com/presentation/d/1wmYjy5QDoYECEHi7NAAINPulU9pLsaIi-aLaUppspps/edit?usp=sharing

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

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

Таблица, где я буду отмечать сданные работы: https://docs.google.com/spreadsheets/d/1ukuncwEtZQ2gwp6FhGD3waF9M96D4eBTSghJeSzotjg/edit?usp=sharing

Сервер в Дискорд, где буду дублировать: https://discord.gg/MzPkCYf4Dh (получить роль в канале "Основной") Мой контакт: [email protected]

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

Практика 1 (императивное и структурное программирование)

  1. Используйте скрипт gen_lab_origin.py из папки _lab-1, запустите и заберите в свою папку сгенерированный лабиринт, в котором точка входа на верхней границе, а точка выхода - на нижней.
  2. Ввести с клавиатуры точку (указать в каких пределах) расположения "сокровища", найти к нему путь (любой, поиск в глубину).
  3. От точки сокровища узнать длину кратчайшего пути (поиск в ширину) к выходу (вывести) и построить его.
  4. Сохранить в файл 'maze-for-me-done.txt', в котором точка сокровища будет указана как '*', а сам маршрут построен точками к сокровищу и запятыми от него к выходу.

Практика 2 (объектно-ориентированное программирование)

  1. ВАЖНО! В первую очередь, это работа по построению объектно-ориентированной архитектуры, и только во вторую - работающий код. Начните с создания классов с пустыми методами-заглушками, посмотрите как они будут взаимодействовать, какие данные каждому для работы нужны, раскидайте внутри классов поля, сделайте конструкторы. И только после того, как у вас будет готовый скелет (еще раз, БЕЗ наполнения методов и БЕЗ фактической работы, достаточно написать в каждом print('Generator->signal'), т.е. писать что за метод и какого класса вызывается. И только после того, как вам окончательо станет понятно что за чем следует и как это выстроить, начинайте наполнять кодом.

  2. Проект по моделированию прохождения сигнала через цепь должен содержать каждый отдельный класс в своем файле.

  3. Класс генератора простых сигналов имеет функционал:

    • создания сигнала каждой из заданных форм: гармонический, треугольный, ШИМ с заданной скважностью, пила;
    • параметры: частота (период), частота дискретизации, длительность (как в сэмплах, так и в секундах), амплитуда;
    • возвращать как весь сигнал (всю длительность в виде массива), так и отдельную его выборку по номеру сэмпла или по отметке времени (во втором случае - ближайшую);
    • иметь функцию-генератор, возвращающий по запросу следующую выборку сигнала (yield).
  4. Класс-наследник генератора простых сигналов, содающий амлитудно-моделированный сигнал:

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

    • строить график по полученному временнОму представлению сигнала;
    • строить его спектр Фурье;
    • возвращать дисперсию, среднее, медианное, минимальное и максимальное значения, размах сигнала, отображать по запросу их в виде горизонтальных линий на графике;
    • строить примерный (прогнозируемый) сигнал с помощью обратного преобразования Фурье, используя первые несколько максимальных гармоник (частот) спектра Фурье (по умолчанию - 5, но можно задать любое).
  6. Класс цепи должен уметь работать как с сигналом в виде массива, так и с последовательно приходящими выборками (из методов-генераторов yield):

    • пропускать сигнал без изменений (bypass);
    • преобразовывать его указанным в п.6 алгоритмом;
    • хранить входной и выходной сигналы в буфере (заполнять массив), по умолчанию - без ограничения размера (весь), но с возможностью этот размер задать (хранить только последние пришедшие и ушедшие);
    • возвращать как полным массивом, так и генератором yield.
  7. Номер конкретно вашего задания получаете из вашего ФИО следующим образом: len("Морозов Никита Сергеевич")%5 = ваш номер задания:

    0- свертка (convolve) сигнала с гармоническим, заданной амплитуды и частоты;

    1- свертка (convolve) сигнала с пилообразным (sawtooth), заданной амплитуды и частоты;

    2- свертка (convolve) сигнала с прямоугольным (square), заданной амплитуды и частоты;

    3- прохождение сигнала через фильтр Баттерворта (butter) с частотой среза (по умолчанию 0.4) и заданного порядка N (по умолчанию 4);

    4- прохождение сигнала через фильтр Бесселя (bessel) с частотой среза (по умолчанию 0.4) и заданного порядка N (по умолчанию 4);

[3] Практика 3 (функциональное программирование)

Реализовать в функциональной парадигме приближенное вычисление корней уравнения f(x) с заданной (с клавиатуры при запуске) точностью epsilon. Вариант задания рассчитывается аналогично предыдущему.

0- методом касательных

1- методом половинного деления

2- методом простых итераций

3- методом хорд

4- на промежутке (2.5, 2.6) методом простых итераций

2022-mp's People

Contributors

kit8nino avatar awnil999 avatar kucbyou avatar rakuuuzz avatar gt20021978 avatar bepnis avatar vovahockey avatar gringua avatar mores52 avatar ziker0k avatar trelolo avatar san9tka avatar sonorousname avatar rostikl2002 avatar smirnaa avatar mariapanova avatar mariakapralova avatar handsomejack-bot avatar jenysshha avatar klyucharov-vladislav avatar plotnikovadana avatar alexanderkuznetsovv avatar valetovaa avatar artemhru avatar andrewmironov13 avatar alexlashchinin avatar 06foxxik avatar kirill29082002 avatar kirillrfvuc avatar kuvshinka19 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.