Advertisement
Qellex

7.2 - 13 в

Jun 7th, 2021
846
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.53 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <malloc.h>
  4. #include <locale.h>
  5.  
  6.  
  7.  
  8. void main() {
  9.  
  10.     setlocale(LC_ALL, "rus");
  11.  
  12.     FILE* input;
  13.     int n = 7; // кол-во точек
  14.     if (fopen_s(&input, "arr.bin", "wb") != 0) {  // Открытие файла для записи и проверка открылся ли он
  15.         printf("Ошибка открытия файла!");
  16.         system("pause");
  17.         return;
  18.     }
  19.     else {
  20.         int matrix[7][2] = { {1,2}, {3,1}, {7,0}, {8,3}, {4,9}, {3,5}, {1,7} };  // точки
  21.         fwrite(&matrix, sizeof(int), n * 2, input); // записываем матрицу в бинарный файл
  22.         printf("Исходная матрица:\n");
  23.         for (int i = 0; i < n; i++) {          // Вывод исходной матрицы
  24.             for (int j = 0; j < 2; j++)
  25.                 printf("%d ", matrix[i][j]);
  26.             printf("\n");
  27.         }
  28.     }
  29.  
  30.     if (fclose(input) != 0)                       // Закрытие файла и проверка
  31.         printf("Ошибка закрытия файла");
  32.  
  33.     if (fopen_s(&input, "arr.bin", "rb") != 0) {  // Открытие файла для чтения и проверка открылся ли он
  34.         printf("Ошибка открытия файла!");
  35.         system("pause");
  36.         return;
  37.     }
  38.  
  39.     int** a = (int**)malloc(n * sizeof(int*)); // Выделение памяти под двумерный массив
  40.     for (int i = 0; i < n; i++)
  41.         a[i] = (int*)malloc(2 * sizeof(int));
  42.  
  43.     for (int i = 0; i < n; i++)                      // Заполнение массива матрицой из файла
  44.         fread(a[i], sizeof(int), 2, input);
  45.  
  46.     int maxA = 0, maxB = 0; // задаем изначальные точки
  47.     //находим макс удаленные точки по абсциссе
  48.     for (int i = 1; i < n; i++) {
  49.         if (a[maxA][0] > a[i][0])
  50.             maxA = i;
  51.         if (a[maxB][0] < a[i][0])
  52.             maxB = i;
  53.     }
  54.     //если абцисса одинаковая, то выводим ошибку
  55.     if (maxA == maxB) {
  56.         printf_s("Точки имеют одинаковую абциссу");
  57.         return;
  58.     }
  59.     printf_s("Наиболее удаленные точки по абциссе: (%d %d) и (%d %d)\n", a[maxA][0], a[maxA][1], a[maxB][0], a[maxB][1]);
  60.  
  61.     FILE* output1; // точки лежащие выше прямой
  62.     FILE* output2; // точки лежащие ниже прямой или на прямой
  63.  
  64.    
  65.     if (fopen_s(&output1, "arr2.bin", "wb") != 0) { // Открытие файла для записи и проверка открылся ли он
  66.         printf_s("Ошибка при открытии arr2.bin в режиме записи");
  67.         return;
  68.     }
  69.     if (fopen_s(&output2, "arr3.bin", "wb") != 0) { // Открытие файла для записи и проверка открылся ли он
  70.         printf_s("Ошибка при открытии arr3.bin в режиме записи");
  71.         return;
  72.     }
  73.  
  74.     //координаты считываемых точек
  75.     float r; // результат
  76.     for (int i = 0; i < n; i++) {
  77.         //для рассчёта используется уравнение Ax + Bx + C = 0
  78.         //если r > 0, то точка выше прямой, если r < 0,то ниже
  79.         //если r = 0, то точка лежит на прямой
  80.         r = (a[maxB][1] - a[maxA][1]) * a[i][0] + (a[maxB][0] - a[maxA][0]) * a[i][1] - ((a[maxB][0] - a[maxA][0]) * (a[maxB][1] - a[maxA][1]));
  81.         if (r > 0) {
  82.             fprintf_s(output1, "%d %d\n", a[i][0], a[i][1]);
  83.             printf("Выше лежит точка %d %d\n", a[i][0], a[i][1]);
  84.         }
  85.         else {
  86.             fprintf_s(output2, "%d %d\n", a[i][0], a[i][1]);
  87.             printf("Ниже лежит точка %d %d\n", a[i][0], a[i][1]);
  88.         }
  89.     }
  90.  
  91.     if (fclose(output1) != 0)                                // Закрытие файла и проверка
  92.         printf("Ошибка закрытия файла");
  93.     if (fclose(output2) != 0)                                // Закрытие файла и проверка
  94.         printf("Ошибка закрытия файла");
  95.     if (fclose(input) != 0)                                // Закрытие файла и проверка
  96.         printf("Ошибка закрытия файла");
  97.  
  98.     system("pause");
  99.  
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement