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

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(Задание 1 Основные конструкции С++ (08.10-22.10))
Строка 12: Строка 12:
  
 
<итоговая оценка по курсу> = 0.6 * (<ИОДР 1> + <ИОДР 2> + <ИОДР 3> + <ИОДР 4>)/4 + 0.15 * <оценка по контрольной работе> + 0.25 * <оценка за экзамен>
 
<итоговая оценка по курсу> = 0.6 * (<ИОДР 1> + <ИОДР 2> + <ИОДР 3> + <ИОДР 4>)/4 + 0.15 * <оценка по контрольной работе> + 0.25 * <оценка за экзамен>
 +
 +
==C++==
 +
 +
===Среда разработки===
 +
Лучше всего использовать Eclipse. [http://hightech.in.ua/content/art-eclipse-c-cpp-ide Инструкция по созданию проекта Eclipse.]
 +
 +
Если не получится установить или запустить, то можно:
 +
# Использовать Visual Studio (только для тех, кто в ней уже работал).
 +
# Использовать онлайн компилятор: [http://www.compileonline.com/compile_cpp11_online.php compileonline] или [http://ideone.com/ ideone]. В ideone требуется поменять язык с Java на C++11. В обоих компиляторах требуется в поле ввода stdin вписать значения, которые подаются программе на вход. Например, для первой программы из примера ниже, можно написать "24" (без кавычек), для второй "0.2 1.1".
 +
 +
===Примеры программ===
 +
Требуется спросить у пользователя его возраст, а затем вывести возраст и 1, если он больше 20, и 0, если меньше или равен.
 +
<source lang="cpp">
 +
#include <iostream>
 +
using namespace std;
 +
 +
int main() {
 +
    cout << "How old are you?" << endl;
 +
    int age; // объявление целочисленной переменной в которой будет храниться возраст
 +
    cin >> age; // чтение с консоли
 +
    cout << "Your age: " << age << ", it's more than 20: " << (age > 20) << endl;
 +
}
 +
</source>
 +
 +
Пользователь вводит два вещественных числа step и bound. Требуется вывести вещественные все числа через пробел, начиная с 0 с шагом step и не превосходящие bound.
 +
<source lang="cpp">
 +
#include <iostream>
 +
using namespace std;
 +
 +
int main() {
 +
    double step;
 +
    double bound;
 +
    cin >> step >> bound;
 +
    for (double d=0; d < bound; d += step) {
 +
        cout << d << " ";
 +
    }
 +
}
 +
</source>
 +
===Задание 1 Основные конструкции С++ (08.10 - 22.10)===
 +
[http://official.contest.yandex.ru/contest/723/enter/ Введение в C++.] Нужно сделать 9 любых задач из 10.
 +
 +
===Задание 2. Функции (11.10 - 21.10)===
 +
[http://official.contest.yandex.ru/contest/732/enter/ Функции в C++.] Нужно сделать 7 любых задач из 8.
  
 
==Питон==
 
==Питон==
Строка 89: Строка 132:
  
 
'''Внимание!''' После 6.10 задания 1-4 и первая домашняя работа не принимаются.
 
'''Внимание!''' После 6.10 задания 1-4 и первая домашняя работа не принимаются.
 
==C++==
 
 
===Среда разработки===
 
Лучше всего использовать Eclipse. [http://hightech.in.ua/content/art-eclipse-c-cpp-ide Инструкция по созданию проекта Eclipse.]
 
 
Если не получится установить или запустить, то можно:
 
# Использовать Visual Studio (только для тех, кто в ней уже работал).
 
# Использовать онлайн компилятор: [http://www.compileonline.com/compile_cpp11_online.php compileonline] или [http://ideone.com/ ideone]. В ideone требуется поменять язык с Java на C++11. В обоих компиляторах требуется в поле ввода stdin вписать значения, которые подаются программе на вход. Например, для первой программы из примера ниже, можно написать "24" (без кавычек), для второй "0.2 1.1".
 
 
===Примеры программ===
 
Требуется спросить у пользователя его возраст, а затем вывести возраст и 1, если он больше 20, и 0, если меньше или равен.
 
<source lang="cpp">
 
#include <iostream>
 
using namespace std;
 
 
int main() {
 
    cout << "How old are you?" << endl;
 
    int age; // объявление целочисленной переменной в которой будет храниться возраст
 
    cin >> age; // чтение с консоли
 
    cout << "Your age: " << age << ", it's more than 20: " << (age > 20) << endl;
 
}
 
</source>
 
 
Пользователь вводит два вещественных числа step и bound. Требуется вывести вещественные все числа через пробел, начиная с 0 с шагом step и не превосходящие bound.
 
<source lang="cpp">
 
#include <iostream>
 
using namespace std;
 
 
int main() {
 
    double step;
 
    double bound;
 
    cin >> step >> bound;
 
    for (double d=0; d < bound; d += step) {
 
        cout << d << " ";
 
    }
 
}
 
</source>
 
===Задание 1 Основные конструкции С++ (08.10 - 22.10)===
 
[http://official.contest.yandex.ru/contest/723/enter/ Введение в C++.] Нужно сделать 9 любых задач из 10.
 
 
===Задание 2. Функции (11.10 - 21.10)===
 
[http://official.contest.yandex.ru/contest/732/enter/ Функции в C++.] Нужно сделать 7 любых задач из 8.
 

Версия 14:15, 15 октября 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 * <оценка за экзамен>

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() {
    cout << "How old are you?" << endl;
    int age; // объявление целочисленной переменной в которой будет храниться возраст
    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;
    double bound;
    cin >> step >> bound;
    for (double d=0; d < bound; d += step) {
        cout << d << " ";
    }
}

Задание 1 Основные конструкции С++ (08.10 - 22.10)

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

Задание 2. Функции (11.10 - 21.10)

Функции в C++. Нужно сделать 7 любых задач из 8.

Питон

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

Для выполнения заданий необходимо установить интерпретатор 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 и первая домашняя работа не принимаются.