Из Pascal в C - C (СИ) (248685)

Узнай цену своей работы

Формулировка задачи:

const
  max = 15;
 
type
  point = record
    x, y: real;
  end;
 
procedure Rasst(a, b: point; var rz: real);
begin
  rz := sqrt(sqr(a.x - b.x) + sqr(a.y - b.y));
end;
 
var
  t: array[1..max] of point;
  r: array[1..max, 1..max] of real;
  n, i, j: byte;
 
begin
  repeat
    write('Введите количество точек на плоскости (от 2 до ', max, '):');
    read(n);
  until n in [2..max];
  for i := 1 to n do
  begin
    t[i].x := 10 * random - 4;
    t[i].y := 10 * random - 4;
  end;
  writeln('Координаты точек:');
  write('X:');
  for i := 1 to n do
    write(t[i].x:5:1);
  writeln;
  write('Y:');
  for i := 1 to n do
    write(t[i].y:5:1);
  writeln;
  writeln('Матрица расстояний:');
  for i := 1 to n do
  begin
    for j := 1 to n  do
    begin
      Rasst(t[i], t[j], r[i, j] );
      write(r[i, j]:5:1);
    end;
    writeln;
  end;
end.

Решение задачи: «Из Pascal в C»

textual
Листинг программы
#include "stdafx.h"
#include <locale.h>
#include <time.h>
#include <stdlib.h>
#define MAXN 15
 
struct point { double x, y; };
 
double Rasst(struct point a, struct point b) {
    return sqrt(pow(a.x - b.x, 2) + pow(a.y - b.y, 2));
}
 
double rnd(int min, int max) {
    return min + rand() % (1000 * (max - min)) / 1000.0f;
}
 
int main()
{
    srand(time(0));
    setlocale(LC_ALL, "rus");
    struct point t[MAXN];
    double r[MAXN][MAXN];
    int n;
    do {
        printf("Введите количество точек на плоскости (от 2 до %i):", MAXN);
        scanf_s("%i", &n);
    } while (n < 2 || n > MAXN);
 
    for (int i = 0; i < n; i++) {
 
        t[i].x = rnd(-4, 5);
        t[i].y = rnd(-4, 5);
    }
    printf("Координаты точек:\nX: ");
    for (int i = 0; i < n; i++)
        printf("%.2f ", t[i].x);
    printf("\nY: ");
    for (int i = 0; i < n; i++)
        printf("%.2f ", t[i].y);
    printf("\nМатрица расстояний:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            r[i][j] = Rasst(t[i], t[j]);
            printf("%.2f\t", r[i][j]);
        }
        printf("\n");
    }
    getch();
    return 0;
}

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

  1. Включаем необходимые заголовочные файлы: stdafx.h для работы с Windows, locale.h для работы с локалью, time.h для работы со временем и stdlib.h для работы с генерацией случайных чисел.
  2. Объявляем структуру point для хранения координат точек на плоскости.
  3. Реализуем функцию Rasst, которая вычисляет расстояние между двумя точками на плоскости по формуле Евклида.
  4. Реализуем функцию rnd, которая генерирует случайное число в заданном диапазоне.
  5. В функции main инициализируем генератор случайных чисел, устанавливаем локаль на русскую и запрашиваем у пользователя количество точек на плоскости.
  6. В цикле запрашиваем координаты точек и сохраняем их в массиве t.
  7. Выводим координаты точек на экран.
  8. Создаем массив r для хранения матрицы расстояний между точками.
  9. Заполняем массив r значениями расстояний между точками с помощью функции Rasst.
  10. Выводим матрицу расстояний на экран.
  11. Ждем нажатия клавиши для выхода из программы.
  12. Возвращаем 0, чтобы указать, что программа успешно завершилась.

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

14   голосов , оценка 3.786 из 5
Похожие ответы