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

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(C++)
Строка 1: Строка 1:
 +
==О курсе==
 
[https://groups.google.com/forum/?hl=ru#!forum/amcs105-1 Форум.]
 
[https://groups.google.com/forum/?hl=ru#!forum/amcs105-1 Форум.]
 +
 +
=== Алгоритм подсчёта итоговой оценки по курсу ===
 +
В курсе предусмотрены следующие виды работ: четыре домашние работы, контрольная и экзамен. За каждую из шести работ выставляется оценка от 0 до 10 включительно. При этом 20% от оценки за домашнюю работу составляет оценка за текущие работы:
 +
 +
<оценка за текущую работу> = (<количество выполненных обязательных заданий в установленный срок> + 0.5 * <количество выполненных обязательных заданий позже установленного срока> + 0.3 * <количество выполненных необязательных заданий>) / <количество обязательных заданий>
 +
 +
<итоговая оценка за текущую работу> = min(<оценка за текущую работу>, 10)
 +
 +
<итоговая оценка за домашнюю работу (ИОДР)> = 0.8 * <оценка за домашнюю работу> + 0.2 * <итоговая оценка за текущие работы>
 +
 +
<итоговая оценка по курсу> = 0.6 * (<ИОДР 1> + <ИОДР 2> + <ИОДР 3> + <ИОДР 4>)/4 + 0.15 * <оценка по контрольной работе> + 0.25 * <оценка за экзамен>
  
 
==Питон==
 
==Питон==
Строка 14: Строка 26:
 
# Знак присваивания обособляйте пробелами с двух сторон. Плохо: a=b. Хорошо: a = b.
 
# Знак присваивания обособляйте пробелами с двух сторон. Плохо: a=b. Хорошо: a = b.
 
# Если требуется сравнить два числа с плавающей точкой (float) на равенство, то сравнивайте модуль их разницы с некоторым eps: |d1 - d2| < 0.0000001.
 
# Если требуется сравнить два числа с плавающей точкой (float) на равенство, то сравнивайте модуль их разницы с некоторым eps: |d1 - d2| < 0.0000001.
 
=== Алгоритм подсчёта итоговой оценки по курсу ===
 
В курсе предусмотрены следующие виды работ: четыре домашние работы, контрольная и экзамен. За каждую из шести работ выставляется оценка от 0 до 10 включительно. При этом 20% от оценки за домашнюю работу составляет оценка за текущие работы:
 
 
<оценка за текущую работу> = (<количество выполненных обязательных заданий в установленный срок> + 0.5 * <количество выполненных обязательных заданий позже установленного срока> + 0.3 * <количество выполненных необязательных заданий>) / <количество обязательных заданий>
 
 
<итоговая оценка за текущую работу> = min(<оценка за текущую работу>, 10)
 
 
<итоговая оценка за домашнюю работу (ИОДР)> = 0.8 * <оценка за домашнюю работу> + 0.2 * <итоговая оценка за текущие работы>
 
 
<итоговая оценка по курсу> = 0.6 * (<ИОДР 1> + <ИОДР 2> + <ИОДР 3> + <ИОДР 4>)/4 + 0.15 * <оценка по контрольной работе> + 0.25 * <оценка за экзамен>
 
  
 
===Задание 1. Ввод-вывод (4.09 - 20.09)===
 
===Задание 1. Ввод-вывод (4.09 - 20.09)===

Версия 17:57, 9 октября 2014

О курсе

Форум.

Алгоритм подсчёта итоговой оценки по курсу

В курсе предусмотрены следующие виды работ: четыре домашние работы, контрольная и экзамен. За каждую из шести работ выставляется оценка от 0 до 10 включительно. При этом 20% от оценки за домашнюю работу составляет оценка за текущие работы:

<оценка за текущую работу> = (<количество выполненных обязательных заданий в установленный срок> + 0.5 * <количество выполненных обязательных заданий позже установленного срока> + 0.3 * <количество выполненных необязательных заданий>) / <количество обязательных заданий>

<итоговая оценка за текущую работу> = min(<оценка за текущую работу>, 10)

<итоговая оценка за домашнюю работу (ИОДР)> = 0.8 * <оценка за домашнюю работу> + 0.2 * <итоговая оценка за текущие работы>

<итоговая оценка по курсу> = 0.6 * (<ИОДР 1> + <ИОДР 2> + <ИОДР 3> + <ИОДР 4>)/4 + 0.15 * <оценка по контрольной работе> + 0.25 * <оценка за экзамен>

Питон

Полезные ссылки

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

Style guide.

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

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

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

Задание 1. Ввод-вывод (4.09 - 20.09)

Задачи.

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

Задание 2 (6.09 - 20.09)

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

Задачи.

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

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

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

Задание 3 (13.09 - 27.09)

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

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

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

На пересечении i-ой строки и j-ого столбца должно стоять четыре неотрицательных числа --- время работы каждого из четырёх алгоритмов при заданных e и n. Если данное e не взаимно просто с n, поставить прочерк.

Задание 4 (18.09 - 2.10)

Если в вашей фамилии чётное число букв, то решите все чётные задачи из контеста Обработка текста, иначе все нечётные.

Домашнее задание 1 (26.09 - 6.10)

Первое большое домашнее задание. Каждому студенту требуется сделать пять задач из 20. Список обязательных задач здесь.

При оценке домашнего задания будут учитываться оценки за задания 1-4.

Копия домашней работы. Если вы что-то решили/нашли ошибку после окончания срока сдачи домашней работы, вы можете отправить решения туда, чтобы проверить их. Эти результаты не будут учтены при оценке домашней работы.

Внимание! После 6.10 задания 1-4 и первая домашняя работа не принимаются.

C++

Среда разработки

Лучше всего использовать Eclipse. Инструкция по созданию проекта Eclipse.

Если не получится установить или запустить, то можно:

  1. Использовать Visual Studio (только для тех, кто в ней уже работал).
  2. Использовать онлайн компилятор: compileonline или ideone. В ideone требуется поменять язык с Java на C++11. В обоих компиляторах требуется в поле ввода stdin вписать значения, которые подаются программе на вход. Например, для первой программы из примера ниже, можно написать "24" (без кавычек), для второй "0.2 1.1".

Примеры программ

Требуется спросить у пользователя его возраст, а затем вывести возраст и 1, если он больше 20, и 0, если меньше или равен.

#include <iostream>
using namespace std;
 
int main() {
    int age; // объявление целочисленной переменной в которой будет храниться возраст
    cout << "How old are you?" << endl;
    cin >> age; // чтение с консоли
    cout << "Your age: " << age << ", it's more than 20: " << (age > 20) << endl;
}

Пользователь вводит два вещественных числа step и bound. Требуется вывести вещественные все числа через пробел, начиная с 0 с шагом step и не превосходящие bound.

#include <iostream>
using namespace std;
 
int main() {
    double step;
    cin >> step;
    double bound;
    cin >> bound;
    for (double d=0; d < bound; d += step) {
        cout << d << " ";
    }
}

Задание 1 (08.10-22.10)

Введение в C++. Нужно сделать 9 любых задач из 10.