Обновлено:

Вычислить площадь треугольника на C

Вам нужно быстро написать код для расчёта площади треугольника на языке C, но непонятно, с какой формулы начать и как оформить проверки? Ниже собраны три готовых решения – от простейшего до универсального. Берите любое, адаптируйте под свою задачу и вставляйте в проект.

Как вычислить площадь треугольника по основанию и высоте на C?

Если известны длина основания и проведённая к нему высота, расчёт сводится к одной строке: S = 0.5 * base * height. Программа на C для этого варианта выглядит так:

#include <stdio.h>

int main() {
    float base, height, area;

    printf("Основание треугольника: ");
    scanf("%f", &base);
    printf("Высота: ");
    scanf("%f", &height);

    area = 0.5f * base * height;

    printf("Площадь = %.2f\n", area);
    return 0;
}

Оба числа вводятся с клавиатуры в десятичном формате. Результат округлён до двух знаков после запятой. Если основание или высота могут быть отрицательными, добавьте проверку: if (base > 0 && height > 0) … else printf("Некорректные данные\n");.

Формула Герона: площадь по трём сторонам

Этот метод работает с любым треугольником, если известны длины всех трёх сторон – a, b, c. Сначала вычисляется полупериметр p = (a + b + c) / 2, затем площадь: S = √(p · (p – a) · (p – b) · (p – c)). В C для извлечения корня подключаем <math.h> и используем sqrt().

#include <stdio.h>
#include <math.h>

int main() {
    float a, b, c, p, area;

    printf("Введите стороны a, b, c через пробел: ");
    scanf("%f %f %f", &a, &b, &c);

    /* Проверка существования треугольника */
    if (a <= 0 || b <= 0 || c <= 0 ||
        a + b <= c || a + c <= b || b + c <= a) {
        printf("Треугольник с такими сторонами не существует.\n");
        return 1;
    }

    p = (a + b + c) / 2.0f;
    area = sqrtf(p * (p - a) * (p - b) * (p - c));

    printf("Площадь по Герону = %.2f\n", area);
    return 0;
}

Обратите внимание: используется sqrtf вместо sqrt – функция для float из стандарта C99. Если ваш компилятор поддерживает только классический sqrt (double), просто объявите переменные как double и замените спецификаторы на %lf.

Вычисление площади по координатам вершин

Когда заданы координаты трёх точек на плоскости, площадь рассчитывают по формуле ориентированной площади через определитель: S = ½ |x₁(y₂ – y₃) + x₂(y₃ – y₁) + x₃(y₁ – y₂)|. Модуль берётся функцией fabs().

#include <stdio.h>
#include <math.h>

int main() {
    float x1, y1, x2, y2, x3, y3, area;

    printf("Координаты вершин (x1 y1 x2 y2 x3 y3): ");
    scanf("%f %f %f %f %f %f", &x1, &y1, &x2, &y2, &x3, &y3);

    area = fabsf(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) / 2.0f;

    printf("Площадь по координатам = %.2f\n", area);
    return 0;
}

Если сомневаетесь в порядке ввода координат, выведите подсказку: «первая вершина», «вторая вершина» и так далее. Метод работает даже при отрицательных координатах.

Онлайн-калькулятор площади треугольника

Метод расчёта
Если нужно быстро проверить ручной расчёт или получить результат без написания кода, воспользуйтесь калькулятором выше. Он принимает те же наборы данных: основание и высоту, три стороны либо пары координат. Выберите закладку, введите числа – калькулятор мгновенно выдаст площадь с точностью до двух знаков. Это удобно, когда вы отлаживаете программу и сверяете её вывод с эталонным значением.

Сводная программа C с выбором метода

На практике часто объединяют все три способа в одном коде, предлагая пользователю меню. Пример с оператором switch:

#include <stdio.h>
#include <math.h>

int main() {
    int choice;
    printf("Метод расчёта площади:\n"
           "1 - основание и высота\n"
           "2 - три стороны (Герон)\n"
           "3 - координаты вершин\n"
           "Ваш выбор: ");
    scanf("%d", &choice);

    switch (choice) {
        case 1: {
            float b, h;
            printf("Основание и высота: ");
            scanf("%f %f", &b, &h);
            if (b > 0 && h > 0)
                printf("Площадь = %.2f\n", 0.5f * b * h);
            else
                printf("Некорректные данные.\n");
            break;
        }
        case 2: {
            float a, b, c, p;
            printf("Стороны a b c: ");
            scanf("%f %f %f", &a, &b, &c);
            if (a > 0 && b > 0 && c > 0 &&
                a + b > c && a + c > b && b + c > a) {
                p = (a + b + c) / 2.0f;
                printf("Площадь = %.2f\n",
                       sqrtf(p * (p - a) * (p - b) * (p - c)));
            } else {
                printf("Стороны не образуют треугольник.\n");
            }
            break;
        }
        case 3: {
            float x1, y1, x2, y2, x3, y3;
            printf("x1 y1 x2 y2 x3 y3: ");
            scanf("%f %f %f %f %f %f",
                  &x1, &y1, &x2, &y2, &x3, &y3);
            printf("Площадь = %.2f\n",
                   fabsf(x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2)) / 2.0f);
            break;
        }
        default:
            printf("Неверный выбор.\n");
    }
    return 0;
}

Какой метод выбрать: сравнительная таблица

КритерийОснование + высотаФормула ГеронаПо координатам
Исходные данныеоснование, высотатри сторонытри вершины
Ограничениявысота должна быть опущена на основаниестороны должны удовлетворять неравенству треугольниканет
Сложность реализацииминимальнаясредняясредняя
Подверженность ошибкам округлениянизкаязаметна при вырожденных фигурахнизкая
Типичное применениезадачи с явно заданными основанием и высотойпроизвольный треугольник, известны только длины сторонгеометрические задачи с координатами, компьютерная графика

Если вы не уверены, какие данные появятся во время выполнения, реализуйте все три метода и переключайтесь по вводу пользователя – это сделает программу универсальной.

Часто задаваемые вопросы

Какой тип данных использовать для площади в C – float или double?

Для учебных задач достаточно float, но если важна высокая точность или стороны имеют большую разницу в порядках, переходите на double. При использовании double в функциях scanf/printf применяйте спецификатор %lf.

Зачем подключать math.h и нужно ли линковать математическую библиотеку?

Заголовочный файл <math.h> даёт доступ к sqrt() и fabs(). При компиляции GCC добавляйте флаг -lm, иначе компоновщик не найдёт математические функции. В интегрированных средах этот шаг часто выполняется автоматически.

Как в коде проверить, что треугольник с заданными сторонами существует?

Достаточно убедиться, что все стороны положительны и каждая сторона меньше суммы двух других: (a + b) > c, (a + c) > b, (b + c) > a. Если условие не выполняется, выводите сообщение об ошибке и завершайте программу.

Можно ли на C вычислить площадь треугольника по двум сторонам и углу между ними?

Да, формула имеет вид 0.5 * a * b * sin(угол). Перед расчётом переведите градусы в радианы умножением на M_PI/180.0. Потребуется также подключить <math.h> и, возможно, определить константу M_PI вручную.

Какая из формул (основание, Герон, координаты) даёт наименьшую погрешность?

Все три аналитически точны. На практике формула Герона может накапливать ошибки округления для вырожденных или очень вытянутых треугольников с большими сторонами – в таких случаях лучше использовать координатный метод или непосредственно основание и высоту.

Как модифицировать программу, чтобы данные читались из файла?

Замените вызовы scanf() на fscanf() с указателем на предварительно открытый файл FILE *fp. Не забудьте проверить, что файл открылся успешно, и закройте его через fclose() после завершения ввода.

  1. Найти площадь треугольника: формулы, примеры с ответами
  2. Площадь треугольника можно вычислить – формулы и способы
  3. Площадь треугольника онлайн – расчёт по 5 формулам
  4. Вычисление теодолитного хода: пошаговая методика и формулы
  5. Даны точки – найти углы треугольника по координатам
  6. Генерировать число: программа и алгоритмы