Электронная таблица

Опубликовано Sep 8, 2011 в Тестовые проекты (2-3 часа) | 2 коммент.

, ,

Электронная таблица

Тестовое задание: электронная таблица

Цель данного задания: проверка навыков ООП и алгоритмического мышления.

Формат выполнения: Задание выполнялось исключительно в нашем офисе.  В распоряжении кандидатов был стандартный компьютер с установленными Visual Studio и MSDN. Результатом выполнения ожидалось консольное приложение.

Используемые библиотеки: можно использовать STL

Время выполнения первой стадии: от 1-го до 2.5 часов.

Вторая стадия опциональна и может быть выполнена кандидатом в домашних условиях.

Постановка задачи

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

  • EmptyCell: пустая ячейка
  • IntegerCell: Неотрицательное целое число (помещается в dword 32 бита)
  • StringCell: Текстовые строки, которые начинаются с символа ‘
  • ReferenceCell: Строки-выражения, которые начинаются с символа ‘=’ и могут содержать Ссылки на другие ячейки. Состоят из одной латинской буквы и следующей за ней одной цифры.

Процесс обработки таблицы:

  1. Все выражения должны быть заменены на вычисленный результат.
  2. Ячейки с текстом должны быть вычислены как соответствующий текст без префикса ‘.
  3. Пустые ячейки и ячейки с типом IntegerCell должны остаться неизменными.
  4. Ячейки, содержащие ссылки, должны быть заменены соответствующими значениями. Ссылки могут ссылаться на другие ссылки.
  5. В случае любой ошибки вычисления формулы/ссылки, вычисляемая ячейка должна содержать ‘#error’.

Программа должна использовать только стандартные библиотеки и классы и не должна вызывать сторонние программы, библиотеки или системные компоненты.

Ввод и вывод

Программа получает описание таблицы с формулами из стандартного ввода, вычисляет ее и печатает полученный результат в стандартный вывод. Входные данные представлены таблицей, элементы строк которой разделены табуляциями (или запятой – на выбор).

Первая строка содержит пару чисел, разделенных табуляцией – высоту и ширину таблицы, соответственно. Затем идут строки с ячейками таблицы.

Вывод должен содержать только ожидаемую информацию, включая сообщения об ошибках. Никакой другой информации в выводе не должно быть.

Пример входных данных: (3 строки, 4 столбца)

3

4

12         =C1    3   ‘Sample

=A1        =A2    =B3  ‘Spread

‘Test       4      5   ‘Sheet

 

Ожидаемый вывод:

12      3      3      Sample

12      12     4      Spread

Test    4      5      Sheet

 

Этап №1 (выполняемый в нашем офисе)

  • Входные данные читаются из двумерного массива текстовых значений (глобальная переменная).
  • Ссылки могут задаваться только как “= [A-Z – только одна буква], [0-9 – только одна цифра]”.

 

Этап №2

  • Входные данные читаются из std in
  • Ссылки могут быть типа =AA10

Наш пример решения для первого этапа этого задания на C++ можете посмотреть
по этой ссылке.