Код:
![Выделить весь код](images/misc/selectcode.png)
#ifndef matr_in_gauseH
#define matr_in_gauseH
//---------------------------------------------------------------------------
#endif
Вот но врядли он поможет
Вот как выглядит главная программа
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <string.h>
#include <Sysutils.hpp>
#include "main_matr_gause.h"
#include "matr_in_gause.h"
#include <stdio.h>
#include "form_help.h"
#include "form_rez.h"
#include "form_save_rez.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CSPIN"
#pragma resource "*.dfm"
#define N 5
double mas3[N][N];
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N1Click(TObject *Sender)
{
//Проверка на наличие элементов в матрице
//Если элементов нет , ф-я завершает работу
int i, j, w, v;
double mas1[N][N],mas2[N][N];
TForm3* ID3 = new TForm3(this);
//задание положения Form3 на экране
ID3->Left=179;
ID3->Top=113;
ID3->Height=180;
ID3->Width=356;
//формирование входной матрицы a[n*n]
a=new double[StringGrid1->ColCount*StringGrid1->ColCount];
for(i=0; i < StringGrid1->ColCount; i++)
for(j=0; j< StringGrid1->RowCount; j++)
{
if(StringGrid1->Cells[j][i]!="")
*(a+i*StringGrid1->RowCount+j)=StrToFloat(StringGrid1->Cells[j][i]);
else *(a+i*StringGrid1->RowCount+j)=0;
//Если не ввести элемент, то ему присваивается 0
mas1[i][j]=*(a+i*StringGrid1->RowCount+j);
}
//вычисление обратнй матрицы методом Гаусса
pr= matr_inv_gause(a,StringGrid1->RowCount);
//отображение результатов вычисления обратной матрицы
if(pr==0)
{
for(i=0; i < StringGrid2->ColCount; i++)
for(j=0; j< StringGrid2->RowCount; j++)
{
StringGrid2->Cells[i][j]=FloatToStrF(*(a+j*StringGrid2->RowCount+i),ffFixed,10,4);
mas2[i][j]=*(a+i*StringGrid2->RowCount+j);
}
//нахождение матрицы умножения исходной на обратную.
for(v=0; v < StringGrid3->ColCount; v++)
{
for(w=0; w< StringGrid3->RowCount; w++)
{
mas3[v][w]=0;
for(i=0; i < StringGrid1->ColCount; i++)
{
mas3[v][w]=mas3[v][w]+mas1[v][i]*mas2[i][w];
}
StringGrid3->Cells[v][w]=FloatToStrF(mas3[v][w],ffFixed,10,4);
StringGrid3->Cells[i][j]="";
}
}
}
//анализ корректности вычисления обратной матрицы
if(pr==2)
{
for(i=0; i < StringGrid2->ColCount; i++)
for(j=0; j< StringGrid2->RowCount; j++)
{
StringGrid2->Cells[i][j]="";
StringGrid3->Cells[i][j]="";
}
ID3->ShowModal();
}
ID3->Free();
//
//
}
//---------------------------------------------------------------------------
void __fastcall TForm1::CSpinEdit1Change(TObject *Sender)
{
int i;
if (CSpinEdit1->Value > 5 ) return;
//pедактированиe таблицы
StringGrid1->EditorMode=true;
//задание размерности входной матрицы
StringGrid1->ColCount=CSpinEdit1->Value;
StringGrid1->RowCount=CSpinEdit1->Value;
//редактированиe таблицы
StringGrid2->EditorMode=false;
//задание размерности выходной матрицы
StringGrid2->ColCount=CSpinEdit1->Value;
StringGrid2->RowCount=CSpinEdit1->Value;
StringGrid3->EditorMode=false;
//задача выходной матрицы умножения обратной на исходную
StringGrid3->ColCount=CSpinEdit1->Value;
StringGrid3->RowCount=CSpinEdit1->Value;
//очистка ячеек таблицы
for(int i = 0; i < StringGrid1->ColCount; i++)
for(int j = 0; j < StringGrid1->ColCount; j++)
StringGrid2->Cells[i][j] ="";
for(int i = 0; i < StringGrid1->ColCount; i++)
for(int j = 0; j < StringGrid1->ColCount; j++)
StringGrid3->Cells[i][j] ="";
for(int v = 0; v < StringGrid3->ColCount; v++)
for(int w= 0; w < StringGrid3->ColCount; w++)
StringGrid3->Cells[v][w] ="";
//очистка ячеек таблицы
for(int i = 0; i < StringGrid2->ColCount; i++)
for(int j = 0; j < StringGrid2->ColCount; j++)
StringGrid2->Cells[i][j] ="";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
delete[] a;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{ float
x=450,y=750;
//задание положения MainForm (Form1) на экране
Form1->Left=23;
Form1->Top=83;
Form1->Height=x;
Form1->Width=y;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N6Click(TObject *Sender)
{
TForm2* ID2 = new TForm2(this);
//задание положения Form2 на экране
ID2->Left=56;
ID2->Top=118;
ID2->Height=264;
ID2->Width=290;
//отображение Form2 на экране
ID2->ShowModal();
ID2->Free();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
FILE *h;
String name_file_save;
int i, j;
TForm4* ID4 = new TForm4(this);
//задание положения Form4 на экране
ID4->Left=189;
ID4->Top=112;
ID4->Height=159;
ID4->Width=364;
//выбор имени файла для записи результатов счета
SaveDialog1->Title="Введите или выберите имя файла для записи результатов счета";
SaveDialog1->Filter= "Text. files (*.txt)|*.txt";
if(SaveDialog1->Execute())
{
name_file_save = SaveDialog1->FileName;
}
//открытие файла для записи результатов счета
if ((h = fopen(name_file_save.c_str(),"w"))
== NULL)
{
fprintf(stderr, "Cannot open input file.\n");
return ;
}
if(pr == 0)
{
fprintf(h,"Обратная матрица, вычисленная методом Гаусса\n");
//запись в файл обратной матрицы
for(i=0; i<StringGrid1->RowCount; i++)
{
for(j=0; j<StringGrid1->RowCount; j++)
fprintf(h,"%20.12g",*(a+i*StringGrid1->RowCount+j));
fprintf(h,"\n");
}
}
if(pr==2)
fprintf(h,"Матрица близка к вырождению.\n");
//закрытие файла для записи результатов счета
fclose(h);
ID4->ShowModal();
ID4->Free();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N4Click(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------