۱- به دست آوردن ماتریس تحویل یافته سطری - پلکانی یک ماتریس m*n
۲- به دست آوردن ماتریس معکوس یک ماتریس مربعی n*n
۳- به دست آوردن جواب معادلات n معادله و n مجهول
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#define Max 10
/***************************************************/
void Moarrefi( void )
{
clrscr();
cout << "\t\t\t\tBe Name Khoda\n"
<< "\n\nBarname Nevis : Mohammad Hasani Eghtedar"
<< "\n\nShomare Daneshjooti : 83525013"
<< "\n\nReshteye Tahsili : Olume Computer"
<< "\n\nMaghtae Tahsili : Karshenasi"
<< "\n\nSale Tahsili : 1384 - 1385 Nimehye Avval"
<< "\n\nMahale Tahsil : Daneshgahe Dolatiye Qom"
<< "\n\nOstad : Doktor Shir Del"
<< "\n\nE-Mail : mhe_hm@yahoo.com"
<< "\n\nSite : http://www.ecqom.tk"
<< "\n\nPersional Blog : http://360.yahoo.com/mhe_hm"
<< "\n\n\n\n\t\t\t\tKelidi Ra Befesharid";
getch();
clrscr();
}
/***************************************************/
struct Node
{
float Roll, Port;
}A[Max][Max];
int m, n;
char Choise;
/***************************************************/
void PrintMatrix( struct Node D[Max][Max] )
{
int i, j, k = -1;
if( Choise == '2' )
k = n / 2;
else if( Choise == '3' )
k = n - 1;
for( i = 0; i <= n; i++ )
{
cout << "[" << i << "]\t";
if( ( k != -1 ) && ( i == k ) )
cout << "|\t";
}
for( i = 0; i < m; i++ )
{
cout << "\n\n[" << ( i+1 ) << "]";
for( j = 0; j < n; j++)
{
if( ( k != -1 ) && ( j == k ) )
cout << "\t|";
cout << "\t" << setprecision( 3 ) << D[i][j].Roll / D[i][j].Port;
}
}
}
/***************************************************/
int MinRenge( void )
{
int n1 = n;
if( Choise == '3' )
n1 = n - 1;
if( m < n1 )
return m;
return n1;
}
/***************************************************/
void ChengeRow( int k, int t )
{
int i;
struct Node temp[Max];
for( i = 0; i < n; i++ )
{
temp[i] = A[k][i];
A[k][i] = A[t][i];
A[t][i] = temp[i];
}
}
/***************************************************/
void Evaluate( int Min )
{
int i, j;
char Harf;
if( m >= n - 1 )
for( i = Min; i < m; i++ )
if( A[i][n - 1].Roll != 0 )
{
cout << "\n\nIn dastgah nasazegar boodeh va javab nadarad . Zira :";
break;
}
cout << "\n\nDastgahe Moadelat :\n\n";
for( i = 0; i < m; i++ )
{
Harf = 'a' + i;
if( i < Min )
{
cout << Harf ;
Harf = 'a' + Min - 1;
}
else
cout << '0';
for( j = Min; j < n - 1; j++ )
if( A[i][j].Roll != 0 )
{
if( ( A[i][j].Roll / A[i][j].Port ) >= 0 )
cout << " +";
cout << " " << A[i][j].Roll / A[i][j].Port << ++Harf;
}
else
Harf++;
cout << " = " << A[i][n - 1].Roll / A[i][n - 1].Port << "\n";
}
}
/***************************************************/
void G_J( void )
{
int i, j, k, t, Min;
Min = MinRenge();
for( k = 0; k < Min; k++ )
{
t = k + 1;
do
{
if( ( A[k][k].Roll == 0 ) && ( t < m ) )
ChengeRow( k, t++ );
else if( A[k][k].Roll == 0 )
{
cout << "\n\n# Matris R :\n\n";
PrintMatrix( A );
return;
}
}
while( A[k][k].Roll == 0 );
for( j = n-1; j >k ; j-- )
{
A[k][j].Roll = A[k][j].Roll * A[k][k].Port;
A[k][j].Port = A[k][j].Port * A[k][k].Roll;
}
A[k][k].Roll = A[k][k].Port = 1;
for( i = 0; i < m; i++ )
{
if( i != k )
{
for( j = k + 1; j < n; j++ )
{
A[i][j].Roll = ( A[i][j].Roll * A[k][j].Port * A[i][k].Port ) - ( A[i][j].Port * A[k][j].Roll * A[i][k].Roll );
A[i][j].Port = A[i][j].Port * A[k][j].Port * A[i][k].Port;
}
}
}
for( i = 0; i < m; i++ )
{
if( i != k )
{
A[i][k].Roll = 0;
A[i][k].Port = 1;
}
}
}
if( Choise == '1' )
cout << "\n\n# Matris [ R ] :\n\n";
else if( Choise == '2' )
cout << "\n\n# Matris [ I|A' ] :\n\n";
else
cout << "\n\n# Matris [ R|B' ] :\n\n";
PrintMatrix( A );
if( Choise == '3' )
Evaluate( Min );
}
/***************************************************/
void ReadMatrix( void )
{
int i, j;
cout << "Lotfan gozinehye morede nazar ra entekhab konid :\n\n"
<< "1: Be dast avardane matrise tahvili shodehye satri - pellekani\n"
<< "2: Be dast avardane matris makoos\n"
<< "3: Be dast avardane javab dastgahe moadelate be soorate ( Ax = B )";
Choise = getch();
clrscr();
if( ( Choise == '1' ) || ( Choise == '2' ) || ( Choise == '3' ) )
cout << "Lotfan renge matris [ A ] ra vared konid : ";
else
return;
if( Choise == '2' )
{
cin >> m;
n = m;
}
else
cin >> m >> n;
cout << "\nLotfan anasore matris [ A ] ra vared konid :\n\n";
cout << " i\t j\tMeghdar\n";
for( i = 0; i < m; i++ )
{
cout << "\n[" << ( i + 1 ) << "]";
for( j = 0; j < n; j++ )
do
{
cout << "\t[" << ( j + 1 ) << "]\t";
cin >> A[i][j].Roll;
cout << "\t\t /\n\t\t ";
cin >> A[i][j].Port;
if( A[i][j].Port == 0 )
cout << "\t\tERROR : Makhraj nemitavanad '0' bashad .\n";
}
while( A[i][j].Port == 0 );
}
if( Choise == '1' )
{
clrscr();
cout << "# Matris [ A ] :\n\n";
}
else if( Choise == '2' )
{
n = 2 * m;
for( i = 0; i < m; i++ )
A[i][i + 3].Roll = 1;
for( i = 0; i < m; i++ )
for( j = m; j < n; j++ )
A[i][j].Port = 1;
clrscr();
cout << "# Matris [ A|I ] :\n\n";
}
else
{
cout << "\nLotfan anasore matris [ B ] ra vared konid :\n\n";
for( i = 0; i < m; i++ )
{
cout << "[" << ( i + 1 ) << "]";
do
{
cout << "\t[" << ( j + 1 ) << "]\t";
cin >> A[i][n].Roll;
cout << "\t\t /\n\t\t ";
cin >> A[i][n].Port;
if( A[i][n].Port == 0 )
cout << "\t\tERROR : Makhraj nemitavanad '0' bashad .\n";
}
while( A[i][n].Port == 0 );
}
n++;
clrscr();
cout << "# Matris [ A|B ] :\n\n";
}
PrintMatrix( A );
getch();
G_J();
}
/***************************************************/
void main( void )
{
Moarrefi();
ReadMatrix();
getch();
}