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

CBeginner
Практиковаться сейчас

Введение

В этом лабораторном практикуме вы научитесь вычислять периметр многоугольника на языке C. Практикум охватывает следующие шаги: ввод длин сторон в массив, суммирование всех сторон и вывод периметра. Вы создадите программу, которая позволит пользователям вводить длины сторон многоугольника, хранить их в массиве и затем вычислять периметр, суммируя все длины сторон.

Практикум предоставляет пошаговое руководство, включая примеры кода, чтобы помочь вам понять и реализовать вычисление периметра многоугольника на языке C. К концу практикума у вас будет рабочая программа, которая может вычислять периметр многоугольника с количеством сторон до 10.

Ввод длин сторон в массив

В этом шаге вы узнаете, как вводить длины сторон в массив для вычисления периметра многоугольника на языке C. Мы создадим программу, которая позволит пользователям вводить длины сторон многоугольника и хранить их в массиве.

Сначала создадим файл исходного кода C в каталоге проекта:

cd ~/project
nano polygon_perimeter.c

Теперь введите следующий код:

#include <stdio.h>

#define MAX_SIDES 10

int main() {
    float sides[MAX_SIDES];
    int num_sides;

    // Запрос количества сторон у пользователя
    printf("Введите количество сторон многоугольника (макс. %d): ", MAX_SIDES);
    scanf("%d", &num_sides);

    // Ввод длин сторон
    printf("Введите длины сторон:\n");
    for (int i = 0; i < num_sides; i++) {
        printf("Длина стороны %d: ", i + 1);
        scanf("%f", &sides[i]);
    }

    // Вывод введенных длин сторон
    printf("\nВведенные длины сторон:\n");
    for (int i = 0; i < num_sides; i++) {
        printf("Сторона %d: %.2f\n", i + 1, sides[i]);
    }

    return 0;
}

Компилируем программу:

gcc -o polygon_perimeter polygon_perimeter.c

Запускаем программу:

./polygon_perimeter

Пример вывода:

Введите количество сторон многоугольника (макс. 10): 4
Введите длины сторон:
Длина стороны 1: 5.5
Длина стороны 2: 6.2
Длина стороны 3: 4.3
Длина стороны 4: 7.1

Введенные длины сторон:
Сторона 1: 5.50
Сторона 2: 6.20
Сторона 3: 4.30
Сторона 4: 7.10

Давайте разберем ключевые части кода:

  • #define MAX_SIDES 10 устанавливает максимальное ограничение на количество сторон
  • float sides[MAX_SIDES] создает массив для хранения длин сторон
  • scanf() используется для чтения количества сторон и отдельных длин сторон
  • Цикл for используется для ввода и последующего отображения длин сторон

Суммирование всех сторон

В этом шаге вы измените предыдущую программу, чтобы вычислить периметр, суммируя длины всех сторон многоугольника.

Откройте существующий файл:

cd ~/project
nano polygon_perimeter.c

Обновите код с вычислением периметра:

#include <stdio.h>

#define MAX_SIDES 10

int main() {
    float sides[MAX_SIDES];
    int num_sides;
    float perimeter = 0.0;

    // Запрос количества сторон у пользователя
    printf("Введите количество сторон многоугольника (макс. %d): ", MAX_SIDES);
    scanf("%d", &num_sides);

    // Ввод длин сторон
    printf("Введите длины сторон:\n");
    for (int i = 0; i < num_sides; i++) {
        printf("Длина стороны %d: ", i + 1);
        scanf("%f", &sides[i]);
    }

    // Вычисление периметра суммированием всех сторон
    for (int i = 0; i < num_sides; i++) {
        perimeter += sides[i];
    }

    // Вывод длин сторон и периметра
    printf("\nВведенные длины сторон:\n");
    for (int i = 0; i < num_sides; i++) {
        printf("Сторона %d: %.2f\n", i + 1, sides[i]);
    }

    // Вывод вычисленного периметра
    printf("\nПериметр многоугольника: %.2f\n", perimeter);

    return 0;
}

Компилируем обновлённую программу:

gcc -o polygon_perimeter polygon_perimeter.c

Запускаем программу:

./polygon_perimeter

Пример вывода:

Введите количество сторон многоугольника (макс. 10): 4
Введите длины сторон:
Длина стороны 1: 5.5
Длина стороны 2: 6.2
Длина стороны 3: 4.3
Длина стороны 4: 7.1

Введенные длины сторон:
Сторона 1: 5.50
Сторона 2: 6.20
Сторона 3: 4.30
Сторона 4: 7.10

Периметр многоугольника: 23.10

Ключевые изменения в этом шаге:

  • Добавлена переменная perimeter для хранения общей суммы длин сторон
  • Введён новый цикл for для вычисления периметра путём суммирования всех сторон
  • Добавлено оператор вывода для отображения вычисленного периметра

Вывод Периметра

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

Откройте существующий файл:

cd ~/project
nano polygon_perimeter.c

Обновите код с улучшенной проверкой ввода и форматированным выводом:

#include <stdio.h>

#define MAX_SIDES 10
#define MIN_SIDES 3

int main() {
    float sides[MAX_SIDES];
    int num_sides;
    float perimeter = 0.0;

    // Запрос количества сторон с проверкой ввода
    do {
        printf("Введите количество сторон многоугольника (от %d до %d): ",
               MIN_SIDES, MAX_SIDES);
        scanf("%d", &num_sides);

        if (num_sides < MIN_SIDES || num_sides > MAX_SIDES) {
            printf("Неверное количество сторон. Пожалуйста, попробуйте снова.\n");
        }
    } while (num_sides < MIN_SIDES || num_sides > MAX_SIDES);

    // Ввод длин сторон с проверкой
    printf("Введите длины сторон:\n");
    for (int i = 0; i < num_sides; i++) {
        float side_length;
        do {
            printf("Длина стороны %d (должна быть положительной): ", i + 1);
            scanf("%f", &side_length);

            if (side_length <= 0) {
                printf("Неверная длина стороны. Пожалуйста, введите положительное значение.\n");
            } else {
                sides[i] = side_length;
                break;
            }
        } while (1);
    }

    // Вычисление периметра суммированием всех сторон
    for (int i = 0; i < num_sides; i++) {
        perimeter += sides[i];
    }

    // Форматированный вывод результатов
    printf("\n--- Вычисление Периметра Многоугольника ---\n");
    printf("Количество сторон: %d\n", num_sides);

    printf("\nДлины сторон:\n");
    for (int i = 0; i < num_sides; i++) {
        printf("Сторона %d: %.2f\n", i + 1, sides[i]);
    }

    printf("\nВычисление периметра:\n");
    for (int i = 0; i < num_sides; i++) {
        printf("%s%.2f", (i > 0) ? " + " : "", sides[i]);
    }
    printf(" = %.2f\n", perimeter);

    printf("\nИтоговый периметр: %.2f\n", perimeter);

    return 0;
}

Компилируем обновлённую программу:

gcc -o polygon_perimeter polygon_perimeter.c

Запускаем программу:

./polygon_perimeter

Пример вывода:

Введите количество сторон многоугольника (от 3 до 10): 4
Введите длины сторон:
Длина стороны 1 (должна быть положительной): 5.5
Длина стороны 2 (должна быть положительной): 6.2
Длина стороны 3 (должна быть положительной): 4.3
Длина стороны 4 (должна быть положительной): 7.1

--- Вычисление Периметра Многоугольника ---
Количество сторон: 4

Длины сторон:
Сторона 1: 5.50
Сторона 2: 6.20
Сторона 3: 4.30
Сторона 4: 7.10

Вычисление периметра:
5.50 + 6.20 + 4.30 + 7.10 = 23.10

Итоговый периметр: 23.10

Основные улучшения в этом шаге:

  • Добавлена проверка ввода для количества сторон и длин сторон.
  • Создан более подробный и форматированный вывод.
  • Включён пошаговый вывод вычисления периметра.
  • Обеспечены минимальные и максимальные ограничения на количество сторон.

Резюме

В этом лабораторном практикуме вы научитесь вводить длины сторон многоугольника в массив, суммировать все стороны для вычисления периметра и выводить результат. Сначала вы запросите у пользователя количество сторон и длину каждой стороны, сохранив длины сторон в массиве. Затем вы суммируете все длины сторон, чтобы вычислить периметр многоугольника. Наконец, вы выведете вычисленный периметр.

Ключевые шаги включают использование scanf() для чтения пользовательского ввода, сохранение длин сторон в массиве, итерацию по массиву для суммирования длин сторон и вывод конечного результата.