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

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск
(02.11)
(Семинары)
 
(не показаны 23 промежуточные версии этого же участника)
Строка 1: Строка 1:
 
== Общая информация ==
 
== Общая информация ==
 +
 +
Репозиторий с кодом с семинаров: https://github.com/akashin/HSE_CPP_Seminars
  
 
Почта: kashin.andrej@gmail.com
 
Почта: kashin.andrej@gmail.com
Строка 5: Строка 7:
 
== Семинары ==
 
== Семинары ==
  
=== 02.11 ===
+
=== 02.11.2016 ===
 +
 
 +
==== Linux ====
  
 
How to install Linux?
 
How to install Linux?
Строка 34: Строка 38:
 
* pip install cpplint --user
 
* pip install cpplint --user
 
* Or download here https://github.com/google/styleguide/blob/gh-pages/cpplint/cpplint.py
 
* Or download here https://github.com/google/styleguide/blob/gh-pages/cpplint/cpplint.py
 +
 +
* Более удобная консоль iTerm2 для OSX: https://www.iterm2.com/
 +
 +
===== Zsh =====
 +
Замена стандартного интерпретатора Bash, гибкий в настройке, поддерживает много полезных плагинов
 +
* Руководство по установке: https://gist.github.com/derhuerst/12a1558a4b408b3b2b6e
 +
* Плагины: https://github.com/robbyrussell/oh-my-zsh
 +
 +
===== Vim =====
 +
* Хороший туториал: https://github.com/mhinz/vim-galore
 +
 +
===== Сайты для изучения UNIX инструментов =====
 +
* Online judge для задач с использованием unix инструментов: https://www.hackerrank.com/domains/shell/bash
 +
* Изучение команд linux в форме CTF соревнования: http://overthewire.org/wargames/bandit/
 +
* Набор отличных гайдов про Линукс и Bash: http://ryanstutorials.net/
 +
 +
==== C++ ====
  
 
Ссылка на контест: https://official.contest.yandex.ru/contest/3154/problems/
 
Ссылка на контест: https://official.contest.yandex.ru/contest/3154/problems/
 +
 +
* Хорошая онлайн документация по C++: http://en.cppreference.com/w/
 +
* Список математических функций доступных в C++: http://en.cppreference.com/w/cpp/numeric/math
 +
 +
==== C++ books ====
 +
* Хорошая и очень подробная книга по C++ http://www.stroustrup.com/4th.html
 +
* Список литературы по C++ на любой вкус и с подробным описанием: http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list/388282#388282
 +
 +
---------------
 +
 +
=== 03.11.2016 ===
 +
 +
Материалы семинара: https://github.com/akashin/HSE_CPP_Seminars/tree/master/03.11.2016
 +
 +
* Список манипуляторов выходного потока для форматирования вывода: http://en.cppreference.com/w/cpp/io/manip
 +
* Целочисленные типы с фиксированной шириной: http://en.cppreference.com/w/cpp/types/integer
 +
 +
==== Fun facts ====
 +
* Быстрое вычисление квадратного корня, которое использовалось в Quake 3: https://en.wikipedia.org/wiki/Fast_inverse_square_root
 +
 +
--------------
 +
 +
=== 09.11.2016 ===
 +
 +
Материалы семинара: https://github.com/akashin/HSE_CPP_Seminars/tree/master/09.11.2016
 +
 +
* Список методов контейнера std::vector<T>: http://en.cppreference.com/w/cpp/container/vector
 +
* Сравнение передачи параметров в функцию по ссылке и по значению: https://www.cs.fsu.edu/~myers/c++/notes/references.html
 +
* Параметры фукнций со значением по умолчанию: http://www.learncpp.com/cpp-tutorial/77-default-parameters/
 +
 +
=== 23.11.2016 ===
 +
 +
Разбор контрольной: https://github.com/akashin/HSE_CPP_Seminars/tree/master/Quiz/17.11.2016/1
 +
 +
* Библиотека алгоритмов: http://en.cppreference.com/w/cpp/algorithm
 +
На семинаре мы реализовали:
 +
* rotate
 +
* merge
 +
* partitiion
 +
 +
Бонусное задание: почитать как работает stable_partition без дополнительной памяти.
 +
 +
* Библиотека контейнеров: http://en.cppreference.com/w/cpp/container
 +
Бонусное задание: придумать как имитировать erase для priority_queue используя unordered_set.
 +
 +
=== 30.11.2016 ===
 +
 +
Материалы семинара: https://github.com/akashin/HSE_CPP_Seminars/tree/master/30.11.2016
 +
 +
* Реализовали std::reverse для RandomAccessIterator и BidirectionalIterator
 +
* Аккуратно решили задачу про Спиральку: https://github.com/akashin/HSE_CPP_Seminars/blob/master/homeworks/3/spiral.cpp
 +
* Реализовали свой Underlying контейнер для стека основанный на std::set
 +
 +
=== 1.12.2016 ===
 +
 +
Контрольная.
 +
 +
Решения первого варианта: https://github.com/akashin/HSE_CPP_Seminars/tree/master/Quiz/01.12.2016/2
 +
 +
=== 7.12.2016 ===
 +
 +
Материалы семинара: https://github.com/akashin/HSE_CPP_Seminars/tree/master/07.12.2016
 +
 +
* Обсудили задачи со второй контрольной
 +
* Полезный инструмент для работы с построчным считыванием, std::stringstream: http://doc.bccnsoft.com/docs/cppreference_en/cppsstream/all.html
 +
* Пример того, как обойти проблему одновременного применения cin и getline: http://stackoverflow.com/a/164694
 +
* Решили задачу про декодирование UTF-8
 +
* Поговорили про переопределение операторов внутри класса vs снаружи класса
 +
* Написали класс Bitset с методами set/get/count
 +
 +
Бонус:
 +
* Реализовать оператор [] для Bitset'а
 +
* Посчитать количество единичных бит в числе с помощью арифметических операций, число которых пропорционально количеству единичных бит
 +
 +
=== 14.12.2016 ===
 +
 +
* Обсудили стандартные ошибки на ревью и критерии зачета.
 +
Список наиболее частых ошибок: https://github.com/akashin/HSE_CPP_Seminars/blob/master/Review.md
 +
 +
* Обсудили задачу по реализации dense Полинома из домашнего задания и реализовали большинство методов (кроме /, %, &, gcd).

Текущая версия на 13:48, 14 декабря 2016

Общая информация

Репозиторий с кодом с семинаров: https://github.com/akashin/HSE_CPP_Seminars

Почта: kashin.andrej@gmail.com

Семинары

02.11.2016

Linux

How to install Linux?

Useful Unix tools:

  • Navigation: ls, cd,
  • Work with file system: cp, mv, rm
  • Work with files: cat, head, tail, sort, uniq, wc
  • Interaction between programs: pipes, redirection, <, >, >>, stdin, stdout, stderr
  • Text editors and IDEs: vim, Atom, CLion

Get C++ compiler:

  • OSX: brew install homebrew/versions/llvm38
  • Ubuntu: sudo apt-get install clang-3.8

Copiling code:

  • Compilers: clang++, g++
  • Useful flags: -Wall -Wextra -Wconvertion

Running code:

  • ./a.out < input.txt

Installing cpplint:

Zsh

Замена стандартного интерпретатора Bash, гибкий в настройке, поддерживает много полезных плагинов

Vim
Сайты для изучения UNIX инструментов

C++

Ссылка на контест: https://official.contest.yandex.ru/contest/3154/problems/

C++ books


03.11.2016

Материалы семинара: https://github.com/akashin/HSE_CPP_Seminars/tree/master/03.11.2016

Fun facts


09.11.2016

Материалы семинара: https://github.com/akashin/HSE_CPP_Seminars/tree/master/09.11.2016

23.11.2016

Разбор контрольной: https://github.com/akashin/HSE_CPP_Seminars/tree/master/Quiz/17.11.2016/1

На семинаре мы реализовали:

  • rotate
  • merge
  • partitiion

Бонусное задание: почитать как работает stable_partition без дополнительной памяти.

Бонусное задание: придумать как имитировать erase для priority_queue используя unordered_set.

30.11.2016

Материалы семинара: https://github.com/akashin/HSE_CPP_Seminars/tree/master/30.11.2016

1.12.2016

Контрольная.

Решения первого варианта: https://github.com/akashin/HSE_CPP_Seminars/tree/master/Quiz/01.12.2016/2

7.12.2016

Материалы семинара: https://github.com/akashin/HSE_CPP_Seminars/tree/master/07.12.2016

  • Обсудили задачи со второй контрольной
  • Полезный инструмент для работы с построчным считыванием, std::stringstream: http://doc.bccnsoft.com/docs/cppreference_en/cppsstream/all.html
  • Пример того, как обойти проблему одновременного применения cin и getline: http://stackoverflow.com/a/164694
  • Решили задачу про декодирование UTF-8
  • Поговорили про переопределение операторов внутри класса vs снаружи класса
  • Написали класс Bitset с методами set/get/count

Бонус:

  • Реализовать оператор [] для Bitset'а
  • Посчитать количество единичных бит в числе с помощью арифметических операций, число которых пропорционально количеству единичных бит

14.12.2016

  • Обсудили стандартные ошибки на ревью и критерии зачета.

Список наиболее частых ошибок: https://github.com/akashin/HSE_CPP_Seminars/blob/master/Review.md

  • Обсудили задачу по реализации dense Полинома из домашнего задания и реализовали большинство методов (кроме /, %, &, gcd).