Сроки проведения

  • группы 13501/1,2,3 - консультация 27 декабря, суббота, аудитория 9-309, 10:00; экзамен 29 декабря, понедельник, аудитория 9-309, 10:00;
  • группы 13501/4,5 - консультация 12 января, понедельник, аудитория 9-309, 10:00; экзамен 13 января, вторник, аудитория 9-309, 10:00;
  • 1-я переэкзаменовка - 29 января, четверг, аудитория 9-309, 10:00 для групп /2 (кроме сдавших зачет 28 января) и /3, 14:00 для групп /1, /4, /5, а также студентов группы /2, сдавших зачет 28 января;
  • переэкзаменовка 5 февраля не состоится;
  • 2-я и последняя переэкзаменовка - 11 февраля, среда, аудитория 9-309, 9:00 для групп /1 и /2, 16:00 для групп /3, /4 и /5.

Знания и навыки

Необходимые

  • Основные типы данных (int, double, char, bool, ...)
  • Основные конструкции - ветвление (if/else), циклы (while, for)
  • Одномерные и многомерные массивы, динамические массивы (new/delete или malloc/free)
  • Строки (представление строк, строковые функции)
  • Методы работы с потоками ввода-вывода (cin, cout, istream, ifstream, ostream, ofstream) или библиотекой ввода-вывода C (printf, scanf, fprintf, fscanf)
  • Работа со средой MS Visual Studio (создание проекта, добавление файла в проект, компиляция проекта, запуск проекта, отладка проекта)
  • Работа с файлами (создание входного файла программы, просмотр выходного файла программы)

Желательные

  • Функции (формальные и фактические параметры, результаты, прототипы, заголовки, метод функциональной декомпозиции)
  • Модули (заголовочные файлы, файлы с исходным кодом, механизм связывания модулей)
  • Структуры и классы (поля, методы, определение класса, определение методов класса)
  • Исключения (формирование, обработка)

Порядок подготовки

Подготовку распределите равномерно. Во время подготовки к экзамену рекомендуется заниматься программированием по 6-8 часов в день (из которых 1-2 часа должно посвящаться теории, остальное - практике). Не откладывайте все на конец. Если при подготовке возникают вопросы - напишите письмо преподавателю. Также вопросы можно будет задать на консультации.

Перечитайте конспект лекций. Особое внимание следует уделить лекциям 1-3, 5, 7-9. Просмотрите примеры к лекциям. Убедитесь, что вы помните наизусть синтаксические правила записи всех использованных в лекциях конструкций, особенно отмеченных в разделе "Необходимые знания и навыки" (вы, конечно, можете на экзамене консультироваться каждый раз с литературой, но в этом случае вам не хватит отведенного времени).

Большую часть времени подготовки следует уделить самостоятельному решению задач. В идеале, каждый день подготовки вы должны решать по 2-3 задачи. Примеры задач приведены ниже. Также вы можете решать задачи, выданные вам и вашим одногруппникам ранее на упражнениях, контрольных работах, а также рассмотренные на лекциях (не подглядывая в решение лектора).

NB: консультация предназначена для того, чтобы студенты могли задать преподавателю вопросы по изученному материалу. На консультации не будет дополнительной лекции по программированию, магических рекомендаций о том, как сдать экзамен и тому подобных вещей. Консультация необязательна для посещения. Объявления, касающиеся времени и порядка проведения экзамена, будут размещаться на этой странице.

Советы экзаменуемому

  1. Выспитесь. Лихорадочная подготовка в последнюю ночь ни к чему хорошему не приведет.
  2. Первым делом внимательно прочитайте условие задачи. Убедитесь, что вы понимаете его полностью. В случае малейших сомнений задайте вопрос экзаменатору.
  3. До написания программы прикиньте на бумаге алгоритм решения задачи (хотя бы ключевые моменты).
  4. Решая задачу, пользуйтесь только теми конструкциями и методами, в которых вы разбираетесь хорошо.
  5. Следуйте тому пути решения, который вы сами считаете наиболее простым. Большинству студентов рекомендуется использовать метод функциональной декомпозиции (перечитайте лекции 7-9). Если вы в нем не разобрались, лучше напишите программу из одной главной функции - это снизит вашу оценку, но позволит избежать провала (лучше получить 0 баллов за стиль и 6 баллов за результаты, чем 2 балла за стиль и 0 баллов за результаты). Если вы хорошо разобрались, как пользоваться методом объектно-ориентированного проектирования и принципом инкапсуляции (лекции 9-10), воспользуйтесь ими.
  6. Не торопитесь и не суетитесь. Двух часов времени больше чем достаточно для решения любой экзаменационной задачи.

Порядок проведения

Экзамен проводится в форме написания программы на стационарном компьютере (в случае недостатка стационарных компьютеров в аудитории в порядке исключения может быть разрешено написание программы на собственном ноутбуке студента). Каждый билет содержит одну задачу, которая должна быть решена в виде программы на языке C++. Время, предоставляемое на решение задачи - два часа. При недостаточности отведенного интервала времени по усмотрению преподавателя может быть назначено дополнительное время от 15 до 60 минут, с соответствующим снижением оценки.

На экзамене разрешается пользоваться любыми бумажными источниками, а также электронными конспектами лекций. Не разрешается пользоваться любыми внешними носителями информации (флешками, CD, DVD и так далее; электронный конспект лекций предоставляется экзаменатором). Не разрешается консультироваться с кем-либо, кроме экзаменатора.

Студент демонстрирует программу преподавателю в тот момент, когда она, по его мнению, полностью или частично решает поставленную задачу. В случае частичного решения преподаватель может, зафиксировав полученный результат, дать некоторое количество времени для его улучшения.

За продемонстрированное решение ставится оценка по 10-балльной шкале.

Описание шкалы оценок

Стиль (до 4 баллов, оценки кумулятивны)

Оценки за стиль применяются только в случае, если программа в целом соответствует решаемой задаче.

  • был успешно применен метод функциональной декомпозиции +1 или +2 балла
  • были успешно применены структуры (классы) +1 балл
  • был успешно применен метод объектно-ориентированного проектирования +1 балл

Результаты (до 6 баллов, оценки кумулятивны)

  • программа компилируется +1 балл
  • программа запускается и завершается без появления сообщений об ошибках запуска, ошибках отладки и пр. +1 балл
  • программа дает правильные результаты для большинства вариантов входных данных +1 или +2 балла
  • программа дает правильные результаты на любых входных данных, кроме исключительных ситуаций +1 балл
  • программа дает правильные результаты на любых входных данных +1 балл

Штрафные баллы

  • программа содержит грубые ошибки, связанные с незнанием студентом правил языка программирования -1 балл, в плохих случаях -2 балла
  • программа содержит многократные дублирования кода -1 балл, в плохих случаях -2 балла
  • использовано дополнительное время сверх двух часов -1 балла за каждые 30 минут (дополнительное время ограничивается одним часом)
  • во входном файле приведена дополнительная информация, не указанная в задании (например, количество элементов в нем) -1 балл
  • входные данные формируются в самой программе, вместо чтения их из файла -3 балла

Для получения оценки "удовлетворительно" необходимо набрать 4 балла по 10-балльной шкале, оценки "хорошо" - 6 баллов, оценки "отлично" - 8 баллов. Преподаватель может задать студенту дополнительный вопрос по теории и по итогам ответа добавить или убавить 1 балл по 10-балльной шкале. При ответе на теоретический вопрос пользоваться литературой не разрешается.

Темы для теоретических вопросов

  1. Системы счисления, алгоритмы перевода. (лекция 4)
  2. Ссылки и указатели, связь указателей с массивами. (лекция 5)
  3. Связь формальных и фактических параметров. (лекции 3, 7)
  4. Функциональная декомпозиция, основные принципы. (лекция 7)
  5. Объектно-ориентированный стиль, инкапсуляция, основные принципы. (лекции 9 и 10)
  6. Классификация переменных с точки зрения области действия и времени жизни. (лекция 11)
  7. Конструктор, конструктор копирования, оператор присваивания. (лекция 12)
  8. Перегрузка операторов и функций. (лекция 12)
  9. Лексемы, лексический анализ. (лекция 13)
  10. Синтаксическое дерево, синтаксический анализ. (лекция 14)
  11. Обратная польская запись. (лекция 14)
  12. Простые алгоритмы сортировки. (пример к финальной работе)

Примеры задач

Пример 1

Представлением натурального числа N в Фибоначчиевой системе счисления называется набор целых значений-цифр (Dn, Dn-1, …, D2), для которого N=DnFn+Dn-1Fn-1+…+D3F3+D2F2, где Di=0 или Di=1, Fi - числа Фибоначчи: F1=F2=1, Fn+2=Fn+Fn+1. К примеру, 20=113+08+15+03+12+01=101010. Во входном файле in.txt содержится последовательность натуральных чисел, например:

20 7 26 17 9

Перевести все заданные целые числа в Фибоначчиевую систему счисления и вывести результат в выходной файл out.txt, например:

101010 1010 1001000 100101 10001

Пример 2

Во входном файле in.txt содержатся две строчки целых чисел, например:

-1 5 -7 -3 9 4 3 5
4 6 -7 2 10 -7

Строчки могут иметь различную длину. Вывести в выходной файл out.txt все числа, которые присутствуют только в одной строчке входного файла (то есть, присутствуют в первой и отсутствуют во второй, или, наоборот, присутствуют во второй и отсутствуют в первой). Каждое число должно присутствовать в выходном файле не более одного раза (даже если оно встречается два и более раз в одной из строчек входного файла). Например:

-1 5 -3 9 3 6 2 10

Пример 3

Во входном файле in.txt содержится последовательность цифр от 0 до 9, например:

1 4 4 4 3 3 2 2 2 2 4 3 3 3 0 0 0 0 1 2 3 5 1 1 1 1 1 5 5 5 5 1 5 5 5

Найти в файле самую длинную непрерывную последовательность из одинаковых цифр (в примере выделена жирным шрифтом). Вывести в выходной файл out.txt образующую ее цифру и длину, например:

1, длина 5

Если таких последовательностей несколько, вывести информацию о любой из них.

Пример 4

Во входном файле in.txt задана квадратная матрица из целых чисел, например:

1 7 4 3

6 3 2 0

2 0 8 7

4 5 7 6

Найти наибольший элемент в каждой строке матрицы, после чего поменять его местами с диагональным элементом из той же строки (диагональные элементы матрицы в примере уменьшены, наибольшие элементы выделены жирным шрифтом). Если наибольший элемент уже является диагональным (как в строке 3), с ним ничего делать не надо. Вывести получившуюся матрицу в файле out.txt, например:

7 1 4 3
3 6 2 0
2 0 8 7
4 5 6 7

Пример 5

Во входном файле in.txt задано целое число в диапазоне от 1 до 1050 и цифра от 2 до 9, например:

63820781937294274912342381 3

Число из входного файла может не умещаться в стандартные типы языка C. Умножить заданное число на заданную цифру и вывести результат в выходной файл out.txt, например:

63820781937294274912342381 x 3 = 191462345811882824737027143

Подсказка. Число следует сохранить в виде строки, после чего необходимо реализовать алгоритм умножения в столбик.

Пример 6

Во входном файле in.txt заданы целые числа в диапазоне от 1 до 3999, например:

112 24 9 3517 438 56

Вывести те же числа в выходной файл out.txt, используя римскую систему счисления, например:

CXII XXIV IX MMMDXVII CDXXXVIII LVI

Напоминание. В римской системе счисления I=1, IV=4, V=5, IX=9, X=10, L=50, C=100, D=500, M=1000.