Advertisement
Guest User

C KOLOS SAVE/LOAD

a guest
Jan 23rd, 2020
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.91 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define MATRIX struct matrix
  6. #define POINT struct point
  7. #define TRUE 1
  8. #define FALSE 0
  9. #define MAXMINERROR -1;
  10. #define OUTOFRANGEERROR -2;
  11. #define NUMFORMATERROR -3;
  12.  
  13. MATRIX {
  14.     int w,h;
  15.     int** e;
  16. };
  17.  
  18. POINT {
  19.     int x,y;
  20. };
  21.  
  22. MATRIX createRandomMatrix(int, int);
  23. void displayMatrix(MATRIX);
  24. int* findLargest(MATRIX);
  25. int* findLargestRow(MATRIX);
  26. int* findLargestColumn(MATRIX);
  27. MATRIX cut(POINT, POINT, MATRIX);
  28. void save(MATRIX);
  29. MATRIX load();
  30.  
  31. int main()
  32. {
  33.     srand(time(0));
  34.  
  35.     //MATRIX m = createRandomMatrix(5, 4);
  36.     MATRIX m = load();
  37.     displayMatrix(m);
  38.     save(m);
  39.  
  40.     int* l = findLargest(m);
  41.     int* lR = findLargestRow(m);
  42.     int* lC = findLargestColumn(m);
  43.     printf("\nLargest: %d [%d][%d]\n\n", l[0], l[1], l[2]);
  44.     printf("Largest row number %d  (val. %d)\n", lR[1], lR[0]);
  45.     printf("Largest column number %d  (val. %d)\n\n", lC[1], lC[0]);
  46.  
  47.     POINT a, b;
  48.     printf("Podaj p. A wyciecia macierzy: ");
  49.     scanf("%d;%d", &a.x, &a.y);
  50.     printf("Podaj p. B wyciecia macierzy: ");
  51.     scanf("%d;%d", &b.x, &b.y);
  52.  
  53.     MATRIX n = cut(a, b, m);
  54.  
  55.     printf("\n\n");
  56.     displayMatrix(n);
  57.     printf("\n\n");
  58.  
  59.     return 0;
  60. }
  61.  
  62. MATRIX createRandomMatrix(int w, int h) {
  63.     MATRIX m;
  64.     m.w = w;
  65.     m.h = h;
  66.     m.e = malloc(sizeof(int) * w);
  67.     for (int i = 0 ; i < w ; i++)
  68.         m.e[i] = malloc(sizeof(int) * h);
  69.     for (int x = 0 ; x < w ; x++){
  70.         for (int y = 0 ; y < h ; y++){
  71.             m.e[x][y] = rand() % 10;
  72.         }
  73.     }
  74.     return m;
  75. }
  76.  
  77. void displayMatrix(MATRIX m) {
  78.     for (int x = 0 ; x < m.w ; x++){
  79.         for (int y = 0 ; y < m.h ; y++){
  80.             printf("%d ", m.e[x][y]);
  81.         }
  82.         printf("\n");
  83.     }
  84. }
  85.  
  86. int* findLargest(MATRIX m) {
  87.  
  88.     int largest = m.e[0][0], i = 0, j = 0;
  89.     for (int x = 0 ; x < m.w ; x++){
  90.         for (int y = 0 ; y < m.h ; y++){
  91.             if (m.e[x][y] > largest){
  92.                 largest = m.e[x][y];
  93.                 i = x;
  94.                 j = y;
  95.             }
  96.         }
  97.     }
  98.  
  99.     int* res = malloc(sizeof(int) * 3);
  100.     res[0] = largest;
  101.     res[1] = i;
  102.     res[2] = j;
  103.     return res;
  104. }
  105.  
  106. int* findLargestRow(MATRIX m) {
  107.  
  108.     int sum = 0, largest, largestRow;
  109.     short f = TRUE;
  110.  
  111.     for (int x = 0 ; x < m.w ; x++){
  112.  
  113.         for (int y = 0 ; y < m.h ; y++){
  114.             sum += m.e[x][y];
  115.         }
  116.  
  117.         if (f == TRUE){
  118.             largest = sum;
  119.             largestRow = x;
  120.             f = FALSE;
  121.         }
  122.         else {
  123.             if (sum > largest){
  124.                 largest = sum;
  125.                 largestRow = x;
  126.             }
  127.         }
  128.  
  129.         sum = 0;
  130.  
  131.     }
  132.  
  133.     int* res = malloc(sizeof(int) * 2);
  134.     res[0] = largest;
  135.     res[1] = largestRow;
  136.  
  137.     return res;
  138. }
  139.  
  140. int* findLargestColumn(MATRIX m) {
  141.  
  142.     int sum = 0, largest, largestRow;
  143.     short f = TRUE;
  144.  
  145.     for (int x = 0 ; x < m.h ; x++){
  146.  
  147.         for (int y = 0 ; y < m.w ; y++){
  148.             sum += m.e[y][x];
  149.         }
  150.  
  151.         if (f == TRUE){
  152.             largest = sum;
  153.             largestRow = x;
  154.             f = FALSE;
  155.         }
  156.         else {
  157.             if (sum > largest){
  158.                 largest = sum;
  159.                 largestRow = x;
  160.             }
  161.         }
  162.  
  163.         sum = 0;
  164.  
  165.     }
  166.  
  167.     int* res = malloc(sizeof(int) * 2);
  168.     res[0] = largest;
  169.     res[1] = largestRow;
  170.  
  171.     return res;
  172. }
  173.  
  174. MATRIX cut(POINT a, POINT b, MATRIX m) {
  175.  
  176.     MATRIX n;
  177.     if (a.x < 0 || a.y < 0 || b.x < 0 || b.y < 0){
  178.         n.w = NUMFORMATERROR;
  179.         return n;
  180.     }
  181.     if (a.x > b.x && a.y > b.y){
  182.         n.w = MAXMINERROR;
  183.         return n;
  184.     }
  185.     if (a.x > m.w || a.y > m.h || b.x > m.w || b.y > m.h){
  186.         n.w = OUTOFRANGEERROR;
  187.         return n;
  188.     }
  189.  
  190.     n.w = b.x - a.x + 1;
  191.     n.h = b.y - a.y + 1;
  192.     n.e = malloc(sizeof(int) * n.w);
  193.     for (int i = 0 ; i < n.w ; i++)
  194.         n.e[i] = malloc(sizeof(int) * n.h);
  195.  
  196.     int i = 0, j = 0; // x, y
  197.     for (int x = a.x ; x < b.x + 1 ; x++){
  198.         for (int y = a.y ; y < b.y + 1 ; y++){
  199.             n.e[i][j] = m.e[x][y];
  200.             j++;
  201.         }
  202.         i++;
  203.         j = 0;
  204.     }
  205.  
  206.     return n;
  207. }
  208.  
  209. void save(MATRIX m) {
  210.     FILE* f = fopen("matrix.txt", "w");
  211.     fprintf(f, "%d %d\n", m.w, m.h);
  212.     for (int x = 0 ; x < m.w ; x++) {
  213.         for (int y = 0 ; y < m.h ; y++) {
  214.             fprintf(f, "%d\t", m.e[x][y]);
  215.         }
  216.         fprintf(f, "\n");
  217.     }
  218.     fclose(f);
  219. }
  220.  
  221. MATRIX load(){
  222.     FILE* f = fopen("matrix.txt", "r");
  223.     MATRIX m;
  224.  
  225.     fscanf(f, "%d %d\n", &m.w, &m.h);
  226.  
  227.     m.e = malloc(sizeof(int) * m.w);
  228.     for (int i = 0 ; i < m.w ; i++)
  229.         m.e[i] = malloc(sizeof(int) * m.h);
  230.  
  231.     for (int x = 0 ; x < m.w ; x++) {
  232.         for (int y = 0 ; y < m.h ; y++) {
  233.             fscanf(f, "%d\t", &m.e[x][y]);
  234.         }
  235.     }
  236.  
  237.     fclose(f);
  238.     return m;
  239. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement