Взаимное расположение двух окружностей - C (СИ)
Формулировка задачи:
Подскажите пожалуйста! Нужно написать программу на Си, которая определяет взаимное расположение двух окружностей(выводит результат на экран) и, в случае их пересечения, рассчитывает и выводит площадь их пересечения. Пользователь вводит координаты центра х, у и радиус r. Также нужно учесть проверку на ноль и отрицательные числа в r.
Решение задачи: «Взаимное расположение двух окружностей»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <math.h> int main () { double x1, x2, y1, y2, r1, r2, d = 0, p1 = 0, p2 = 0, U1 = 0, U2 = 0, S1 = 0, S2 = 0; printf("Zadejte parametry kruznice #1\n"); if (scanf("%lf%lf%lf", &x1, &y1, &r1) !=3 || r1<=0) { printf("Nespravny vstup\n"); return 1; } printf("Zadejte parametry kruznice #2\n"); if (scanf("%lf%lf%lf", &x2, &y2, &r2) !=3 || r2<=0) { printf("Nespravny vstup\n"); return 1; } d = sqrt(x2*x2-2*x2*x1+x1*x1+y2*y2-2*y1*y2+y1*y1); p1 = 3.14 * r1 * r1; p2 = 3.14 * r2 * r2; U1 = 2*acos((r1*r1 - r2*r2 + d*d)/2*r1*d); U2 = 2*acos((r2*r2 - r1*r1 + d*d)/2*r2*d); S1 = r1*r1(U1 - sin(U1))/2; S2 = r2*r2 (U2 -sin(U2))/2; if (r1==r2 && d==0) printf("Kruznice splyvaji, prekryv: %lf.\n", p1); else if (d < fabs(r1-r2) && d > 0) printf("Kruznice #2 lezi uvnitr kruznice #1, prekryv: %lf.\n", p2); else if (d == fabs(r1-r2)) printf("Vnitrni dotyk, kruznice #2 lezi uvnitr kruznice #1, prekryv: %lf.\n", p2); else if (d > fabs(r1-r2) && d < (r1-r2)) printf("Kruznice se protinaji, prekryv: %lf.\n", S1+S2); else if (d==(r1+r2)) printf("Vnejsi dotyk, zadny prekryv.\n"); else if (d > (r1+r2)) printf("Kruznice lezi vne sebe, zadny prekryv.\n"); system("PAUSE"); return 0; }
Объяснение кода листинга программы
- Объявление переменных: x1, x2, y1, y2, r1, r2, d, p1, p2, U1, U2, S1, S2.
- Ввод параметров первой окружности с помощью функции scanf.
- Проверка корректности ввода: если ввод некорректен, выводится сообщение об ошибке и программа завершается.
- Вычисление расстояния между центрами окружностей и его сохранение в переменной d.
- Вычисление площади первой окружности и сохранение ее в переменной p1.
- Вычисление площади второй окружности и сохранение ее в переменной p2.
- Вычисление углов между окружностями и сохранение их в переменных U1 и U2.
- Вычисление площади кольца между окружностями и сохранение ее в переменной S1.
- Вычисление площади кольца между окружностями и сохранение ее в переменной S2.
- Проверка условий взаимного расположения окружностей:
- Если окружности совпадают, выводится сообщение о перекрытии и значение площади перекрытия.
- Если окружность №2 лежит внутри окружности №1, выводится сообщение о перекрытии и значение площади перекрытия.
- Если окружности касаются друг друга, выводится сообщение о перекрытии и значение площади перекрытия.
- Если окружность №2 пересекает окружность №1, выводится сообщение о перекрытии и значение площади перекрытия.
- Если окружность №2 лежит снаружи окружности №1, выводится сообщение о том, что окружности не пересекаются.
- Завершение работы программы с помощью функции system(
PAUSE
). - Возврат значения 0, что означает успешное выполнение программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д