Program na riešenie sústavy lineárnych rovníc typu 3x3 pomocou Cramerovho pravidla

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Category: Programs in C, C++

Author: ZSSR
Program: Cramer.c

Program na riešenie sústavy lineárnych rovníc typu 3x3 pomocou Cramerovho pravidla. Všetky premenné sú typu double.
#include <stdio.h>
#include <stdlib.h>
#define n 3
 
void Info()
{
     printf("***********************************************\n");
     printf("*Program na vypocet korenov riesenia sustavy  *\n");
     printf("*linearnych algebraickych rovnic Cramerovym   *\n");
     printf("*sposobom typu 3x3.                           *\n");
     printf("*                                             *\n");
     printf("*Autor:ZSSR      Licencia:free      Verzia:1.1*\n");
     printf("***********************************************\n\n");
}
 
void Vstup1(double matica[n][n])                 /* matica sustavy S */
{
     int i, j;
 
     for(i=0;i<n;i++){
                      printf("Zadaj postupne prvky %d. riadku matice 3x3:\n", (i+1));
                      for(j=0;j<n;j++) scanf("%lf", &matica[i][j]);
                      }
     printf("\n\n");
}
 
void Vstup2(double vektor[n])  /* vektor pravych stran */
{
     int i;
 
     printf("Zadaj postupne hodnoty vektora pravych stran:\n");
     for(i=0;i<n;i++) scanf("%lf", &vektor[i]);
     printf("\n\n");
}
 
double Determinant(double matica[n][n])   /* Sarussovo riesenie */
{
       double d1, d2, d3, det;
 
       d1=matica[0][0]*((matica[1][1]*matica[2][2])-(matica[2][1]*matica[1][2]));
       d2=matica[0][1]*(-1)*((matica[1][0]*matica[2][2])-(matica[2][0]*matica[1][2])); 
       d3=matica[0][2]*((matica[1][0]*matica[2][1])-(matica[2][0]*matica[1][1])); 
       det=d1+d2+d3;
 
       return det;
}
 
void Riesenie(double m[n][n], double b[n], double x[n], double D)  /* vysledok */
{
     int i, j;
     double doc[n], det;
 
     for(i=0;i<n;i++){
                      for(j=0;j<n;j++){
                                       doc[j]=m[j][i];
                                       m[j][i]=b[j];
                                       }
                     det=Determinant(m);
                     x[i]=det/D;
                     for(j=0;j<n;j++){
                                       m[j][i]=doc[j];
                                       }
                     }
}     
 
int main()
{
    double smatica[n][n], bvektor[n], xvektor[n], det;
 
    Info();
    Vstup1(smatica);
    det=Determinant(smatica);
    if(det!=0){
                               Vstup2(bvektor);
                               Riesenie(smatica, bvektor, xvektor, det);
                               printf("Riesenie: [%8.3lf, %8.3lf,", xvektor[0], xvektor[1]);
                               printf(" %8.3lf] \n\n", xvektor[2]); 
                               }
                               else {
                                    printf("Dane sustavy rovnic nemaju riesenie!\n\n");
                                    }
    system("pause");
    return 0;
}