Сроки проведения
- группа 1081/2 - консультация 13 января, пятница, аудитория 9-304, 16:00; экзамен 14 января, суббота, аудитория 9-309, 10:00;
- группа 1081/4 - консультация 16 января, понедельник, аудитория 9-304, 16:00; экзамен 17 января, вторник, аудитория 9-309, 10:00;
- группы 1081/1, 1081/3 - консультация 19 января, четверг, аудитория 9-304, 16:00; экзамен 20 января, пятница, аудитория 9-309, 10:00.
Знания и навыки
Необходимые
- Основные типы данных (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: консультация предназначена для того, чтобы студенты могли задать преподавателю вопросы по изученному материалу. На консультации не будет дополнительной лекции по программированию, магических рекомендаций о том, как сдать экзамен и тому подобных вещей. Консультация необязательна для посещения. Объявления, касающиеся времени и порядка проведения экзамена, будут размещаться на этой странице.
Советы экзаменуемому
- Выспитесь. Лихорадочная подготовка в последнюю ночь ни к чему хорошему не приведет.
- Первым делом внимательно прочитайте условие задачи. Убедитесь, что вы понимаете его полностью. В случае малейших сомнений задайте вопрос экзаменатору.
- До написания программы прикиньте на бумаге алгоритм решения задачи (хотя бы ключевые моменты).
- Решая задачу, пользуйтесь только теми конструкциями и методами, в которых вы разбираетесь хорошо.
- Следуйте тому пути решения, который вы сами считаете наиболее простым. Большинству студентов рекомендуется использовать метод функциональной декомпозиции (перечитайте лекции 7-9). Если вы в нем не разобрались, лучше напишите программу из одной главной функции - это снизит вашу оценку, но позволит избежать провала (лучше получить 0 баллов за стиль и 6 баллов за результаты, чем 2 балла за стиль и 0 баллов за результаты). Если вы хорошо разобрались, как пользоваться методом объектно-ориентированного проектирования и принципом инкапсуляции (лекции 9-10), воспользуйтесь ими.
- Не торопитесь и не суетитесь. Двух часов времени больше чем достаточно для решения любой экзаменационной задачи.
Порядок проведения
Экзамен проводится в форме написания программы на стационарном компьютере (в случае недостатка стационарных компьютеров в аудитории в порядке исключения может быть разрешено написание программы на собственном ноутбуке студента). Каждый билет содержит одну задачу, которая должна быть решена в виде программы на языке 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 баллов. В случае получения пограничной оценки (3, 5 или 7 баллов) преподаватель задает студенту дополнительный вопрос по теории, и в случае правильного ответа добавляется 1 балл по 10-балльной шкале. При ответе на теоретический вопрос пользоваться литературой не разрешается.
Темы для теоретических вопросов
- Системы счисления, алгоритмы перевода.
- Ссылки и указатели, связь указателей с массивами.
- Связь формальных и фактических параметров.
- Функциональная декомпозиция, основные принципы.
- Классификация переменных с точки зрения области действия и времени жизни.
- Объектно-ориентированный стиль, инкапсуляция, основные принципы.
- Конструктор, деструктор, конструктор копирования, оператор присваивания.
- Перегрузка операторов и функций.
- Лексемы, лексический анализ.
- Синтаксическое дерево, синтаксический анализ.
- Обратная польская запись.
- Численное интегрирование.
- Алгоритмы сортировки (выбором, включениями, обменом).
Примеры задач
Пример 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.
Пример 7 (из контрольной работы)
Во входном файле in.txt заданы имена и даты рождения сотрудников организации (в формате ДД ММ), например:
Михаил 04 12 Ольга 26 06 Николай 29 10 Иван 14 05
Вывести имена и даты рождения сотрудников в выходной файл out.txt, упорядочив их по дате, например:
Иван 14 05 Ольга 26 06 Николай 29 10 Михаил 04 12