#prepsGroup:read,write,delete,revert,admin Known:read,write All:read

= Факультатив по языку программирования C++ =
== Весна 2019 ==
== Преподаватель Алексей Сальников ==

=== Как склонировать репозиторий ===
 1. Поставить git https://git-scm.com/
 2. Для каждого участника на машине kodomo есть свой git репозиторий. Для его клонирования необходимо выполнить команду:

    || git clone ssh://login_on_kodomo@kodomo.fbb.msu.ru/srv/databases/git_repos/login_on_kodomo path_to_clone ||
    

    login_on_kodomo - собственно актуальный login студента, path_to_clone - путь куда клонировать, 
    все поддиректории должны существоваать.

=== Задание 1 (простейшее тестовое) ===

Требуется написать программу, которая проверяет, как число типа double приводится к целому.
В программе необходимо объявить несколько целочисленных переменных и несколько переменных, задающих числа с  плавающей точкой. Переменные должны содержать в себе приведённые значения от чисел с плавающей точкой к знаковому целому.

Требуется подобрать числа так, чтобы по математическим правилам было округление вверх, вниз, и отдельно рассмотреть случай 0.5.

Для каждой пары чисел требуется напечатать с помощью функции "printf" значение числа с плавающей точкой и приведённое целочисленное значение, куда было произведено преобразование.

=== Задание 2 ===

Написать программу, проверяющую little endian  или big endian на той архитектуре, где запущена программа.

=== Задание 3 (Упаковка ДНК) ===

Требуется написать 2 функции: "Упаковщик" строки DNA/RNA в массив uint32_t и "Распаковщик" из массива uint32_t в строку типа char*.

Прототип функций следующий:
{{{
int dna_pack(const char *unpacked_str, uint32_t **packed_array_pointer);

int dna_unpack(const uint32_t *packed_array, char **unpacked_str_pointer);
}}}

Функции должны выделять память под строки с результатом и 
сообщать об ошибках в виде кода ошибки в возвращаемом значении, в случае невозможности выделить память, 
либо встречи некорректного символа (например буквы n.) Во входной строке большие и маленькие буквы неразлечимы.

В процессе распаковки выдавать буквы в нижнем регистре.

Предполагается, что память будет освобождена тем, кто использует данные функции. Не допустимы утечки памяти.
На утечки можно проверить с помощью программы "valgrind".

К функциям необходимо создать простейшую тестирующую их программу. 

=== Задание 4 (программа выравнивания нуклеотидных последовательностей) ===
{{{#!wiki message
В процессе подготовки
}}}
[[http://kodomo.fbb.msu.ru/~sas/example/example.fasta|Пример]] для тестирования (годится и для предыдущего задания, если написать разбор fasta-формата).

----
[[https://docs.google.com/spreadsheets/d/1zmqFFRrwQaontXyM19rCqn1vQJ1XBW40Kd8dPrqp9zk|Гугло табличка со сдачей заданий]].
----
== Список литературы ==
 * Брайан Керниган, Деннис Ритчи. Язык программирования C. — Москва: Вильямс, 2015. — 304 с.
 * А.В.Столяров. Операционная среда ОС UNIX для изучающих программирование. (Архитектура ЭВМ и СПО. Пособие для выполнения лабораторных работ в ОС UNIX. М.: МГТУГА, 2008)
 * Курячий Г. В., Маслинский К. А. Операционная система Linux. — ALT Linux Москва, 2010. — С. 347.
 * Скотт Чакон, Бен Штрауб Git для профессионального программиста – Питер, Санкт-Петербург, 2017, 496 стр.
 * Бьерн Страуструп Дизайн и эволюция языка C++ – ДМК Пресс, Санкт-Петербург, 2006, 448 стр.
 * Бьерн Страуструп: Язык программирования C++. Специальное издание - Бином, 2017, 1136 стр.
 * Андрей Александреску Современное проектирование на С++: Обобщенное программирование и прикладные шаблоны проектирования,  Вильямс, 2015, 336 стр.
 * Николаи М. Джосаттис Стандартная библиотека C++: справочное руководство -  Вильямс, 2017, 1136 стр.
 * Скотт Мейерс Эффективный и современный С++. 42 рекомендации по использованию C++11 и C++14 - Вильямс, 2016
 * Скотт Мейерс Эффективное использование STL - Питер, 2002 , 224 стр.
 * А.В.Столяров. Введение в язык Си++. Издание четвёртое. М: МАКС Пресс, 2018, 136 стр.