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

Сдавался/использовался2005г.
Примечаниеот автора: программа написана на билдере си. В данной программе предусмотрены некоторые действия с матрицами
Загрузить архив:
Файл: ref-22831.zip (89kb [zip], Скачиваний: 25) скачать

Содержание:

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

2.Описание программы……………………………………………4 стр

3.Текст программы………………………………………………..11 стр

4.Примеры…………………………………………………………

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

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

Матрицей А размера т xn называется прямоугольная таблица из m строк и n столбцов, состоящая из чисел или иных математических выражений aij(называемых элементами матрицы), i=1,2,3…m; j=1,2,3…n. Квадратной матрицей n-го порядка называется матрица размера п xn. Диагональной называется квадратная матрица, у которой все эле­менты вне главной диагонали (т. е. 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, StringGrid, 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='