From 5b48ec83e16b422c45f3bdd1953c916518b24c1a Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Mon, 12 Dec 2022 17:06:19 +0300 Subject: [PATCH 01/20] =?UTF-8?q?=D0=B4=D0=B7=20=D0=9A=D0=BE=D1=80=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=D0=BD=D0=BA=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_01/src/utils.cpp | 21 ++++++- homework_01/task_02/src/utils.cpp | 96 ++++++++++++++++++++++++++++++- 2 files changed, 114 insertions(+), 3 deletions(-) diff --git a/homework_01/task_01/src/utils.cpp b/homework_01/task_01/src/utils.cpp index a6989bd..b8a0bce 100644 --- a/homework_01/task_01/src/utils.cpp +++ b/homework_01/task_01/src/utils.cpp @@ -3,5 +3,24 @@ #include std::vector SplitString(const std::string& data) { - return {}; + std::vector v; + std::string tmp = ""; + + for (auto c : s) { + if (c != ' ') { + tmp += c; + continue; + } + + if (tmp != "") { + v.push_back(tmp); + tmp = ""; + } + } + + if (tmp != "") { + v.push_back(tmp); + } + + return v; } diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index ebc7ffc..fd11a11 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -1,7 +1,99 @@ #include "utils.hpp" +#include +#define vector_string std::vector -#include +bool is_numb(const std::string &str) { + static const std::regex r(R"([+-]?(\d*\.)?\d+([Ee[+-]?\d+)?)"); + return std::regex_match(str, r); +} int Calculate(const std::string& data) { - return 0; + std::vector v1; // хотела сделать тип double, но в тестах int, так что пока так + std::string tmp; + bool f = 0, pr = 0, dl = 0, mns = 0; + + for (size_t i = 0; i < data.size(); ++i) { + if (data[i] != "*" && data[i] != "+" && data[i] != "-" && data[i] != "/" && !(is_numb(data[i]))) { + std::cout << "ошибка!\n"; + return 0; + } + + if (f) { + if (data[i] == ")") { + int tmp_ans = Calculate(tmp); + + if (pr) { + v1[v1.size()-1] *= tmp_ans; + pr = 0; + } else if (dl) { + v1[v1.size()-1] /= tmp_ans; + dl = 0; + } else if (mns) { + v1.push_back(-tmp_ans); + mns = 0; + } else { + v1.push_back(tmp_ans); + } + + tmp = {}; + f = 0; + } else { + tmp.push_back(data[i]); + } + + continue; + } + + if (data[i] == "(") { + f = 1; + continue; + } + + if (pr) { + v1[v1.size()-1] *= std::stod(v[i]); + pr = 0; + continue; + } + + if (dl) { + v1[v1.size()-1] /= std::stod(v[i]); + dl = 0; + continue; + } + + if (mns) { + v1.push_back(-std::stod(v[i])); + mns = 0; + continue; + } + + if (v[i] == "*") { + pr = 1; + continue; + } + + if (v[i] == "/") { + dl = 1; + continue; + } + + if (v[i] == "-") { + mns = 1; + continue; + } + + if (v[i] == "+") { + continue; + } + + v1.push_back(std::stod(v[i])); + } + + int answer = 0; + + for (auto n : v1) { + answer += n; + } + + return (int)answer; } From 927d13d11aa12a2288f9d8fca628ff62bb3c4f7e Mon Sep 17 00:00:00 2001 From: tatiana-kornienko14 <114799316+tatiana-kornienko14@users.noreply.github.com> Date: Mon, 12 Dec 2022 18:06:57 +0300 Subject: [PATCH 02/20] Update utils.cpp --- homework_01/task_02/src/utils.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index fd11a11..f9bea2a 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -1,5 +1,6 @@ #include "utils.hpp" #include +#include #define vector_string std::vector bool is_numb(const std::string &str) { From d7e0ebfdf3a098369d07e36dc0f548d5d5689c5f Mon Sep 17 00:00:00 2001 From: tatiana-kornienko14 <114799316+tatiana-kornienko14@users.noreply.github.com> Date: Mon, 12 Dec 2022 18:37:41 +0300 Subject: [PATCH 03/20] Update utils.cpp --- homework_01/task_02/src/utils.cpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index f9bea2a..4ced684 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -1,3 +1,4 @@ +#include #include "utils.hpp" #include #include @@ -51,43 +52,43 @@ int Calculate(const std::string& data) { } if (pr) { - v1[v1.size()-1] *= std::stod(v[i]); + v1[v1.size()-1] *= std::stoi(data[i]); pr = 0; continue; } if (dl) { - v1[v1.size()-1] /= std::stod(v[i]); + v1[v1.size()-1] /= std::stoi(data[i]); dl = 0; continue; } if (mns) { - v1.push_back(-std::stod(v[i])); + v1.push_back(-std::stoi(data[i])); mns = 0; continue; } - if (v[i] == "*") { + if (data[i] == "*") { pr = 1; continue; } - if (v[i] == "/") { + if (data[i] == "/") { dl = 1; continue; } - if (v[i] == "-") { + if (data[i] == "-") { mns = 1; continue; } - if (v[i] == "+") { + if (data[i] == "+") { continue; } - v1.push_back(std::stod(v[i])); + v1.push_back(std::stoi(data[i])); } int answer = 0; @@ -96,5 +97,5 @@ int Calculate(const std::string& data) { answer += n; } - return (int)answer; + return answer; } From 967dcd62fe7cc6c023e9547bb6f7059e7443911b Mon Sep 17 00:00:00 2001 From: tatiana-kornienko14 <114799316+tatiana-kornienko14@users.noreply.github.com> Date: Tue, 13 Dec 2022 05:32:57 +0300 Subject: [PATCH 04/20] Update utils.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit поправила названия переменных, добавила проверку на табуляцию --- homework_01/task_01/src/utils.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/homework_01/task_01/src/utils.cpp b/homework_01/task_01/src/utils.cpp index b8a0bce..3e3fa2b 100644 --- a/homework_01/task_01/src/utils.cpp +++ b/homework_01/task_01/src/utils.cpp @@ -3,24 +3,24 @@ #include std::vector SplitString(const std::string& data) { - std::vector v; + std::vector answer; std::string tmp = ""; - for (auto c : s) { - if (c != ' ') { - tmp += c; + for (auto elem : data) { + if (elem != ' ' && elem != '\t') { + tmp += elem; continue; } if (tmp != "") { - v.push_back(tmp); + answer.push_back(tmp); tmp = ""; } } if (tmp != "") { - v.push_back(tmp); + answer.push_back(tmp); } - return v; + return answer; } From 7d98991e580003a7aec26ecb214fa68bbadc2784 Mon Sep 17 00:00:00 2001 From: tatiana-kornienko14 <114799316+tatiana-kornienko14@users.noreply.github.com> Date: Tue, 13 Dec 2022 05:49:09 +0300 Subject: [PATCH 05/20] Update utils.cpp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit я так посмотрела, define у меня в принципе нигде не используется... упс увидела, кстати, у себя заметную проблему в коде, скоро исправлю, заодно доисправляю названия переменных --- homework_01/task_02/src/utils.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index 4ced684..8d3f67b 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -1,10 +1,9 @@ #include -#include "utils.hpp" #include #include -#define vector_string std::vector +#include "utils.hpp" -bool is_numb(const std::string &str) { +bool is_number(const std::string &str) { static const std::regex r(R"([+-]?(\d*\.)?\d+([Ee[+-]?\d+)?)"); return std::regex_match(str, r); } @@ -15,13 +14,17 @@ int Calculate(const std::string& data) { bool f = 0, pr = 0, dl = 0, mns = 0; for (size_t i = 0; i < data.size(); ++i) { - if (data[i] != "*" && data[i] != "+" && data[i] != "-" && data[i] != "/" && !(is_numb(data[i]))) { + if (data[i] != '*' && + data[i] != '+' && + data[i] != '-' && + data[i] != '/' && + !(is_number(std::to_string(data[i])))) { std::cout << "ошибка!\n"; return 0; } if (f) { - if (data[i] == ")") { + if (data[i] == ')') { int tmp_ans = Calculate(tmp); if (pr) { @@ -46,7 +49,7 @@ int Calculate(const std::string& data) { continue; } - if (data[i] == "(") { + if (data[i] == '(') { f = 1; continue; } @@ -69,22 +72,22 @@ int Calculate(const std::string& data) { continue; } - if (data[i] == "*") { + if (data[i] == '*') { pr = 1; continue; } - if (data[i] == "/") { + if (data[i] == '/') { dl = 1; continue; } - if (data[i] == "-") { + if (data[i] == '-') { mns = 1; continue; } - if (data[i] == "+") { + if (data[i] == '+') { continue; } From 4478790c3352f84a6dcdd7e4c5e0095b1c23b38e Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Tue, 13 Dec 2022 06:36:45 +0300 Subject: [PATCH 06/20] =?UTF-8?q?=D0=BF=D0=BE=D0=BC=D0=B5=D0=BD=D1=8F?= =?UTF-8?q?=D0=BB=D0=B0=20=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=D1=8F=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D1=85,=20=D1=81=D0=BA=D0=BE=D1=80=D0=BE=20=D0=BF=D0=BE=D0=BF?= =?UTF-8?q?=D1=80=D0=B0=D0=B2=D0=BB=D1=8E=20=D0=B5=D1=89=D0=B5=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=B5-=D1=87=D1=82=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_02/src/utils.cpp | 64 ++++++++++++++++--------------- 1 file changed, 34 insertions(+), 30 deletions(-) diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index 8d3f67b..35ff757 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -9,39 +9,43 @@ bool is_number(const std::string &str) { } int Calculate(const std::string& data) { - std::vector v1; // хотела сделать тип double, но в тестах int, так что пока так + std::vector terms; // хотела сделать тип double, но в тестах int, так что пока так std::string tmp; - bool f = 0, pr = 0, dl = 0, mns = 0; + std::string number; // пока нигде не используется, скоро будет; исправлю проблему с методом stoi и в целом с логикой + bool is_brackets = 0; + bool multipl = 0; + bool division = 0; + bool minus = 0; for (size_t i = 0; i < data.size(); ++i) { if (data[i] != '*' && data[i] != '+' && data[i] != '-' && data[i] != '/' && - !(is_number(std::to_string(data[i])))) { + !(is_number(data[i]))) { std::cout << "ошибка!\n"; return 0; } - if (f) { + if (is_brackets) { if (data[i] == ')') { int tmp_ans = Calculate(tmp); - if (pr) { - v1[v1.size()-1] *= tmp_ans; - pr = 0; - } else if (dl) { - v1[v1.size()-1] /= tmp_ans; - dl = 0; - } else if (mns) { - v1.push_back(-tmp_ans); - mns = 0; + if (multipl) { + terms[v1.size()-1] *= tmp_ans; + multipl = 0; + } else if (division) { + terms[v1.size()-1] /= tmp_ans; + division = 0; + } else if (minus) { + terms.push_back(-tmp_ans); + minus = 0; } else { - v1.push_back(tmp_ans); + terms.push_back(tmp_ans); } tmp = {}; - f = 0; + is_brackets = 0; } else { tmp.push_back(data[i]); } @@ -50,40 +54,40 @@ int Calculate(const std::string& data) { } if (data[i] == '(') { - f = 1; + is_brackets = 1; continue; } - if (pr) { - v1[v1.size()-1] *= std::stoi(data[i]); - pr = 0; + if (multipl) { + terms[terms.size()-1] *= std::stoi(data[i]); + multipl = 0; continue; } - if (dl) { - v1[v1.size()-1] /= std::stoi(data[i]); - dl = 0; + if (division) { + terms[terms.size()-1] /= std::stoi(data[i]); + division = 0; continue; } - if (mns) { - v1.push_back(-std::stoi(data[i])); - mns = 0; + if (minus) { + terms.push_back(-std::stoi(data[i])); + minus = 0; continue; } if (data[i] == '*') { - pr = 1; + multipl = 1; continue; } if (data[i] == '/') { - dl = 1; + division = 1; continue; } if (data[i] == '-') { - mns = 1; + minus = 1; continue; } @@ -91,12 +95,12 @@ int Calculate(const std::string& data) { continue; } - v1.push_back(std::stoi(data[i])); + terms.push_back(std::stoi(data[i])); } int answer = 0; - for (auto n : v1) { + for (auto n : terms) { answer += n; } From 583d79f866c4e917cebec86cadc8ac56e80594d2 Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Tue, 13 Dec 2022 19:10:34 +0300 Subject: [PATCH 07/20] =?UTF-8?q?=D0=BF=D0=BE=D1=87=D1=82=D0=B8=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=D0=B0,=20=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=BB=D0=BE=D1=81=D1=8C=20=D0=BD=D0=B5=D0=BC=D0=BD?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_02/src/utils.cpp | 60 ++++++++++++++----------------- 1 file changed, 27 insertions(+), 33 deletions(-) diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index 35ff757..76dbfd8 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -18,24 +18,15 @@ int Calculate(const std::string& data) { bool minus = 0; for (size_t i = 0; i < data.size(); ++i) { - if (data[i] != '*' && - data[i] != '+' && - data[i] != '-' && - data[i] != '/' && - !(is_number(data[i]))) { - std::cout << "ошибка!\n"; - return 0; - } - if (is_brackets) { if (data[i] == ')') { int tmp_ans = Calculate(tmp); if (multipl) { - terms[v1.size()-1] *= tmp_ans; + terms[terms.size()-1] *= tmp_ans; multipl = 0; } else if (division) { - terms[v1.size()-1] /= tmp_ans; + terms[terms.size()-1] /= tmp_ans; division = 0; } else if (minus) { terms.push_back(-tmp_ans); @@ -44,58 +35,61 @@ int Calculate(const std::string& data) { terms.push_back(tmp_ans); } - tmp = {}; + tmp = ""; is_brackets = 0; } else { - tmp.push_back(data[i]); + tmp += data[i]; } continue; } - if (data[i] == '(') { - is_brackets = 1; + if (data[i] != '*' && + data[i] != '+' && + data[i] != '-' && + data[i] != '/' && + data[i] != '(' && + data[i] != ')') { + number += data[i]; continue; } - if (multipl) { - terms[terms.size()-1] *= std::stoi(data[i]); - multipl = 0; - continue; + if (!is_number(number)) { + std::cout << "ошибка!\n"; + return 0; } - if (division) { - terms[terms.size()-1] /= std::stoi(data[i]); - division = 0; + if (data[i] == '(') { + is_brackets = 1; continue; } - if (minus) { - terms.push_back(-std::stoi(data[i])); + if (multipl) { + terms[terms.size()-1] *= std::stoi(number); + multipl = 0; + } else if (division) { + terms[terms.size()-1] /= std::stoi(number); + division = 0; + } else if (minus) { + terms.push_back(-std::stoi(number); minus = 0; - continue; + } else { + terms.push_back(std::stoi(number)); } if (data[i] == '*') { multipl = 1; - continue; } if (data[i] == '/') { division = 1; - continue; } if (data[i] == '-') { minus = 1; - continue; - } - - if (data[i] == '+') { - continue; } - terms.push_back(std::stoi(data[i])); + number = ""; } int answer = 0; From cbf9a239a018357a2d397695a2ea7ca51e5a90b6 Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Wed, 14 Dec 2022 00:16:52 +0300 Subject: [PATCH 08/20] =?UTF-8?q?=D0=B2=D1=80=D0=BE=D0=B4=D0=B5=20=D0=B2?= =?UTF-8?q?=D1=81=D0=B5=20=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_02/src/utils.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index 76dbfd8..325bc28 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -11,7 +11,7 @@ bool is_number(const std::string &str) { int Calculate(const std::string& data) { std::vector terms; // хотела сделать тип double, но в тестах int, так что пока так std::string tmp; - std::string number; // пока нигде не используется, скоро будет; исправлю проблему с методом stoi и в целом с логикой + std::string number; bool is_brackets = 0; bool multipl = 0; bool division = 0; @@ -20,7 +20,11 @@ int Calculate(const std::string& data) { for (size_t i = 0; i < data.size(); ++i) { if (is_brackets) { if (data[i] == ')') { - int tmp_ans = Calculate(tmp); + try { + int tmp_ans = Calculate(tmp); + } catch (std::string error) { + throw (error); + } if (multipl) { terms[terms.size()-1] *= tmp_ans; @@ -55,8 +59,7 @@ int Calculate(const std::string& data) { } if (!is_number(number)) { - std::cout << "ошибка!\n"; - return 0; + throw ("ошибка!\n"); } if (data[i] == '(') { From cbe78b777ecccca74b4402c91bf4d7a9aa722548 Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Wed, 14 Dec 2022 00:37:15 +0300 Subject: [PATCH 09/20] =?UTF-8?q?=D0=B4=D0=BE=D0=B4=D0=B5=D0=BB=D0=B0?= =?UTF-8?q?=D0=BB=D0=B0;=20=D0=B2=D0=BE=D1=82=20=D1=8D=D1=82=D0=BE=20?= =?UTF-8?q?=D1=83=D0=B6=D0=B5=20=D0=B4=D0=BE=D0=BB=D0=B6=D0=BD=D0=BE=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_02/src/main.cpp | 2 +- homework_01/task_02/src/utils.cpp | 47 ++++++++++++++++++++----------- 2 files changed, 31 insertions(+), 18 deletions(-) diff --git a/homework_01/task_02/src/main.cpp b/homework_01/task_02/src/main.cpp index 72a6f13..e3ddab7 100644 --- a/homework_01/task_02/src/main.cpp +++ b/homework_01/task_02/src/main.cpp @@ -1,6 +1,6 @@ #include -#include +#include "utils.hpp" int main() { std::string data; diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index 325bc28..ad80ad5 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -22,25 +22,25 @@ int Calculate(const std::string& data) { if (data[i] == ')') { try { int tmp_ans = Calculate(tmp); + + if (multipl) { + terms[terms.size()-1] *= tmp_ans; + multipl = 0; + } else if (division) { + terms[terms.size()-1] /= tmp_ans; + division = 0; + } else if (minus) { + terms.push_back(-tmp_ans); + minus = 0; + } else { + terms.push_back(tmp_ans); + } + + tmp = ""; + is_brackets = 0; } catch (std::string error) { throw (error); } - - if (multipl) { - terms[terms.size()-1] *= tmp_ans; - multipl = 0; - } else if (division) { - terms[terms.size()-1] /= tmp_ans; - division = 0; - } else if (minus) { - terms.push_back(-tmp_ans); - minus = 0; - } else { - terms.push_back(tmp_ans); - } - - tmp = ""; - is_brackets = 0; } else { tmp += data[i]; } @@ -74,7 +74,7 @@ int Calculate(const std::string& data) { terms[terms.size()-1] /= std::stoi(number); division = 0; } else if (minus) { - terms.push_back(-std::stoi(number); + terms.push_back(-std::stoi(number)); minus = 0; } else { terms.push_back(std::stoi(number)); @@ -95,6 +95,19 @@ int Calculate(const std::string& data) { number = ""; } + if (multipl) { + terms[terms.size()-1] *= std::stoi(number); + multipl = 0; + } else if (division) { + terms[terms.size()-1] /= std::stoi(number); + division = 0; + } else if (minus) { + terms.push_back(-std::stoi(number)); + minus = 0; + } else { + terms.push_back(std::stoi(number)); + } + int answer = 0; for (auto n : terms) { From 9d256ec91ee041f8fd2ca64279d77926a8ad56f4 Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Wed, 14 Dec 2022 00:42:35 +0300 Subject: [PATCH 10/20] =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=B0=D0=BB=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D1=83?= =?UTF-8?q?=20=D0=B2=20main.cpp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_02/src/main.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/homework_01/task_02/src/main.cpp b/homework_01/task_02/src/main.cpp index e3ddab7..3a0a62d 100644 --- a/homework_01/task_02/src/main.cpp +++ b/homework_01/task_02/src/main.cpp @@ -5,6 +5,12 @@ int main() { std::string data; std::getline(std::cin, data); - std::cout << Calculate(data); + + try { + std::cout << Calculate(data); + } catch (std::string error) { + std::cout << error; + } + return 0; } From eef1f60bfbe45e60628d6936ae021571585231c6 Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Wed, 14 Dec 2022 20:24:33 +0300 Subject: [PATCH 11/20] =?UTF-8?q?=D1=8D=D1=82=D0=BE=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=BE=D1=81=D0=BE=D0=B1=D0=BE=20=D0=B2=D0=B0=D0=B6=D0=BD=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_01/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homework_01/task_01/src/main.cpp b/homework_01/task_01/src/main.cpp index 0b3dcb2..0feb697 100644 --- a/homework_01/task_01/src/main.cpp +++ b/homework_01/task_01/src/main.cpp @@ -1,6 +1,6 @@ #include -#include +#include "utils.hpp" int main() { for (const auto& word : SplitString("asdas das das fgag (adasd 1fas)")) { From e10e177e4091261f4e313a5ed710b67ca9dc9868 Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Wed, 14 Dec 2022 20:54:45 +0300 Subject: [PATCH 12/20] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=D0=B0=20=D1=83=D1=81=D0=BB=D0=BE=D0=B2=D0=B8=D0=B5=20?= =?UTF-8?q?=D1=81=D0=BE=20=D1=81=D0=BA=D0=BE=D0=B1=D0=BA=D0=B0=D0=BC=D0=B8?= =?UTF-8?q?,=20=D0=BD=D0=B0=D0=B4=D0=BE=20=D0=B5=D1=89=D0=B5=20=D0=B4?= =?UTF-8?q?=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_01/src/utils.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/homework_01/task_01/src/utils.cpp b/homework_01/task_01/src/utils.cpp index 3e3fa2b..e257e90 100644 --- a/homework_01/task_01/src/utils.cpp +++ b/homework_01/task_01/src/utils.cpp @@ -5,8 +5,28 @@ std::vector SplitString(const std::string& data) { std::vector answer; std::string tmp = ""; + bool is_bracket = 0; for (auto elem : data) { + if (is_bracket) { + if (elem == ')') { + is_bracket = 0; + if (tmp != "") { + answer.push_back(tmp); + tmp = ""; + } + } else { + tmp += elem; + } + + continue; + } + + if (elem == '(') { + is_bracket == 1; + continue; + } + if (elem != ' ' && elem != '\t') { tmp += elem; continue; From ad1ddc4c07f79b1cf092adb8e1353bbf4a7ee861 Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Wed, 14 Dec 2022 20:59:58 +0300 Subject: [PATCH 13/20] =?UTF-8?q?=D0=B2=D1=80=D0=BE=D0=B4=D0=B5=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=B1=D0=B8=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_01/src/utils.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homework_01/task_01/src/utils.cpp b/homework_01/task_01/src/utils.cpp index e257e90..6946b54 100644 --- a/homework_01/task_01/src/utils.cpp +++ b/homework_01/task_01/src/utils.cpp @@ -23,7 +23,7 @@ std::vector SplitString(const std::string& data) { } if (elem == '(') { - is_bracket == 1; + is_bracket = 1; continue; } From a3f08efdf9d81268290fcc59086fed12e445eaed Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Wed, 14 Dec 2022 21:08:37 +0300 Subject: [PATCH 14/20] =?UTF-8?q?=D0=BF=D0=B0=D1=80=D0=B0=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_02/src/utils.cpp | 8 ++++---- homework_01/task_02/src/utils.hpp | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index ad80ad5..18d2c69 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -8,8 +8,8 @@ bool is_number(const std::string &str) { return std::regex_match(str, r); } -int Calculate(const std::string& data) { - std::vector terms; // хотела сделать тип double, но в тестах int, так что пока так +double Calculate(const std::string& data) { + std::vector terms; std::string tmp; std::string number; bool is_brackets = 0; @@ -21,7 +21,7 @@ int Calculate(const std::string& data) { if (is_brackets) { if (data[i] == ')') { try { - int tmp_ans = Calculate(tmp); + double tmp_ans = Calculate(tmp); if (multipl) { terms[terms.size()-1] *= tmp_ans; @@ -108,7 +108,7 @@ int Calculate(const std::string& data) { terms.push_back(std::stoi(number)); } - int answer = 0; + double answer = 0; for (auto n : terms) { answer += n; diff --git a/homework_01/task_02/src/utils.hpp b/homework_01/task_02/src/utils.hpp index f1bceeb..1b8120e 100644 --- a/homework_01/task_02/src/utils.hpp +++ b/homework_01/task_02/src/utils.hpp @@ -4,4 +4,4 @@ #include #include -int Calculate(const std::string& data); +double Calculate(const std::string& data); From cffd546bba274297a9c915fdefd98e119577876d Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Thu, 15 Dec 2022 14:22:27 +0300 Subject: [PATCH 15/20] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_01/src/utils.cpp | 4 ++-- homework_01/task_02/src/utils.cpp | 15 ++++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/homework_01/task_01/src/utils.cpp b/homework_01/task_01/src/utils.cpp index 6946b54..a4e99a6 100644 --- a/homework_01/task_01/src/utils.cpp +++ b/homework_01/task_01/src/utils.cpp @@ -13,7 +13,7 @@ std::vector SplitString(const std::string& data) { is_bracket = 0; if (tmp != "") { answer.push_back(tmp); - tmp = ""; + tmp.clear(); } } else { tmp += elem; @@ -34,7 +34,7 @@ std::vector SplitString(const std::string& data) { if (tmp != "") { answer.push_back(tmp); - tmp = ""; + tmp.clear(); } } diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index 18d2c69..51942ae 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -1,7 +1,8 @@ +#include "utils.hpp" + #include #include #include -#include "utils.hpp" bool is_number(const std::string &str) { static const std::regex r(R"([+-]?(\d*\.)?\d+([Ee[+-]?\d+)?)"); @@ -24,10 +25,10 @@ double Calculate(const std::string& data) { double tmp_ans = Calculate(tmp); if (multipl) { - terms[terms.size()-1] *= tmp_ans; + terms[terms.size() - 1] *= tmp_ans; multipl = 0; } else if (division) { - terms[terms.size()-1] /= tmp_ans; + terms[terms.size() - 1] /= tmp_ans; division = 0; } else if (minus) { terms.push_back(-tmp_ans); @@ -68,10 +69,10 @@ double Calculate(const std::string& data) { } if (multipl) { - terms[terms.size()-1] *= std::stoi(number); + terms[terms.size() - 1] *= std::stoi(number); multipl = 0; } else if (division) { - terms[terms.size()-1] /= std::stoi(number); + terms[terms.size() - 1] /= std::stoi(number); division = 0; } else if (minus) { terms.push_back(-std::stoi(number)); @@ -96,10 +97,10 @@ double Calculate(const std::string& data) { } if (multipl) { - terms[terms.size()-1] *= std::stoi(number); + terms[terms.size() - 1] *= std::stoi(number); multipl = 0; } else if (division) { - terms[terms.size()-1] /= std::stoi(number); + terms[terms.size() - 1] /= std::stoi(number); division = 0; } else if (minus) { terms.push_back(-std::stoi(number)); From 82eaff7bd02f4b42f23a4d5c07ed133ea48686eb Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Fri, 16 Dec 2022 00:25:50 +0300 Subject: [PATCH 16/20] =?UTF-8?q?=D0=BF=D0=BE=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_01/src/split_string_test.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/homework_01/task_01/src/split_string_test.cpp b/homework_01/task_01/src/split_string_test.cpp index 82d4994..0a536de 100644 --- a/homework_01/task_01/src/split_string_test.cpp +++ b/homework_01/task_01/src/split_string_test.cpp @@ -11,5 +11,5 @@ TEST_CASE("SplitString", "[simple]") { CHECK(SplitString("??? ??") == std::vector{"???", "??"}); CHECK(SplitString("a\na\ta a") == std::vector{"a\na", "a", "a"}); CHECK(SplitString("a (a a)") == std::vector{"a", "(a a)"}); - CHECK(SplitString("a (a a) b (asd as) ") == std::vector{"a", "(a a)", "b", "(asd as)"}); + CHECK(SplitString("a (a a) b (asd as) ") == std::vector{"a", "a a", "b", "asd as"}); } From b9d468e5d0cf7eaeb2bfcbd623f14c10bceeaebc Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Fri, 16 Dec 2022 20:50:19 +0300 Subject: [PATCH 17/20] =?UTF-8?q?=D0=BF=D0=BE=D0=BA=D0=B0=20=D0=B2=D1=80?= =?UTF-8?q?=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D0=BE=20=D0=BF=D0=BE=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=8F=D0=BB=D0=B0=20=D0=B2=D1=81=D0=B5=20=D0=BD=D0=B0=20?= =?UTF-8?q?int,=20=D0=BF=D0=BE=D1=82=D0=BE=D0=BC=20=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BD=D1=83=20=D0=BE=D0=B1=D1=80=D0=B0=D1=82=D0=BD=D0=BE;=20?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=D0=B0=20empty?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_02/src/utils.cpp | 12 ++++++++---- homework_01/task_02/src/utils.hpp | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index 51942ae..7bef46d 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -9,8 +9,8 @@ bool is_number(const std::string &str) { return std::regex_match(str, r); } -double Calculate(const std::string& data) { - std::vector terms; +int Calculate(const std::string& data) { + std::vector terms; std::string tmp; std::string number; bool is_brackets = 0; @@ -22,7 +22,7 @@ double Calculate(const std::string& data) { if (is_brackets) { if (data[i] == ')') { try { - double tmp_ans = Calculate(tmp); + int tmp_ans = Calculate(tmp); if (multipl) { terms[terms.size() - 1] *= tmp_ans; @@ -59,6 +59,10 @@ double Calculate(const std::string& data) { continue; } + if (number.empty()) { + continue; + } + if (!is_number(number)) { throw ("ошибка!\n"); } @@ -109,7 +113,7 @@ double Calculate(const std::string& data) { terms.push_back(std::stoi(number)); } - double answer = 0; + int answer = 0; for (auto n : terms) { answer += n; diff --git a/homework_01/task_02/src/utils.hpp b/homework_01/task_02/src/utils.hpp index 1b8120e..f1bceeb 100644 --- a/homework_01/task_02/src/utils.hpp +++ b/homework_01/task_02/src/utils.hpp @@ -4,4 +4,4 @@ #include #include -double Calculate(const std::string& data); +int Calculate(const std::string& data); From f95057c7ea21a47965d5fa3dddc64783bdb9b3a9 Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Fri, 16 Dec 2022 21:18:38 +0300 Subject: [PATCH 18/20] =?UTF-8?q?=D0=A1=D0=9A=D0=9E=D0=91=D0=9E=D0=A7?= =?UTF-8?q?=D0=9A=D0=98=20=D0=A0=D0=90=D0=91=D0=9E=D0=A2=D0=90=D0=AE=D0=A2?= =?UTF-8?q?,=20=D0=A3=D0=A0=D0=90=20:D=20=D0=B0=20=D0=B2=D0=BE=D0=BE=D0=B1?= =?UTF-8?q?=D1=89=D0=B5=20=D0=BE=D1=81=D1=82=D0=B0=D0=BB=D0=BE=D1=81=D1=8C?= =?UTF-8?q?=20=D1=87=D1=83=D1=82=D1=8C-=D1=87=D1=83=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_02/src/utils.cpp | 57 ++++++++++++++++--------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index 7bef46d..0c4f5fb 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -22,6 +22,7 @@ int Calculate(const std::string& data) { if (is_brackets) { if (data[i] == ')') { try { + std::cout << tmp << '\n'; int tmp_ans = Calculate(tmp); if (multipl) { @@ -59,7 +60,8 @@ int Calculate(const std::string& data) { continue; } - if (number.empty()) { + if (data[i] == '(') { + is_brackets = 1; continue; } @@ -67,22 +69,19 @@ int Calculate(const std::string& data) { throw ("ошибка!\n"); } - if (data[i] == '(') { - is_brackets = 1; - continue; - } - - if (multipl) { - terms[terms.size() - 1] *= std::stoi(number); - multipl = 0; - } else if (division) { - terms[terms.size() - 1] /= std::stoi(number); - division = 0; - } else if (minus) { - terms.push_back(-std::stoi(number)); - minus = 0; - } else { - terms.push_back(std::stoi(number)); + if (!number.empty()) { + if (multipl) { + terms[terms.size() - 1] *= std::stoi(number); + multipl = 0; + } else if (division) { + terms[terms.size() - 1] /= std::stoi(number); + division = 0; + } else if (minus) { + terms.push_back(-std::stoi(number)); + minus = 0; + } else { + terms.push_back(std::stoi(number)); + } } if (data[i] == '*') { @@ -100,17 +99,19 @@ int Calculate(const std::string& data) { number = ""; } - if (multipl) { - terms[terms.size() - 1] *= std::stoi(number); - multipl = 0; - } else if (division) { - terms[terms.size() - 1] /= std::stoi(number); - division = 0; - } else if (minus) { - terms.push_back(-std::stoi(number)); - minus = 0; - } else { - terms.push_back(std::stoi(number)); + if (!number.empty()) { + if (multipl) { + terms[terms.size() - 1] *= std::stoi(number); + multipl = 0; + } else if (division) { + terms[terms.size() - 1] /= std::stoi(number); + division = 0; + } else if (minus) { + terms.push_back(-std::stoi(number)); + minus = 0; + } else { + terms.push_back(std::stoi(number)); + } } int answer = 0; From 61656352b415982fed551f102f8139e37498016b Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Sat, 17 Dec 2022 10:20:27 +0300 Subject: [PATCH 19/20] =?UTF-8?q?=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20?= =?UTF-8?q?=D1=81=D0=BA=D0=BE=D0=B1=D0=BE=D1=87=D0=BA=D0=B8=20=D1=80=D0=B0?= =?UTF-8?q?=D0=B1=D0=BE=D1=82=D0=B0=D1=8E=D1=82=20=D0=B8=20=D0=B2=D0=BD?= =?UTF-8?q?=D1=83=D1=82=D1=80=D0=B8=20=D1=81=D0=BA=D0=BE=D0=B1=D0=BE=D1=87?= =?UTF-8?q?=D0=B5=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_02/src/utils.cpp | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index 0c4f5fb..7039469 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -14,6 +14,7 @@ int Calculate(const std::string& data) { std::string tmp; std::string number; bool is_brackets = 0; + int tmp_brackets = 0; bool multipl = 0; bool division = 0; bool minus = 0; @@ -21,8 +22,13 @@ int Calculate(const std::string& data) { for (size_t i = 0; i < data.size(); ++i) { if (is_brackets) { if (data[i] == ')') { + if (tmp_brackets) { + tmp += data[i]; + tmp_brackets -= 1; + continue; + } + try { - std::cout << tmp << '\n'; int tmp_ans = Calculate(tmp); if (multipl) { @@ -44,6 +50,10 @@ int Calculate(const std::string& data) { throw (error); } } else { + if (data[i] == '(') { + tmp_brackets += 1; + } + tmp += data[i]; } From 7af55485e96ba67f1761b1d3cf17cc738d56c255 Mon Sep 17 00:00:00 2001 From: Tatyana145 Date: Sat, 17 Dec 2022 10:53:16 +0300 Subject: [PATCH 20/20] =?UTF-8?q?=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=D0=B5=D1=82!=20:D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- homework_01/task_02/src/utils.cpp | 25 ++++++++++++------------- homework_01/task_02/src/utils.hpp | 3 +-- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/homework_01/task_02/src/utils.cpp b/homework_01/task_02/src/utils.cpp index 7039469..34eda98 100644 --- a/homework_01/task_02/src/utils.cpp +++ b/homework_01/task_02/src/utils.cpp @@ -2,15 +2,14 @@ #include #include -#include bool is_number(const std::string &str) { static const std::regex r(R"([+-]?(\d*\.)?\d+([Ee[+-]?\d+)?)"); return std::regex_match(str, r); } -int Calculate(const std::string& data) { - std::vector terms; +double Calculate(const std::string& data) { + std::vector terms; std::string tmp; std::string number; bool is_brackets = 0; @@ -29,7 +28,7 @@ int Calculate(const std::string& data) { } try { - int tmp_ans = Calculate(tmp); + double tmp_ans = Calculate(tmp); if (multipl) { terms[terms.size() - 1] *= tmp_ans; @@ -81,16 +80,16 @@ int Calculate(const std::string& data) { if (!number.empty()) { if (multipl) { - terms[terms.size() - 1] *= std::stoi(number); + terms[terms.size() - 1] *= std::stod(number); multipl = 0; } else if (division) { - terms[terms.size() - 1] /= std::stoi(number); + terms[terms.size() - 1] /= std::stod(number); division = 0; } else if (minus) { - terms.push_back(-std::stoi(number)); + terms.push_back(-std::stod(number)); minus = 0; } else { - terms.push_back(std::stoi(number)); + terms.push_back(std::stod(number)); } } @@ -111,20 +110,20 @@ int Calculate(const std::string& data) { if (!number.empty()) { if (multipl) { - terms[terms.size() - 1] *= std::stoi(number); + terms[terms.size() - 1] *= std::stod(number); multipl = 0; } else if (division) { - terms[terms.size() - 1] /= std::stoi(number); + terms[terms.size() - 1] /= std::stod(number); division = 0; } else if (minus) { - terms.push_back(-std::stoi(number)); + terms.push_back(-std::stod(number)); minus = 0; } else { - terms.push_back(std::stoi(number)); + terms.push_back(std::stod(number)); } } - int answer = 0; + double answer = 0; for (auto n : terms) { answer += n; diff --git a/homework_01/task_02/src/utils.hpp b/homework_01/task_02/src/utils.hpp index f1bceeb..2fe0f23 100644 --- a/homework_01/task_02/src/utils.hpp +++ b/homework_01/task_02/src/utils.hpp @@ -1,7 +1,6 @@ #pragma once #include -#include #include -int Calculate(const std::string& data); +double Calculate(const std::string& data);