Министерство образования и науки Российской Федерации
Федеральное агентство по образованию
Государственное образовательное учреждение
Высшего профессионального образования
«Комсомольский-на-Амуре государственный
Технический университет»
Факультет компьютерный технологий
Кафедра МОП_ЭВМ
ЛАБОРАТОРНАЯ РАБОТА №5
по дисциплине “ЧМВ”
Организация интерфейса для методов вычислений
Студентка группы 5ВТ-1
Преподаватель
2007
Задание:
Написать программу вычисляющую определитель матрицы.
#define INFIN 999999999
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include <math.h>
#include "matrix.h"
//--------------------------------------------------------------------------#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
TEdit***edts;
int num=0;
//--------------------------------------------------------------------------__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------------void __fastcall TForm1::Button1Click(TObject *Sender)
{
int i, j;
for (i = 0; i < num; i++)
for (j = 0; j < num; j++)
delete edts[i][j];
num = Form1->Edit1->Text.ToInt(); //Считываем введённый порядок матрицы из Edit1
LockWindowUpdate(Form1->Handle); // Для обновления формы
edts = new TEdit **[num * num]; //Создаём в классе TEdit переменную edtsх[][]
//После определения порядка матрицы выводим ячейки для заполнения матрицы
for (i = 0; i < num; i++)
{
edts[i] = new TEdit *[num];
for (j = 0; j < num; j++)
{
//Определяем местонахождение и значение ячеек (0) на форме
edts[i][j] = new TEdit(this);
edts[i][j]->Parent = Form1;
edts[i][j]->Width = 40;
edts[i][j]->Height = 20;
edts[i][j]->Left = j * edts[i][j]->Width + 40;
edts[i][j]->Top = i * edts[i][j]->Height + 100;
edts[i][j]->Text = "0";
}
}
LockWindowUpdate(0);
}
//--------------------------------------------------------------------------//Вычисляем определитель матрицы
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int i, j;
double **a;
a = new double *[num];
//Создаем двумерный массив для матрицы а[][]
for (i = 0; i < num; i++)
{
//Заполняем её введёнными значениями из ячеек edts
a[i] = new double[num];
for (j = 0; j < num; j++)
a[i][j] = edts[i][j]->Text.ToDouble();
}
int zam=0;
float det=1;
int numb=0, k;
float max, str, bstr, L;
//Определяем максимальный элемент в строке
for (j=0;j<num-1;j++)
{
max=fabs(a[j][j]);
numb=j;
for (i=j;i<num;i++)
{
if (max<fabs(a[i][j]))
{ max=fabs(a[i][j]); numb=i; };
};
//Если индексы максимального элемента не равны, к флагу добавляем единицу
if (numb!=j)
{
zam++;
//Меняем строки, чтобы максимальный элемент был на главной диагонали
for (i=0;i<num;i++)
{
str=a[numb][i];
a[numb][i]=a[j][i];
a[j][i]=str;
};
};
//Пересчитывая матрицу, загуляем элементы, не стоящие на главной диагонали
for (i=j+1;i<num;i++)
{
L=-(a[i][j]/a[j][j]);
a[i][j]=0.0;
for (k=j+1;k<4;k++)
{
a[i][k]=a[i][k]+a[j][k]*L;
};
};
};
for(i=0;i<num;i++)
{
//Перемножаем элементы, стоящие на главной диагонали
det=det*a[i][i];
}
AnsiString p;
p=pow(-1,zam)*det; //Выводим определитель матрицы
Form1->Edit2->Text=p;
}
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.