Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <malloc.h>
- #include <locale.h>
- void main() {
- setlocale(LC_ALL, "rus");
- FILE* input;
- int n = 7; // кол-во точек
- if (fopen_s(&input, "arr.bin", "wb") != 0) { // Открытие файла для записи и проверка открылся ли он
- printf("Ошибка открытия файла!");
- system("pause");
- return;
- }
- else {
- int matrix[7][2] = { {1,2}, {3,1}, {7,0}, {8,3}, {4,9}, {3,5}, {1,7} }; // точки
- fwrite(&matrix, sizeof(int), n * 2, input); // записываем матрицу в бинарный файл
- printf("Исходная матрица:\n");
- for (int i = 0; i < n; i++) { // Вывод исходной матрицы
- for (int j = 0; j < 2; j++)
- printf("%d ", matrix[i][j]);
- printf("\n");
- }
- }
- if (fclose(input) != 0) // Закрытие файла и проверка
- printf("Ошибка закрытия файла");
- if (fopen_s(&input, "arr.bin", "rb") != 0) { // Открытие файла для чтения и проверка открылся ли он
- printf("Ошибка открытия файла!");
- system("pause");
- return;
- }
- int** a = (int**)malloc(n * sizeof(int*)); // Выделение памяти под двумерный массив
- for (int i = 0; i < n; i++)
- a[i] = (int*)malloc(2 * sizeof(int));
- for (int i = 0; i < n; i++) // Заполнение массива матрицой из файла
- fread(a[i], sizeof(int), 2, input);
- int maxA = 0, maxB = 0; // задаем изначальные точки
- //находим макс удаленные точки по абсциссе
- for (int i = 1; i < n; i++) {
- if (a[maxA][0] > a[i][0])
- maxA = i;
- if (a[maxB][0] < a[i][0])
- maxB = i;
- }
- //если абцисса одинаковая, то выводим ошибку
- if (maxA == maxB) {
- printf_s("Точки имеют одинаковую абциссу");
- return;
- }
- printf_s("Наиболее удаленные точки по абциссе: (%d %d) и (%d %d)\n", a[maxA][0], a[maxA][1], a[maxB][0], a[maxB][1]);
- FILE* output1; // точки лежащие выше прямой
- FILE* output2; // точки лежащие ниже прямой или на прямой
- if (fopen_s(&output1, "arr2.bin", "wb") != 0) { // Открытие файла для записи и проверка открылся ли он
- printf_s("Ошибка при открытии arr2.bin в режиме записи");
- return;
- }
- if (fopen_s(&output2, "arr3.bin", "wb") != 0) { // Открытие файла для записи и проверка открылся ли он
- printf_s("Ошибка при открытии arr3.bin в режиме записи");
- return;
- }
- //координаты считываемых точек
- float r; // результат
- for (int i = 0; i < n; i++) {
- //для рассчёта используется уравнение Ax + Bx + C = 0
- //если r > 0, то точка выше прямой, если r < 0,то ниже
- //если r = 0, то точка лежит на прямой
- 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]));
- if (r > 0) {
- fprintf_s(output1, "%d %d\n", a[i][0], a[i][1]);
- printf("Выше лежит точка %d %d\n", a[i][0], a[i][1]);
- }
- else {
- fprintf_s(output2, "%d %d\n", a[i][0], a[i][1]);
- printf("Ниже лежит точка %d %d\n", a[i][0], a[i][1]);
- }
- }
- if (fclose(output1) != 0) // Закрытие файла и проверка
- printf("Ошибка закрытия файла");
- if (fclose(output2) != 0) // Закрытие файла и проверка
- printf("Ошибка закрытия файла");
- if (fclose(input) != 0) // Закрытие файла и проверка
- printf("Ошибка закрытия файла");
- system("pause");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement