+380 57 755 34 05 team@fulcrum.software

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

Язык программирования — Последний стандарт С++/ STL

Время выполнения первой стадии: от 2-х до 4-х часов.

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

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

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

  • EmptyCell: пустая ячейка
  • IntegerCell: Неотрицательное целое число
  • 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++ можете посмотреть