Организация интерфейса для методов вычислений. Местонахождение и значение ячеек на форме. Максимальный элемент в строке

Страницы работы

Содержание работы

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

Государственное образовательное учреждение

Высшего профессионального образования

«Комсомольский-на-Амуре государственный

 Технический университет»

Факультет компьютерный технологий

Кафедра МОП_ЭВМ

ЛАБОРАТОРНАЯ РАБОТА №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;

}

Похожие материалы

Информация о работе