Решение СЛАУ методом Крамера - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Нужно написать программу на СИ для решения СЛАУ с помощью метода Крамера. 2x1 - x2 + 3x3 + 2x4 = 4 2x1 + 3x2 + 3x3 + 2x4 = 6 3x1 - x2 - x3 + 2x4 = 6 3x1 - x2 + 3x3 - x4 = 6 Если кому не сложно, помогите плз.

Решение задачи: «Решение СЛАУ методом Крамера»

textual
Листинг программы
#include <stdio.h>
#include <conio.h>
 
const N=4;
//нахождение детерминанта
float Det(int G, double M[4][4])
{
 if (G == 1)
 return M[0][0];
 else
 {
     double M1[4][4];
     int i, x, X, Y;
     float Res = 0;
     for (i = 0; i < G; i++)
     {
         for (Y = 1; Y < G; Y++)
         {
             x = 0;
             for (X = 0; X < G; X++)
             if (X != i)
             M1[Y-1][x++] = M[Y][X];
         }
         if (i % 2 == 0)
         Res += M[0][i] * Det(G - 1, M1);
         else
         Res -= M[0][i] * Det(G - 1, M1);
     }
     return Res;
 }
}
//-----------------------------------------------------------------------------
 
//Вывод на экран матрицы
vyvod(double V[4][4])
{
    int i,j;
    for (i = 0; i < N; i++)
    for (j = 0; j < N; j++)
    {
        if (j==0) printf("\n");
        else printf("\t");
        printf("%7.2f", V[i][j]);
    }
    printf("\n");
}
 
//создание матрицы и нахождение  детерминанта 
podstanovka(int k, double M[4][4],double A[4][4],double B[4])
{   
    int i,j;    
    for (i=0; i<N; i++)
    for (j=0; j<N; j++)
    {
       M[i][j] = A[i][j];
    }
    for (i=0; i<N; i++)             //подстановка
    {                       //
                        //
        M[i][k] = B[i];             //
    }                       //
     float Opr = Det(4, M);
     return Opr;                                
}
 
 
 main( )
{
    int i,j; 
    double A[4][4]={{2,-1,3,2},
            {2,3,3,2},
            {3,-1,-1,2},
            {3,-1,3,-1}};
 
    double B[4]={4,6,6,6};
 
//Вывод на экран исходной матрицы
printf("\nVyvod ishodnoi matricy");
vyvod(A);
    
//------Нахождение определителя исходной матрицы--------------------------- 
    printf("\nVyvod determinanta ishodnoi matricy\n");
    float Op = Det(4, A);
    printf("Determinant = %7.2f\n", Op);
//------------------------------------------------------------------------- 
 
//***********************************
    //действия над новыми матрицами
    double M1[N][N];
    float Op1 = podstanovka(0, M1, A, B);
    printf("Determinant 1 = %7.2f\n", Op1);
    
    double M2[N][N];
    float Op2 = podstanovka(1, M2, A, B);
    printf("Determinant 2 = %7.2f\n", Op2);
    
    double M3[N][N];
    float Op3 = podstanovka(2, M3, A, B);
    printf("Determinant 3 = %7.2f\n", Op3);
    
    double M4[N][N];
    float Op4 = podstanovka(3, M4, A, B);
    printf("Determinant 4 = %7.2f\n", Op4);
   
 
// Вывод решения
printf("\nVyvod resheniya\n");
float x1 = Op1/Op;
printf("X1 = %7.2f\n", x1);
float x2 = Op2/Op;
printf("X2 = %7.2f\n", x2);
float x3 = Op3/Op;
printf("X3 = %7.2f\n", x3);
float x4 = Op4/Op;
printf("X4 = %7.2f\n", x4);
 
    system("pause");        
}

Объяснение кода листинга программы

  1. Объявление переменных и массивов:
    • N = 4 (размерность матрицы)
    • double M[4][4] (матрица размером 4x4 для хранения исходных данных)
    • double A[4][4] (матрица размером 4x4 для хранения исходных данных)
    • double B[4] (вектор размером 1x4 для хранения данных)
  2. В функции main():
    • Вывод исходной матрицы A с помощью функции vyvod(A)
    • Вычисление определителя исходной матрицы A с помощью функции Det(4, A) и вывод результата с помощью функции printf()
    • Создание новой матрицы M1 размером 4x4 с помощью функции podstanovka(0, M1, A, B) и вычисление определителя этой матрицы
    • Создание новой матрицы M2 размером 4x4 с помощью функции podstanovka(1, M2, A, B) и вычисление определителя этой матрицы
    • Создание новой матрицы M3 размером 4x4 с помощью функции podstanovka(2, M3, A, B) и вычисление определителя этой матрицы
    • Создание новой матрицы M4 размером 4x4 с помощью функции podstanovka(3, M4, A, B) и вычисление определителя этой матрицы
    • Вычисление значений x1, x2, x3 и x4 с помощью формулы xi = Opi / Op и вывод результатов с помощью функции printf()
  3. В функции Det():
    • Рекурсивный алгоритм для вычисления определителя матрицы. Если размерность матрицы равна 1, то возвращается значение элемента главной диагонали. В противном случае создается новая матрица M1, заполняемая значениями элементов исходной матрицы, исключая главный элемент. Затем рекурсивно вызывается функция Det() для M1. Если размерность матрицы четная, то к результату добавляется произведение главного элемента и определителя матрицы M1. Если размерность матрицы нечетная, то от результата нужно отнять произведение главного элемента и определителя матрицы M1.
  4. В функции podstanovka():
    • Создание новой матрицы M с помощью функции podstanovka()
    • Заполнение новой матрицы M значениями элементов исходной матрицы A
    • Подстановка в новую матрицу M элементов вектора B с помощью цикла for
    • Вычисление определителя новой матрицы M с помощью функции Det()
    • Возврат значения определителя новой матрицы M
  5. В функции vyvod():
    • Цикл for для вывода элементов матрицы на экран
    • Использование функции printf() для форматирования вывода
  6. В функции main() после вызова функции podstanovka() происходит вывод решения с помощью функции printf()

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.667 из 5
Похожие ответы