Перевести программу из C++ в Си - C (СИ) (75743)
Формулировка задачи:
#include <iostream>
#include <locale>
#include <cmath>
#include <iomanip>
using std::cout;
using std::cin;
using std::endl;
using std::setw;
int main()
{
setlocale(LC_ALL,"Russian");
struct coord
{
int x;
int y;
int z;
};
const int n = 15;
coord a[n];
coord b;
int amt[n] = {0};
int R = 0;
int max = 0;
double dis = 0.0;
srand(time(NULL));
for (int i = 0; i < n; i++)
{
a[i].x = rand() % 20;
a[i].y = rand() % 20;
a[i].z = rand() % 20;
}
cout << endl
<< "Введите радиус: ";
cin >> R;
for (int i = 0; i < n; i++)
for (int j = i + 1; j < n; j++)
{
dis = sqrt(pow((a[j].x - a[i].x), 2.0) + pow((a[j].y - a[i].y), 2.0) + pow((a[j].z - a[i].z), 2.0));
if (dis < R)
amt[i]++;
}
for (int i = 0; i < n; i++)
if ((amt[i] >= max) && (amt[i] != 0))
{
max = amt[i];
b.x = a[i].x;
b.y = a[i].y;
b.z = a[i].z;
}
cout << endl
<< "Случайные точки в пространстве:"
<< endl;
for (int i = 0; i < n; i++)
cout << setw(4) << "(" << setw(2) << a[i].x << ", " << setw(2) << a[i].y << ", " << setw(2) << a[i].z << ")"
<< endl;
if (b.x < 0)
cout << endl
<< "Искомая точка отсутствует."
<< endl;
else
{
cout << endl
<< "Шар радиуса " << R << " с центром в точке " << "(" << b.x << ", " << b.y << ", " << b.z << ")" << " содержит максимальное число точек"
<< endl
<< "из m."
<< endl;
}
system("pause");
return 0;
}Решение задачи: «Перевести программу из C++ в Си»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <locale.h>
#include <math.h>
#define N 15
int main()
{
struct coord
{
int x;
int y;
int z;
} a[N], b;
int amt[N] = {0};
int R = 0;
int max = 0;
double dis = 0.0;
int i, j;
setlocale(LC_ALL, "Russian");
srand(time(NULL));
for (i = 0; i < N; i++)
{
a[i].x = rand() % 20;
a[i].y = rand() % 20;
a[i].z = rand() % 20;
}
printf("Введите радиус: ");
scanf("%d", &R);
for (i = 0; i < N; i++)
{
for (j = i + 1; j < N; j++)
{
dis = sqrt(pow((a[j].x - a[i].x), 2.0) + pow((a[j].y - a[i].y), 2.0) + pow((a[j].z - a[i].z), 2.0));
if (dis < R)
{
amt[i]++;
}
}
}
for (i = 0; i < N; i++)
{
if ((amt[i] >= max) && (amt[i] != 0))
{
max = amt[i];
b.x = a[i].x;
b.y = a[i].y;
b.z = a[i].z;
}
}
printf("Случайные точки в пространстве:\n");
for (i = 0; i < N; i++)
{
printf(" (%2d, %2d, %2d)\n", a[i].x, a[i].y, a[i].z);
}
if (b.x < 0)
{
printf("\nИскомая точка отсутствует.\n");
}
else
{
printf("\nШар радиуса %d с центром в точке (%2d, %2d, %2d) "
"содержит максимальное число точек из m.\n",
R, b.x, b.y, b.z);
}
system("pause");
return 0;
}
Объяснение кода листинга программы
- Объявление переменных и структур:
struct coord- структура, содержащая координаты точки в пространствеa[N]- массив структурcoord, содержащий случайно сгенерированные координаты точек в пространствеb- структураcoord, которая будет содержать координаты искомой точкиamt[N]- массив, в котором будет храниться количество точек, лежащих внутри шара с радиусомRи центром в каждой из точекa[i]R- радиус шараmax- максимальное количество точек, лежащих внутри шараdis- расстояние между двумя точками в пространствеi,j- индексы точек в пространствеN- количество точек в пространстве
- Инициализация переменных:
- Установка локали на русскую с помощью
setlocale(LC_ALL,Russian) - Инициализация генератора случайных чисел с помощью
srand(time(NULL)) - Заполнение массива
amtнулями с помощью циклаfor - Установка
maxравным нулю - Установка
disравным нулю
- Установка локали на русскую с помощью
- Генерация случайных координат для каждой точки в пространстве с помощью цикла
forи функцийrand()иsprintf() - Ввод радиуса шара с помощью
scanf() - Поиск точек, лежащих внутри шара с заданным радиусом, с помощью вложенных циклов
forи вычисления расстояния между точками - Обновление значения
maxпри обнаружении точки с большим количеством точек внутри шара - Обновление координат искомой точки
bпри обнаружении точки с максимальным количеством точек внутри шара - Вывод случайных точек в пространстве с помощью цикла
forи функцииprintf() - Проверка наличия искомой точки с помощью условного оператора
ifи вывода соответствующего сообщения - Вывод сообщения о найденной точке или об отсутствии искомой точки с помощью условного оператора
ifи функцииprintf() - Вывод сообщения о завершении программы с помощью функции
system(pause) - Возврат значения 0, что означает успешное завершение программы