Раздел находится на стадии разработки

Условия и результаты курсового проекта

Полезные ссылки

Этап 0

Проверка формата письма (см.условия), архива с файлами, компиляция.

Этап 1

Проверка реакции приложения на входные данные.
Требуется поддержка как минимум:
  • Корректная работа программы при перенаправлении ввода-вывода
  • Корректная работа программы при чтении параметров из файла
  • Обработка и вывод сообщений об ошибках
  • Корректное завершение работы программы с соответствующим кодом ошибки (0 - если ошибок нет)
Полезные знания:
  • Статья выше про обработку ошибок
  • X макросы на Википедии. Удобны при обработке ошибок или, вообще, при статическом задании в коде значений для сложных массивов
  • Роберт К. Мартин "Чистый код". Читайте предвзято и не следуйте книге вслепую.

Этап 2

Проверка реализации базовых арифметических операций.
И снова советы:
  • Используйте таблицу функций. Если вы пишите двустековый алгоритм Дейкстры, то скорее всего любая функция или оператор делают следующие действия: снимают параметры, которые будут обрабатывать со стека, делают что-то с ними и кладут результат обратно на стек.

    Логично было бы завести cтруктуру:

    typedef struct tag_function
    {
      char *name;    /* Имя функции (может быть довольно длинным, например: floor) */
      int  priority; /* Приоритет функции или операции */
      /* Указатель на функцию в программе, выполняющую действия функции в выражении */
      error_code_t (*DoIt)( stack_t *s );
    } function_t;
    И массив функций:
    function_t stdFunctions[] = 
    {
      {"(", 1, NULL},
      {")", 2, NULL},
      {"+", 3, FuncAdd},
      {"-", 3, FuncSubtrack},
      {"*", 4, FuncMultiply},
      {"/", 4, FuncDivide},
      /* ... */
    }
    Такая система достаточно легко расширяется, как в сторону добавления новых операций, так и в сторону усложнения их структуры - ассоциативность.

Этап 3

...

Этап 4

...