Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для D.Y.

Новый участник


Сообщения: 28
Благодарности: 5

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
#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();
}
//---------------------------------------------------------------------------

Отправлено: 18:39, 18-07-2008 | #39