Спец. выч. практикум, 422 гр., спец. MМ

Место и время проведения: среда, 2408, вторая и третья пары.
Преподаватель: Шлемов Александр Юрьевич
Обычно я бываю на кафедре еще по вторникам и четвергам, желающие могут что-то спросить/показать


Объявления:

  • В связи с новыми веяниями, я буду по желанию доступен завтра(14 декабря) на БП и/или на 4 паре. О желании желательно меня оповестить письмом или СМС.
  • Зачет по статистике прошел. Несдавшие в количестве двух человек, могут договариваться со мной отдельно.
  • Окончательный список вопросов.
  • Примеры КД, как я посмотрел, верны для 2005 Studio и в некоторых вопросах только для нее. В частности, вместо метода OnPaint надо редактировать готовый метод OnDraw. Создавать свой обработчик события перерисовки не надо. И использовать, соответственно, не dc., а pDC→. Примеры НЭ более подробны и проверены=)
  • Достойные примеры работы с MFC можно посмотреть у ваших предшественников здесь(КД) и здесь(НЭ)
  • Зачет прошел, несдавшие (в количестве одного человека) могут договариваться со мной частным порядком.

Содержание занятий:

01.09

  • О планах на семестр, тест, разбор теста (кроме ООП), начало разговора об абстрактных методах, «воспоминания» об ООП

Материалы:

  • Дополнение к разобранному на занятии (пример с перегрузкой оператора «по всем правилам искусства» и пример заменой символа в строке) Его можно посмотреть дома, он снабжен комментариями; но на занятии мы его разберем подробно, когда будем говорить про const.
  • Википедия про ООП Внизу страницы есть осмысленные ссылки. Смотреть, если интересуют красивые определения
  • Статья нашего выпускника про ООП, написано по сути.

Домашнее задание:

  • Еще раз рассмотреть тест этого занятия
  • Рассмотреть тест прошлого года
  • Рассмотреть приложенный пример со стеками

08.09

  • Еще немного тестов: разбор теста прошлого года, доразбор второй части первого теста
  • Разбор примера со стеками
  • public, private, protected, маскирование
  • Порядок вызовов, «жизненный цикл» объекта. О виртуальных деструкторах
  • Что необходимо реализовать в каждом классе, использующем выделяемый ресурс
  • Отладка на MSVS
  • const, передача параметров, порядок передачи параметров

Домашнее задание:


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 из примера на перегрузку операторов следующим образом:

  1. Память должна выделяться-освобождаться, массивы должны корректно копироваться
  2. При обращении за границу массива справа, массив должен сам расширяться. Если вызывается оператор const[], то можно использовать const_cast для принудительного лечения)
  3. При обращении за границу массива слева (по отрицательному индексу) должно выдаваться исключение. Продемонстрируйте перехват этого исключения в программе. UPD Так как тип size_t является беззнаковым, надо проверять не условие (inx < 0), которое всегда ложь, а условие (inx > MAX_SIZE), так как отрицательные цисла при привращении в беззнаковые становятся большими положительными.
  4. Нужно перегрузить операторы + и +=, так, чтобы они обеспечивали сцепление массивов (конкатенацию)
  5. Для индексации массива использовать не 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 + + + + + +

Пояснения: Число в клетке — количество попыток (задание получено, проверено и прокомментировано), плюс — зачет, звездочка — штраф, вопросик — есть недочеты, отправлено на шлифовку.

study/fall2010/4mm_cpp.txt · Последнее изменение: 2010/12/26 23:24 — ash
Наверх
CC Attribution-Noncommercial-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0