Advertisement
Guest User

Untitled

a guest
Oct 23rd, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.48 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <malloc.h>
  4. #include <locale.h>
  5. #include <stdlib.h>
  6. void GetLength(int* length)
  7. {
  8.     FILE* txtFile = fopen("input.txt", "r");
  9.     if (txtFile == NULL) perror("Error opening file");
  10.     else
  11.     {
  12.         fscanf(txtFile, "%d", length);
  13.     }
  14. }
  15. void ReadFromFile(int** matrix,int* length)
  16. {
  17.  
  18.     FILE* txtFile = fopen("input.txt", "r");
  19.  
  20.     int temp;
  21.     int x = 0, y = 0;
  22.     char ch;
  23.     if (txtFile == NULL) perror("Error opening file");
  24.     else
  25.     {
  26.         fscanf(txtFile, "%d", length);
  27.         while (fscanf(txtFile, "%d", &temp) == 1)
  28.         {
  29.             matrix[y][x] = temp;
  30.             if (fscanf(txtFile, "%c", &ch) == 1)
  31.             {
  32.                 if (ch == '\n')
  33.                 {
  34.                     printf("%d\n", matrix[y][x]);
  35.                     y++;
  36.                     x = 0;
  37.  
  38.                 }
  39.                 else
  40.                 {
  41.  
  42.                     printf("%d ", matrix[y][x]);
  43.                     x++;
  44.  
  45.                 }
  46.             }
  47.             else
  48.             {
  49.                 printf("%d ", matrix[y][x]);
  50.                 x++;
  51.  
  52.             }
  53.         }
  54.         printf("\n");
  55.         fclose(txtFile);
  56.  
  57.     }
  58. }
  59. void Sort(int length, int** matrix, int* numOfCols, int* isSorted)
  60. {
  61.     for (size_t i = 0; i < length; i++)
  62.     {
  63.         int count = 0;
  64.         for (size_t j = 1; j < length; j++)
  65.         {
  66.             if (matrix[j - 1][i] <= matrix[j][i])
  67.             {
  68.                 count++;
  69.             }
  70.         }
  71.         if (count + 1 == length)
  72.         {
  73.             isSorted[i] = 1;
  74.             (*numOfCols)++;
  75.         }
  76.         else isSorted[i] = 0;
  77.  
  78.     }
  79. }
  80. void Print(int length, int** matrix, int* isSorted)
  81. {
  82.     for (size_t i = 0; i < length; i++)
  83.     {
  84.         for (size_t j = 0; j < length; j++)
  85.         {
  86.             if (isSorted[j] == 1)
  87.             {
  88.                 printf("%d ", matrix[i][j]);
  89.             }
  90.             else
  91.                 printf("null ");
  92.         }
  93.         printf("\n");
  94.     }
  95. }
  96. void WriteInFile(int** matrix, int length, int* isSorted, int numOfCols)
  97. {
  98.     FILE* txtFile = fopen("output.txt", "w+");
  99.     if (txtFile == NULL) perror("Ошибка открытия файла");
  100.     else
  101.     {
  102.         fprintf(txtFile, "%d\n", numOfCols);
  103.         for (size_t i = 0; i < length; i++)
  104.         {
  105.             for (size_t j = 0; j < length; j++)
  106.             {
  107.                 if (isSorted[j] == 1)
  108.                 {
  109.                     fprintf(txtFile, "%d ", matrix[i][j]);
  110.                 }
  111.                 else
  112.                     fprintf(txtFile, "null ");
  113.  
  114.             }
  115.             fprintf(txtFile, "\n");
  116.         }
  117.  
  118.     }
  119. }
  120. int main()
  121. {
  122.     setlocale(LC_ALL, "Russian");
  123.  
  124.  
  125.     int** matrix = NULL;
  126.     int length = 0;
  127.     printf("Subject: In this matrix, count the number of columns for which the elements are arranged in ascending order. \n");
  128.     GetLength(&length);
  129.     matrix = (int**)malloc(length * sizeof(int*));
  130.     for (int i = 0; i < length; i++)
  131.     {
  132.         matrix[i] = (int*)malloc(length * sizeof(int));
  133.     }
  134.     ReadFromFile(matrix, &length);
  135.  
  136.  
  137.     printf("\n");
  138.     int numOfCols = 0;
  139.     int* isSorted;
  140.     isSorted = (int*)malloc(length * sizeof(int));
  141.  
  142.     Sort(length, matrix, &numOfCols, isSorted);
  143.  
  144.     Print(length, matrix, isSorted);
  145.     WriteInFile(matrix, length, isSorted, numOfCols);
  146.     printf("Number of sorted columns = %d\n", numOfCols);
  147.     return 0;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement