Advertisement
Guest User

Untitled

a guest
Oct 2nd, 2021
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.49 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. typedef struct {
  5.     int   n;
  6.     int **m;
  7. } Matrix;
  8.  
  9. Matrix MatNew(int n, int a, int l)
  10. {
  11.     Matrix mat = {
  12.         n,
  13.         (int **) malloc(n * sizeof(int *)),
  14.     };
  15.    
  16.     for(int i = n; i--; )
  17.     {
  18.         mat.m[i] = (int *) malloc(n * sizeof(int));
  19.        
  20.         for(int j = n; j--; )
  21.             mat.m[i][j] = a > 0 ? rand() % a + l : 0;
  22.     }
  23.    
  24.     return mat;
  25. }
  26.  
  27. void MatFree(Matrix *mat)
  28. {
  29.     for(int i = mat->n; i--; )
  30.         free(mat->m[i]);
  31.    
  32.     free(mat->m);
  33. }
  34.  
  35. void MatPrint(Matrix *mat, int t)
  36. {
  37.     for(int i = 0; i < mat->n; ++i)
  38.     {
  39.         for(int j = 0; j < mat->n; ++j)
  40.             printf("%*d", t, mat->m[i][j]);
  41.        
  42.         puts("");
  43.     }
  44. }
  45.  
  46. int MatZerosNum(Matrix *mat)
  47. {
  48.     int z = 0;
  49.    
  50.     for(int i = mat->n; i--; )
  51.         for(int j = mat->n; j--; )
  52.             z += !mat->m[i][j];
  53.    
  54.     return z;
  55. }
  56.  
  57. int MatMainMax(Matrix *mat)
  58. {
  59.     int max = mat->m[0][0];
  60.    
  61.     for(int i = mat->n; i-- > 1; )
  62.         if(mat->m[i][i] > max)
  63.             max = mat->m[i][i];
  64.    
  65.     return max;
  66. }
  67.  
  68. int MatSideMax(Matrix *mat)
  69. {
  70.     int n1  = mat->n - 1;
  71.     int max = mat->m[0][n1];
  72.    
  73.     for(int i = mat->n; i-- > 1; )
  74.         if(mat->m[i][n1 - i] > max)
  75.             max = mat->m[i][n1 - i];
  76.    
  77.     return max;
  78. }
  79.  
  80. int main(void)
  81. {
  82.     Matrix matrix = MatNew(10, 51, -25);
  83.    
  84.     printf("Matrix:\n\n");
  85.    
  86.     MatPrint(&matrix, 5);
  87.    
  88.     puts("");
  89.     printf("Zeros             = %d\n", MatZerosNum(&matrix));
  90.     printf("Main diagonal max = %d\n", MatMainMax(&matrix));
  91.     printf("Side diagonal max = %d\n", MatSideMax(&matrix));
  92.    
  93.     MatFree(&matrix);
  94.    
  95.     return 0;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement