С клавиатуры ввести натуральное число n и вещественные числа х1, у1,... хi,уi,. Рассматривая пары хi, и уi, как координаты точек на плоскости, определить радиус наименьшего круга (с центром в начале координат), внутрь которого попадают все эти точки. Вычисление расстояния между двумя точками реализовать в виде функции. Результат вывести в файл оut.txt.
переделайте пожалуйста с паскаля на C(СИ)
uses crt;
var
i,n:integer;
x,y,min,t:real;
begin
clrscr;
write('Введите n = ');
readln(n);
min:=0;
for i:=1 to n do
begin
write ('Введите x[',i,'] = ');
readln(x);
write ('Введите y[',i,'] = ');
readln(y);
t:=sqrt(x*x+y*y);
if t>min thenmin:=t;
end;
write('радиус = ',min:0:2);
readkey;
end.
Ответы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
typedef struct pair {
double* x;
double* y;
} pair;
pair *input_arrays(pair *ptr, double* arr_x, double* arr_y, int n) {
for (int i = 0; i < n; i++) {
printf("Введите %d элемент в массиве X\n", i);
scanf("%lf", &arr_x[i]);
printf("Введите %d элемент в массиве Y\n", i);
scanf("%lf", &arr_y[i]);
ptr-> x = arr_x;
ptr-> y = arr_y;
}
return ptr;
}
void print_array(float* arr, int n) {
for(int i = 0; i< n; i++){
printf("%f", arr[i]);
}
}
double find_minimum_radius(double* arr_x, double* arr_y, int n) {
double temp;
double min_radius = 0;
for (int i = 0; i < n; i++) {
temp = sqrt(pow(arr_x[i], 2) + pow(arr_y[i], 2));
if (temp > min_radius) {
min_radius = temp;
}
}
return min_radius;
}
int main() {
pair pair_arrx_and_arry = {0,0};
int n;
double min_radius = 0;
printf("Введите n: ");
scanf("%d", &n);
double* arr_x = malloc(n * sizeof(int));
double* arr_y = malloc(n * sizeof(int));
input_arrays(&pair_arrx_and_arry, arr_x,arr_y, n);
min_radius = find_minimum_radius(arr_x, arr_y, n);
printf("Минимальный радиус равен: %f", min_radius);
// FILE *out_file = fopen("output", "w");
// if (out_file == NULL) {
// printf("Error! Could not open file\n");
// exit(-1);
// }
// fprintf(out_file, "Минимальный радиус равен: %f\n", min_radius);
return 0;
}