Advertisement
Guest User

C++ KOLOS

a guest
Jan 23rd, 2020
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.16 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.  
  30. int main()
  31. {
  32.     srand(time(0));
  33.  
  34.     MATRIX m = createRandomMatrix(5, 4);
  35.     displayMatrix(m);
  36.  
  37.     int* l = findLargest(m);
  38.     int* lR = findLargestRow(m);
  39.     int* lC = findLargestColumn(m);
  40.     printf("\nLargest: %d [%d][%d]\n\n", l[0], l[1], l[2]);
  41.     printf("Largest row number %d  (val. %d)\n", lR[1], lR[0]);
  42.     printf("Largest column number %d  (val. %d)\n\n", lC[1], lC[0]);
  43.  
  44.     POINT a, b;
  45.     printf("Podaj p. A wyciecia macierzy: ");
  46.     scanf("%d;%d", &a.x, &a.y);
  47.     printf("Podaj p. B wyciecia macierzy: ");
  48.     scanf("%d;%d", &b.x, &b.y);
  49.  
  50.     MATRIX n = cut(a, b, m);
  51.  
  52.     printf("\n\n");
  53.     displayMatrix(n);
  54.     printf("\n\n");
  55.  
  56.     return 0;
  57. }
  58.  
  59. MATRIX createRandomMatrix(int w, int h) {
  60.     MATRIX m;
  61.     m.w = w;
  62.     m.h = h;
  63.     m.e = malloc(sizeof(int) * w);
  64.     for (int i = 0 ; i < w ; i++)
  65.         m.e[i] = malloc(sizeof(int) * h);
  66.     for (int x = 0 ; x < w ; x++){
  67.         for (int y = 0 ; y < h ; y++){
  68.             m.e[x][y] = rand() % 10;
  69.         }
  70.     }
  71.     return m;
  72. }
  73.  
  74. void displayMatrix(MATRIX m) {
  75.     for (int x = 0 ; x < m.w ; x++){
  76.         for (int y = 0 ; y < m.h ; y++){
  77.             printf("%d ", m.e[x][y]);
  78.         }
  79.         printf("\n");
  80.     }
  81. }
  82.  
  83. int* findLargest(MATRIX m) {
  84.  
  85.     int largest = m.e[0][0], i = 0, j = 0;
  86.     for (int x = 0 ; x < m.w ; x++){
  87.         for (int y = 0 ; y < m.h ; y++){
  88.             if (m.e[x][y] > largest){
  89.                 largest = m.e[x][y];
  90.                 i = x;
  91.                 j = y;
  92.             }
  93.         }
  94.     }
  95.  
  96.     int* res = malloc(sizeof(int) * 3);
  97.     res[0] = largest;
  98.     res[1] = i;
  99.     res[2] = j;
  100.     return res;
  101. }
  102.  
  103. int* findLargestRow(MATRIX m) {
  104.  
  105.     int sum = 0, largest, largestRow;
  106.     short f = TRUE;
  107.  
  108.     for (int x = 0 ; x < m.w ; x++){
  109.  
  110.         for (int y = 0 ; y < m.h ; y++){
  111.             sum += m.e[x][y];
  112.         }
  113.  
  114.         if (f == TRUE){
  115.             largest = sum;
  116.             largestRow = x;
  117.             f = FALSE;
  118.         }
  119.         else {
  120.             if (sum > largest){
  121.                 largest = sum;
  122.                 largestRow = x;
  123.             }
  124.         }
  125.  
  126.         sum = 0;
  127.  
  128.     }
  129.  
  130.     int* res = malloc(sizeof(int) * 2);
  131.     res[0] = largest;
  132.     res[1] = largestRow;
  133.  
  134.     return res;
  135. }
  136.  
  137. int* findLargestColumn(MATRIX m) {
  138.  
  139.     int sum = 0, largest, largestRow;
  140.     short f = TRUE;
  141.  
  142.     for (int x = 0 ; x < m.h ; x++){
  143.  
  144.         for (int y = 0 ; y < m.w ; y++){
  145.             sum += m.e[y][x];
  146.         }
  147.  
  148.         if (f == TRUE){
  149.             largest = sum;
  150.             largestRow = x;
  151.             f = FALSE;
  152.         }
  153.         else {
  154.             if (sum > largest){
  155.                 largest = sum;
  156.                 largestRow = x;
  157.             }
  158.         }
  159.  
  160.         sum = 0;
  161.  
  162.     }
  163.  
  164.     int* res = malloc(sizeof(int) * 2);
  165.     res[0] = largest;
  166.     res[1] = largestRow;
  167.  
  168.     return res;
  169. }
  170.  
  171. MATRIX cut(POINT a, POINT b, MATRIX m) {
  172.  
  173.     MATRIX n;
  174.     if (a.x < 0 || a.y < 0 || b.x < 0 || b.y < 0){
  175.         n.w = NUMFORMATERROR;
  176.         return n;
  177.     }
  178.     if (a.x > b.x && a.y > b.y){
  179.         n.w = MAXMINERROR;
  180.         return n;
  181.     }
  182.     if (a.x > m.w || a.y > m.h || b.x > m.w || b.y > m.h){
  183.         n.w = OUTOFRANGEERROR;
  184.         return n;
  185.     }
  186.  
  187.     n.w = b.x - a.x + 1;
  188.     n.h = b.y - a.y + 1;
  189.     n.e = malloc(sizeof(int) * n.w);
  190.     for (int i = 0 ; i < n.w ; i++)
  191.         n.e[i] = malloc(sizeof(int) * n.h);
  192.  
  193.     int i = 0, j = 0; // x, y
  194.     for (int x = a.x ; x < b.x + 1 ; x++){
  195.         for (int y = a.y ; y < b.y + 1 ; y++){
  196.             n.e[i][j] = m.e[x][y];
  197.             j++;
  198.         }
  199.         i++;
  200.         j = 0;
  201.     }
  202.  
  203.     return n;
  204. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement