Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- typedef struct {
- int n;
- int **m;
- } Matrix;
- Matrix MatNew(int n, int a, int l)
- {
- Matrix mat = {
- n,
- (int **) malloc(n * sizeof(int *)),
- };
- for(int i = n; i--; )
- {
- mat.m[i] = (int *) malloc(n * sizeof(int));
- for(int j = n; j--; )
- mat.m[i][j] = a > 0 ? rand() % a + l : 0;
- }
- return mat;
- }
- void MatFree(Matrix *mat)
- {
- for(int i = mat->n; i--; )
- free(mat->m[i]);
- free(mat->m);
- }
- void MatPrint(Matrix *mat, int t)
- {
- for(int i = 0; i < mat->n; ++i)
- {
- for(int j = 0; j < mat->n; ++j)
- printf("%*d", t, mat->m[i][j]);
- puts("");
- }
- }
- int MatZerosNum(Matrix *mat)
- {
- int z = 0;
- for(int i = mat->n; i--; )
- for(int j = mat->n; j--; )
- z += !mat->m[i][j];
- return z;
- }
- int MatMainMax(Matrix *mat)
- {
- int max = mat->m[0][0];
- for(int i = mat->n; i-- > 1; )
- if(mat->m[i][i] > max)
- max = mat->m[i][i];
- return max;
- }
- int MatSideMax(Matrix *mat)
- {
- int n1 = mat->n - 1;
- int max = mat->m[0][n1];
- for(int i = mat->n; i-- > 1; )
- if(mat->m[i][n1 - i] > max)
- max = mat->m[i][n1 - i];
- return max;
- }
- int main(void)
- {
- Matrix matrix = MatNew(10, 51, -25);
- printf("Matrix:\n\n");
- MatPrint(&matrix, 5);
- puts("");
- printf("Zeros = %d\n", MatZerosNum(&matrix));
- printf("Main diagonal max = %d\n", MatMainMax(&matrix));
- printf("Side diagonal max = %d\n", MatSideMax(&matrix));
- MatFree(&matrix);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement