Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>
- #include <math.h>
- #include <time.h>
- const int n=15 , m = 15;
- const float eps = 0.000000001;
- void vivodMAT(double A[n][n],int N,int M)
- {
- for (int i = 0; i < N; i++)
- {
- printf(" ( ");
- for (int j = 0; j < M; j++)
- {
- printf("\t%.2lf ",A[i][j]);
- }
- printf(")\n");
- }
- }
- void deter(double A[n][n],double e[n][n],int n)
- {
- double mesto,mesto1;
- double det = 1;
- for (int i =0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- if (j == i)
- e[i][j] = 1;
- else e[i][j] = 0;
- }
- }
- for (int i = 0; i < n; i++)
- {
- int imax = i;
- for (int j = i + 1; j < n; j++)
- {
- if (fabs(A[j][i])>fabs(A[imax][i]))
- imax = j;
- if (fabs(A[imax][i])<eps) {
- break; printf("Матрица вырождена;"); getchar();system("cls"); }
- }
- if (imax != i)
- {
- for (int j1 = 0; j1 < n; j1++)
- {
- mesto = A[i][j1];////////Для матрицы А
- A[i][j1] = A[imax][j1];
- A[imax][j1] = mesto;
- mesto1 = e[i][j1];///////Для ед.матрицы
- e[i][j1] = e[imax][j1];
- e[imax][j1] = mesto1;
- }
- det = - det;
- }
- double t = A[i][i];
- det *= t;
- for (int j1 = 0; j1 < n; j1++)
- {
- A[i][j1] /= t;
- e[i][j1] /= t;
- }
- for (int k = 0; k < n; k++)
- {
- if (k != i)
- {
- double t1 = A[k][i];
- for (int k1 = 0; k1 < n; k1++)
- {
- A[k][k1]-=t1 * A[i][k1];
- e[k][k1]-=t1 * e[i][k1];
- }
- }
- }
- }
- }
- void MATxX(double A[n][n],int n,int k)
- {
- for (int i =0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- A[i][j]*=k;
- }
- }
- }
- void MATxMAT(double A[n][n],double A1[n][n],double res[n][n],int N)
- {
- for (int i = 0; i < N; i++)
- {
- int j1 = 0;
- while(j1 < N)
- {
- for (int j =0; j < N; j++)
- {
- res[i][j1]+= A[i][j] * A1[j][j1];
- }
- j1++;
- }
- }
- }
- void MATminusMAT(double A[n][n],double A1[n][n],double res[n][n],int n)
- {
- for (int i = 0; i < n; i++)
- {
- for (int j = 0; j < n; j++)
- {
- res[i][j] = A[i][j] - A1[i][j];
- }
- }
- }
- int main ()
- {
- int m,N;
- setlocale(LC_ALL,"Rus");
- double A[n][n];
- double A1[n][n];
- double B[n][n];
- double e[n][n];////Обратная матрица
- double res[n][n];
- double res1[n][n];
- double res2[n][n];
- double res3[n][n];
- double x[n][n];
- int num;
- printf(" 1.Ввод вручную;\n");
- printf(" 2.Случайная генерация;\n");
- printf(" Выберите один из вариантов: ");
- scanf("%d",&num);
- if (num < 1 || num > 2) { system("cls"); printf(" Ошибка!!!\n\n"); }
- else {
- system("cls");
- printf(" Введите размерность А: "); scanf("%d",&N);
- printf(" Введите размерность В (Столбцов): "); scanf("%d",&m);
- getchar(); system("cls");
- switch(num)
- {
- case 2:
- {
- srand(time(NULL));
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < N; j++)
- {
- A[i][j] = rand()%51 + 1;
- A1[i][j] = A[i][j];
- }
- }
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < m; j++)
- {
- B[i][j] = rand()%51 + 1;
- }
- }
- break;
- }
- case 1:
- {
- printf("Введите значения матрицы A:\n");
- for (int i = 0; i < N; i++)
- {
- if(i > 0) printf("\n");
- for (int j = 0; j < N; j++)
- {
- scanf("%lf",&A[i][j]);
- A1[i][j] = A[i][j];
- }
- }
- system("cls");
- printf("Введите значения матрицы B:\n");
- for (int i = 0; i < N; i++)
- {
- if(i > 0) printf("\n");
- for (int j = 0; j < m; j++)
- {
- scanf("%lf",&B[i][j]);
- }
- }
- system("cls");
- break;
- }
- }
- printf("Матрица А: \n\n");
- vivodMAT(A,N,N);
- printf("\n\n\nМатрица В: \n\n");
- vivodMAT(B,N,m);
- printf("\n\n\nОбратная матрица: \n\n");
- deter(A,e,N);
- vivodMAT(e,N,N);
- printf("\n\n\nМатрица Х (E(обр) * B): \n\n");
- MATxMAT(e,B,x,N);
- vivodMAT(x,N,m);
- printf("\n\n\nПроверка: \n\n");
- printf(" matA * E(обр); \n\n");
- vivodMAT(A1,N,N);
- printf("\n * \n");
- vivodMAT(e,N,N);
- printf("\n = \n");
- MATxMAT(A1,e,res,N);
- vivodMAT(res,N,N);
- printf(" \nE(обр) * matA; \n\n");
- vivodMAT(e,N,N);
- printf("\n * \n");
- vivodMAT(A1,N,N);
- printf("\n = \n");
- MATxMAT(e,A1,res1,N);
- vivodMAT(res1,N,N);
- printf(" \nmatA * X; \n\n");
- vivodMAT(A1,N,N);
- printf("\n * \n");
- vivodMAT(x,N,N);
- printf("\n = \n");
- MATxMAT(A1,x,res2,N);
- vivodMAT(res2,N,m);
- printf(" \nA*X - B; \n\n");
- vivodMAT(res2,N,m);
- printf("\n - \n");
- vivodMAT(B,N,m);
- printf("\n = \n");
- MATminusMAT(res2,B,res3,N);
- vivodMAT(res3,N,m);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement