Решение системы двух уравнений с двумя неизвестными методом Крамера - C (СИ)
Формулировка задачи:
нужно составить алгоритм на языке СИ, который бы решил систему двух уравнении с двумя неизвестными
Решение задачи: «Решение системы двух уравнений с двумя неизвестными методом Крамера»
textual
Листинг программы
#include <math.h>
#include <stdio.h>
int Kramer(float a11,float a12,
float a21,float a22,
float b1 ,float b2,
float *x ,float *y)
{
float det,detx,dety;
det =a11*a22-a12*a21;
detx=b1*a22-b2*a12;
dety=a11*b2-b1*a21;
if (fabs(det) > 1.0E-14)
{
*x=detx/det;
*y=dety/det;
return 0; /* единственное решение */
}
else
if ((fabs(detx) <1.0E-14) && (fabs(dety) <1.0E-14))
return 1; /* бесконечное множество решений */
else
return -1; /* решений нет */
}
int main(int argc, char* argv[])
{
float A11,A12,B1,A21,A22,B2,X,Y;
int rc;
printf("A11=");
scanf("%e",&A11);
printf("A12=");
scanf("%e",&A12);
printf("B1=");
scanf("%e",&B1);
printf("A21=");
scanf("%e",&A21);
printf("A22=");
scanf("%e",&A22);
printf("B2=");
scanf("%e",&B2);
rc=Kramer(A11,A12,A21,A22,B1,B2,&X,&Y);
if (rc == 0)
printf("X=%e\nY=%e\n",X,Y);
else
if (rc == 1)
printf("Infinite set of roots...\n");
else
printf("Set of roots is empty...\n");
return 0;
}
Объяснение кода листинга программы
- В функции
Kramerпроисходит решение системы двух уравнений методом Крамера. - В функции
mainосуществляется ввод данных для системы уравнений и вызов функцииKramer. - Если решение существует, то выводятся значения X и Y.
- Если решений бесконечное множество, то выводится сообщение
Infinite set of roots.... - Если решений нет, то выводится сообщение
Set of roots is empty....