Перевести программу из 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, что означает успешное завершение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д