1611689773-a91d33f810870c94c5c0a51147bfda00 (План задач часть 2)
Описание файла
Документ из архива "План задач часть 2", который расположен в категории "". Всё это находится в предмете "программирование" из 3 семестр, которые можно найти в файловом архиве НГУ. Не смотря на прямую связь этого архива с НГУ, его также можно найти и в других разделах. .
Онлайн просмотр документа "1611689773-a91d33f810870c94c5c0a51147bfda00"
Текст из документа "1611689773-a91d33f810870c94c5c0a51147bfda00"
Блок №1. "старые добрые"
1. Решить квадратное уравнение.
* Целочисленные коэффициенты задаются пользователем с клавиатуры.
* Разветвление решения на случай линейного и квадратного уравнения.
* Обобщить решение задачи для комплексных корней.
2. Печать всех простых чисел, не превышающих N.
* N задается пользователем с клавиатуры.
* Точная реализация математического определения: "имеет 2 делителя"
должна быть реализована внутри функции is_prime.
* Сократить программу до одной строки.
Список простых чисел должен быть получен через списковое включение
с фильтрацией. Не допускается использование циклов в явном виде.
3. Вычисление числа π с заданной точностью (кол-во знаков после запятой).
* Не допускается использование циклов в явном виде.
4. Программа для решения уравнения вида F(x) = 0 методом Ньютона.
* Функция F(x) задается в коде или вводится с клавиатуры.
* Производная функции F(x) вычисляется аналитически.
* Начальное приближение и требуемая точность вычисления
задаются с клавиатуры.
* Промежуточные точки и касательные отобразить графически.
5. Вычисление интеграла функции F(x) аналитически и численно.
* Функция F(x) задается в коде или вводится с клавиатуры.
* Пределы интегрирования вводятся с клавиатуры.
* Интеграл функции вычислить двумя способами:
1. аналитически (sympy),
2. численно (numpy/scipy).
6. Вычисление статистик массива.
* Вычислить минимум и максимум.
* Вычислить среднее значение.
* Вычислить среднеквадратическое отклонение.
* Вычислить пятый центральный момент.
* Вычислить среднее из этих пяти чисел.
7. Сортировка.
* Отсортировать массив действительных чисел по возрастанию.
* Отсортировать массив комплексных чисел по модулю.
* Отсортировать массив комплексных чисел
по убыванию действительной части.
* Отсортировать список строк по длине.
* Отсортировать кортеж строк в лексикографическом порядке.
* Отсортировать кортеж списков по возрастанию длины.
8. Работа с текстом.
* Считать предложение из файла.
* Вычислить количество слов в предложении.
* Развернуть порядок букв в третьем слове предложения.
* В получившемся предложении развернуть порядок слов.
* В получившейся строке сделать первую букву заглавной.
* Сохранить результат в файл.
* Построить гистограмму частотности букв без учета регистра.
9. Приведение текста в соответствие правилам.
* Считать строку произвольной длины.
* Преобразовать строку следующим образом.
1. Удалить пробелы, стоящие перед точкой или запятой.
2. После точек, запятых, двоеточий и т.д. поставить пробел.
3. Несколько пробелов, следующих подряд, заменить на одиночный.
4. Первую букву каждого предложения сделать заглавной.
* Что нужно сделать, чтобы программа обрабатывала строку на любом языке?
10. Матрицы.
* Сгенерировать две случайные матрицы заданного размера.
* Вычислить сумму, произведение, определитель и обратные матрицы.
* Реализовать сохранение матриц в файл.
* Добавить вариант со считыванием матриц из файла.
* Выбор формата обосновать, привести плюсы и минусы.
* Что нужно сделать, чтобы добавить поддержку матриц комплексных чисел?
* Измерить время обращения матриц 10x10, 100x100, 1000x1000.
11. Телефонная книга.
* Определить класс Person.
Поля данных: имя, фамилия, номер телефона, дата рождения.
* Предоставить возможность сортировать список Person по любому из полей.
* Реализовать считывание телефонной книги из файла в текстовом формате.
* Реализовать сохранение телефонной книги в файл в совместимом формате.
* Реализовать сохранение и считывание через сериализацию (pickle).
12. Определить НОД и НОК
* Считать N натуральных чисел.
* Вычислить и вывести наибольший общий делитель введенных чисел.
* Вычислить и вывести наименьшее общее кратное введенных чисел.
13. Перевод чисел между системами счисления.
* Считать число, старое основание и новое основание.
* Вывести число в системе счисления с новым основанием.
Блок №2 "обработка данных"
1. Фурье-фильтрация сигнала.
* Смоделировать сигнал из трёх некратных частот, добавить случайный шум.
* Вычислить спектр сигнала, нарисовать график, оси в реальных единицах (Гц).
* Избавиться от шума в исходном сигнале путём вырезания "лишних" частот в
фурье-спектре.
* Построить график исходного, зашумлённого и фильтрованного сигнала
с легендой.
2. Аппроксимация нетодом наименьших квадратов.
* Взять модельный сигнал (a*sin(b*x), x=0..2*pi), добавить случайный шум,
методом наименьших квадратов найти параметры a, b.
* Построить на графике исходный сигнал (линия), зашумлённые данные (точки),
результат аппроксимации (линия), вывести легенду, найденные значения.
** Добавить случайные выбросы амплитудой порядка a*3, применить
взвешенный МНК.
** Сравнить действие различных весовых функций, построить график.
3. Лабораторная работа 4.4.
* По набору сохранённых циклов перемагничивания построить основную кривую
намагничивания.
* Сгладить кривую, получить зависимость дифференциальной магнитной
проницаемости.
* По петле гистерезиса предельного цикла вычислить потери на
перемагничивание (площадь под кривой) для всех измеренных образцов.
4. Лабораторная работа 6.3.
* По измеренным осциллограммам определить коэффициенты трения для каждой
из трубок используя МНК.
* Времена пролёта через катушки определить по минимуму (максимуму).
производной исходного сигнала, для подавления шумов использовать
фурье-фильтр.
** Времена пролёта определить путём вейвлет-анализа, обосновать выбор
базисной функции, сравнить погрешности с предыдущим пунктом.
** Сравнить вейвлет-спектрограммы для сигналов разной зашумлённости,
пояснить смысл величин, отложенных по осям.
5. Анализ солнечной активности.
* По открытым данным со спутников НАСА произвести анализ уровня
гамма-излучения от солнца.
* Файлы с данными выкачивать в зависимости от введённого пользователем
периода (1986-2017 годы):
https://www.ngdc.noaa.gov/stp/satellite/goes/dataaccess.html
https://satdat.ngdc.noaa.gov/sem/goes/data/new_avg/
* Организовать кэш (выкачанные данные повторно не загружать).
* С целью уменьшения числа отображаемых точек реализовать усреднение
по выбранном временному интервалу (час, сутки).
* Используя фурье-преобразование определить характерные циклы.
Блок №3 «интересные задачи»
1. Приближения функций.
* Функция F(x) задается аналитически, с клавиатуры.
* Приблизить функцию F(x) полиномом N-ой степени.
* Пользователю вывести коэффициенты, сравнительный график.
* Функция G(x, p) задается аналитически, с клавиатуры.
* Приблизить функцию F(x) функцией G(x, p) за счет варьирования p.
* Пользователю вывести оптимальное значение p, сравнительный график.
2. Численно промоделировать движение тысячи частиц.
* Начальные положения: x равномерно распределен от -1 до 0; y — от -1 до 1.
* Начальные скорости равномерно распределены по углу, постоянны по модулю.
* Частицы отражаются от "стенок коробки"
(-1, -1) — (-1, 1) — (1, 1) — (1, -1) — (-1, -1),
за исключением "отверстия" (1, -0.1) — (1, 0.1).
* Нарисовать положения всех частиц через время t.
** Анимировать движение частиц.
** Дорисовать частицам стрелки — векторы скоростей.
** Нарисовать двумерную гистограмму плотности частиц через время t.
3. Численно промоделировать полет тела.
* Рассчитайте траекторию тела, летящего в поле тяжести по параболе.
* Отобразите траекторию на графике.
* Решите эту же задачу аналитически (sympy), сравните результат.
* Повторите тот же анализ, добавив модель трения о воздух.
Оптимизируйте угол вылета тела (при заданном модуле начальной скорости)
так, чтобы пересечение уровня начальной высоты произошло как можно
дальше от начальной точки.
4. Напоминания по почте.
* Считать файл со строками вида '2017-12-01 19:00:00 Свидание с Машей'.
* За час до наступления указанного времени ('2017-12-01 19:00:00')
отправлять электронное письмо с указанным текстом ('Свидание с Машей')
на электронную почту студента.
* Программа должна поддерживать несколько таких строк в любом порядке.
* Программа должна выводить предупреждения для напоминаний "в прошлом".
5. Массовое скачивание видео с YouTube.
* Имя пользователя/канала вводится с клавиатуры (пример: 'kvn').
* Вывести, пронумеровав, все видео с этого канала.
* Считать строку с номерами видео через запятую, с поддержкой интервалов
(пример: "1,3,6-9").
* Скачать эти видео.
6. Датировка снимка Луны.
* Программа запускается с указанием имени файла в качестве аргумента.
* Считать дату совершения снимка из EXIF-тега указанного файла.
* Определить фазу Луны по заданной дате.
* Определить фазу Луны по фотоснимку.
* На основании соответствия фаз вывести мнение о правдоподобности датировки
снимка.
7. Автоматизированный тестировщик других программ.
* Напишите программу, которая запускает программу, вычисляющую число
pi с заданной точностью, передает ей искомую точность, считывает ответ
и сравнивает его с заранее известным.
* Напишите программу, которая тестирует другую произвольную программу:
1. запускает произвольную программу,
2. подает на вход указанные данные,
3. считывает результат и сравнивает с эталонным.
* Формат конфигурационного файла, в котором будет прописано, что запускать,
что подавать на ввод и что ожидать в результате, придумать самостоятельно
и обосновать.
* Продемонстировать работу для как минимум двух программ на разных языках
программирования: компилируемом и интерпретируемом.
** Реализовать подачу на вход дочерней программы случайных данных.
Провести поиск данных, приводящих к аварийному завершению программы.
Критерии оценок:
-
«удовлетворительно» 10 задач на выбор из Блока №1
-
«хорошо» критерии «удовлетворительно»
+ 2 задачи на выбор из Блока №2
-
«отлично» критерии «хорошо»
+ 2 задачи на выбор из Блока №3