diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000000..26d33521af
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/.idea/geometric_lib.iml b/.idea/geometric_lib.iml
new file mode 100644
index 0000000000..8b8c395472
--- /dev/null
+++ b/.idea/geometric_lib.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml
new file mode 100644
index 0000000000..105ce2da2d
--- /dev/null
+++ b/.idea/inspectionProfiles/profiles_settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000..dc9ea4906e
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000000..5c0675083d
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000..35eb1ddfbb
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/__pycache__/circle.cpython-310.pyc b/__pycache__/circle.cpython-310.pyc
new file mode 100644
index 0000000000..9783a00464
Binary files /dev/null and b/__pycache__/circle.cpython-310.pyc differ
diff --git a/__pycache__/rectangle.cpython-310.pyc b/__pycache__/rectangle.cpython-310.pyc
new file mode 100644
index 0000000000..249a3e333d
Binary files /dev/null and b/__pycache__/rectangle.cpython-310.pyc differ
diff --git a/__pycache__/square.cpython-310.pyc b/__pycache__/square.cpython-310.pyc
new file mode 100644
index 0000000000..9865cf89c9
Binary files /dev/null and b/__pycache__/square.cpython-310.pyc differ
diff --git a/__pycache__/test.cpython-310.pyc b/__pycache__/test.cpython-310.pyc
new file mode 100644
index 0000000000..acc3fab0d7
Binary files /dev/null and b/__pycache__/test.cpython-310.pyc differ
diff --git a/__pycache__/triangle.cpython-310.pyc b/__pycache__/triangle.cpython-310.pyc
new file mode 100644
index 0000000000..18a79891d5
Binary files /dev/null and b/__pycache__/triangle.cpython-310.pyc differ
diff --git a/circle.py b/circle.py
index c3eb8647c9..f6f04a2558 100644
--- a/circle.py
+++ b/circle.py
@@ -1,10 +1,44 @@
import math
+''' позволяет получить значение pi'''
+def CircleArea(r):
+ '''
+ Принимает одно число (радиус круга) и возвращает его значение возведенное в квадрат и умноженное на pi т.е. площадь круга
+ Параметры:
+ x (int): натуральное число
+
+ Возвращаемое значение:
+ значение числа x возведенное в квадрат и умноженное на pi (float)
-def area(r):
+ Пример работы:
+ input: 3
+ output: 9*pi
+
+ '''
+
+ if r <= 0:
+ return "error"
return math.pi * r * r
-def perimeter(r):
+def CirclePerimeter(r):
+ '''
+ Принимает одно число (радиус круга) и возвращает его значение умноженное на два и умноженное на pi т.е. периметр круга
+ Параметры:
+ x (int): натуральное число
+
+ Возвращаемое значение:
+ удвоенное значение числа x и умноженное на pi (float)
+
+
+ Пример работы:
+ input: 3
+ output: 6*pi
+
+ '''
+
+ if r <= 0:
+ return "error"
+
return 2 * math.pi * r
diff --git a/docs/README.md b/docs/README.md
index 63f8727939..6236b5e144 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -3,8 +3,151 @@
- Circle: S = πR²
- Rectangle: S = ab
- Square: S = a²
+- Triangle: S = a*h/2
## Perimeter
- Circle: P = 2πR
- Rectangle: P = 2a + 2b
-- Square: P = 4a
\ No newline at end of file
+- Square: P = 4a
+- Triangle: P = a + b + c
+
+# Описание Решения
+В зависимости от исходной фигуры на вход подаются определенные данные, проанализировав которые, мы сможем определить площадь и периметр фигуры
+
+# Описание каждой функции
+## Функция area
+она получает на вход несколько чилел:
+- для прямоугольника - 2, функция возвращает произведение этих двух чисел (его сторон)
+- для треугольника - 2, функция возвращает поизведение его стороны на высоту, деленное на два
+- для квадрата - 1, функция возвращает квадрат его стороны
+- для круго - 1, функция возвращеет квадрат его радиуса, умноженный на pi
+### Примеры:
+- дан прямоугольник со сторонами 4 и 8, функция выведет их произведение = 32
+- дан треугольник со стороной 4 и высотой 8, функция выведет их произведение, деленное пополам = 16
+- дан квадрат со стороной 5, функция выведет значение равное квадрату его стороны = 25
+- дан круг с радиусом 5, функция выведет знаяение равное квадрату радиуса, умноженное на pi = 25*pi
+
+## Функция perimeter
+она получает на вход 2 или 3 числа:
+- для прямоугольника - 2, и возвращает их удвоенную сумму
+- для треугольника - 3, и возвращает их сумму
+- для квадрата - 1, и возвращает его значение, умноженное на 4
+- для круга - 1, и возвращает его удвоенное значение умноженное на pi
+### Примеры:
+- дан прямоугольник со сторонами 4 и 8, функция выведет их удвоенную сумму = 24
+- дан треугольник со сторонами 4, 8, 7, функция выведет их сумму = 19
+- дан квадрат со стороной 5, функция выведет значение стороны, умноженное на 4 = 20
+- дан круг с радиусом 5, функция выведет его удвоенное значение умноженное на pi = 10*pi
+
+## Библиотека math
+для выполнения математических и не только операций(в нашем случае для добавления значения pi)
+
+# [Unittest](../test.py)
+
+## CircleTestCase - test_area
+
+### self.assertAlmostEqual(SquareArea(2), math.pi * 2 * 2, точность=5)
+> Проверяет вычисление площади круга с радиусом 2.
+### self.assertAlmostEqual(SquareArea(0), "error")
+> Проверяет вычисление площади круга с радиусом 0. Выводится **error**
+### self.assertAlmostEqual(SquareArea(9223372036854775807), math.pi * 9223372036854775807 ** 2, точность=5)
+> Проверяет вычисление площади круга с очень большим радиусом, `9223372036854775807`.
+### self.assertAlmostEqual(SquareArea(-8), "error")
+> Проверяет обработку отрицательного радиуса при вычислении площади. Выводится **error**.
+---
+
+## CircleTestCase - test_perimeter
+
+### self.assertAlmostEqual(SquarePerimeter(2), 2 * math.pi * 2, точность=5)
+> Проверяет вычисление периметра окружности с радиусом 2.
+### self.assertAlmostEqual(SquarePerimeter(0), "error")
+> Проверяет, что периметр окружности с радиусом 0 равен 0. Выводится **error**
+### self.assertAlmostEqual(SquarePerimeter(9223372036854775807), 2 * math.pi * 9223372036854775807, точность=5)
+> Проверяет вычисление периметра окружности с очень большим радиусом.
+### self.assertAlmostEqual(SquarePerimeter(-6), "error")
+> Проверяет обработку отрицательного радиуса при вычислении периметра. Выводится **error**.
+---
+
+## RectangleTestCase - test_area
+
+### self.assertEqual(RectangleArea(-2, -6), "error")
+> Проверяет прямоугольную область с отрицательными размерами. Выводится **error**
+### self.assertEqual(RectangleArea(0, 5), "error")
+> Проверяет, что площадь прямоугольника с одной стороной, равной 0, равна 0. Выводится **error**
+### self.assertEqual(RectangleArea(7, 2), 14)
+> Проверяет вычисление площади прямоугольника со сторонами 7x2; ожидается 14.
+### self.assertEqual(RectangleArea(9223372036854775807, 9223372036854775807), 9223372036854775807 ** 2)
+> Проверяет расчет площади для очень больших размеров прямоугольника.
+---
+
+## RectangleTestCase - test_perimeter
+
+### self.assertEqual(RectanglePerimeter(-2, -6), "error")
+> Проверяет вычисление периметра прямоугольника с отрицательными размерами. Выводится **error**
+### self.assertEqual(RectanglePerimeter(0, 5), "error")
+> Проверяет вычисление периметра с одной стороной, равной 0. Выводится **error**
+### self.assertEqual(RectanglePerimeter(7, 2), 18)
+> Проверяет расчёт периметра прямоугольника со сторонами 7 и 2.
+### self.assertEqual(RectanglePerimeter(9223372036854775807, 9223372036854775807), 9223372036854775807*2 + 9223372036854775807*2)
+> Проверяет расчет периметра для очень больших размеров прямоугольника.
+---
+
+## SquareTestCase - test_area
+
+### self.assertEqual(SquareArea(-5), "error")
+> Проверяет вычисление площади квадрата с отрицательной длиной стороны. Выводится **error**
+### self.assertEqual(SquareArea(0), "error")
+> Проверяет вычисление площади квадрата со стороной 0. Выводится **error**
+### self.assertEqual(SquareArea(9223372036854775807), 9223372036854775807 * 9223372036854775807)
+> Проверяет расчёт площади квадрата с очень большой длиной стороны.
+### self.assertEqual(SquareArea(10), 100)
+> Проверяет расчёт площади квадрата со стороной 10.
+---
+
+## SquareTestCase - test_perimeter
+
+### self.assertEqual(SquarePerimeter(-5), "error")
+> Проверяет вычисление периметра квадрата с отрицательной длиной стороны. Выводится **error**
+### self.assertEqual(SquarePerimeter(0), "error")
+> Проверяет вычисление периметра квадрата со стороной 0. Выводится **error**
+### self.assertEqual(SquarePerimeter(9223372036854775807), 9223372036854775807 * 4)
+> Проверяет расчёт периметра для квадрата с очень большой длиной стороны.
+### self.assertEqual(SquarePerimeter(10), 40)
+> Проверяет расчёт периметра квадрата со стороной 10.
+---
+
+## TriangleTestCase - test_area
+
+### self.assertEqual(TriangleArea(-4, -5), "error")
+> Проверяет площадь треугольника с отрицательным основанием и высотой. Выводится **error**
+### self.assertEqual(TriangleArea(3, 6), 9)
+> Проверяет вычисление площади треугольника с основанием 3 и высотой 6.
+### self.assertEqual(TriangleArea(9223372036854775807, 2), 9223372036854775807 * 2 / 2)
+> Проверяет вычисление площади для треугольника с очень большим основанием.
+### self.assertEqual(TriangleArea(7, 8), 28)
+> Проверяет расчёт площади треугольника с основанием 7 и высотой 8.
+---
+
+## TriangleTestCase - test_perimeter
+
+### self.assertEqual(TrianglePerimeter(-4, -5, -6), "error")
+> Проверяет вычисление периметра треугольника с отрицательными длинами сторон. Вывод **error**.
+### self.assertEqual(TrianglePerimeter(3, 4, 5), 12)
+> Проверяет вычисление периметра треугольника со сторонами 3, 4, 5.
+### self.assertEqual(TrianglePerimeter(6, 8, 15), "error")
+> Проверяет расчёт периметра треугольника со сторонами 6, 8, 15. Проверка на a + b > c Выводится **error**
+### self.assertEqual(TrianglePerimeter(9223372036854775807, 9223372036854775807, 9223372036854775807), 9223372036854775807 * 3)
+> Проверяет вычисление периметра треугольника с очень большими сторонами.
+
+# История изменений проекта
+Добавил новый файл - rectangle.py
+commit e3db881c2c48f7f52e02b5d80a4be8fb1cfcbf98
+
+Добавил новый файл - triangle.py
+commit 9eae82cb57b69572687850567dfe7786ce6909df
+
+Исправил ошибку в файле - rectangle.py
+commit c4bd0023306e8cac552cf2e898c65c58bd67d9d3
+
+Добавил комментарии во все файлы
+commit 63079e254410c3be3b922b5df0a82a61a447e5e0
diff --git a/rectangle.py b/rectangle.py
new file mode 100644
index 0000000000..b96330c6bf
--- /dev/null
+++ b/rectangle.py
@@ -0,0 +1,40 @@
+def RectangleArea(x, y):
+ '''
+ Принимает два числа(стороны прямугольника) и возвращает их произведение т.е. площадь прямоугольника
+ Параметры:
+ x (int): первое натуральное число
+ y (int): второе натуральное число
+
+ Возвращаемое значение:
+ произведение x и y (int)
+
+ Пример работы:
+ input: 2, 5
+ output: 10
+ '''
+
+ if x <= 0 or y <= 0:
+ return "error"
+
+ return x * y
+
+
+def RectanglePerimeter(x, y):
+ '''
+ Принимает два числа(стороны прямугольника) и возвращает их удвоенную сумму т.е. периметр прямоугольника
+ Параметры:
+ x (int): первое натуральное число
+ y (int): второе натуральное число
+
+ Возвращаемое значение:
+ удвоенная сумма x и y (int)
+
+ Пример работы:
+ input: 2, 5
+ output: 14
+ '''
+
+ if x <= 0 or y <= 0:
+ return "error"
+
+ return (x + y) * 2
diff --git a/square.py b/square.py
index 0f98724205..3de8ab1d9d 100644
--- a/square.py
+++ b/square.py
@@ -1,7 +1,40 @@
+def SquareArea(x):
+ '''
+ Принимает одно число(сторону квадрата) и возвращает его произведение само на себя т.е. площадь квадрата
+ Параметры:
+ x (int): натуральное число
-def area(a):
- return a * a
+ Возвращаемое значение:
+ квадрат числа x (int)
+ Пример работы:
+ input: 7
+ output: 49
+
+ '''
+
+ if x <= 0:
+ return "error"
+
+ return x * x
+
+def SquarePerimeter(x):
+ '''
+ Принимает одно число (сторону квадрата) и возвращает его значение умноженное на 4 т.е. периметр квадрата
+ Параметры:
+ x (int): натуральное число
+
+ Возвращаемое значение:
+ значение числа x умноженное на 4 (int)
+
+ Пример работы:
+ input: 7
+ output: 28
+
+ '''
+
+ if x <= 0:
+ return "error"
+
+ return 4 * x
-def perimeter(a):
- return 4 * a
diff --git a/test.py b/test.py
new file mode 100644
index 0000000000..56b178effb
--- /dev/null
+++ b/test.py
@@ -0,0 +1,72 @@
+import unittest
+import math
+from square import *
+from rectangle import *
+from circle import *
+from triangle import *
+
+
+class CircleTestCase(unittest.TestCase):
+
+ def test_area(self):
+
+ self.assertAlmostEqual(CircleArea(2), math.pi * 2 * 2, places=5)
+ self.assertAlmostEqual(CircleArea(0), "error")
+ self.assertAlmostEqual(CircleArea(9223372036854775807), math.pi * 9223372036854775807 ** 2, places=5)
+ self.assertAlmostEqual(CircleArea(-8), "error")
+
+ def test_perimeter(self):
+
+ self.assertAlmostEqual(CirclePerimeter(2), 2 * math.pi * 2, places=5)
+ self.assertAlmostEqual(CirclePerimeter(0), "error")
+ self.assertAlmostEqual(CirclePerimeter(9223372036854775807), 2 * math.pi * 9223372036854775807, places=5)
+ self.assertAlmostEqual(CirclePerimeter(-6), "error")
+
+class SquareTestCase(unittest.TestCase):
+
+ def test_area(self):
+ self.assertEqual(SquareArea(-5), "error")
+ self.assertEqual(SquareArea(0), "error")
+ self.assertEqual(SquareArea(9223372036854775807), 9223372036854775807**2)
+ self.assertEqual(SquareArea(10), 100)
+
+ def test_perimeter(self):
+ self.assertEqual(SquarePerimeter(-5), "error")
+ self.assertEqual(SquarePerimeter(0), "error")
+ self.assertEqual(SquarePerimeter(9223372036854775807), 9223372036854775807*4)
+ self.assertEqual(SquarePerimeter(10), 40)
+
+
+class RectangleTestCase(unittest.TestCase):
+
+ def test_area(self):
+ self.assertEqual(RectangleArea(-2, -6), "error")
+ self.assertEqual(RectangleArea(0, 5), "error")
+ self.assertEqual(RectangleArea(7, 2), 14)
+ self.assertEqual(RectangleArea(9223372036854775807, 9223372036854775807), 9223372036854775807**2)
+
+ def test_perimeter(self):
+ self.assertEqual(RectanglePerimeter(-5 , -7), "error")
+ self.assertEqual(RectanglePerimeter(0, 5), "error")
+ self.assertEqual(RectanglePerimeter(7, 2), 18)
+ self.assertEqual(RectanglePerimeter(9223372036854775807, 9223372036854775807), 9223372036854775807*2 + 9223372036854775807*2)
+
+
+
+class TriangleTestCase(unittest.TestCase):
+
+ def test_area(self):
+ self.assertEqual(TriangleArea(-4, -5), "error")
+ self.assertEqual(TriangleArea(3, 6), 9)
+ self.assertEqual(TriangleArea(9223372036854775807, 2), 9223372036854775807 * 2 / 2)
+ self.assertEqual(TriangleArea(7, 8), 28)
+
+ def test_perimeter(self):
+ self.assertEqual(TrianglePerimeter(-4, -5, -6),"error")
+ self.assertEqual(TrianglePerimeter(3, 4, 5), 12)
+ self.assertEqual(TrianglePerimeter(6, 8, 15), "error")
+ self.assertEqual(TrianglePerimeter(9223372036854775807, 9223372036854775807, 9223372036854775807), 9223372036854775807*3)
+
+
+if __name__ == "__main__":
+ unittest.main()
diff --git a/triangle.py b/triangle.py
new file mode 100644
index 0000000000..6c16aac4ac
--- /dev/null
+++ b/triangle.py
@@ -0,0 +1,42 @@
+def TriangleArea(a, h):
+ '''
+ Принимает два числа(сторону треугольника и его высоту проведенную к этой стороне) и возвращает их произведение, деленное на два, т.е. площадь треугольника
+ Параметры:
+ a (int): первое натуральное число
+ h (int): второе натуральное число
+
+ Возвращаемое значение:
+ разделенное на два произведение a и h (int)
+
+ Пример работы:
+ input: 2, 5
+ output: 5
+ '''
+ if a <= 0 or h <= 0:
+ return "error"
+
+ return a * h / 2
+
+def TrianglePerimeter(a, b, c):
+ '''
+ Принимает три числа(стороны треугольника) и возвращает их сумму т.е. периметр треугольника
+ Параметры:
+ a (int): первое натуральное число
+ b (int): второе натуральное число
+ c (int): третье натуральное число
+
+ Возвращаемое значение:
+ сумма a, b, c (int)
+
+ Пример работы:
+ input: 2, 5, 6
+ output: 13
+ '''
+
+ if a <= 0 or b <= 0 or c <= 0:
+ return "error"
+
+ if (a + b) <= c or (a + c) <= b or (b + c) <= a:
+ return "error"
+
+ return a + b + c