Текст програми. /*пiдпрограма обчислення визначника*/

 

#include <stdio.h>

#include <math.h>

/*пiдпрограма обчислення визначника*/

/*методом алгебраiчних доповнень*/

 

float det(float a[10][10],int n) {

int j,k,l,k1,l1,zn,n1;

float b[10][10],deter,d;

if (n==1) deter=a[0][0];

if (n==2) deter=a[0][0]*a[1][1]-a[0][1]*a[1][0];

if (n>2) {

deter=0;

for (j=0;j<n;j++) {

if (fmod(j,2)==0) zn=1;

else zn=-1;

k=1;l=0;n1=n-1;

for (k1=0;k1<n1;k1++,k++) {

l=0;

for (l1=0;l1<n1;l1++,l++) {

if (l1==j) l++;

b[k1][l1]=a[k][l];

};

};

d=det(b,n1);

deter+=a[0][j]*zn*d;

};

};

return(deter);

}

 

main () {

float a,mas[10][10];

int i,j,p;

FILE *res;

res=fopen("deter.txt","w");

printf("Введiть порядок визначника ");

scanf("%d",&p);

/*ввiд коефiцiентiв рiвняннь*/

for(i=0;i<p;i++) {

for(j=0;j<p;j++) {

scanf("%f",&a);

mas[i][j]=a;

};

};

fprintf(res,"Матриця\n");

for(i=0;i<p;i++) {

for(j=0;j<p;j++) fprintf(res," %5.2f",mas[i][j]);

fprintf(res,"\n");

};

a=det(mas,p);

fprintf(res,"визначник матрицi det=%5.3f\n ",a);

fclose(res);

}

Результат роботи програми

Матриця

3.00 6.00 4.00 1.00

7.00 0.00 4.00 3.00

2.00 5.00 7.00 9.00

3.00 7.00 4.00 2.00

визначник матрицi det=-308.000


 

Розв’язок системи рівнянь методом Крамера

Один з методів розв’язку системи лінійних рівнянь - правило Крамера. Використовуючи позначення попереднього розділу, вони формулюються так: якщо система лінійних рівнянь сумісна, то вона має єдиний розв’язок

a1=

де dj - визначник, одержаний із визначника системи d заміною j-го стовпця стовпцем із вільних членів системи рівнянь.

Представлена програма на мові С реалізує метод Крамера. Визначники обчислюються за тим же правилом, що й у попередньому розділі - з використанням рекурсії. Для порівняння, та ж система рівнянь розв’язана методом Крамера за допомогою пакету MathCad. Результати співпадають.