diff --git a/.github/workflows/CICD.yml b/.github/workflows/CICD.yml
new file mode 100644
index 0000000000..e0c7e88ad2
--- /dev/null
+++ b/.github/workflows/CICD.yml
@@ -0,0 +1,46 @@
+name: CI - Run Unit Test
+
+on:
+ push:
+ branches: [ "No5" ]
+ pull_request:
+ branches: [ "No5" ]
+ workflow_dispatch:
+
+jobs:
+ build:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, windows-latest]
+
+ steps:
+ - name: Check out Repository
+ uses: actions/checkout@v4
+
+ - name: Set up Python ${{ matrix.python-version }}
+ uses: actions/setup-python@v4
+ with:
+ python-version: ${{ matrix.python-version }}
+
+ - name: Display Python version
+ run: python -c "import sys; print(sys.version)"
+
+ - name: Set up Python
+ uses: actions/setup-python@v4.7.1
+ with:
+ python-version: 3.8
+
+ - name: Run My Step
+ id: myStep
+ run: echo "::set-output name=myOutput::some value"
+
+ - name: Set Output Variable
+ run: echo "myOutput=${{ steps.myStep.outputs.myOutput }}" >> $GITHUB_ENV
+
+ - name: Install Dependencies
+ run: |
+ echo "There are no dependencies!"
+ - name: Run Unit Tests
+ run: |
+ python -m unittest discover -s ./tests -p "test_*.py"
diff --git a/.github/workflows/cicd.yml b/.github/workflows/cicd.yml
new file mode 100644
index 0000000000..9df935b650
--- /dev/null
+++ b/.github/workflows/cicd.yml
@@ -0,0 +1,46 @@
+name: CICD - Run Unit Test
+
+on:
+ push:
+ branches: [ "No5" ]
+ pull_request:
+ branches: [ "No5" ]
+ workflow_dispatch:
+
+jobs:
+ build:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, windows-latest]
+
+ steps:
+ - name: Check out Repository
+ uses: actions/checkout@v4
+
+ - name: Set up Python ${{ matrix.python-version }}
+ uses: actions/setup-python@v4
+ with:
+ python-version: ${{ matrix.python-version }}
+
+ - name: Display Python version
+ run: python -c "import sys; print(sys.version)"
+
+ - name: Set up Python
+ uses: actions/setup-python@v4.7.1
+ with:
+ python-version: 3.8
+
+ - name: Run My Step
+ id: myStep
+ run: echo "::set-output name=myOutput::some value"
+
+ - name: Set Output Variable
+ run: echo "myOutput=${{ steps.myStep.outputs.myOutput }}" >> $GITHUB_ENV
+
+ - name: Install Dependencies
+ run: |
+ echo "There are no dependencies!"
+ - name: Run Unit Tests
+ run: |
+ python -m unittest discover -s ./tests -p "test_*.py"
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000000..13566b81b0
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/.idea/geometric_lib.iml b/.idea/geometric_lib.iml
new file mode 100644
index 0000000000..bc2cd87409
--- /dev/null
+++ b/.idea/geometric_lib.iml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000..a6218fed0a
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ 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-311.pyc b/__pycache__/circle.cpython-311.pyc
new file mode 100644
index 0000000000..08884eeaf4
Binary files /dev/null and b/__pycache__/circle.cpython-311.pyc differ
diff --git a/__pycache__/rectangle.cpython-311.pyc b/__pycache__/rectangle.cpython-311.pyc
new file mode 100644
index 0000000000..562dde634f
Binary files /dev/null and b/__pycache__/rectangle.cpython-311.pyc differ
diff --git a/__pycache__/square.cpython-311.pyc b/__pycache__/square.cpython-311.pyc
new file mode 100644
index 0000000000..cba2eaf32a
Binary files /dev/null and b/__pycache__/square.cpython-311.pyc differ
diff --git a/__pycache__/test_circle.cpython-311.pyc b/__pycache__/test_circle.cpython-311.pyc
new file mode 100644
index 0000000000..c946a719b7
Binary files /dev/null and b/__pycache__/test_circle.cpython-311.pyc differ
diff --git a/__pycache__/test_rectangle.cpython-311.pyc b/__pycache__/test_rectangle.cpython-311.pyc
new file mode 100644
index 0000000000..9dde91c426
Binary files /dev/null and b/__pycache__/test_rectangle.cpython-311.pyc differ
diff --git a/__pycache__/test_square.cpython-311.pyc b/__pycache__/test_square.cpython-311.pyc
new file mode 100644
index 0000000000..aa603b3a1f
Binary files /dev/null and b/__pycache__/test_square.cpython-311.pyc differ
diff --git a/__pycache__/test_triangle.cpython-311.pyc b/__pycache__/test_triangle.cpython-311.pyc
new file mode 100644
index 0000000000..a4f348b915
Binary files /dev/null and b/__pycache__/test_triangle.cpython-311.pyc differ
diff --git a/__pycache__/triangle.cpython-311.pyc b/__pycache__/triangle.cpython-311.pyc
new file mode 100644
index 0000000000..7e2da569ae
Binary files /dev/null and b/__pycache__/triangle.cpython-311.pyc differ
diff --git a/circle.py b/circle.py
index c3eb8647c9..9ca241719b 100644
--- a/circle.py
+++ b/circle.py
@@ -1,10 +1,34 @@
import math
-
+'''Подключит библиотеку math'''
def area(r):
+ '''
+ Принимает число r (радиус круга), возвращает площадь круга
+
+ Example:
+ Input: 4
+ Output: 50.26548245743669
+
+ '''
+ # Проверка на корректность ввода
+ if not isinstance(r, (int, float)) or r < 0 or r > 10**10:
+ return "wrong input"
+
+
return math.pi * r * r
def perimeter(r):
+ '''
+ Принимает число r (радиус круга), возвращает периметр круга
+
+ Example:
+ Input: 4
+ Output: 25.132741228718345
+
+ '''
+ # Проверка на корректность ввода
+ if not isinstance(r, (int, float)) or r < 0 or r > 10**10:
+ return "wrong input"
+
return 2 * math.pi * r
-
diff --git a/docs/README.md b/docs/README.md
index 63f8727939..b1b7afe5b6 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -1,3 +1,4 @@
+
# Math formulas
## Area
- Circle: S = πR²
@@ -7,4 +8,134 @@
## Perimeter
- Circle: P = 2πR
- Rectangle: P = 2a + 2b
-- Square: P = 4a
\ No newline at end of file
+- Square: P = 4a
+# Oбщее описание решения:
+**Geometric Library** - библиотека Python, предназначенная для расчета ключевых геометрических характеристик простейших фигур: круга, квадрата, прямоугольника и треугольника. С её помощью можно вычислять площадь и периметр (или длину окружности) данных фигур, что делает её удобным инструментом для решения геометрических задач в различных приложениях, включая учебные проекты.
+
+Основные возможности библиотеки:
+
+- Вычисление площади и периметра квадрата.
+- Вычисление площади и длины окружности круга.
+- Вычисление площади и периметра прямоугольника.
+- Вычисление площади и периметра треугольника.
+
+# ** Oписание каждой функции с примерами вызова**
+## **Rectangle**
+```
+def area(a, b):
+ '''Принимает число a и b (длина и ширина прямоугольника), возвращает площадь прямоугольника'''
+ return a * b
+
+def perimeter(a, b):
+ '''Принимает число a и b (длина и ширина прямоугольника), возвращает периметр прямоугольника'''
+ return (a + b)*2
+```
+_Example:_
+_Input: `5,6`_
+_Output: `30 22`_
+
+
+## **Triangle**
+```
+def area(a, h):
+ '''Принимает число a, h (основание и высота треугольника) возвращает площадь треугольника'''
+ return a * h / 2
+def perimeter(a, b, c):
+ '''Принимает число a, b, c (стороны треугольника), возвращает периметр треугольника'''
+ return a + b + c
+```
+_Example:_
+_Input: `1,2` `1,2,3`_
+_Output: `1 6`_
+
+
+## **Square**
+```
+def area(a):
+ '''Принимает число a (сторона квадрата), возвращает площадь квадрата'''
+ return a * a
+
+def perimeter(a):
+ '''Принимает число a (сторона квадрата), возвращает периметр квадрата'''
+ return 4 * a
+```
+_Example:_
+_Input: `3`_
+_Output: `9 12`_
+
+## **Circle**
+```
+import math
+ '''Подключит библиотеку math'''
+
+def area(r):
+ '''Принимает число r (радиус круга), возвращает площадь круга'''
+ return math.pi * r * r
+
+
+def perimeter(r):
+ '''Принимает число r (радиус круга), возвращает периметр круга'''
+ return 2 * math.pi * r
+```
+_Example:_
+_Input: `4`_
+_Output: `50.24 25.12`_
+
+# История изменения проекта с хешами комитов
+
+- _**commit 4f6015fb35ea095d4e57523ffc2b4c987bb1a035**_
+```
+Author: Hoang Ngoc Dat <407880@niuitmo.ru>
+Date: Thu Oct 3 12:43:35 2024 +0300
+
+ Update Readme.md file
+```
+
+- _**commit 7e6c710e085053112323b22d896087f3639a9102**_
+```
+Author: Hoang Ngoc Dat <407880@niuitmo.ru>
+Date: Thu Oct 3 12:19:51 2024 +0300
+
+ Add more to explain
+```
+
+- _**commit 746c3a18de806c396070b8a71e764e69c3d7176d**_
+```
+Author: Hoang Ngoc Dat <407880@niuitmo.ru>
+Date: Thu Oct 3 11:43:35 2024 +0300
+
+ Add comment to circle.py
+```
+
+- _**commit c5c3db2f82030561f4f7669a87429941126d3a35**_
+```
+Author: Hoang Ngoc Dat <407880@niuitmo.ru>
+Date: Thu Oct 3 11:42:59 2024 +0300
+
+ Add comment to square.py
+```
+
+- _**commit c5c3db2f82030561f4f7669a87429941126d3a35**_
+```
+Author: Hoang Ngoc Dat <407880@niuitmo.ru>
+Date: Thu Oct 3 11:42:10 2024 +0300
+
+ Add comment to triangle.py
+```
+
+- _**commit 0be759905089e1944aea66b89b7f6fb212466629**_
+```
+Author: Hoang Ngoc Dat <407880@niuitmo.ru>
+Date: Thu Oct 3 11:41:42 2024 +0300
+
+ Add comment to rectangle.py
+```
+
+
+
+
+
+
+
+
+
diff --git a/rectangle.py b/rectangle.py
new file mode 100644
index 0000000000..c1de7e5bf3
--- /dev/null
+++ b/rectangle.py
@@ -0,0 +1,33 @@
+
+def area(a, b):
+ '''
+ Принимает число a и b (длина и ширина прямоугольника), возвращает площадь прямоугольника
+
+ Example:
+ Input: 5 6
+ Output: 30
+
+ '''
+ # Проверка на корректность ввода
+ if not isinstance(a, (int, float)) or not isinstance(b, (int, float)) or a < 0 or b < 0 or a > 10**10 or b > 10**10:
+ return "wrong input"
+
+ return a * b
+
+def perimeter(a, b):
+ '''
+ Принимает число a и b (длина и ширина прямоугольника), возвращает периметр прямоугольника
+
+ Example:
+ Input: 5 6
+ Output: 22
+
+ '''
+
+ # Проверка на корректность ввода
+ if not isinstance(a, (int, float)) or not isinstance(b, (int, float)) or a < 0 or b < 0 or a > 10**10 or b > 10**10:
+ return "wrong input"
+
+ return (a + b)*2
+
+
\ No newline at end of file
diff --git a/square.py b/square.py
index 0f98724205..8a92d52151 100644
--- a/square.py
+++ b/square.py
@@ -1,7 +1,31 @@
-
def area(a):
+ '''
+ Принимает число a (сторона квадрата), возвращает площадь квадрата
+
+ Example:
+ Input: 3
+ Output: 9
+
+ '''
+
+ # Проверка на корректность ввода
+ if not isinstance(a, (int, float)) or a < 0 or a > 10**10:
+ return "wrong input"
+
return a * a
-
def perimeter(a):
+ '''
+ Принимает число a (сторона квадрата), возвращает периметр квадрата
+
+ Example:
+ Input: 3
+ Output: 12
+
+ '''
+
+ # Проверка на корректность ввода
+ if not isinstance(a, (int, float)) or a < 0 or a > 10**10:
+ return "wrong input"
+
return 4 * a
diff --git a/tests/test_circle.py b/tests/test_circle.py
new file mode 100644
index 0000000000..851bb3b3dc
--- /dev/null
+++ b/tests/test_circle.py
@@ -0,0 +1,75 @@
+import circle
+import unittest
+
+class CircleTestCase(unittest.TestCase):
+ # Проверяет, когда радиус равен 0
+ def test_zero_mul(self):
+ assert circle.area(0) == 0
+
+ # Проверяет, когда радиус равен 10
+ def test_one_mul(self):
+ assert circle.area(10) == 314.1592653589793
+
+ # Проверяет, является ли радиус действительным числом
+ def test_two_mul(self):
+ assert circle.area(67.636) == 14371.619275936122
+
+ # Проверяет, когда окружность с радиусом равна 0
+ def test_three_mul(self):
+ assert circle.perimeter(0) == 0
+
+ # Проверяет, когда окружность равен 10
+ def test_four_mul(self):
+ assert circle.perimeter(10) == 62.83185307179586
+
+ # Проверяет, является ли окружность действительным числом
+ def test_five_mul(self):
+ assert circle.perimeter(67.636) == 424.96952143639845
+
+ # Проверяет, когда радиус отрицательный
+ def test_six_mul(self):
+ assert circle.area(10) != 40
+
+ # Проверяет, когда окружность отрицательный
+ def test_seven_mul(self):
+ assert circle.perimeter(10) != 30
+
+ # когда есть отрицательный фронт
+ def test_eight_mul(self):
+ res = circle.area(-10)
+ self.assertEqual(res, "wrong input")
+
+ def test_nine_mul(self):
+ res = circle.perimeter(-10)
+ self.assertEqual(res, "wrong input")
+
+ # Проверяет, являются ли радиус символами
+ def test_ten_mul(self):
+ res = circle.area('a')
+ self.assertEqual(res, "wrong input")
+
+ def test_eleven_mul(self):
+ res = circle.perimeter('a')
+ self.assertEqual(res, "wrong input")
+
+ # Проверяет, являются ли радиус строкой
+ def test_twelve_mul(self):
+ res = circle.area('abcdef')
+ self.assertEqual(res, "wrong input")
+
+ def test_thirteen_mul(self):
+ res = circle.perimeter('abcdef')
+ self.assertEqual(res, "wrong input")
+
+ # Проверяет, является ли радиус слишком большим числом
+ def test_fourteen_mul(self):
+ res = circle.area(10000000000000000000000000)
+ self.assertEqual(res, "wrong input")
+
+ def test_fiveteen_mul(self):
+ res = circle.perimeter(10000000000000000000000000)
+ self.assertEqual(res, "wrong input")
+
+if __name__ == '__main__':
+ unittest.main()
+
diff --git a/tests/test_rectangle.py b/tests/test_rectangle.py
new file mode 100644
index 0000000000..5b6afee771
--- /dev/null
+++ b/tests/test_rectangle.py
@@ -0,0 +1,61 @@
+import rectangle
+import unittest
+
+class RectangleTestCase(unittest.TestCase):
+ # Проверяет, когда стороны равны 0
+ def test_zero_mul(self):
+ assert rectangle.area(0,15) == 0
+ # Проверяет, когда стороны равны 10
+ def test_one_mul(self):
+ assert rectangle.area(10,10) == 100
+ # Проверяет, являются ли стороны действительным числом
+ def test_two_mul(self):
+ assert rectangle.area(65.5, 4.5) == 294.75
+ # Проверяет, когда периметр равен 0
+ def test_three_mul(self):
+ assert rectangle.perimeter(0,0) == 0
+ # Проверяет, когда стороны равны 10
+ def test_four_mul(self):
+ assert rectangle.perimeter(10, 45) == 110
+ # Проверяет, являются ли стороны действительным числом
+ def test_five_mul(self):
+ assert rectangle.perimeter(67.636, 42.364) == 220
+
+ # Проверяет правильное значение для площади
+ def test_six_mul(self):
+ assert rectangle.area(7,8) != 55
+
+ # Проверяет правильное значение для периметра
+ def test_seven_mul(self):
+ assert rectangle.perimeter(10, 54) != 132
+
+ # когда есть отрицательный фронт
+ def test_eight_mul(self):
+ self.assertEqual(rectangle.area(-8, 7), "wrong input")
+
+ def test_nine_mul(self):
+ self.assertEqual(rectangle.perimeter(-5, 4), "wrong input")
+
+ # когда есть ребро, которое является символом
+ def test_ten_mul(self):
+ self.assertEqual(rectangle.area('n', 8), "wrong input")
+
+ def test_eleven_mul(self):
+ self.assertEqual(rectangle.perimeter('n', 8), "wrong input")
+
+ # когда есть край, представляющий строку
+ def test_twelve_mul(self):
+ self.assertEqual(rectangle.area('abcdef', 12), "wrong input")
+
+ def test_thirteen_mul(self):
+ self.assertEqual(rectangle.perimeter('abcdef', 12), "wrong input")
+
+ # когда стороны слишком большим числом
+ def test_fourteen_mul(self):
+ self.assertEqual(rectangle.area(10000000000000000000000000, 9), "wrong input")
+
+ def test_fiveteen_mul(self):
+ self.assertEqual(rectangle.perimeter(10000000000000000000000000, 9), "wrong input")
+
+if __name__ == '__main__':
+ unittest.main()
\ No newline at end of file
diff --git a/tests/test_square.py b/tests/test_square.py
new file mode 100644
index 0000000000..0116603622
--- /dev/null
+++ b/tests/test_square.py
@@ -0,0 +1,66 @@
+import square
+import unittest
+
+class SquareTestCase(unittest.TestCase):
+ # Проверяет, когда сторона равна 0
+ def test_zero_mul(self):
+ self.assertEqual(square.area(0), 0)
+
+ # Проверяет, когда сторона равна 10
+ def test_one_mul(self):
+ self.assertEqual(square.area(10), 100)
+
+ # Проверяет, является ли сторона действительным числом
+ def test_two_mul(self):
+ self.assertEqual(square.area(8.5), 72.25)
+
+ # Проверяет, когда периметр равен 0
+ def test_three_mul(self):
+ self.assertEqual(square.perimeter(0), 0)
+
+ # Проверяет, когда сторона равна 10
+ def test_four_mul(self):
+ self.assertEqual(square.perimeter(10), 40)
+
+ # Проверяет, является ли сторона действительным числом
+ def test_five_mul(self):
+ self.assertEqual(square.perimeter(2.25), 9)
+
+ # Проверяет правильное значение для площади
+ def test_six_mul(self):
+ self.assertNotEqual(square.area(10), 40)
+
+ # Проверяет правильное значение для периметра
+ def test_seven_mul(self):
+ self.assertNotEqual(square.perimeter(10), 30)
+
+ # Проверяет площадь квадрата, когда сторона отрицательная
+ def test_eight_mul(self):
+ self.assertEqual(square.area(-5), "wrong input")
+
+ def test_nine_mul(self):
+ self.assertEqual(square.perimeter(-5), "wrong input")
+
+ # Проверяет площадь квадрата, когда сторона является символом
+ def test_ten_mul(self):
+ self.assertEqual(square.area('a'), "wrong input")
+
+ def test_eleven_mul(self):
+ self.assertEqual(square.perimeter('a'), "wrong input")
+
+ # Проверяет площадь квадрата, когда сторона является строкой
+ def test_twelve_mul(self):
+ self.assertEqual(square.area("string"), "wrong input")
+
+ def test_thirteen_mul(self):
+ self.assertEqual(square.perimeter("string"), "wrong input")
+
+ # Проверяет, когда сторона слишком большим числом
+ def test_fourteen_mul(self):
+ self.assertEqual(square.area(100000000000000000000), "wrong input")
+
+ def test_fiveteen_mul(self):
+ self.assertEqual(square.perimeter(100000000000000000000), "wrong input")
+
+if __name__ == '__main__':
+ unittest.main()
\ No newline at end of file
diff --git a/tests/test_triangle.py b/tests/test_triangle.py
new file mode 100644
index 0000000000..2b6382c975
--- /dev/null
+++ b/tests/test_triangle.py
@@ -0,0 +1,66 @@
+import triangle
+import unittest
+
+class TriangleTestCase(unittest.TestCase):
+ # Проверяет, когда стороны равны 0
+ def test_zero_mul(self):
+ self.assertEqual(triangle.area(7, 8), 28)
+
+ # Проверяет, когда стороны равны 10
+ def test_one_mul(self):
+ self.assertEqual(triangle.area(10, 10), 50)
+
+ # Проверяет, являются ли стороны действительным числом
+ def test_two_mul(self):
+ self.assertEqual(triangle.area(7.5, 3.5), 13.125)
+
+ # Проверяет, когда периметр равен 0
+ def test_three_mul(self):
+ self.assertEqual(triangle.perimeter(0, 0, 0), 0)
+
+ # Проверяет, когда стороны равны 10
+ def test_four_mul(self):
+ self.assertEqual(triangle.perimeter(10, 6, 8), 24)
+
+ # Проверяет, являются ли стороны действительным числом
+ def test_five_mul(self):
+ self.assertEqual(triangle.perimeter(34.23, 42.34, 23.43), 100)
+
+ # Проверяет правильное значение для площади
+ def test_six_mul(self):
+ self.assertNotEqual(triangle.area(10, 10), 40)
+
+ # Проверяет правильное значение для периметра
+ def test_seven_mul(self):
+ self.assertNotEqual(triangle.perimeter(10, 6, 8), 30)
+
+ # Проверяет площадь треугольника, когда стороны отрицательные
+ def test_eight_mul(self):
+ self.assertEqual(triangle.area(-5, 10), "wrong input")
+
+ def test_nine_mul(self):
+ self.assertEqual(triangle.perimeter(-5, 10, 15), "wrong input")
+
+ # Проверяет площадь квадрата, когда сторона является символом
+ def test_ten_mul(self):
+ self.assertEqual(triangle.area('a', 3), "wrong input")
+
+ def test_eleven_mul(self):
+ self.assertEqual(triangle.perimeter('a', 3, 4), "wrong input")
+
+ # Проверяет периметр квадрата, когда сторона является символом
+ def test_twelve_mul(self):
+ self.assertEqual(triangle.area(4, "string"), "wrong input")
+
+ def test_thirteen_mul(self):
+ self.assertEqual(triangle.perimeter(4, "string", 5), "wrong input")
+
+ # Проверяет, когда сторона слишком большим числом
+ def test_fourteen_mul(self):
+ self.assertEqual(triangle.area(10**15, 3), "wrong input")
+
+ def test_fiveteen_mul(self):
+ self.assertEqual(triangle.perimeter(10**15, 3, 4), "wrong input")
+
+if __name__ == '__main__':
+ unittest.main()
\ No newline at end of file
diff --git a/triangle.py b/triangle.py
new file mode 100644
index 0000000000..64433a1426
--- /dev/null
+++ b/triangle.py
@@ -0,0 +1,32 @@
+def area(a, h):
+
+ '''
+ Принимает число a, h (основание и высота треугольника) возвращает площадь треугольника
+
+ Example:
+ Input: 1 2
+ Output: 1
+
+ '''
+
+ # Проверка на корректность ввода
+ if not isinstance(a, (int, float)) or not isinstance(h, (int, float)) or a < 0 or h < 0 or a > 10**10 or h > 10**10:
+ return "wrong input"
+
+ return a * h / 2
+def perimeter(a, b, c):
+ '''
+ Принимает число a, b, c (стороны треугольника), возвращает периметр треугольника
+
+ Example:
+ Input: 1 2 3
+ Output: 6
+
+ '''
+
+ # Проверка на корректность ввода
+ if not isinstance(a, (int, float)) or not isinstance(b, (int, float)) or not isinstance(c, (int, float)) or a < 0 or b < 0 or c < 0 or a > 10**10 or b > 10**10 or c > 10**10:
+ return "wrong input"
+
+
+ return a + b + c