Перевести программу из 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;
}

Объяснение кода листинга программы

  1. Объявление переменных и структур:
    • struct coord - структура, содержащая координаты точки в пространстве
    • a[N] - массив структур coord, содержащий случайно сгенерированные координаты точек в пространстве
    • b - структура coord, которая будет содержать координаты искомой точки
    • amt[N] - массив, в котором будет храниться количество точек, лежащих внутри шара с радиусом R и центром в каждой из точек a[i]
    • R - радиус шара
    • max - максимальное количество точек, лежащих внутри шара
    • dis - расстояние между двумя точками в пространстве
    • i, j - индексы точек в пространстве
    • N - количество точек в пространстве
  2. Инициализация переменных:
    • Установка локали на русскую с помощью setlocale(LC_ALL,Russian)
    • Инициализация генератора случайных чисел с помощью srand(time(NULL))
    • Заполнение массива amt нулями с помощью цикла for
    • Установка max равным нулю
    • Установка dis равным нулю
  3. Генерация случайных координат для каждой точки в пространстве с помощью цикла for и функций rand() и sprintf()
  4. Ввод радиуса шара с помощью scanf()
  5. Поиск точек, лежащих внутри шара с заданным радиусом, с помощью вложенных циклов for и вычисления расстояния между точками
  6. Обновление значения max при обнаружении точки с большим количеством точек внутри шара
  7. Обновление координат искомой точки b при обнаружении точки с максимальным количеством точек внутри шара
  8. Вывод случайных точек в пространстве с помощью цикла for и функции printf()
  9. Проверка наличия искомой точки с помощью условного оператора if и вывода соответствующего сообщения
  10. Вывод сообщения о найденной точке или об отсутствии искомой точки с помощью условного оператора if и функции printf()
  11. Вывод сообщения о завершении программы с помощью функции system(pause)
  12. Возврат значения 0, что означает успешное завершение программы

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.625 из 5