Как можно изменить данный код?

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

я написал код без использования функций, теперь мне нужно переделать его используя функции. Что в данном коде можно заменить функциями?

#include "stdio.h"
#include "math.h"
#include "stdlib.h"

int main() {
    int n;
    printf("Enter the number of points: ");
    while ((scanf("%d", &n) != 1) || (n <= 0)) {
        printf("Invalid input. Please enter a positive integer: ");
        while (getchar() != '\n'); 
    }

    double eps = 1e-9;

    double x[20];
    double y[20];
    
    printf("Enter the coordinates of the points:\n");
    for (int i = 0; i < n; i++) {
        printf("Point %d (x y): ", i + 1);
        while (scanf("%lf %lf", &x[i], &y[i]) != 2) {
            printf("Invalid input. Please enter coordinates (x y): ");
            while (getchar() != '\n');
        }
    }
    
    if (n == 1) {
        // одна точка может лежать на окружности произвольного радиуса
        printf("YES, radius: %lf\n", 1.0);
        return 0;
    }
    
    // делаем так чтоб второй в массиве лежала точка не равная первой
    for (int i = 1; i < n; ++i) {
        if (x[i] != x[0] || y[i] != x[0]) {
            double tmp = x[1];
            x[1] = x[i];
            x[i] = tmp;
            tmp = y[1];
            y[1] = y[i];
            y[i] = tmp;
        }
    }

    if (x[1] == x[0] && y[1] == y[0]) {
        // опять одна точка
        printf("YES, radius: %lf\n", 1.0);
        return 0;
    } else if (n == 2) {
        // если две точки, берем середину отрезка
        double center_x = (x[1] + x[0]) / 2.0;
        double center_y = (y[1] + y[0]) / 2.0;
        double r = sqrt((x[0] - center_x) * (x[0] - center_x) + (y[0] - center_y) * (y[0] - center_y));
        printf("YES, radius: %lf\n", r);
        return 0;
    }

    // делаем так чтоб третьей в массиве лежала точка не равная первой и второй
    for (int i = 2; i < n; ++i) {
        if ((x[i] != x[0] || y[i] != x[0]) && (x[i] != x[1] || y[i] != x[1])) {
            double tmp = x[2];
            x[2] = x[i];
            x[i] = tmp;
            tmp = y[2];
            y[2] = y[i];
            y[i] = tmp;
        }
    }

    // если не нашли три уникальных точки
    if (!((x[1] != x[0] || y[1] != y[0]) && (x[2] != x[0] || y[2] != y[0]) && (x[2] != x[1] || y[2] != y[1]))) {
        double center_x = (x[1] + x[0]) / 2.0;
        double center_y = (y[1] + y[0]) / 2.0;
        double r = sqrt((x[0] - center_x) * (x[0] - center_x) + (y[0] - center_y) * (y[0] - center_y));
        printf("YES, radius: %lf\n", r);
        return 0;
    }

    double A = x[1] - x[0];
    double B = y[1] - y[0];
    double C = x[2] - x[0];
    double D = y[2] - y[0];
    double E = (x[1] - x[0]) * (x[0] + x[1]) + (y[1] - y[0]) * (y[0] + y[1]);
    double F = (x[2] - x[0]) * (x[0] + x[2]) + (y[2] - y[0]) * (y[0] + y[2]);
    double G = 2 * ((x[1] - x[0]) * (y[2] - y[1]) - (y[1] - y[0]) * (x[2] - x[1]));

    if (fabs(G) < eps) {
        printf("NO\n");
        return 0;
    }

    // координаты центра
    double center_x = (D * E - B * F) / G;
    double center_y = (A * F - C * E) / G;

    double r = sqrt((x[0] - center_x) * (x[0] - center_x) + (y[0] - center_y) * (y[0] - center_y));

    int ans = 1;
    for (int i = 1; i < n; ++i) {
        if (fabs(sqrt((x[i] - center_x) * (x[i] - center_x) + (y[i] - center_y) * (y[i] - center_y)) - r) > eps) {
            ans = 0;
            break;
        }
    }

    if (ans) {
        printf("YES, radius: %lf\n", r);
    } else {
        printf("NO\n");
    }
    
    system("pause");
    return 0;
}

Ответы (0 шт):