Основы и методология программирования 2016/2017/167-1 — различия между версиями
Aumnov (обсуждение | вклад) (→02.11) |
Aumnov (обсуждение | вклад) (→07.12) |
||
(не показано 12 промежуточных версии этого же участника) | |||
Строка 2: | Строка 2: | ||
Время для консультаций (по предварительной договоренности): | Время для консультаций (по предварительной договоренности): | ||
− | * Среда | + | * Среда 13:30 - 16:00. |
− | * | + | * Четверг 12:30 - 13:30, 15:00 - 16:00. |
аудитория 623 | аудитория 623 | ||
Строка 9: | Строка 9: | ||
== Семинары == | == Семинары == | ||
+ | |||
+ | Код программ мы пишем в соответствии со [http://wiki.cs.hse.ru/%D0%9F%D1%80%D0%B0%D0%BA%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BD%D1%8F%D1%82%D0%B8%D1%8F_%D0%BF%D0%BE_%D0%BA%D1%83%D1%80%D1%81%D1%83_%D0%9E%D0%B8%D0%9C%D0%9F/C%2B%2B_check стилем] | ||
=== 02.11 === | === 02.11 === | ||
Строка 15: | Строка 17: | ||
* [http://overthewire.org/wargames/bandit/bandit0.html Освоение терминала в игровой форме] (более подробно, чем нужно на курсе) | * [http://overthewire.org/wargames/bandit/bandit0.html Освоение терминала в игровой форме] (более подробно, чем нужно на курсе) | ||
* [https://official.contest.yandex.ru/contest/3153/standings/ Контест на первые темы по C++] | * [https://official.contest.yandex.ru/contest/3153/standings/ Контест на первые темы по C++] | ||
+ | |||
+ | === 05.11 - 11.11 === | ||
+ | |||
+ | Вот несколько часто используемых ситуаций при работе с программами | ||
+ | |||
+ | * Компиляция с сохранением результата в заданный файл | ||
+ | $ clang++ mycode.cpp -o myoutput | ||
+ | |||
+ | * Компиляция для стандарта C++11 | ||
+ | $ clang++ mycode.cpp -std=c++11 | ||
+ | |||
+ | * Компиляция с оптимизацией | ||
+ | $ clang++ mycode.cpp -O3 | ||
+ | |||
+ | * Компиляция с сохранением информации для отладчика | ||
+ | $ clang++ mycode.cpp -g | ||
+ | |||
+ | * Запускаем отладчик, потом в нем ставим брейкпоинт и запускаем программу | ||
+ | |||
+ | $ gdb ./a.out | ||
+ | |||
+ | > break 42 | ||
+ | |||
+ | > run | ||
+ | |||
+ | * Перенаправляем вывод (stdout/cout) в output.txt, лог ошибок (stderr/cerr) в errorlog.txt и читаем ввод (stdin/cin) из input.txt | ||
+ | |||
+ | $ ./a.out < input.txt > output.txt 2> errorlog.txt | ||
+ | |||
+ | * Перенаправляем один из потоков "в корзину" | ||
+ | |||
+ | $ ./a.out > /dev/null | ||
+ | |||
+ | === 23.11 === | ||
+ | |||
+ | Страница с интерфейсами итераторов: http://www.cplusplus.com/reference/iterator/ | ||
+ | |||
+ | === 25.11 === | ||
+ | |||
+ | До следующего семинара нужно отправить задачи I, P в Anytask (см. инструкцию на главной), иначе оценка за эти задачи будет 0. По результатам ревью оценка может быть снижена в зависимости от качества кода и скорости исправлений (штраф может быть до 25 баллов). В дальнейшем дедлайн отправки будет совпадать с дедлайном для контеста. | ||
+ | |||
+ | Запуск программы с санитайзером valgrind: | ||
+ | |||
+ | $ g++ main.cpp -g | ||
+ | |||
+ | $ valgrind ./a.out | ||
+ | |||
+ | === 30.11 === | ||
+ | |||
+ | Стандартный срок исправлений ревью - 4 дня, пожалуйста следите за своими задачами (а лучше сделать себе уведомление на почту). | ||
+ | |||
+ | === 07.12 === | ||
+ | |||
+ | В AnyTask появились задачи из 4 и 5 контестов, их нужно туда отправить не позднее 09.12. | ||
+ | |||
+ | === 15.03 === | ||
+ | |||
+ | Задачи для подготовки к к/р: | ||
+ | |||
+ | 1. Переиндексацией массива будем называть следующую процедуру. Пусть есть массив | ||
+ | a[1], ... a[n] и набор индексов i[1], ... i[m]. Переиндексированный массив будет | ||
+ | состоять из элементов (b[1], ... b[m]) = (a[i[1]], ..., a[i[m]]). Напишите программу, | ||
+ | которая будет по индексу элемента в новом массиве определять его индекс в старом | ||
+ | массиве. Программа должна считывать с клавиатуры число n, индексы для переиндексации, | ||
+ | а также индекс нового элемента. Пользовательский ввод может быть некорректным, но | ||
+ | обрабатывать его нужно с помощью исключений: используйте vector.at() вместо vector.[] | ||
+ | и перехватывайте его исключения. | ||
+ | |||
+ | 2. Напишите иерархию классов для компьютерной игры (по мотивам одного из предыдущих | ||
+ | семинаров) и реализуйте для них функцию загрузки и функцию вывод информации на экран. | ||
+ | Вам нужно: | ||
+ | * Сделать иерархию из 3-х классов (родитель и два потомка). | ||
+ | * Определить в базовом классе функции загрузки и функции вывода данных на экран. | ||
+ | * Переопределить их по-разному в классах-наследниках. | ||
+ | * Сделать в одном из классов поле с опциональной инициализацией: при одних параметрах загрузки это поле создается, а при других - нет (не должен вызываться даже конструктор по умолчанию). | ||
+ | * Сделать функцию, которая загружает из файла набор объектов в вектор. | ||
+ | * Сделать функцию, которая получает вектор указателей на объекты и выводит информацию о всех на экран. |
Текущая версия на 01:51, 15 марта 2017
Содержание
Общая информация
Время для консультаций (по предварительной договоренности):
- Среда 13:30 - 16:00.
- Четверг 12:30 - 13:30, 15:00 - 16:00.
аудитория 623
Почта: alexeyum@gmail.com
Семинары
Код программ мы пишем в соответствии со стилем
02.11
- Туториал для работы с терминалом linux
- Освоение терминала в игровой форме (более подробно, чем нужно на курсе)
- Контест на первые темы по C++
05.11 - 11.11
Вот несколько часто используемых ситуаций при работе с программами
- Компиляция с сохранением результата в заданный файл
$ clang++ mycode.cpp -o myoutput
- Компиляция для стандарта C++11
$ clang++ mycode.cpp -std=c++11
- Компиляция с оптимизацией
$ clang++ mycode.cpp -O3
- Компиляция с сохранением информации для отладчика
$ clang++ mycode.cpp -g
- Запускаем отладчик, потом в нем ставим брейкпоинт и запускаем программу
$ gdb ./a.out
> break 42
> run
- Перенаправляем вывод (stdout/cout) в output.txt, лог ошибок (stderr/cerr) в errorlog.txt и читаем ввод (stdin/cin) из input.txt
$ ./a.out < input.txt > output.txt 2> errorlog.txt
- Перенаправляем один из потоков "в корзину"
$ ./a.out > /dev/null
23.11
Страница с интерфейсами итераторов: http://www.cplusplus.com/reference/iterator/
25.11
До следующего семинара нужно отправить задачи I, P в Anytask (см. инструкцию на главной), иначе оценка за эти задачи будет 0. По результатам ревью оценка может быть снижена в зависимости от качества кода и скорости исправлений (штраф может быть до 25 баллов). В дальнейшем дедлайн отправки будет совпадать с дедлайном для контеста.
Запуск программы с санитайзером valgrind:
$ g++ main.cpp -g
$ valgrind ./a.out
30.11
Стандартный срок исправлений ревью - 4 дня, пожалуйста следите за своими задачами (а лучше сделать себе уведомление на почту).
07.12
В AnyTask появились задачи из 4 и 5 контестов, их нужно туда отправить не позднее 09.12.
15.03
Задачи для подготовки к к/р:
1. Переиндексацией массива будем называть следующую процедуру. Пусть есть массив a[1], ... a[n] и набор индексов i[1], ... i[m]. Переиндексированный массив будет состоять из элементов (b[1], ... b[m]) = (a[i[1]], ..., a[i[m]]). Напишите программу, которая будет по индексу элемента в новом массиве определять его индекс в старом массиве. Программа должна считывать с клавиатуры число n, индексы для переиндексации, а также индекс нового элемента. Пользовательский ввод может быть некорректным, но обрабатывать его нужно с помощью исключений: используйте vector.at() вместо vector.[] и перехватывайте его исключения.
2. Напишите иерархию классов для компьютерной игры (по мотивам одного из предыдущих семинаров) и реализуйте для них функцию загрузки и функцию вывод информации на экран. Вам нужно:
- Сделать иерархию из 3-х классов (родитель и два потомка).
- Определить в базовом классе функции загрузки и функции вывода данных на экран.
- Переопределить их по-разному в классах-наследниках.
- Сделать в одном из классов поле с опциональной инициализацией: при одних параметрах загрузки это поле создается, а при других - нет (не должен вызываться даже конструктор по умолчанию).
- Сделать функцию, которая загружает из файла набор объектов в вектор.
- Сделать функцию, которая получает вектор указателей на объекты и выводит информацию о всех на экран.