Расчетно-графическая работа по программированию

Реферат - Компьютеры, программирование

Другие рефераты по предмету Компьютеры, программирование

Содержание:

  1. Теоретический материал. Матрицы……………………………3 стр
  2. Описание программы……………………………………………4 стр
  3. Текст программы………………………………………………..11 стр
  4. Примеры…………………………………………………………

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Теоретический материал. Матрицы

Основные определения.

Матрицей А размера т x n называется прямоугольная таблица из m строк и n столбцов, состоящая из чисел или иных математических выражений aij (называемых элементами матрицы), i=1,2,3…m; j=1,2,3…n. Квадратной матрицей n-го порядка называется матрица размера п x n. Диагональной называется квадратная матрица, у которой все элементы вне главной диагонали (т. е. c индексами i != j) равны нулю. Единичной (обозначается Е) называется диагональная матрица с единицами на главной диагонали. Нулевой называется матрица, все элементы которой равны нулю.

Операции над матрицами

Суммой матриц А = (аij) и В =(bij) одинакового размера называется матрица С=(сij) того же размера, причем сij=aij+bij , для любых i,j.

Произведением матрицы А=(аij) на число ? называется матрица В=(bij) того же размера, что и матрица А, причем bij = ? аij, для любых i,j.

Транспонированной к матрице А = (аij) называется матрица Ат = (атij) такая что,

атij = аji , для любых i,j

Любой квадратной матрице можно поставить в соответствие выражение, которое называется определителем (детерминантом), обозначается det А.


 

 

 

 

 

 

 

 

 

 

Описание программы

Данная программа предназначена для работы с матрицами. Можно заполнять их самостоятельно, а можно случайным образом, автоматически; причем имеются ввиду дробные числа типа (3/6 или 1*2/3, например). Программа самостоятельно выделяет в дробях целую часть, не зависимо, положительная дробь или отрицательная. В данной программе предусмотрены некоторые действия с матрицами, подробнее о которых речь будет вестись ниже.

В программе работаем с тремя формами, из которых одна основная. В этой форме происходит заполнение матриц, а также находятся кнопки вызова других форм и кнопки действий. Каждый раз результат какого либо действия, кроме нахождения определителя, будет выводится на вторую форму. Если вы хотите умножить матрицу на число, то сначала появится третья форма, предназначенная для ввода числа на которое умножаем матрицы, а потом уже форма с результатом.

В программе использованы визуальные компоненты: Button, RadioButton, String Grid, CSpinEdit, PopupMenu и т.д.

Для работы с дробями, был создан класс drob. Он содержит числитель, знаменатель и целую часть, для выделения которой в классе прописана специальная функция videlen.

class drob

{

public:

int chisl;

int znamen;

int cel;

drob ()

{

chisl=znamen=cel=0;

}

int videlen ()

{

if (!cel && chisl && znamen && abs(chisl)>=abs(znamen))

{

cel=(int)chisl/znamen;

chisl=(int)chisl%(int)znamen;

}

else

if (cel && chisl && znamen && abs(chisl)>=abs(znamen))

{

cel=cel+((int)chisl/znamen);

chisl=(int)chisl%(int)znamen;

}

return 0;

}

};

Для считывания числителя и знаменателя любого экземпляра класса дробей, создан класс Анализатора выражений. Который при считывании символа /,все что было считано до него заносит в числитель, все что после - в знаменатель. В этом классе прописаны функции преобразования символьных строк в целочисленные значения (Convert), получения (считывания) символов (Get), анализа выражения (что заносить в числитель, что в знаменатель) (Analiz), и функция вызывающая все эти функции (MAIN).

class Analisation

{

char *ptr;

char token [80];

char ttype;

drob vrem;

//-------------------------------------

void Analiz(double &result)

{

register char op;

double temp;

Convert(result);

while((op=*token)==* || op==/ )

{

Get();

Convert(temp);

switch (op)

{

case *:

vrem.cel=result;

break;

case /:

vrem.chisl=result;

vrem.znamen=temp;

break;

}

}

}

//-------------------------------------

void Convert(double &result)

{

result=(double)atof(token);

Get();

return;

}

//-------------------------------------

void Get()

{

register char *temp;

ttype=0;

temp=token;

*temp=\0;

if(!*ptr)return;

while(isspace(*ptr))++ptr;

if(strchr("/*",*ptr))

{

ttype=DELIM;

*temp++=*ptr++;

}

else if(isdigit(*ptr))

{

while(!isdelim(*ptr))*temp++=*ptr++;

ttype=NUMB;

}

*temp=\0;

}

//-------------------------------------

int isdelim(char c)

{

if (strchr("/*",c))return 1;

else return 0;

}

//-------------------------------------

public:

Analisation()

{

ptr=NULL;

}

drob MAIN(char*exp)

{

double result;

ptr=exp;

Get();

Analiz(result);

return vrem;

}

};

Сами матрицы создаются как экземпляры класса matrix, который содержит поля:

размерность матрицы, непосредственно матрицу (типа drob), ее определитель (det), а также функции получения значений размеров матрицы, функцию считывания значений элементов матрицы из StringGrida и функцию нахождения определителя. Помимо всего п?/p>