Skip to content

Pasha831/c-calculator

Repository files navigation

HSE Project: C calculator

image

Фичи

  • 2j и j2 для калькулятора - одно и то же!
  • функция pow() обрабатывается не как функция :)
  • zeroDivisionException() для случаев, когда в ходе операций получаем значения inf или nan
  • показываем вычисленные значения переменных-детей для каждого из выражений
  • показываем плохих ребят (не объявленные переменные) для выражений, которые нельзя высчитать (если дело в bad-guysах)
  • невероятно умный и накрученный cleanInput() с исправлений скобочных последовательностей, кол-ва точек и запятых!!!

Дневник изменений

30 января:

  • уверенное решение делать проект в гите
  • создан фундамент: косячный calculate() и неплохой rpn()
  • колхозные операции над числами через if-elseif-else

31 января:

  • максимка добавляется в GitHub и создаёт ключевую фичу проекта - return 0 в конце файла
  • макс продолжает бомбить: printf("Hello World!\n"), который добавил макс, дал возможность нашему проекту выйти в свет!
  • пашка показывает, что есть pull, push, commit, add, pull request и т.д. и т.п.
  • изменение функции cleanNumber() на addNumber() с продвинутым функционалом
  • меняем кривой calculate() на хорошую домашнюю заготовку с работающим стэком
  • добавлены кучу функций: приоритета, поиска оператора и т.д.

1 февраля:

  • программа начала воспринимать числа double с точкой внутри себя
  • добавлена функция возвдеения в степень (оператор ^)
  • наконец-таки обработали скобки (надо было раньше, кому-то было очень влом - пашке)
  • отличный апгрейд функции create() до createRPN()
  • вынос польской из calculate, замена calculate на calculateRPN()
  • передаём вместо queue везде polish, для простоты понимания
  • утончённая обработка операторов в createRPN()
  • макс добавил очень удобную функцию getNumber() для получения письма из всякой грязи input'а

2 февраля:

  • появились первые простейшие унарные операции (по канонам Лупановой Е.А., с помощью указателя на функцию)
  • появление столь же удобной функции getSymbols(), которая и название функции вычерпнет, и название переменной, и чего ещё более...

3 февраля:

  • первое разбиение программы на файлы - functions.c и functions.h для хранения всех функций вне main.c
  • свитч вместо if-else ветки в precedence()
  • указатели даже на операторы!
  • поменяли местами функции в main.c, дабы глаз радовался!

4 февраля:

  • поялвение прототипа (довольно способного) унарного минуса
  • появление функции очистки input'а: удаление пробелов (для начала хватит)
  • поялвение обработки pow(a,b) - оно будет косячным ещё несколько pull request'ов :(

5 февраля:

  • использование во всех частях программы double complex вместо double (кое-где мы за это поплатимся - pow(-1, 1/3) - чёртова аналитическая геометрия...)
  • починка pow(a,b) - представление ',' как кобминации из 3 символов: ')', '^', '('; фактическое забивание болта на отдельную обработку этой хрени

6 февраля:

  • добавление переменных в наш калькулятор: variables.c и variables.h для обработки переменных
  • фундамент от Паши, мега крутые фичи от Макса, косметика и финальные штришки снова от Паши
  • удаление isVariable() - казалось бы, бесполезной функции (увы и ах, это не так)
  • добавлены все унарные и бинарные функции в functions.h
  • прокачивание типа данных Var до хранение дочерних переменных
  • вводимое выражение теперь является mainExp - главным выражением, для которого будем считать все переменные
  • создание RPN для каждой переменной из Data
  • функция toExpression() - создание из переменной со знаком '=' выражения для вычисления польской нотации
  • инициализация данных, переменных
  • обработка вводимых после выражения переменных

7 февраля:

  • вычисление RPN для каждой переменной из Data
  • полу-красивый вывод в файл значения выражений
  • дети - связанные с выражением переменные, отцы - переменные на уровень выше, от них будут зависеть дети
  • изменения работы функции inData()
  • обработка за O(n^2) всех переменных из Data (из-за флажка даже меньше, чем O(n^2)!)
  • добавление констант

8 февраля:

  • починка pow(a, b)
  • функция красивого вывода чисел (пока не знали о %g)

13 февраля:

  • начало исправления вводимой строки: проверка на правильную скобочную последовательность
  • изменение названия главной переменной в Answer to #n expression (n = 1, 2, 3...)
  • обработка выражений, которые невозможно вычислить по разным причинам
  • дефайним число констант, фиксим pow() опять
  • альтернативная обработка унарного минуса

14 ферваля:

  • функция createExpressionName для создания красивого имени для выражения
  • создание previousInp() для обработки корявых вводов
  • добаляем нехватающие комментарии ко всему подряд
  • calculateAllDataVariables() - вычисление всех переменных из Data (вроде норм название, и так ясно)
  • убираем вообще все функции из main.c в mainMethods.c mainMethods.h для 60-строчного main'a
  • дальнейшие обработки неверных скобочных последовательностей, попытки изменить input в лучшую сторону с худшей от пользователя, добиваем унарный минус

image

Сделанно ручками Максима Агеева и Паши Медведева💙

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published