You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+94-10Lines changed: 94 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,28 +2,114 @@
2
2
3
3
Цель [коллоквиума](https://docs.google.com/document/d/1Dv_6AIhxg_3ezu6VMcEnMpyfRzgym9l8PmE4ULGfjgM/edit?tab=t.0) - создать систему компьютерной алгебры
4
4
5
+
### Архитектура проекта
6
+
7
+
Проект имеет следующую структуру:
8
+
9
+
```
10
+
.
11
+
├── CMakeLists.txt
12
+
├── src
13
+
│ ├── api
14
+
│ │ └── calculator
15
+
│ │ ├── calculator.cpp
16
+
│ │ └── calculator.hpp
17
+
│ ├── main.cpp
18
+
│ ├── modules
19
+
│ │ ├── numbers
20
+
│ │ │ ├── integer
21
+
│ │ │ │ ├── integer.cpp
22
+
│ │ │ │ └── integer.hpp
23
+
│ │ │ ├── natural
24
+
│ │ │ │ ├── natural.cpp
25
+
│ │ │ │ └── natural.hpp
26
+
│ │ │ └── rational
27
+
│ │ │ ├── rational.cpp
28
+
│ │ │ └── rational.hpp
29
+
│ │ └── polynomial
30
+
│ │ ├── polynomial.cpp
31
+
│ │ └── polynomial.hpp
32
+
│ └── ui
33
+
└── tst
34
+
├── CMakeLists.txt
35
+
├── test_calculator.cc
36
+
├── test_integer.cc
37
+
├── test_natural.cc
38
+
├── test_polynomial.cc
39
+
└── test_rational.cc
40
+
```
41
+
42
+
Рассмотрим ее по порядку.
43
+
44
+
## src
45
+
Содержит основную логику проекта:
46
+
- модули
47
+
- апи модулей
48
+
- интерфейс
49
+
50
+
### src/modules
51
+
Содержит реализацию модулей.
52
+
Модули разделены по блокам:
53
+
- натуральные числа
54
+
- целые числа
55
+
- рациональные числа
56
+
- полиномы над рациональными числами
57
+
58
+
Каждый блок содержит `*.hpp` и `*.cpp` файлы с объявлением класса блока и его реализацией соответственно.
59
+
60
+
-`class Naturals` - Класс натуральных чисел. Использует строку цифр и старший разряд.
61
+
-`class Integer` - Класс целых чисел. Использует натуральное число и знак.
62
+
-`class Rational` - Класс рациональных чисел. Использует целое число в качестве числителя и натуральное в качестве знаменателя.
63
+
-`class Polynomial` - Класс рациональных полиномов. Использует структуру данных "красно-черное дерево" (aka std::map) для хранения рациональных коэфициентов. Это необходимо для эффективной работы с разряженными данными (например `x^n + 1`, где `n` большое число). Максимальная степень многочлена ограничена `INT_MAX = 2^31 - 1`.
64
+
65
+
### src/api
66
+
Содержит апи для работы с рациональными полиномами. Получает на вход выражение в виде строки (например `(x^2 - 1)/(x - 1)`) и возвращает посчитанное выражение (например `1 * x^1 + 1`).
67
+
68
+
### src/ui
69
+
Содержит пользовательский интерфейс. Реализован при помощи `Qt6`. Формирует запрос к апи и отображает ответ.
70
+
71
+
Пример работы:
72
+

73
+
74
+
Важно отметить, что калькулятор работает именно с рациональными полиномами, а это значит, что `GCD(5, 10)` может быть равен любому рациональному числу. Договоримся, что ответ будет равен `1`.
75
+
76
+
## tst
77
+
Содержит более 180 тестов для проверки работы блоков и апи. Все тесты проходят успешно.
78
+
5
79
### Сборка и запуск проекта
6
80
7
-
Перейти в директорию build (при необходимости создать) и выполнить следующие команды:
81
+
Перед началом работы необходимо убедиться в том, что у вас установлен `Qt6`, иначе будет собрана тестовая версия без UI.
82
+
83
+
Способы установки приводить не будем, так как это может сильно зависеть от вашей системы (по этой же причине отсутствует исполняемый файл). Искренне надеемся, что наш пользователь сможет разобраться с установкой.
84
+
85
+
86
+
Далее необходимо выполнить следующие действия:
87
+
1. Создать директорию для сбоки в корне проекта и перейти в нее
0 commit comments