 |
|
 | Пример тестового задания для позиции Автотестер
Задание 1 (18 р)
Нарисовать блок-схему, реализующую следующий алгоритм:
Дан входной файл INF с последовательным доступом (допускаются операции открытия и закрытия файла, проверка на конец файла, чтение текущей записи и перехода к следующей записи). Файл содержит записи одинаковой структуры, отсортированные в порядке возрастания значений целочисленного ключевого поля, содержащегося в записях. В файле INF могут находиться записи с одинаковыми значениями ключа. Требуется создать выходной файл OUTF, который формируется из входного файла INF по следующим правилам:
- Если для некоторого значения ключа запись с этим значением ключевого поля отсутствует в INF, то такой записи не должно быть и в файле OUTF.
- Если для некоторого значения ключа в файле INF присутствует только одна запись с таким значением ключевого поля, то эта запись должна быть скопирована в файл OUTF.
- Если для некоторого значения ключа в файле INF присутствует некоторое нечетное количество записей с таким значением ключевого поля, то в файл OUTF должна быть скопирована та запись из этого множества, которая физически расположена в файле INF первой среди всех записей с данным значением ключа.
- Если для некоторого значения ключа в файле INF присутствует некоторое четное количество записей с таким значением ключевого поля, то в файл OUTF должна быть скопирована та запись из этого множества, которая физически расположена в файле INF последней среди всех записей с данным значением ключа.
Например:
INF: k2, k3, k4a, k4b, k4c, k8, k99a, k99b, k100a, k100b, k100c, k100d
OUTF: k2, k3, k4a, k8, k99b, k100d.
Задание 2 (15 р).
Написать функцию
char* superSort (char*)
принимающую строку слов, разделенных пробелами. Каждое слово может состоять из латинских букв в нижнем регистре и цифр. Возвращаемым результатом должна быть строка из полученных слов, отсортированных в алфавитном порядке и разделенных пробелами, при этом во время сортировки при сравнении слов цифры должны игнорироваться, так, как будто бы их нет. Например, для входной строки
ma79ma 9n8e7 mila r1a2m3u
результатом работы функции должно быть
ma79ma mila 9n8e7 r1a2m3u
Задание 3 (15 р).
Издательство заказало у вас программу АРМ редактора, которая должна облегчить
работу с различными редакциями (версиями) книг. Каждая книга может содержать
главы, подглавы, подподглавы, подподподглавы и т.п. Каждая (под...)глава
может содержать в себе другие (под...)главы, обычный текст, списки однородных
текстовых элементов (такие встречаются в словарях, каталогах и т.п.),
иллюстрации и автоматически создаваемые объекты (такие как оглавление,
индексы и т.п.). Автором книги может быть как коллектив, так и один человек.
Различные редакции одной и той же книги могут отличаться содержанием и даже
списком авторов, но не названием. Необходимо спроектировать иерархию классов
для описанной системы и нарисовать соответствующую недетализированную диаграмму классов. Рядом с диаграммой обязательно подробно опишите используемую нотацию (предпочтительно использование UML).
Задание 4 (8 р).
Описать словами идею реализации функции
int printSubSets (char *)
принимающей входную строку из слов, разделенных пробелами, и печатающей все непустые подмножества полученного множества слов (каждое подмножество в отдельной строке). Например, для входной строки
мама мыла раму
эта функция должна выдать следующие результаты:
мама мыла раму
мама мыла
мыла раму
мама раму
мама
мыла
раму
Предложите возвращаемое значение. Ваше текстовое описание алгоритма должно быть кратким, четким и понятным кодировщику, имеющему, предположительно, меньший уровень квалификации, чем вы.
Задание 5 (35 р).
Написать функцию
int printMinQuantity (unsigned int input_value)
которая принимает целое число input_value и печатает на экран строку разделенных пробелами простых чисел, сумма которых составляет заданное число input_value. При этом количество простых чисел должно быть минимальным - таким, что нельзя подобрать более короткую последовательность простых чисел, образующих в сумме input_value. Например, для числа 6 правильными считаются варианты "5 1" или "3 3", а неправильными варианты "3 2 1", "2 2 2", "1 1 1 1 1 1" и т.д. Нужно найти не все правильные варианты, достаточно любого.
При написании функции особое внимание уделите гарантии того, что ваш алгоритм находит действительно самую короткую из допустимых последовательность простых чисел, а также эффективности алгоритма.
Предложите вариант возвращаемого функцией значения.
Задание 6 (35 р).
Напишите программу, которая принимает один аргумент командной строки. Предполагается, что этот аргумент содержит имя файла, с которым данная программа будет работать. Входной файл гарантированно содержит код на С++, написанный в соответствии со стандартом С++, в т.ч. содержащий комментарии. Если в параметре, переданном в командной строке, не указано расширение, то предполагается, что расширением является .срр. Ваша программа должна создавать из исходного два новых файла, у которых оригинальное расширение заменено на .src и .rem соответственно.
Файл с расширением .src должен содержать только код из входного файла, а все комментарии должны быть заменены на пробелы. Файл с расширением .rem должен содержать только комментарии, а весь код программы должен быть заменен на пробелы.
Программа должна корректно (в соответствии с правилами С++) обрабатывать код, содержащий:
- "вложенные" друг в друга комментарии (например, /* // */ );
- разнообразные текстовые строки (в т.ч. содержащие "//", "/*" и т.п);
- символы продолжения строки (обратный слеш в конце строки);
- триграфы;
и др.
|
 |
Правила написания теста.
При написании теста допускается задавать вопросы и консультироваться только с
лицом, проводящим тестирование. Любое общение тестируемых между собой
автоматически влечет получение оценки 0р обоими нарушителями.
При написании теста допускается использование любого языка программирования, любой литературы.
Возле каждого задания в скобках указан максимум поинтов (баллов), который
можно за него получить. Система оценки следующая:
- 50% максимума - за правильное решение;
- до 25% максимума - за эффективное решение;
- до 25% максимума - за хороший стиль.
Время для тестирования предоставляется из расчета 200 минут на написание
теста на 100р (2 минуты на 1 поинт).
При написании теста помните, что его будет проверять живой человек, и в ваших
интересах писать максимально читабельно и понятно. Не забывайте, что
комментариев много не бывает.
Если при выполнении заданий 3, 5, 6 вы забыли название необходимой вам
библиотечной функции, то вы можете придумать ей свое название, описать эту
функцию и ее аргументы в комментарии и использовать дальше при выполнении
задания. Единственное ограничение: эта функция должна быть аналогом реально
существующей стандартной библиотечной функции.
В заданиях 2 и 4 входная строка гарантировано не содержит символов табуляции
и конца строки ('\n').
Реальный тест, который будет вам предложен при поступлении на работу,
рассчитан на 100 поинтов (200 минут), при этом проходной балл - 60 поинтов.
Для поступления к нам на работу, помимо тестирования, необходимо пройти ряд
интервью, которые для претендентов из Днепропетровска обычно проводятся НЕ
в тот же день, что и написание теста. Проверка теста для претендентов из
Днепропетровска занимает до 7 дней.
|
 |