Вычисление площадей и периметров фигур

Задача

Вычислить площадь и периметр

  • треугольника по данным трем сторонам,
  • прямоугольника по данным ширине и высоте,
  • круга по заданному радиусу.

Длины сторон и радиус вводятся пользователем.

Пояснение к задаче и алгоритм решения

Площади и периметры фигур можно найти по следующим формулам.

Периметр треугольника: P = a + b + c
Площадь треугольника: S = √(p(p-a)(p-b)(p-c)), где p = P/2

Периметр прямоугольника: P = 2(a + b)
Площадь прямоугольника: S = ab

Периметр круга: P = 2πr
Площадь круга: S = πr2

Исходный код на языке программирования Pascal

var
        a,b,c: word;
        w,h: word;
        r: word;
        P,S: real;
begin
        readln(a,b,c);
        P := (a + b + c) / 2;
        S := sqrt(P * (P - a) * (P - b) * (P - c));
        writeln('P=',a+b+c,'; S=',S:5:2);
 
        readln(w,h);
        writeln('P=',(w+h)*2,'; S=',w*h);
 
        readln(r);
        P := 2 * pi * r;
        S := pi * r * r;
        writeln('P=',P:5:2,'; S=',S:5:2);
end.

Пример(ы) выполнения программы на языке Pascal

5 3 5
P=13; S= 7.15
3 9
P=24; S=27
5
P=31.42; S=78.54

Исходный код на языке программирования C

#include <stdio.h>
#include <math.h>
 
#define PI 3.14159
 
main() {
        int a,b,c;
        float p,S;
        printf("Длины сторон треугольника: ");
        scanf("%d%d%d", &a,&b,&c);
        p = (a+b+c)/2;
        S = sqrt(p*(p-a)*(p-b)*(p-c));
        printf("P = %d; S = %.2f\n\n", (a+b+c), S);
        printf("Ширина и высота прямоугольника: ");
        scanf("%d%d", &a,&b);
        printf("P = %d; S = %d\n\n", (a+b)*2, a*b);
        printf("Радиус круга: ");
        scanf("%d", &a);
        printf("P = %.2f; S = %.2f\n", 2*PI*a, PI*pow(a,2));
}

Пример(ы) выполнения программы на языке C

Длины сторон треугольника: 4 4 6
P = 14; S = 7.94
 
Ширина и высота прямоугольника: 2 5
P = 14; S = 10
 
Радиус круга: 3
P = 18.85; S = 28.27

Особенности решения на языке программирования C

В библиотеке math.h нет константы числа π.

При компиляции с помощью gcc необходимо в конце команды указать ключ -lm (из-за math.h).

Исходный код на языке программирования Python

import math
 
print("Введите длины сторон треугольника: ")
a = int(input("a="))
b = int(input("b="))
c = int(input("c="))
p = (a+b+c)/2
s = math.sqrt(p*(p-a)*(p-b)*(p-c))
print("P=%d; S=%.2f" % (a+b+c, s))
 
print("Введите длины сторон прямоугольника: ")
a = int(input("a="))
b = int(input("b="))
print("P=%d; S=%d" % ((a+b)*2, a*b))
 
print("Введите радиус круга: ")
r = int(input("r="))
print("P=%.2f; S=%.2f" % (2*math.pi*r, math.pi*r**2))

Пример(ы) выполнения программы на языке Python

Введите длины сторон треугольника:
a=2
b=4
c=3
P=9; S=2.90
Введите длины сторон прямоугольника:
a=6
b=7
P=26; S=42
Введите радиус круга:
r=3
P=18.85; S=28.27

Исходный код на языке программирования КуМир

алг фигуры
нач
  цел a,b,c
  ввод a, b, c
  вещ p, S
  p := (a+b+c)/2
  S := sqrt(p*(p-a)*(p-b)*(p-c))
  вывод "P=", p*2, "; S=", S, нс
 
  цел w, h
  ввод w, h
  вывод "P=", (w+h)*2, "; S=", w*h, нс
 
  цел r
  ввод r
  p := 2 * 3.14 * r
  S := 3.14 * r**2
  вывод "P=", p, "; S=", S, нс
кон

Пример(ы) выполнения программы на языке КуМир

5 7 9
P=21; S=17.41228
4 9
P=26; S=36
5
P=31.4; S=78.5

Особенности решения задачи в среде КуМир

Не нашлось константы для числа π

Исходный код на языке программирования Basic

# найти площади и периметры геометрических фигур
decimal 2
# треугольник
print "ТРЕУГОЛЬНИК"
input "    первая сторона: ", a
input "    вторая сторона: ", b
input "    третья сторона: ", c
p = a + b + c
print "Периметр: " + p
p = p / 2
s = sqr(p*(p-a)*(p-b)*(p-c))
print "Площадь: " + s
print
# прямоугольник
print "ПРЯМОУГОЛЬНИК"
input "    ширина: ", a
input "    высота: ", b
print "Периметр: " + ((a + b) * 2)
print "Площадь: " + (a * b)
print
# круг
print "КРУГ"
input "     радиус: ", r
print "Периметр: " + (2 * pi * r)
print "Площадь: " + (pi * r^2)

Пример(ы) выполнения программы на языке Basic

ТРЕУГОЛЬНИК
    первая сторона: 5
    вторая сторона: 5
    третья сторона: 5
Периметр: 15
Площадь: 10.83
 
ПРЯМОУГОЛЬНИК
    ширина: 5
    высота: 5
Периметр: 20
Площадь: 25
 
КРУГ
     радиус: 5
Периметр: 31.42
Площадь: 78.54

Тема

Линейные алгоритмы

Уровень сложности

Средний

Дата публикации

Комментарий

На питоне в 7й строке нужно использовать деление с дробным числом (например делимое умножить на 1.0 или делить на 2.0) иначе остаток при нечётном периметре пропадает, и площадь считает некорректно:

Введите длины сторон треугольника:
a= 7
b= 3
c= 5
P=15; S=0.00

Ответ на от Павел

Для третьей версии питона программа верна, так как там одна косая черта - это деление с остатком, а две - без остатка.

>>> 3/2
1.5
>>> 3//2
1
>>>

Для второй версии питона вы правы: программа не корректна, так как там одна косая черта - деление без остатка.

>>> 3/2
1
>>>