Skip to content

keirsan/TeamFirstFpmiLaba

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

84 Commits
 
 
 
 
 
 
 
 

Repository files navigation

TeamFirstFpmiLaba

Laboratory work, students(Please, people, don't get here if you are not from the team)

Классы: BigInt + Complex шаблонный + Rational + Dictionary + Polynom + Calc + Number - Test class + Функционал: Перегрузка операторов +,,- для объектов одного класса + Перегрузка операторов +,,- для объектов разных классов/взаимодействие — Воспринимание калькулятором правильного выражения, состоящего из целых, и вещественных, с учетом скобок + Воспринимание других классов и их дифференциация как объекты разных классов - Запоминание переменных на основе дерева + Вывод ошибок при неправильном выражении + Подсчет многочлена + Интеграция многочлена с калькулятором - СВЯЗЬ МЕЖДУ КЛАССАМИ НАЛАЖЕНА — Взаимодействие с командной строкой на два параметра(файл ввода и вывода) - Взаимодействие с командной строкой на запуск тестов + Важные минусы выше делают бессмысленным дальгейшую спецификацию. Ясно, что многое минус из-за того, что выше. Дополнительные файлы: bat файл для более удобного запуска тестов + инпут и аутпут файлы тестов - 3 (Нужно НАМНОГО больше) Архитектура классов(потенциальная): У класса калькулятора есть стек многочленов. В свою очередь коэффициенты при степенях х у многочлена воспринимаются как комплексные. Класс комплексных из-за шаблона различает себя на подклассы типов: дроби, целые большие,вещественные Все подклассы наследуются от базового класса number. Архитектура программы: Получаем строку. Разбиваем по операторам. Части - многочлены. Разделяем по х. Определяем коэффициенты. Считаем многочлен. Возвращаем ответ. Потенциальные проблемы: калькулятор использует функцию возведения в степень, которая не перегружена для наших классов. Калькулятор использует встроенный стек, функции которого также не определены для наших классов. С взаимодействием объектов разных классов хрень какая-то. С шаблонами тоже.

  1. Цель: разработать консольное приложение, представляющее собой сильно упрощенную версию системы компьютерной математики, работающей с многочленами.
  2. Внешний интерфейс: пользователь последовательно вводит выражения в консоль, после нажатия Enter, выражения вычисляются, и печатаются в следующей строке. Пример: In[1]:=3+4 Out[1]=7 In[2]:=[1]*2 Out[2]=14 In[3]:=%+2 Out[3]=16 In[4]:=zz=5;y=11 Out[4]=5 Out[5]=11 In[6]:=zz+y Out[6]=16 In[7]:=2/3+4/5 Out[7]=22/15 In[8]:=1+2i-4i Out[8]=1-2i In[9]:=x^2 Out[9]=x^2 In[10]:=y x Out[10]=11x In[11]:=[10]+[9] Out[11]=x^2+11x In[12]:=2/3x+4/5x Out[12]=22/15x In[13]:=1/2x+0.6x Out[13]=1.1x In[14]:=(1-2i)x+1/12y Out[14]=(1-2i)x+11/12 In[15]:=(1-r)^2 Error: r is undefined In[16]:=(1-i)^2 Out[16]=-2i In[16]:=11 Out[16]=12 In[16]:=4(3) Out[16]=4 Если введенное выражение содержит ошибку, вместо Out[х] вывести сообщение об ошибке.
  3. Поддерживаемые операции: обычная запись выражений (постфиксную не надо), +,-,*, деление не надо, круглые скобки, степень ^. Кроме этого, должна быть поддержка переменных. Любой строке их латинских символов (кроме x и i), можно присвоить значение, которое потом будет подставляться вместо этой строки в выражении. In[1]:= и Out[1]= выводятся автоматически перед каждым вводом\выводом. В дальнейшем на вывод можно ссылаться, то есть написать [4] и это означает, что вместо этих скобок будет подставлено значение, которое было получено в 4-м выражении. Символ % хранит результат последнего вычисленного выражения.
  4. Формат чисел: должна быть поддержка 4 множества чисел: целые (включая длинные), рациональные, действительные, комплексные (последние при этом могут содержать в качестве действительной и мнимой части числа из каждого из трех предыдущих классов). Целые и вещественные числа записываются естественным образом, рациональные числа в виде a/b, где a и b - целые числа. При выводе рациональных чисел минус ставить только в числителе, саму дробь сокращать до несократимой, целую часть выделять не надо. Комплексные числа содержат мнимую 1, которая обозначается как i, при выводе этих чисел, сначала выводится действительная часть, потом + или - и мнимая часть, после которой следует i. Если мнимая часть равна 0, то выводить число как целое\рациональное\действительное. При необходимости использовать скобки.
  5. Операции: +-* должны работать для всего, включая многочлены. ^ - левый операнд любой, правый - обязательно натуральное число, либо 0. Круглые скобки являются группирующими, если же они используются сразу после многочлена, то должны вычислять значение многочлена при x = тому, что передали в скобках (многочлен можно передавать тоже). = используется для задания значения переменным, слева имя переменной, справа число или многочлен. Оператор ; используется для разделения ввода. Части, разделенные ; следует понимать как независимые входные данные, для каждого из которых генерировать свой вывод.
  6. Многочлены: для задания многочлена используется зарезервированная переменная х. Выводить многочлен стоит по убыванию степеней, для вывода x в квадрате использовать такую запись: x^2. Знак умножения может опускаться там, где это не приводит к двусмысленности. Пробелы при вводе должны игнорироваться, однако иногда они необходимы, например y x означает многочлен первой степени с коэффициентом при x равным y.
  7. Параметры командной строки: без параметров - ввод - вывод в консоль, два параметра - имена файлов для ввода вывода, один параметр -test - запустить тесты.
  8. Тесты: Написать тесты к программе, то есть примеры ввода и правильно вывода, и протестировать на них по возможности каждый класс. То есть, программа должна брать входные данные для теста (например, из файла), создавать нужный класс, вызвать метод с этим данными, сравнить результат с эталоном, и удалить класс. Результат тестирования по каждому тесту вывести в консоль.

Вы должны использовать следующие классы, которые вы сделали в 9 задании: многочлен, BigInteger, словарь, калькулятор (сделать его упрощенную версию только для 4 операций).

Пример архитектуры классов:

  1. Number - базовый класс для всех чисел (возможно, абстрактный)
  2. BigInteger и др. - классы наследники для каждого множества чисел.
  3. Complex - комплексное число, наследник Number, шаблонный, в качестве T будет использоваться любой из классов из п. 2
  4. Polynom - многочлен, шаблонный, в программе использовать его в виде Polynom
  5. Dictionary - использовать для хранения значений переменных
  6. Calc (название, возможно, стоит изменить) - для вычисления выражений
  7. набор классов для тестирования
  8. Класс, обслуживающий ввод\вывод, в который передаются потоки для чтения, записи.

Подсказка: любое число считайте многочленом, парсить многочлен лучше всего вычисляя значение выражение калькулятором, то есть, если у вас есть строка x^2+2x, то ее лучше распознать как многочлен x возведенный в квадрат, к которому прибавили многочлен 2, умноженный на многочлен x.

About

Laboratory work, students(Please, people, don't get here if you are not from the team)

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published