Практические занятия по курсу ОиМП — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
Строка 11: Строка 11:
 
# Если требуется сравнить два числа с плавающей точкой (float) на равенство, то сравнивайте модуль их разницы с некоторым eps: |d1 - d2| < 0.0000001.
 
# Если требуется сравнить два числа с плавающей точкой (float) на равенство, то сравнивайте модуль их разницы с некоторым eps: |d1 - d2| < 0.0000001.
  
===Занятие 1. Ввод-вывод===
+
===Задание 1. Ввод-вывод===
 
[http://official.contest.yandex.ru/contest/642/ Задачи.]
 
[http://official.contest.yandex.ru/contest/642/ Задачи.]
  
 
[https://docs.google.com/spreadsheets/d/1LqW4k7heilZ8i1B7NCMGcr41kd5Pz1gIyD5rrOyGZjI/edit?usp=sharing Список обязательных задач для каждого студента.]
 
[https://docs.google.com/spreadsheets/d/1LqW4k7heilZ8i1B7NCMGcr41kd5Pz1gIyD5rrOyGZjI/edit?usp=sharing Список обязательных задач для каждого студента.]
  
===Занятие 2.===
+
===Задание 2.===
 
Перед выполнением задания нужно установить библиотеку [http://pillow.readthedocs.org/en/latest/ Pillow].
 
Перед выполнением задания нужно установить библиотеку [http://pillow.readthedocs.org/en/latest/ Pillow].
  
Строка 22: Строка 22:
  
 
Замечание. Доступ к элементам pixels осуществляется так: pixels[i,j].
 
Замечание. Доступ к элементам pixels осуществляется так: pixels[i,j].
 +
 +
====Бонусные задачи====
 +
# Реализуйте масштабирование.
 +
# Реализуйте отражение.
 +
# Реализуйте размытие.
 +
# Напишите свой фильтр для обработки изображений.
 +
 +
===Задание 3===
 +
Решите 20 любых задач из [http://official.contest.yandex.ru/contest/642/ контеста Ввод-вывод].
 +
 +
====Бонусное задание. Шифрование RSA====
 +
# Реализуйте [https://ru.wikipedia.org/wiki/RSA#.D0.90.D0.BB.D0.B3.D0.BE.D1.80.D0.B8.D1.82.D0.BC_.D1.81.D0.BE.D0.B7.D0.B4.D0.B0.D0.BD.D0.B8.D1.8F_.D0.BE.D1.82.D0.BA.D1.80.D1.8B.D1.82.D0.BE.D0.B3.D0.BE_.D0.B8_.D1.81.D0.B5.D0.BA.D1.80.D0.B5.D1.82.D0.BD.D0.BE.D0.B3.D0.BE_.D0.BA.D0.BB.D1.8E.D1.87.D0.B5.D0.B9 алгоритм создания открытого и секретного ключей].
 +
# Реализуйте [https://ru.wikipedia.org/wiki/RSA#.D0.A8.D0.B8.D1.84.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5_.D0.B8_.D1.80.D0.B0.D1.81.D1.88.D0.B8.D1.84.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D0.B5 алгоритмы шифрования и дешефрования]. Проверьте, что они работают.
 +
# Реализуйте алгоритм взлома. Функция должна принимать аргументы c, n и m (см. обозначения в Википедии) и возвращать d, приватный ключ, такое что m == c^d mod n.
 +
# Выберите некоторое значение m, например, m=100. Выведите таблицу:
 +
{|class="standard"
 +
!n=11*13=143
 +
!n=17*31=527
 +
!n=109*157=17113
 +
!n=3557*2579=9173505
 +
!n=3533*3571=12616343
 +
|-
 +
!
 +
|
 +
|
 +
|}

Версия 22:22, 12 сентября 2014

Подготовка к занятиям

Для выполнения заданий необходимо установить интерпретатор Python.

Style guide.

Задачи, которые точно нужно уметь решать.

Рекомендации по выполнению

  1. Не используйте wildcard imports (from <module> import *), см. PEP8.
  2. Знак присваивания обособляйте пробелами с двух сторон. Плохо: a=b. Хорошо: a = b.
  3. Если требуется сравнить два числа с плавающей точкой (float) на равенство, то сравнивайте модуль их разницы с некоторым eps: |d1 - d2| < 0.0000001.

Задание 1. Ввод-вывод

Задачи.

Список обязательных задач для каждого студента.

Задание 2.

Перед выполнением задания нужно установить библиотеку Pillow.

Задачи.

Замечание. Доступ к элементам pixels осуществляется так: pixels[i,j].

Бонусные задачи

  1. Реализуйте масштабирование.
  2. Реализуйте отражение.
  3. Реализуйте размытие.
  4. Напишите свой фильтр для обработки изображений.

Задание 3

Решите 20 любых задач из контеста Ввод-вывод.

Бонусное задание. Шифрование RSA

  1. Реализуйте алгоритм создания открытого и секретного ключей.
  2. Реализуйте алгоритмы шифрования и дешефрования. Проверьте, что они работают.
  3. Реализуйте алгоритм взлома. Функция должна принимать аргументы c, n и m (см. обозначения в Википедии) и возвращать d, приватный ключ, такое что m == c^d mod n.
  4. Выберите некоторое значение m, например, m=100. Выведите таблицу:
n=11*13=143 n=17*31=527 n=109*157=17113 n=3557*2579=9173505 n=3533*3571=12616343