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