////////////////////////////////////////////////////////////////////////////
// File : Lab061.cpp //
// Problem: //
// ђҐиЁвм бЁб⥬г га*ў*Ґ*Ё© ¬Ґв®¤®¬ †®а¤***. //
// a11x1+a12x2+a13x3+...+a1nxn=b1; //
// a21x1+a22x2+a23x3+...+a2nxn=b2; //
// ..............................; //
// an1x1+an2x2+an3x3+...+annxn=bn; //
// Author : Џ«®в*ЁЄ®ў „.Ђ. Ја. 19-11 //
// Date* : 20.12.2006 //
////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
const Nmax = 6;
double b[Nmax][Nmax+1], a[Nmax][Nmax+1], x[Nmax], c[Nmax][Nmax+1];
double si[Nmax];
int sum, ii, v, i, j, N, s, k, e, q, p;
bool flag;
double y[Nmax-1];
//////////////////////////
// Function Read Matrix //
//////////////////////////
void ReadMatrix () {
for (i = 0; i <= N-1; i++)
for (j = 0; j <= N; j++)
{
printf("A[%d][%d] = ",i,j);
scanf("%lf",&a[j]);
c[j] = a[j];
}
printf("\n");
return;
}
///////////////////////////
// Function Write Matrix //
///////////////////////////
void WriteMatrix () {
printf("бЁб⥬* га*ў*Ґ*Ё© Ё¬ҐҐв ўЁ¤ :\n");
for (i = 0; i <= N-1; i++)
{
for (j = 0; j <= N; j++)
printf("%3.1lf ",a[j]);
printf("\n");
}
printf("\n");
return;
}
int main()
{
int w1, w2;
q = p = e = 0;
flag = false;
do
{
printf("Љ®«ЁзҐбвў® га*ў*Ґ*Ё© ў бЁб⥬Ґ = ");
scanf("%d",&N);
}
while ((N < 0) && (N >= Nmax));
ReadMatrix();
WriteMatrix();
/////////////
// Zhordan //
/////////////*
for (k = 0; k <= N-1; k++)
{
for (i = 0; i <= N-1; i++)
{
for (j = 0; j <= N-1; j++)
{
if (a[q]==0)
flag = true;
else if (i != q)
{
if (i != p)
b[j] = a[j] - a*a[q][j]/a[q];
else
b[j] = 0;
b[N] = a[N] - a*a[q][N]/a[q];
}
else
{
b[q][j] = a[q][j];
b[q][N] = a[q][N];
}
}
if (flag) break;
}
if (flag) break;
w2 = 0;
for (i = 0; i <= N-1; i++)
{
ii = 0;
for (v = 0; v <= N-1; v++)
{
w1 = 0;
if (ii != si[v])
{
w1 = 1;
break;
}
else
if (ii <= N-1)
ii++;
if (w1) break;
}
w2 = 0;
for (j = 0;j <= N-1; j++)
if ((b[j] != 0) && (j - p == 1) && (w1 == 1))
{
p = j;
si[k+1] = q = ii;
w2 = 1;
break;
}
if (w2) break;
}
for (i = 0; i <= N-1; i++)
for (j = 0; j <= N; j++)
a[j] = b[j];
}
for (i = 0; i <= N-1; i++)
for (j = 0; j <= N; j++)
if (b[j] != 0)
e++;
////////////////////////////
// Verification of system //
////////////////////////////
if (e > 2*N || flag==true)
{
printf("‘Ёб⥬* *Ґб®ў¬ҐбвЁ¬*!\n");
flag = true;
}
else
printf("®вўҐв : \n");
for (k = 0;k <= N-1; k++)
{
for (i=0;i<=N-1;i++)
for (j = 0; j <= N-1; j++)
if (b[j] != 0)
x = b[N]/b[j];
printf("x[%d] = %lf\n",k,x[k]);
}
//////////////////////////////
//Verification of solutions //
//////////////////////////////
if (flag != true)
{
printf("Їа®ўҐаЄ* аҐиҐ*Ё© бЁб⥬л : \n");
for (k = 0; k <= N-1; k++)
{
s = 0;
for (i = 0; i <= N-1; i++)
for (j = 0; j <= N; j++)
{
if (i != N)
y = s + c[j]*x[j];
else
y = s - c[j];
}
printf(">%lf = 0\n",y[k]);
}
}
return 0;
}
Решение СЛАУ методом Жордана
Необходимо решить СЛАУ методом Жордана, язык С++/Paskal. Если у кого-нибуть есть - выложите пжлста - буду очень благодарен:)
Лаба написана очень коряво, но работает (сам сдавал). Проверял