Содержание
Спец. выч. практикум, 422 гр., спец. MМ
Место и время проведения: среда, 2408, вторая и третья пары.
Преподаватель: Шлемов Александр Юрьевич
Обычно я бываю на кафедре еще по вторникам и четвергам, желающие могут что-то спросить/показать
Объявления:
- В связи с новыми веяниями, я буду по желанию доступен завтра(14 декабря) на БП и/или на 4 паре. О желании желательно меня оповестить письмом или СМС.
- Зачет по статистике прошел. Несдавшие в количестве двух человек, могут договариваться со мной отдельно.
- Окончательный список вопросов.
- Примеры КД, как я посмотрел, верны для 2005 Studio и в некоторых вопросах только для нее. В частности, вместо метода OnPaint надо редактировать готовый метод OnDraw. Создавать свой обработчик события перерисовки не надо. И использовать, соответственно, не dc., а pDC→. Примеры НЭ более подробны и проверены
- Зачет прошел, несдавшие (в количестве одного человека) могут договариваться со мной частным порядком.
Содержание занятий:
01.09
- О планах на семестр, тест, разбор теста (кроме ООП), начало разговора об абстрактных методах, «воспоминания» об ООП
Материалы:
- Дополнение к разобранному на занятии (пример с перегрузкой оператора «по всем правилам искусства» и пример заменой символа в строке) Его можно посмотреть дома, он снабжен комментариями; но на занятии мы его разберем подробно, когда будем говорить про const.
- Википедия про ООП Внизу страницы есть осмысленные ссылки. Смотреть, если интересуют красивые определения
- Статья нашего выпускника про ООП, написано по сути.
Домашнее задание:
- Еще раз рассмотреть тест этого занятия
- Рассмотреть тест прошлого года
- Рассмотреть приложенный пример со стеками
08.09
- Еще немного тестов: разбор теста прошлого года, доразбор второй части первого теста
- Разбор примера со стеками
- public, private, protected, маскирование
- Порядок вызовов, «жизненный цикл» объекта. О виртуальных деструкторах
- Что необходимо реализовать в каждом классе, использующем выделяемый ресурс
- Отладка на MSVS
- const, передача параметров, порядок передачи параметров
Домашнее задание:
- Рассмотреть еще один тест
- Рассмотреть примеры перегрузки операторов (будем разбирать)
- (1) Написать программу «Треугольник, круг, прямоугольник»
15.09
- Приведение типов
- Перегрузка операторов. Что и как
- Несколько способов объявить константу
- Компиляция, компоновка
- Модульность. .h и .cpp файлы. extern. #include, #pragma
- Директивы условной компиляции. Препроцессор. Макросы. Debug vs Release
- Введение в exceptions
Домашнее задание
- Разобрать все-таки тесты! Я перестал получать вопросы.
- (2) Написать программу «Динамический массив»
Материалы
- Про приведение типов от Алены (к слову, рекомендую этот блог)
- Цикл статей на Хабре про устройство компилятора и как написать свой. Для очень интересующихся
22.09
- Идея шаблонов (templates). Понятие об обобщенном программировании
- Инстанцирование шаблона. Специализация
- Выведение типа шаблона
- Шаблонные классы
- Функциональный объект
- Введение в MFC, общие слова об идеях MFC
- Создание проекта, добавление кнопок, пунктов меню и хоткеев
Материалы
- Обещанный пример с исключениями
Домашнее задание
- Сделать задание по MFC (3)
- Самим потренироваться создавать проекты и добавлять разные элементы. Рекомендуется посмотреть примеры прошлого года
29.09
- Потоки и их возможности
- Каркас графического редактора на MFC
Материалы
- Много и толково про потоки ввода-вывода
- Академично на английском (рекомендую этот тоже) сайт
Домашнее задание
- Дописать редактор на MFC
29.09
- Подготовка к зачету
6.10
- Подготовка к зачету, тесты и прочее
13.10
- Зачет по С/С++ (4/6/7)
20.10
- Моделирования случайных величин
- Обратные функции
- Табличный метод и его оптимизации (дихотомия, Чжень, Walker)
- Преобразования Бокса-Мюллера и нормальное распределение
- Степенное (x^\alpha)
- Отбор как идея и общий случай (да, да, где производная Радона-Никодима)
27.10
- Случайный генератор вообще и мультипликативный — как пример
- Воспоминания о статистических критериях
2.11
- «Мышка и морковка»
- Еще разговоры о статистике
- Немного MFC
10.11
- Постановка задачи «большой программы»
- Практика по MFC
17.11
- Подготовка к зачету
- Практика по MFC
24.11
- Зачет (3/3/6)
- Обсуждение большой программы
- Класс std::vector<>
01.12
- Обсуждение большой программы. Графика.
- Самостоятельная работа. Консультации.
Дальнейшие планы
- Самостоятельная работа
- Еще немного про С++
- Сдача долгов
Домашние задания и комментарии к ним
(1) Фигуры "Треугольник, прямоугольник и круг"
Написать программу, состоящую из четырех классов. Фигура, Треугольник, Прямоугольник и Круг. Фигура — базовый класс, остальные — наследники. В базовом классе объявить три метода: площадь, периметр и название. Для наследников определить конструкторы с достаточными параметрами (для круга, к примеру, радиус) и реализовать методы базового класса. Далее в main() создается массив длины N (к примеру, 20) указателей на Фигура и заполняется случайными фигурами со случайными параметрами. Далее необходимо пройтись по массиву в цикле и вывести для каждой фигуры строку вида: «Привет, я треугольник, моя площадь 6, периметр 12».
Использовать стандартный генератор случайных чисел не рекомендуется. Рекомендуется использовать "генератор СтатМода". Задание присылать на почту, можно принести на занятие, 15 сентября, в среду. Крайний срок — вечер среды, 15 сентября. Неприславшие будут поощряться дополнительными заданиями.
(2) Динамический массив
Дописать класс Array из примера на перегрузку операторов следующим образом:
- Память должна выделяться-освобождаться, массивы должны корректно копироваться
- При обращении за границу массива справа, массив должен сам расширяться. Если вызывается оператор const[], то можно использовать const_cast для принудительного лечения)
- При обращении за границу массива слева (по отрицательному индексу) должно выдаваться исключение. Продемонстрируйте перехват этого исключения в программе. UPD Так как тип size_t является беззнаковым, надо проверять не условие (inx < 0), которое всегда ложь, а условие (inx > MAX_SIZE), так как отрицательные цисла при привращении в беззнаковые становятся большими положительными.
- Нужно перегрузить операторы + и +=, так, чтобы они обеспечивали сцепление массивов (конкатенацию)
- Для индексации массива использовать не int, а специальный тип size_t
Крайний срок — вечер воскресенья, 26 сентября.
(3) Круг и квадрат
Написать на MFC программу, которая нарисует красный круг и вписанный в него зеленый квадрат. Добавить кнопку на тулбал и пункт меню. Связать с ними методы, выводящие сообщение. Программу принести на следующее занятие — будем разбираться с кисточками и прочим.
(4) Графический редактор I
Написать примитивный графический редактор на MFC, по образу и подобию mspaint.Основа для редактора(обновлена еще раз) выложена. Необходимо вычистить код и реализовать пять инструментов и кнопки переключения между ними. Желательно разобраться и сделать так, чтобы кнопки нажимались (опять же, как в Paint) Инструменты можно реализовать любые из панели Paint. Самое сложное — это выделение и кривые. Любители могут начать с них). Это задание будет нашим основным на протяжении нескольких следующих занятий, рекомендую приносить наработки в среду. Дедлайнов пока не назначаю.
(5) Графический редактор II
Добавить в программу из предыдущего задания два диалога: выбор цвета и выбор типа линии. Первый диалог использовать стандартный виндовый, второй — нарисовать самим.
(6) Консольная версия "большой программы"
Вот мы и подошли к главному заданию на семестр. В этом задании необходимо будет создать систему классов для работы с распределениями и продемонстрировать ее корректность на простых примерах. Интерфейс — самый минимальный. Распределения можно выбирать из списка. Детали задания и системы классов обсудим на ближайших занятиях. UPD Выложил архив со своей программой и коды функции распределения и функции квантилей для распределения хи-квадрат(pChi/xChi) UPD2 Выложил функцию квантилей для стандартного нормального распределения. Зеркало если предыдущая ссылка не работает. UPD3 Выложил приблизительную диаграмму классов для программы. По возможности, будет дополняться/перерисоваться. Если есть любители Visio и UML, могу выслать исходник.
Список личного состава и задачи
Фигуры(1) | Массив(2) | Круг-квадрат(3) | ЗАЧЕТ I | Редактор I(4) | Редактор II(5) | ЗАЧЕТ II | БП I(6) | БП II(7) | |
---|---|---|---|---|---|---|---|---|---|
Булович Надежда | + | * | + | + | + | + | + | ||
Векличева Мария | +5 | +2 | + | + | + | + | + | + | + |
Гольдвирт Серафима | +1 | *+ | + | + | + | + | |||
Золкин Никита | + | * | + | + | +? | + | + | +? | |
Чернышев Виталий | * | * | * | + | |||||
Яковлева Юлия | +2 | +2 | + | + | + | + | + | + |
Пояснения: Число в клетке — количество попыток (задание получено, проверено и прокомментировано), плюс — зачет, звездочка — штраф, вопросик — есть недочеты, отправлено на шлифовку.