Программирование-2, группы 7112 и 7113

В этом семестре вы будете учиться создавать простые программы с GUI — графическим интерфейсом пользователя. Все примеры на занятиях будут показаны в среде Borland Developer Studio под OS Windows [:-(], однако допускается сдавать программы, написанные на любом языке программирования в любой среде: цель — освоить разработку оконных приложений, а не выучить конкретные среду разработки или язык.

Преподаватель: Александр Геннадьевич Фенстер, fenster@fenster.name, +7 913 9053295.

Правила оценки задач

Ниже описаны правила, которых я буду придерживаться при оценке задач и выставлении зачётов в конце семестра.

  1. Каждая задача оценивается в 0, 7, 8 или 9 баллов...
  1. Каждая задача оценивается в 0, 7, 8 или 9 баллов. Оценка 0 баллов ставится за несданную задачу, 7, 8 и 9 баллов соответствуют «тройке», «четвёрке» и «пятёрке» соответственно.
  2. Каждая задача может быть сдана на любом из занятий в этом семестре.
  3. Преподаватель имеет право не принимать у одного студента более двух задач за одно занятие.
  4. Допускается повторная сдача задач на повышение баллов (с учётом предыдущего пункта).
  5. В конце семестра оценки выставляются по следующим правилам:
    - менее 28 баллов — «неудовлетворительно»,
    - от 28 до 37 баллов включительно — «удовлетворительно»,
    - от 38 до 43 баллов включительно — «хорошо»,
    - 44 или 45 баллов — «отлично».
  6. По каждой задаче устанавливаются чёткие требования «на тройку», «на четвёрку», «на пятёрку» (они несколько размыты только для четвёртого задания). Задачи и требования в течение семестра не изменяются, неточности трактуются в пользу студентов. Наличие в окне программы кнопки Button1, окна с заголовком Form1 и прочих компонентов с выставленным по умолчанию именем снижает оценку на 1 балл (но не менее 7 баллов).
  7. Санкции за сдачу чужой задачи могут варьироваться от понижения оценки за задачу до замены задачи на совершенно другую.
  8. Сдача задачи по электронной почте допустима в исключительных случаях по предварительной договорённости.

Информация

Таблица результатов

Группа 7112 Группа 7113
# Фамилия, имя  1   2   3   4   5  Итого
Зачёт
1
Калёных Антон
9
9
9
7
8
42
хорошо
2
Кригер Владимир
9
9
9
7
7
41
хорошо
3
Кулакова Виктория
9
9
9
9
8
44
отлично
4
Лебедев Артём
9
9
9
8
7
42
хорошо
5
Мамонтов Александр
8
8
8
7
7
38
хорошо
6
Рассказова Диана
9
9
9
8
9
44
отлично
7
Соболев Александр
9
9
9
9
9
45
отлично
8
Уколов Вадим
9
9
8
8
9
43
хорошо
9
Фёдоров Михаил
9
9
8
8
7
41
хорошо
10
Шимонаева Мария
9
9
9
9
9
45
отлично
# Фамилия, имя  1   2   3   4   5  Итого
Зачёт
1
Абрамов Егор
9
9
9
9
9
45
отлично
2
Васечко Алёна
9
9
9
9
8
44
отлично
3
Григорьев Александр
9
9
9
9
8
44
отлично
4
Зуев Пётр
9
9
9
8
 
35
удовл
5
Колонтаев Станислав
9
9
9
9
8
44
отлично
6
Саввина Марина
9
9
9
8
7
42
хорошо
7
Сафрошкина Дарья
9
9
9
8
9
44
отлично
8
Тулакин Александр
9
9
9
9
8
44
отлично
9
Тупоногов Илья
9
9
9
 
9
36
удовл
10
Юркова Виктория
9
9
9
7
7
41
хорошо
Гистограмма

Задачи

Первые три задачи являются вводными, четвёртая и пятая серьёзнее. Планируйте своё время так, чтобы не пришлось писать программы в последний момент.
  1. Таблица Пифагора. Цель задания: освоение основных визуальных компонентов.
        [7 баллов] Пользователь вводит натуральное число N, по нажатию кнопки заполняется таблица (StringGrid) умножения размером N x N (как на обложке школьной тетради).
        [8 баллов] Выполняется проверка корректности ввода числа (например, обработчик метода OnKeyPress), размер таблицы (и, возможно, окна) изменяется так, чтобы в таблице не было свободного пространства.
        [9 баллов] Учим первоклассника таблице умножения: таблица изначально пустая (есть только заголовки строк и столбцов), пользователь каким-либо образом выбирает ячейку и вводит (в саму ячейку либо при помощи функции InputBox), программа проверяет ответ (и корректность ввода) и сообщает, когда вся таблица заполнена верно.

  2. Светофор. Цель задания: обучение работе с таймерами.
        [7 баллов] Используя компоненты Shape и Timer, продемонстрируйте работу светофора (красный, красный с жёлтым, зелёный, хорошо бы мигающий зелёный, затем жёлтый, снова красный и далее по циклу). Совет: введите переменную, хранящую номер текущего состояния, и массив цветов, и вместо большого количества условных операторов просто берите значения из массива и постоянно увеличивайте номер состояния.
        [8 баллов] Реализуйте настраиваемый интервал горения каждого сигнала.
        [9 баллов] «Пешеходный светофор». Нормальное состояние — горит зелёный свет. Подошедший к переходу пешеход нажимает кнопку на светофоре, после чего наблюдается весь цикл: мигающий зелёный, желтый, красный, красный с жёлтым, зелёный. Желающие могут и светофорик для пешеходов нарисовать. Продумайте, что будет, если кнопка будет нажата до окончания цикла (подошёл второй пешеход и нажал кнопку в момент перехода дороги первым пешеходом — если светофор переключится на мигающий зелёный, первого пешехода собьют!). Те, кто вообще не понял, о чём речь в этом пункте, приглашаются перейти ул. Русскую на остановке «Маяк» (на Шлюзе).

  3. График функции. Цель задания: освоить рисование на Canvas, разобраться в переводе математических координат в экранные и наоборот. Не нужно использовать стандартные компоненты для рисования графиков (например, TChart). Функция задаётся в коде программы в виде отдельной функции (чтобы для смены функции достаточно было исправить код ровно в одном месте). Функцию считаем непрерывной, график рисуем отрезками (MoveTo, LineTo), сдвигаясь в цикле по одному пикселю по оси x.
        [7 баллов] Реализовано построение графика так, как описано чуть выше.
        [8 баллов] Дополнительные функции: очистка поля, симпатичные оси координат, возможно, клеточки (сетка).
        [9 баллов] Построение поверхности z = f(x, y). Это делается так: сначала рисуется набор графиков z = f(x = const, y) для каждого x с некоторым шагом, затем то же самое для y. Тестировать можно, например, на гиперболическом параболоиде z = x2–y2.

  4. Игра. Необходимо сделать игру (например, сапёр, крестики-нолики, шашки, уголки, поиск парных картинок, тетрис, арканоид или любую другую). Критерии оценки здесь, к сожалению, достаточно расплывчаты, но тем не менее:
        [7 баллов] Игра для одного человека или игры человека с человеком за одним и тем же компьютером, простой алгоритм проверки корректности хода. Например, крестики-нолики для двух сидящих за одним компьютером игроков, компьютер определяет окончание игры, отслеживает смену ходов и контролирует, что игроки не ставят крестики или нолики в уже заполненные клетки. Такая «игрушка» средним студентом пишется за часок-другой.
        [8 баллов] Более сложные алгоритмы обработки хода (например, шашки, в которые играют человек с человеком), движущиеся объекты (например, арканоид).
        [9 баллов] Игра, в которую человек играет с компьютером, либо два человека друг с другом по сети (такого, кстати, за три прошедших года никто так и не догадался написать), хорошо написанный сапёр (открывание смежных пустых полей, таблица рекордов).
    Граница между 8 и 9 баллами весьма расплывчата. Лучше уточните заранее, какую оценку можно получить за ту программу, что вы планируете написать.

  5. База данных. На занятиях будет рассказана некоторая теория, даны основы SQL. Задания можно придумывать самостоятельно или брать из книжки (Бежанова, Москвина). Стандартные задачи: поваренная книга, расписание самолётов, база данных сотрудников.
        [7 баллов] Заполненные таблицы (постарайтесь добавить хотя бы по 3-4 осмысленных записи в каждую таблицу). Наличие хотя бы одного SQL-запроса. Возможность добавить, удалить и, желательно, отредактировать данные во всех таблицах, для которых это имеет смысл. Хотя бы немного продуманный интерфейс (если вы пишете БД для магазина, представьте, что вашей программой будет пользоваться реальный продавец: возможно, после этого у вас пропадёт желание делать её похожей на приборную панель самолёта — именно такое обычно получается, если тупо вывести содержимое всех таблиц и нарисовать кучу кнопок и полей ввода в единственном окне программы).
        [8 баллов] Всё предыдущее, а также наличие хотя бы двух таблиц, связанные отношением «многие ко многим» через таблицу связи. Возможность редактировать эту связь.
        [9 баллов] Всё предыдущее, а также: продуманный интерфейс, несколько вариантов поиска по таблицам, проверка корректности ввода, ...