Из 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; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы:
stdafx.h
для работы с Windows,locale.h
для работы с локалью,time.h
для работы со временем иstdlib.h
для работы с генерацией случайных чисел. - Объявляем структуру
point
для хранения координат точек на плоскости. - Реализуем функцию
Rasst
, которая вычисляет расстояние между двумя точками на плоскости по формуле Евклида. - Реализуем функцию
rnd
, которая генерирует случайное число в заданном диапазоне. - В функции
main
инициализируем генератор случайных чисел, устанавливаем локаль на русскую и запрашиваем у пользователя количество точек на плоскости. - В цикле запрашиваем координаты точек и сохраняем их в массиве
t
. - Выводим координаты точек на экран.
- Создаем массив
r
для хранения матрицы расстояний между точками. - Заполняем массив
r
значениями расстояний между точками с помощью функцииRasst
. - Выводим матрицу расстояний на экран.
- Ждем нажатия клавиши для выхода из программы.
- Возвращаем 0, чтобы указать, что программа успешно завершилась.