Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <stdio.h>
- #include <malloc.h>
- #include <locale.h>
- #include <stdlib.h>
- void GetLength(int* length)
- {
- FILE* txtFile = fopen("input.txt", "r");
- if (txtFile == NULL) perror("Error opening file");
- else
- {
- fscanf(txtFile, "%d", length);
- }
- }
- void ReadFromFile(int** matrix,int* length)
- {
- FILE* txtFile = fopen("input.txt", "r");
- int temp;
- int x = 0, y = 0;
- char ch;
- if (txtFile == NULL) perror("Error opening file");
- else
- {
- fscanf(txtFile, "%d", length);
- while (fscanf(txtFile, "%d", &temp) == 1)
- {
- matrix[y][x] = temp;
- if (fscanf(txtFile, "%c", &ch) == 1)
- {
- if (ch == '\n')
- {
- printf("%d\n", matrix[y][x]);
- y++;
- x = 0;
- }
- else
- {
- printf("%d ", matrix[y][x]);
- x++;
- }
- }
- else
- {
- printf("%d ", matrix[y][x]);
- x++;
- }
- }
- printf("\n");
- fclose(txtFile);
- }
- }
- void Sort(int length, int** matrix, int* numOfCols, int* isSorted)
- {
- for (size_t i = 0; i < length; i++)
- {
- int count = 0;
- for (size_t j = 1; j < length; j++)
- {
- if (matrix[j - 1][i] <= matrix[j][i])
- {
- count++;
- }
- }
- if (count + 1 == length)
- {
- isSorted[i] = 1;
- (*numOfCols)++;
- }
- else isSorted[i] = 0;
- }
- }
- void Print(int length, int** matrix, int* isSorted)
- {
- for (size_t i = 0; i < length; i++)
- {
- for (size_t j = 0; j < length; j++)
- {
- if (isSorted[j] == 1)
- {
- printf("%d ", matrix[i][j]);
- }
- else
- printf("null ");
- }
- printf("\n");
- }
- }
- void WriteInFile(int** matrix, int length, int* isSorted, int numOfCols)
- {
- FILE* txtFile = fopen("output.txt", "w+");
- if (txtFile == NULL) perror("Ошибка открытия файла");
- else
- {
- fprintf(txtFile, "%d\n", numOfCols);
- for (size_t i = 0; i < length; i++)
- {
- for (size_t j = 0; j < length; j++)
- {
- if (isSorted[j] == 1)
- {
- fprintf(txtFile, "%d ", matrix[i][j]);
- }
- else
- fprintf(txtFile, "null ");
- }
- fprintf(txtFile, "\n");
- }
- }
- }
- int main()
- {
- setlocale(LC_ALL, "Russian");
- int** matrix = NULL;
- int length = 0;
- printf("Subject: In this matrix, count the number of columns for which the elements are arranged in ascending order. \n");
- GetLength(&length);
- matrix = (int**)malloc(length * sizeof(int*));
- for (int i = 0; i < length; i++)
- {
- matrix[i] = (int*)malloc(length * sizeof(int));
- }
- ReadFromFile(matrix, &length);
- printf("\n");
- int numOfCols = 0;
- int* isSorted;
- isSorted = (int*)malloc(length * sizeof(int));
- Sort(length, matrix, &numOfCols, isSorted);
- Print(length, matrix, isSorted);
- WriteInFile(matrix, length, isSorted, numOfCols);
- printf("Number of sorted columns = %d\n", numOfCols);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement