Основы и методология программирования 2016/2017/167-1 — различия между версиями

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(07.12)
 
(не показано 14 промежуточных версии этого же участника)
Строка 2: Строка 2:
  
 
Время для консультаций (по предварительной договоренности):
 
Время для консультаций (по предварительной договоренности):
* Среда 11:00 - 12:00, 13:30 - 14:30
+
* Среда 13:30 - 16:00.
* Пятница 11:00 - 12:00, 13:40 - 15: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 ===
 +
 +
* [http://linuxcommand.org/index.php Туториал для работы с терминалом linux]
 +
* [http://overthewire.org/wargames/bandit/bandit0.html Освоение терминала в игровой форме] (более подробно, чем нужно на курсе)
 +
* [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

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-х классов (родитель и два потомка).
  • Определить в базовом классе функции загрузки и функции вывода данных на экран.
  • Переопределить их по-разному в классах-наследниках.
  • Сделать в одном из классов поле с опциональной инициализацией: при одних параметрах загрузки это поле создается, а при других - нет (не должен вызываться даже конструктор по умолчанию).
  • Сделать функцию, которая загружает из файла набор объектов в вектор.
  • Сделать функцию, которая получает вектор указателей на объекты и выводит информацию о всех на экран.