Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Compiled on Windows OS using CodeBlocks
- #include <stdio.h>
- #include <stdlib.h>
- #include <windows.h>
- void max_min_elem(int **matrix, int a); //1
- void transpone_B(int **matrix, int b_row, int b_col); //2
- void multiply(int **matrixA, int **matrixB, int a, int b_row, int b_col); //3
- void row_A(int *matrix, int a); //4
- void sum_row_col(int **matrixA, int **matrixB, int a, int b_row, int b_col);//5
- int main()
- {
- int a, b_row, b_col, i, j, ch, ch_m, a_num, main_wh;
- printf("\t\t\t\t Lab 5\n\t\tWork with two-dimensional dynamic arrays");
- fflush(stdout); // Ponty
- Sleep(1000);
- printf("\n\nG");
- fflush(stdout);
- Sleep(1000);
- printf("o");
- fflush(stdout);
- Sleep(1000);
- printf("o");
- fflush(stdout);
- Sleep(1000);
- printf("d");
- fflush(stdout);
- Sleep(1000);
- printf(" l");
- fflush(stdout);
- Sleep(1000);
- printf("u");
- fflush(stdout);
- Sleep(1000);
- printf("c");
- fflush(stdout);
- Sleep(1000);
- printf("k");
- fflush(stdout);
- Sleep(1000);
- printf("!");
- do
- {
- printf("\n\nEnter side of square matrix A: ");
- fflush(stdin);
- scanf("%d", &a);
- if (a<1) printf("How do you imagine matrix [%d][%d]? Try again!\n", a, a);
- } while (a<1);
- do
- {
- printf("Enter ROWs value of matrix B: ");
- fflush(stdin);
- scanf("%d", &b_row);
- printf("Enter COLumns value of matrix B: ");
- fflush(stdin);
- scanf("%d", &b_col);
- if (b_row<1 || b_col<1) printf("How do you imagine matrix [%d][%d]? Try again!\n", b_row, b_col);
- } while (b_row<1 || b_col<1);
- printf("\nWhat are you prefer?\n1. Enter matrix elements by hand\n2. Automatic assignation\nYour choice: ");
- scanf("%d", &ch);
- int **matrix_A = (int **)malloc(a*sizeof(int *));
- if (!matrix_A)
- {
- printf("Error of memory allocation");
- exit(1);
- }
- for (i = 0; i<a; i++)
- {
- matrix_A[i] = (int *)malloc(a*sizeof(int)); // Pamyat' dlya stolbcov v kajdom ryadu
- if (!matrix_A[i])
- {
- printf("Error of memory allocation");
- exit(1);
- }
- }
- int **matrix_B = (int **)malloc(b_row*sizeof(int *));
- if (!matrix_B)
- {
- printf("Error of memory allocation");
- exit(1);
- }
- for (i = 0; i<b_row; i++)
- {
- matrix_B[i] = (int *)malloc(b_col*sizeof(int *));
- if (!matrix_B[i])
- {
- printf("Error of memory allocation");
- exit(1);
- }
- }
- if (ch == 1)
- {
- printf("\n\nYou select [HAND MAKE] input\n\n");
- printf("Assignation of matrix A:\n\n");
- for (i = 0; i<a; i++)
- {
- for (j = 0; j<a; j++)
- {
- //do
- //{
- printf("Enter value in matrix socket [%d][%d] : ", i, j);
- fflush(stdin);
- scanf("%d", &matrix_A[i][j]);
- //if (matrix_A[i][j]<0) printf("Value must be positive(or zero). Try again!\n");
- //}
- //while(matrix_A[i][j]<0);
- }
- }
- printf("\nAssignation of matrix B:\n\n");
- for (i = 0; i<b_row; i++)
- {
- for (j = 0; j<b_col; j++)
- {
- printf("Enter value in matrix socket [%d][%d] : ", i, j);
- scanf("%d", &matrix_B[i][j]);
- }
- }
- }
- else if (ch == 2)
- {
- printf("\nYou select [INITIALIZATION]\n");
- printf("\nAssignation of matrix A:\t[#");
- fflush(stdout);
- Sleep(1000);
- printf("#####");
- fflush(stdout);
- Sleep(1000);
- printf("#####");
- fflush(stdout);
- Sleep(1000);
- printf("###### - 100%%]");
- fflush(stdout);
- Sleep(1000);
- for (i = 0; i<a; i++)
- {
- for (j = 0; j<a; j++)
- {
- matrix_A[i][j] = (i + j);
- }
- }
- printf("\nAssignation of matrix B:\t[#");
- fflush(stdout);
- Sleep(1000);
- printf("#####");
- fflush(stdout);
- Sleep(1000);
- printf("#####");
- fflush(stdout);
- Sleep(1000);
- printf("###### - 100%%");
- fflush(stdout);
- Sleep(1000);
- for (i = 0; i<b_row; i++)
- {
- for (j = 0; j<b_col; j++)
- {
- matrix_B[i][j] = (i + j);
- }
- }
- }
- do
- {
- main_wh = 0;
- printf("\nOk, select the task for array processing:\n\t1. Max/min element of matrix A\n\t2. Transpose matrix B\n\t3. Find matrix A & B multiplication\n\t4. Sort row elements of massive A\n\t5. Sum of elements of A-rows & B-columns\n\t6. Exit\nYour choice: ");
- scanf("%d", &ch_m);
- switch (ch_m)
- {
- case 1:
- max_min_elem(matrix_A, a);
- break;
- case 2:
- transpone_B(matrix_B, b_row, b_col);
- break;
- case 3:
- multiply(matrix_A, matrix_B, a, b_row, b_col);
- break;
- case 4:
- printf("\nSource massive A:\n\n");
- for (i = 0; i<a; i++) // put mtrx A
- {
- for (j = 0; j<a; j++)
- {
- printf("%d ", matrix_A[i][j]);
- }
- printf("\n\n");
- }
- printf("Select row of matrix A(from 0 to %d) to sort: ", (a - 1));
- scanf("%d", &a_num);
- int *matrix_Sngl = (int *)malloc(a*sizeof(int));
- if (!matrix_Sngl)
- {
- printf("Error of memory allocation");
- exit(1);
- }
- for (j = 0; j<a; j++)
- {
- matrix_Sngl[j] = matrix_A[a_num][j];
- }
- row_A(matrix_Sngl, a);
- free(matrix_Sngl);
- break;
- case 5:
- sum_row_col(matrix_A, matrix_B, a, b_row, b_col);
- break;
- case 6:
- printf("\nYou selected exit");
- main_wh = 0;
- break;
- default:
- exit(1);
- }
- if (main_wh == 0)
- {
- printf("\n\nDo you want to select another task?(1-yes/2-no)\nYour answer: ");
- fflush(stdin);
- scanf("%d", &main_wh);
- }
- if (main_wh != 1)
- {
- printf("\nGood bye!");
- free(matrix_A);
- free(matrix_B);
- }
- } while (main_wh == 1);
- return 0;
- }
- void max_min_elem(int **matrix, int a)
- {
- int i, j, f, k, max_val = -32768, min_val, reserv;
- printf("\n\nMatrix A:\n\n");
- for (i = 0; i<a; i++) // Output
- {
- for (j = 0; j<a; j++)
- {
- printf("%d ", matrix[i][j]);
- }
- printf("\n\n");
- }
- for (i = 0; i<a; i++) // Biggest
- {
- for (j = 0; j<a; j++)
- {
- if (matrix[i][j]>max_val) max_val = matrix[i][j];
- }
- }
- printf("Biggest matrix value: %d", max_val);
- if (a == 1)
- {
- min_val = matrix[0][0];
- }
- else
- {
- for (i = 0; i<a; i++) // All min - to right...
- {
- for (j = i, f = 0; j<a; j++, f++) // j=i above main diagonal
- {
- for (k = i; k<(a - 1 - f); k++) // (a-1-f) - Skolko raz ostalos slravnivat f - skolko min values na svoih mestah
- {
- if (matrix[i][j]<matrix[i][j + 1])
- {
- reserv = matrix[i][j + 1];
- matrix[i][j + 1] = matrix[i][j];
- matrix[i][j] = reserv;
- }
- }
- }
- }
- }
- if (a != 1)
- {
- for (i = 0; i<(a - 1); i++) // Samyu MIN budet vnizu
- {
- for (j = (a - 1); j<a; j++)
- {
- if (matrix[i][j]<matrix[i + 1][j])
- {
- reserv = matrix[i + 1][j];
- matrix[i + 1][j] = matrix[i][j];
- matrix[i][j] = reserv;
- }
- min_val = matrix[i + 1][j];
- }
- }
- }
- printf("\nSmollest matrix value(diagonal + above main diagonal): %d", min_val);
- }
- void transpone_B(int **matrix, int b_row, int b_col)
- {
- int B_t[b_col][b_row];
- int i, j;
- printf("\n\nSource matrix:\n\n");
- for (i = 0; i<b_row; i++) // Source matrix
- {
- for (j = 0; j<b_col; j++)
- {
- printf("%d ", matrix[i][j]);
- }
- printf("\n\n");
- }
- for (i = 0; i<b_row; i++)
- {
- for (j = 0; j<b_col; j++)
- {
- B_t[j][i] = matrix[i][j];
- }
- }
- printf("\nTransponed matrix:\n\n");
- for (i = 0; i<b_col; i++) // Transponed matrix
- {
- for (j = 0; j<b_row; j++)
- {
- printf("%d ", B_t[i][j]);
- }
- printf("\n\n");
- }
- }
- void multiply(int **matrixA, int **matrixB, int a, int b_row, int b_col)
- {
- int i, j, k, x1;
- int AB[a][b_col];
- printf("\n");
- printf("Matrix A: \n\n");
- for (i = 0; i<a; i++) // Source mtrx A
- {
- for (j = 0; j<a; j++)
- {
- printf("%d ", matrixA[i][j]);
- }
- printf("\n\n");
- }
- printf("\n");
- printf("Matrix B: \n\n");
- for (i = 0; i<b_row; i++) // Source mtrx B
- {
- for (j = 0; j<b_col; j++)
- {
- printf("%d ", matrixB[i][j]);
- }
- printf("\n\n");
- }
- if (a != b_row)
- {
- printf("Entered matrices can not be multiplied!");
- return;
- }
- else if (a == b_row)
- {
- for (j = 0; j<b_col; j++) // mtrx B columns
- {
- for (i = 0; i<a; i++) // a - rows in mtrx A
- {
- x1 = 0;
- for (k = 0; k<a; k++) // a - columns in mtrx A
- {
- x1 += matrixA[i][k] * matrixB[k][j];
- }
- AB[i][j] = x1;
- }
- }
- printf("\n");
- printf("Multiplied matrix: \n\n");
- for (i = 0; i<a; i++) // Output matrix(multiplied)
- {
- for (j = 0; j<b_col; j++)
- {
- printf("%d ", AB[i][j]);
- }
- printf("\n\n");
- }
- }
- }
- void sum_row_col(int **matrixA, int **matrixB, int a, int b_row, int b_col)
- {
- int val_A, val_B, i, j;
- printf("\n");
- printf("Matrix A: \n\n");
- for (i = 0; i<a; i++) // Output source matrix A
- {
- for (j = 0; j<a; j++)
- {
- printf("%d ", matrixA[i][j]);
- }
- printf("\n\n");
- }
- printf("\n");
- printf("Matrix B: \n\n");
- for (i = 0; i<b_row; i++) // Output source matrix B
- {
- for (j = 0; j<b_col; j++)
- {
- printf("%d ", matrixB[i][j]);
- }
- printf("\n\n");
- }
- printf("In matrix A:\n");
- for (i = 0; i<a; i++)
- {
- val_A = 0;
- for (j = 0; j<a; j++)
- {
- val_A += matrixA[i][j];
- }
- printf("\nSum of elements of %d row: %d", i, val_A);
- }
- printf("\n\nIn matrix B:\n");
- for (i = 0; i<b_col; i++)
- {
- val_B = 0;
- for (j = 0; j<b_row; j++)
- {
- val_B += matrixB[j][i];
- }
- printf("\nSum of elements of %d col: %d", i, val_B);
- }
- }
- void row_A(int *matrix, int a)
- {
- int i, j, reserv;
- printf("\nSelected row:\n");
- for (i = 0; i<a; i++)
- {
- printf("%d ", matrix[i]);
- }
- printf("\n\nSorted row:\n");
- for (i = 0; i<a; i++) // Sort
- {
- for (j = 0; j<(a - 1 - i); j++)
- {
- if (matrix[j]>matrix[j + 1])
- {
- reserv = matrix[j + 1];
- matrix[j + 1] = matrix[j];
- matrix[j] = reserv;
- }
- }
- }
- for (i = 0; i<a; i++)
- {
- printf("%d ", matrix[i]);
- }
- printf("\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement