Разработка программ матричных вычислений

Автор работы: Пользователь скрыл имя, 21 Января 2011 в 22:26, курсовая работа

Описание работы

Цель курсовой работы: создание именно такой программы, которая могла бы выполнять основные операции над матрицами.

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

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

Во-вторых, простота интерфейса, рассчитанного практически на любого пользователя, имеющего хотя бы первоначальное понятие о матрицах.

В-третьих, удобство в использовании программы.

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

ВВЕДЕНИЕ 3

1.ТЕХНИЧЕСКОЕ ЗАДАНИЕ 4

1.1.Анализ предметной области. 4

1.1.1 Матрицы 4

1.2.Проектирование программного продукта 12

1.2.1. Функциональные требования 12

1.2.2. Требования к интерфейсу 12

2.РАБОЧИЙ ПРОЕКТ 14

2.1.Общие сведения (среда функционирования (ОС), способ загрузки, способ инсталляции, требования к ПО, требования к ТО) 14

2.2. Укрупненный алгоритм 15

2.2.1.КЛАССЫ 15

2.2.3.СХЕМА АЛГОРИТМА 17

3.РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ 18

ЗАКЛЮЧЕНИЕ 23

ЛИТЕРАТУРА 24

Файлы: 1 файл

Разработка программ матричных вычислений.docx

— 724.18 Кб (Скачать файл)
СОДЕРЖАНИЕ 

ВВЕДЕНИЕ 3

1.ТЕХНИЧЕСКОЕ ЗАДАНИЕ 4

1.1.Анализ предметной области. 4

    1.1.1 Матрицы 4

1.2.Проектирование программного продукта 12

    1.2.1. Функциональные требования 12

    1.2.2. Требования к интерфейсу 12

2.РАБОЧИЙ ПРОЕКТ 14

2.1.Общие сведения (среда функционирования (ОС), способ загрузки, способ  инсталляции, требования к ПО, требования к ТО) 14

2.2.  Укрупненный алгоритм 15

    2.2.1.КЛАССЫ 15

    2.2.3.СХЕМА АЛГОРИТМА 17

3.РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ 18

ЗАКЛЮЧЕНИЕ 23

ЛИТЕРАТУРА 24

ПРИЛОЖЕНИЕ 25 

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       2
Изм Лист № докум. Подпись Дата

ВВЕДЕНИЕ

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

    Практически на любом современном компьютере сейчас установлена программа Excel из  популярного пакета Microsoft Office. В этой программе можно выполнять все основные и дополнительные операции над матрицами. Но для выполнения всех этих операции необходимо иметь довольно обширную математическую базу и немалые навыки работы в Excel.

    Цель  курсовой работы: создание именно такой программы, которая могла бы выполнять основные операции над матрицами.

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

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

    Во-вторых, простота интерфейса, рассчитанного  практически на любого пользователя, имеющего хотя бы первоначальное понятие о матрицах.

    В-третьих, удобство в использовании программы.

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       3
Изм Лист № докум. Подпись Дата

1.ТЕХНИЧЕСКОЕ ЗАДАНИЕ

1.1.Анализ предметной области.

    Предлагается  разработать калькулятор для матричных вычислений, следовательно предметной областью будет являться теория матриц. Теория матриц нашла огромное применение в решении систем линейных уравнений и не только, поэтому целесообразно было бы создать такой калькулятор.

1.1.1 Матрицы

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

Чаще  всего элементы матрицы обозначаются одной буквой с двумя индексами, указывающими "адрес" элемента - первый индекс дает номер строки, содержащий элемент, второй - номер столбца. Если матрица имеет m строк и n столбцов, то говорят, что матрица имеет размеры . Принято обозначать матрицы заглавными латинскими буквами, часто - полужирными, а ее элементы - такими же буквами, но строчными. Таким образом, матрица (размеров ) записывается в виде

.

    Для краткости допускается обозначение  матрицы размеров в виде , где индекс i пробегает все значения от 1 до m, а j - от 1 до n. При обозначении матриц используются скобки - круглые и квадратные.Матрицы, имеющие одно и то же число n строк и столбцов, называют квадратными; это число n называют порядком квадратной матрицы. Важную роль играют так называемые диагональные матрицы. Под

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       4
Изм Лист № докум. Подпись Дата
этим подразумеваются  квадратные матрицы, имеющие все  элементы равные нулю, кроме элементов главной диагонали, т.е. элементов в позициях (1,1), (2,2), ..., (n,n). Диагональная матрица D с диагональными элементами d1, d2, ..., dn обозначается diag(d1, d2, ..., dn). Диагональная матрица diag(1, 1, ..., 1) называется единичной и обозначается E (или En) или же I (или In). Матрица, состоящая из одних нулей, называется нулевой.Матрица, состоящая из одной строки, часто называется вектором (строкой, вектор-строкой, строчной матрицей), а из одного столбца - вектор-столбцом (столбцом, столбцовой матрицей).Две матрицы считаются равными, если они одного размера и у них совпадают элементы, стоящие на одинаковых местах.Матрицу A={ai j} можно транспонировать, т.е. заменить строки столбцами, в результате чего получится транспонированная матрица AT={aj i}.Две матрицы A={ai j} и B={bi j} одного и того же размера можно складывать, их суммой будет матрица того же размера C={ci j}, , т.е. чтобы получить сумму двух матрицы достаточно сложить соответствующие элементы этих матриц, находящихся на одних и тех же позициях. Поскольку мы рассматриваем здесь матрицы с элементами из поля P действительных чисел, то очевидна ассоциативность операции сложения матриц, вытекающая из ассоциативности сложения элементов поля P. Аналогично имеет место коммутативность сложения. Таким образом, справедливы действия:
  1. (A+B)+C=A+(B+C); [Ассоциативность]
  2. A+B=B+A; [Коммутативность]
  3. Матрица 0, состоящая из нулей, играет роль нуля: A+0=A при любой A.Определим произведение элемента c из поля P на матрицу A={ai j}: cA={cai j}, т.е. чтобы умножить матрицу на число необходимо каждый элемент матрицы умножить на это число.Для любой матрицы A существует противоположная матрица -A такая, что A+(-A)=0. 

В качестве матрицы -A, очевидно, следует взять  матрицу (-1)A, элементы которой отличаются от элементов A знаком.

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       5
Изм Лист № докум. Подпись Дата
  1. .
  2. .
  3. .
  4. .
Все перечисленные  свойства матриц непосредственно следуют  из определений и свойств действий в поле чисел. Рассмотрим матрицу A={ai j} размером и матрицу B={bi j} размером . Число столбцов первой матрицы (стоящей слева в произведении) равно числу строк второй матрицы (стоящей справа в произведении). Для матриц, обладающих таким свойством, можно ввести действие умножения матрицы на матрицу. В результате получается матрица C={ci j} размером , где . Правило умножения легко запомнить в словесной форме:  
"чтобы получить элемент произведения ci j двух матриц нужно элементы i-ой строки первой матрицы умножить на соответствующие элементы j-го столбца второй матрицы и все произведения сложить". Это правило называют "правилом строка на столбец".

Пример:

 

Пусть A={ai j} размером и B={bi j} размером , а также введем векторы , и . Рассмотрим линейные подстановки с этими матрицами:

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       6
Изм Лист № докум. Подпись Дата

и

.

Эти подстановки, используя определение умножения  матриц, можно записать в матричном виде: Y=AX, X=BT.Покажем, что если эти две подстановки сделать одну за другой, т.е. выразить переменные y1, ..., ym через t1, ..., tk, то матрица коэффициентов окажется равной AB.

Действительно, пусть

.

Тогда коэффициент ci j есть коэффициент при tj в yi. Выпишем все необходимое для вычисления этого коэффициента:

.

При подстановке x1, x2, ..., xk в yi, получим

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       7
Изм Лист № докум. Подпись Дата
.

Таким образом, , так что матрица коэффициентов в выражениях y1, ..., ym через t1, ..., tk действительно равна AB.  
Итак, последовательному произведению ("суперпозиции") двух линейных подстановок соответствует произведение их матриц. В матричной форме суперпозицию этих подстановок можно записать в виде Y=A(BT). Вместе с тем матрица суперпозиции равна AB, и этот факт записывается так: Y=(AB)T. Таким образом, верно следующее соотношение ассоциативности:

A(BT)=(AB)T, где T - столбец.

Рассмотрим  теперь свойства действия умножения матриц:

  1. (cA)B=A(cB)=cAB;
  2. (A1+A2)B=A1B+A2B;
  3. A(B1+B2)=AB1+AB2.

Эти свойства непосредственно вытекают из того, что элементы произведения выражаются как через элементы A, так и через элементы B в виде линейных однородных многочленов. Это можно проверить, используя правило умножения и сложения матриц, группируя необходимые слагаемые).

  1. (AB)C=A(BC) [ассоциативность умножения].

Это свойство трактуется таким образом, что если одна из частей равенства имеет смысл, то имеет смысл и другая, и они  равны. Это равенство можно доказать, воспользовавшись следующим простым замечанием. Пусть P и Q - две матрицы такие, что PQ имеет смысл. Пусть Q1, Q2, ..., Qk - столбцы матрицы Q. Тогда столбцами матрицы PQ являются PQ1, PQ2, ..., PQk, что непосредственно следует из определения. Это обстоятельство можно записать в виде P(Q1, Q2, ..., Qk) = (PQ1, PQ2, ..., PQk).

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       8
Изм Лист № докум. Подпись Дата
Обозначим через C1, C2, ..., Cl столбцы матрицы C. Тогда (AB)C = ((AB)C1, (AB)C2, ..., (AB)Cl). Далее, BC = (BC1, BC2, ..., BCl) и A(BC) = (A(BC1), A(BC2), ..., A(BCl)). Но как было установлено выше, (AB)C1 = A(BC1), (AB)C2 = A(BC2), ..., ибо C1, C2, ... - столбцы. Таким образом, (AB)C = A(BC).

Особую  роль при умножении матриц играют единичные матрицы En (если нужно буквой n указать порядок) или просто E. Из правила умножения матриц непосредственно следует, что AE=A и EA=A, если эти произведения определены.

  1. (AB)T=BTAT. 
    Об этом свойстве произведения матриц говорят так: "при транспонировании произведения матриц порядок сомножителей меняется".

Докажем это. 

Пусть , . 

Положим , , так что , . 

Пусть, далее, , . 

Тогда , . 

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       9
Изм Лист № докум. Подпись Дата
Итак, при всех i = 1, 2, ..., m и j = 1, 2, ..., n, а это и означает, что G=FT, т.е. , что и требовалось доказать.Таким образом, матрицы можно складывать, умножать их на число, а также умножать матрицы друг на друга. Эти действия обладают свойствами:
  1. (A+B)+C=A+(B+C);
  2. A+B=B+A;
  3. Существует 0: A + 0 = 0 + A = A;
  4. Для A существует -A: A + (-A)=0;
  5. .
  6. .
  7. .
  8. .

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

  1. (AB)C=A(BC).
  2. (cA)B=A(cB)=cAB.
  3. (A1+A2)B=A1B+A2B.
  4. A(B1+B2)=AB1+AB2.
  5. Существуют единичные матрицы (единицы), а именно, если A размером , то EmA = AEn = A.
  6. (AT)T = A.
  7. (A + B)T = AT + BT.
  8. (cA)T = cAT.
  9. (AB)T = BTAT.
Разраб.       Разработка  программ матричных вычислений Лист
Пров.       10
Изм Лист № докум. Подпись Дата
Для квадратных матриц фиксированного порядка n действия сложения и умножения определены всегда, и их результатами являются квадратные матрицы того же порядка. Об этом обстоятельстве говорят таким образом: квадратные матрицы фиксированного порядка образуют кольцо. Кольцо, наделенное структурой векторного пространства, т.е. система объектов, обладающих свойствами 1-12, называется алгеброй над основным полем. Таким образом, квадратные матрицы с элементами из поля K составляют алгебру над этим полем.
Разраб.       Разработка  программ матричных вычислений Лист
Пров.       11
Изм Лист № докум. Подпись Дата

1.2.Проектирование программного продукта

Любая матрица представляется в виде двухмерного  массива целых десятичных чисел  типа int. Кроме того, каждой таблице соответствует еще 2 положительных целых числа типа unsigned char  хранящие размеры матрицы. 

1.2.1. Функциональные требования 

       В программе должны быть реализованы:

    • Представление матрицы в формате, описанном выше. Для этого должен использоваться отдельный класс – класс матриц.
    • Операции изменения размеров матриц.
    • Операции преобразования матриц (транспонирование).
    • Операции инициализации матриц (инициализация единичной, нулевой, случайной матриц).
    • Операции сложения, и умножения матриц.
    • Операции умножения матрицы на скаляр и возведение в скалярную степень.
    • Удобная память калькулятора (буфер).
 

1.2.2. Требования к интерфейсу 

    Интерфейс должен обеспечивать пользователю возможность:

    1. удобного ввода данных с клавиатуры;
    2. изменять размер вычисляемых матриц и контролировать текущие размеры рабочих матриц и результирующей;
Разраб.       Разработка  программ матричных вычислений Лист
Пров.       12
Изм Лист № докум. Подпись Дата
    1. Производить все  операции, перечисленные в «Функциональных  требованиях» интуитивно понятным и удобным способом;
    2. Визуально контролировать содержимое буферной памяти калькулятора;
    3. Не допускать обработки исходных данных, противоречащих логике работы программы путем вывода сообщений об ошибке;
 
    Внешний вид программы: 

у

 

рис. 1- показан интерфейс программы.

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       13
Изм Лист   Подпись Дата

2.РАБОЧИЙ ПРОЕКТ 

2.1.Общие сведения (среда функционирования (ОС), способ загрузки, способ  инсталляции, требования к ПО, требования к ТО) 

      Среда функционирования:

            Borland C++ Builder – это среда быстрой разработки, в которой в качестве языка программирования используется язык C++ Builder (C++ Builder Language). Можно сказать, что язык  C++ Builder – это расширенный С++. Например, в С++ Builder есть строковый

(AnsiString) и логический (Bool) типы, которых нет в классическом С++. К тому же несомненным преимуществом языка C++ Builder является встроенная RAD (rapid application development) которая обеспечивает быструю разработку приложений.

      Запуск  программы:

            Стандартный, т.е. двойной  клик на иконке программы.

      Способ  инсталляции:

            Копирование исполняемого файла программы на нужный носитель.

      Требования  к ПО и к ТО:

  • операционная система Windows 9x/ME/2000/XP/2003
  • 16 Мб оперативной памяти
  • 1 Мб свободного пространства на жестком диске
  • Pentium 133 MHz
 
        Разработка  программ матричных вычислений Лист
Пров.       14
Изм Лист № докум. Подпись Дата

2.2.  Укрупненный алгоритм 

2.2.1.КЛАССЫ 

В данном проекте реализованы 1 класс:

class TForm1 : public TForm {...}

      главная форма 

Класс TForm1:

Переменные:

            Элементы интерфейса программы в форме указателей на    объект;

            Три переменные матрицы типа TForm1:

                  - SG1,SG2 – Матрицы привязанные к таблицам строк      StringGrid 1 и 2 соответственно;

                  - SG3 - Матрица привязанная к таблице StringGrid3    (хранит результат выполнения операций);

            Две переменные целого типа, хранящие размеры таблиц   строк StringGrid1 и 2:        

                  CSE1, CSE2;

            Переменная целого типа n хранящая значение поля   Edit1(поля для значения какого-то целого скаляра); 
 

Функции нажатия  на кнопки формы;

Функции чтения формы:

                  1) __fastcall TForm1::CSE1Change(TObject *Sender)

                        Определение количества столбцов в SG1 и SG2 соответствующих StringGrid;

                  ;

    
Разраб.       Разработка  программ матричных вычислений Лист
Пров.       15
Изм Лист № докум.   Дата
                              2) __fastcall TForm1::CSE2Change(TObject *Sender)

                        Определение количества строк в SG1 и SG2 соответствующих StringGrid;

                  3)__fastcall TForm1::RB(1-8,14)Click(TObject *Sender)

                        Выбирает действия которые необходимо провести над матрицей (матрицами);

Функции вывода значений в интерфейс:

      void __fastcall TForm1::Button1Click(TObject *Sender)

      В зависимости  от выбранных RadioButton(1-7,14), выполняются расчеты и конечный результат выводится в:

      1. SG3 – при выборе RadioButton(1-4, 14);
      2. Выделяется ячейка желтым фоном при выборе RadioButton(5, 6);
      3. Memo1 – при выборе RadioButton(14)

Функция заполнения активной StringGrid(1,2) значениями:

                  void __fastcall TForm1::Button3Click(TObject *Sender)

            В зависимости от активного RadioButton(12-13) и RadioButton(8-11), заполняется матрица элементами соответствующие выбранным;

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       16
Изм Лист № докум. Подпись Дата

2.2.3.СХЕМА АЛГОРИТМА 

Любая функция  нажатия функциональной кнопки главного окна использует одну из функций чтения формы и/или одну из функций вывода в форму. Сначала происходит чтение одной или двух таблиц строк StringGrid.

Затем с помощью  методов класса TForm1 данные обрабатываются и выводятся по необходимости в результирующую или одну из рабочих StringGrid.

Рассмотрим на примере функции нажатия кнопки сложения.

  1. Чтение обеих StringGrid с помощью функции Button1Click с занесением результата в SG1 и SG 2.
  2. Присвоение матрице SG3 значения суммы матриц SG1 и SG 2.
  3. Вывод матрицы SG3 в StringGrid.
    
Разраб.       Разработка  программ матричных вычислений Лист
Пров.       17
Изм Лист № докум. Подпись Дата

3.РУКОВОДСТВО ПОЛЬЗОВАТЕЛЯ

Интерфейс любой  программы должен отличаться легкой восприимчивостью пользователем.

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

рис. 1- показан интерфейс программы. 

В верхней части окна(посередине) находится одна основная таблица.

Которая представляет собой панель, включающую рабочую таблицу строк (рис. 2а) и два объекта (рис. 2б,в) изменения размера таблицы.

Каждый объект представляет собой числовое поле и две кнопки «↑» и «↓». Верхние объекты изменения размера таблицы (рис2.б) служит для изменения высоты таблицы, (рис. 2в) – ширины.

    
Разраб.       Разработка  программ матричных вычислений Лист
Пров.       18
Изм Лист № докум. Подпись Дата
 

рис. 2- Одна из двух верхних панелей. 

Каждая такая панель представляет собой матрицу.

Для ввода данных необходимо:

    1. Выбрать нужный размер
    2. Выделяя курсором необходимую ячейку ввести значение данной ячейки.

 

рис. 3- Результирующая панель. 

В правом нижнем углу окна находится результирующая панель.

Она представляет собой  панель, включающую результирующую таблицу   (рис. 3а) и одна кнопки (рис. 3в) для переноса данных из результирующей таблицы в рабочую таблицу А. 

    
Разраб.       Разработка  программ матричных вычислений Лист
Пров.       19
Изм Лист № докум. Подпись Дата
В правом нижнем углу отображаются краткие теоретические сведения о производимых действиях над матрицами (рис. 3б). 

Панель основных операций.

Над матрицами можно  выполнять операции сложение, вычитание, умножения, деления и т.д. с помощью выбора соответствующих пунктов на панели основных операций «Действия»(рис. 4).

«Сложение матрицы  А и В» -сложение матриц(рис. 4а);

«Вычитание из матрицы  А матрицу В» - вычитание матриц(рис. 4б);

«Умножение матрицы  А на число» - умножение матрицы(рис. 4в);

«Деление матрицы  А на число» - деление матрицы(рис. 4г);

«Поиск max элемента в матрице А» - (рис. 4д);

«Поиск min элемента в матрице А» - (рис. 4е);

«Среднее значение матрицы А» - (рис. 4ж);

«Транспонирование матрицы А» - (рис. 4з);

рис. 4- Панель основных операций. 

    
Разраб.       Разработка  программ матричных вычислений Лист
Пров.       20
Изм Лист № докум. Подпись Дата
Операции преобразования матрицы.

Во время работы матрицу можно преобразовать  с помощью выбора соответствующего варианта на панели дополнительных операций (рис. 5).

В разделе «Выбор матрицы» выбирается матрица которую следует заполнить (рис. 5а);

«Заполнить случайным  числом до 100» - инициализация матрицы случайным числом в диапазоне от 0 до 100 (рис. 5б);

«Диагональная матрица» - инициализация нулевой матрицы, кроме диагональной, ячейки главной диагонали остаются пустыми для дальнейшего заполнения с клавиатуры (рис. 5в);

«Единичная матрица» - инициализация единичной матрицы (рис. 5г);

«Нулевая матрица» - инициализация нулевой матрицы (рис. 5д); 

рис. 5- Панели дополнительных операций 

Все эти операции производятся над активной матрицей.

Чтобы сделать матрицу  активной необходимо сначала выделить соответствующую ей таблицу, а затем  нажать соответствующую операции кнопку.

Для операций умножения  или деления на скаляр используется целое число.

Это число вводится в числовое поле (рис. 6) находящееся  в верхней правой части окна.

    
Разраб.       Разработка  программ матричных вычислений Лист
Пров.       21
Изм Лист № докум. Подпись Дата
 

рис. 6 - числовое поле 

Для очистки всей формы (обнуления всех матриц формы) используется кнопка «Очистить»(рис. 7), находящаяся в правом нижнем углу окна.

рис. 7 - кнопка «обнуления всех матриц формы» 

Для получения информации о программе нажмите кнопку «Справка», находящуюся в левом верхнем углу окна. 

рис. 8 - кнопка «Справка»

    
Разраб.       Разработка  программ матричных вычислений Лист
Пров.       22
Изм Лист № докум. Подпись Дата

ЗАКЛЮЧЕНИЕ 

Данная программа  является типичным примером реализации программ использованием объектно-ориентированной технологии программирования

созданных для Windows с помощью Borland C++ Builder.

Достоинством  данной программы является ее простота в использовании в наиболее распространенной, на данный момент, операционной системе  Windows  и то, что при необходимости можно добавить нужные кнопки-функции.

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

    
Разраб.       Разработка  программ матричных вычислений Лист
Пров.       23
Изм Лист № докум. Подпись  

ЛИТЕРАТУРА

  1. Бьерн Страуструп «Язык программирования C++» специальное издание. Москва, Санкт – Петербург,2002. 
  2. Г.Шилдт «Теория и практика Си++.» СПб.:BHV – Санкт-Петербург, 1996.
  3. Н. Подбельский «Язык С++»; Питер, Санкт – Петербург 2004.
  4. Валерий Лаптев «С++ Экспресс курс», БХВ – Санкт-Петербург, 2004.
  5. А.Я. Лемих «С/С++ в примерах и задачах» Москва, 2004.
  6. Кун С. «Матричные процессоры на СБИС». М. 1991
  7. Н.Культин «Практика программирования на С++». «Питер», Санкт – Петербург 2003.
  8. А.Л. Фридман «Язык программирования С++ » курс лекций; Интернет Университет Информационных технологий; Москва 2003
  9. Т.А. Павловская «С/С++ Программирование на языке высокого уровня» учебник для вузов; Питер, Санкт – Петербург 2004.
 
Разраб.       Разработка  программ матричных вычислений Лист
Пров.       24
Изм Лист № докум. Подпись Дата

ПРИЛОЖЕНИЕ

ИСХОДНЫЙ  ТЕКСТ ПРОГРАММЫ.

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

#include <vcl.h>

#include <math.h>

#pragma hdrstop 

#include "Unit1.h"

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

#pragma package(smart_init)

#pragma link "CSPIN"

#pragma resource "*.dfm"

TForm1 *Form1;

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

__fastcall TForm1::TForm1(TComponent* Owner)

        : TForm(Owner)

{

}

int i_1,j_1,i_g_1,j_g_1, SG3_i,SG3_j;  //переменная для закрашивания ячеек

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

     //Выход из программы

void __fastcall TForm1::N2Click(TObject *Sender)

{

Close();

}

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

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       25
Изм Лист № докум. Подпись Дата
       //Размерность матрицы А

void __fastcall TForm1::CSE1Change(TObject *Sender)

{

  SG1-> ColCount=CSE1->Value;

  SG2->ColCount=CSE1->Value;

  int x;  //Колличество столбцов в А

  x=CSE1->Value; 
 

  }

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

void __fastcall TForm1::CSE2Change(TObject *Sender)

{

  SG1->RowCount=CSE2->Value;

  SG2->RowCount=CSE2->Value;

  int y;      //Колличество строк в матрице А

  y=CSE2->Value; 

}

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

//Сложение матриц А и В

void __fastcall TForm1::RB1Click(TObject *Sender)

{

if(RB1->Checked) {

        SG2->Visible=true;

        Label3->Visible=True;

         Edit1->Visible=False;

        SG3->Visible=true;

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       26
Изм Лист № докум. Подпись Дата
        Button1->Enabled=true;

        Button2->Enabled=true;

        GB3->Enabled=true;

        Memo1->Visible=true;

       Memo1->Text="Сложение матриц относится к линейным действиям над матрицами. Определяются только для матриц одинаковой размерности.";

    }

}

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

        //Разница матриц А и В

void __fastcall TForm1::RB2Click(TObject *Sender)

{

  if (RB2->Checked){

        SG2->Visible=True;

        Label3->Visible=True;

        Edit1->Visible=False;

        SG3->Visible=true;

        Button1->Enabled=true;

        Button2->Enabled=true;

        GB3->Enabled=true;

        Memo1->Visible=true;

        Memo1->Text="Вычитание матриц относится к линейным действиям над матрицами. Определяются только для матриц одинаковой размерности.";  }

}

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

        //Умножение матрицы а на число

void __fastcall TForm1::RB3Click(TObject *Sender)

{

if (RB3->Checked) {

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       27
Изм Лист № докум. Подпись Дата
        SG2->Visible=False;

        Label3->Visible=False;

        CSE3->Visible=False;

        CSE4->Visible=False;

        Edit1->Visible=True;

        SG3->Visible=true;

        Button1->Enabled=true;

        Button2->Enabled=true;

        GB3->Enabled=true;

        Memo1->Visible=true;

        Memo1->Text="Умножение матриц на число относится к линейным действиям над матрицами. Определяются только для матриц одинаковой размерности.";

   }

}

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

        //Деление матрицы на число

void __fastcall TForm1::RB4Click(TObject *Sender)

{

if (RB4->Checked) {

        SG2->Visible=False;

        Label3->Visible=False;

        CSE3->Visible=False;

CSE4->Visible=False;

        Edit1->Visible=True;

        SG3->Visible=true;

        Button1->Enabled=true;

        Button2->Enabled=true;

        GB3->Enabled=true;

        Memo1->Visible=true;

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       28
Изм Лист № докум. Подпись Дата
 

 

 

Memo1->Text="Деление матриц на число относится к линейным действиям над матрицами. Определяются только для матриц одинаковой размерности.";

}

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

}

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

        //Поиск минимального элимента в матрице

void __fastcall TForm1::RB6Click(TObject *Sender)

{

if (RB6->Checked) {

        SG2->Visible=False;

        Label3->Visible=False;

        CSE3->Visible=False;

        CSE4->Visible=False;

        Edit1->Visible=False;

        SG3->Visible=true;

        Button1->Enabled=true;

        Button2->Enabled=true;

        GB3->Enabled=true;

        Memo1->Visible=false;

       }

}

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

//Поиск среднего значения матрицы А

void __fastcall TForm1::RB7Click(TObject *Sender)

{

if (RB7->Checked) {

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       29
Изм Лист № докум. Подпись Дата
SG2->Visible=False;

        Label3->Visible=False;

        CSE3->Visible=False;

        CSE4->Visible=False;

        Edit1->Visible=False;

        SG3->Visible=false;

        Button1->Enabled=true;

        Button2->Enabled=true;

        GB3->Enabled=true;

        Memo1->Visible=true;

        Memo1->Text=" ";   }

}

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

        //Размерность матрицы В

void __fastcall TForm1::CSE4Change(TObject *Sender)

{

SG2->ColCount=CSE1->Value;

int x;  //Колличество столбцов в B

  x=CSE2->Value;

}

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

void __fastcall TForm1::CSE3Change(TObject *Sender)

{

SG2->RowCount=CSE2->Value;

int y;      //Колличество строк в матрице B

  y=CSE2->Value;

}

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

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       30
Изм Лист № докум. Подпись Дата
//Поиск максимального элимента в матрице

void __fastcall TForm1::RB5Click(TObject *Sender)

{

if (RB5->Checked) {

        SG2->Visible=False;

        Label3->Visible=False;

        CSE3->Visible=False;

        CSE4->Visible=False;

        Edit1->Visible=False;

        SG3->Visible=true;

        Button1->Enabled=true;

        Button2->Enabled=true;

        GB3->Enabled=true;

        Memo1->Visible=false;

   }

}

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

void __fastcall TForm1::Button1Click(TObject *Sender)

{

int i,j;

i_g_1=CSE1->Value;

j_g_1=CSE2->Value;

i_1=-1;

j_1=-1;

//Сложение матриц А и В

if (RB1->Checked){

   int i,j,x,y;

SG3->ColCount=CSE1->Value;

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       31
Изм Лист № докум. Подпись Дата
   SG3->RowCount=CSE2->Value;

   for (i=0;i<CSE1->Value;i++)

     for (j=0;j<CSE2->Value;j++){

      x=StrToInt(SG1->Cells[i][j]);

      y=StrToInt(SG2->Cells[i][j]);

      SG3->Cells[i][j]=IntToStr(x+y); 

SG3_i=i;

SG3_j=j;

}

}

   //Разность  матриц А и В

i_g_1=CSE1->Value;

j_g_1=CSE2->Value; 

if (RB2->Checked){

   {int i,j,x,y;

   SG3->ColCount=CSE1->Value;

   SG3->RowCount=CSE2->Value;

   for (i=0;i<CSE1->Value;i++)

     for (j=0;j<CSE2->Value;j++){

      x=StrToInt(SG1->Cells[i][j]);

      y=StrToInt(SG2->Cells[i][j]);

       SG3->Cells[i][j]=IntToStr(x-y);

       SG3_i=i;

       SG3_j=j;

    }

  }

}

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       32
Изм Лист № докум. Подпись Дата
//Умножение матрицы А на число

i_g_1=CSE1->Value;

j_g_1=CSE2->Value;

if (RB3->Checked)

{

if (Edit1->Text==" ")MessageBox(NULL,"Введите число на которое необходимо умножить матрицу А","Error",MB_OK);

else

{

int i,n,j;

    n=StrToInt(Edit1->Text);

    SG3->ColCount=CSE1->Value;

    SG3->RowCount=CSE2->Value;

      for (i=0;i<CSE1->Value;i++)

        for (j=0;j<CSE2->Value;j++)

           SG3->Cells[i][j]=FloatToStr(StrToFloat(SG1->Cells[i][j])*n);

SG3_i=i;

SG3_j=j;

}

}

  //Деление матрицы А на число

i_g_1=CSE1->Value;

j_g_1=CSE2->Value;

if (RB4->Checked)

{   int i,n,j;

    n=StrToInt(Edit1->Text);

    SG3->ColCount=CSE1->Value;

    SG3->RowCount=CSE2->Value;

for (i=0;i<CSE1->Value;i++)

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       33
Изм Лист № докум. Подпись Дата
 

 

for (j=0;j<CSE2->Value;j++)

           SG3->Cells[i][j]=FloatToStr(StrToFloat(SG1->Cells[i][j])/n);

SG3_i=i;

SG3_j=j;

}

//Поиск максимального  значения в матрице А

i_g_1=CSE1->Value;

j_g_1=CSE2->Value;

if (RB5->Checked)

{

  int i,j,max;

  max=StrToInt(SG1->Cells[0][0]);

  i_1=0;

  j_1=0;

  for (i=0;i<CSE1->Value;i++)

    for (j=0;j<CSE2->Value;j++)

    {

    if (max<StrToInt(SG1->Cells[i][j]))

        {

        max=StrToInt(SG1->Cells[i][j]);

        i_1=i;

        j_1=j;

        }

    }

   SG1->Refresh();}

 //Поиск минимального значения в матрице А

i_g_1=CSE1->Value;

j_g_1=CSE2->Value; 

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       34
Изм Лист № докум. Подпись Дата
if (RB6->Checked)

{

  int i,j,min;

  min=StrToInt(SG1->Cells[0][0]);

  i_1=0;

  j_1=0;

  for (i=0;i<CSE1->Value;i++)

    for (j=0;j<CSE2->Value;j++)

    {

    if (min>StrToInt(SG1->Cells[i][j]))

        {

        min=StrToInt(SG1->Cells[i][j]);

        i_1=i;

        j_1=j;

        }

    }

   SG1->Refresh();

}

//Расчет среднего  значения матрицы А

i_g_1=CSE1->Value;

j_g_1=CSE2->Value;

  if (RB7->Checked)

   {

   int i,j,x,y;

   float sredn;

    x=CSE1->Value;

    y=CSE2->Value;

    sredn=0.;

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       35
Изм Лист № докум. Подпись Дата
for (i=0;i<x;i++)

     for (j=0;j<y;j++)

         sredn+=StrToInt(SG1->Cells[i][j]);

   sredn=sredn/((x)*(y));

   Memo1->Text="Среднее значение матрицы А "+FloatToStr(sredn);

   }

   //Транспонирование  матрицы А

   if (RB14->Checked){

   int i,j;

   SG3->ColCount=CSE2->Value;

   SG3->RowCount=CSE1->Value;

   for (i=0;i<CSE1->Value;i++)

   for (j=0;j<CSE2->Value;j++){

    SG3->Cells[j][i]=SG1->Cells[i][j];

   SG3_i=i;

   SG3_j=j;

   }

   }

  SG1->Repaint();

}

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

void __fastcall TForm1::FormCreate(TObject *Sender)

{

i_1=-1;

j_1=-1;

Memo1->Text=" ";

SG3_i=0;

SG3_j=0;

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       36
Изм Лист № докум. Подпись Дата
}

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

void __fastcall TForm1::SG1DrawCell(TObject *Sender, int ACol, int ARow,

      TRect &Rect, TGridDrawState State)

{

if (ACol==i_1&&j_1==ARow){

        SG1->Canvas->Brush->Color=clYellow;

        SG1->Canvas->Rectangle(Rect);

        SG1->Canvas->TextOutA(Rect.Left+2,Rect.Top+2,SG1->Cells[i_1][j_1]);

  }

}

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

void __fastcall TForm1::Button2Click(TObject *Sender)

{ //Очистить

  SG2->Visible=true; 

        Label3->Visible=false;

        CSE3->Visible=false;

        CSE4->Visible=false;

        SG2->Visible=false;

        Edit1->Visible=false;

        SG3->Visible=true;

        i_1=-1;

        j_1=-1;

  Edit1->Text=" ";

  int i,j;

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       37
Изм Лист № докум. Подпись Дата
  for (i=0;i<CSE1->Value;i++)

    for (j=0;j<CSE2->Value;j++){

    SG1->Cells[i][j]=" ";

    SG2->Cells[i][j]=" ";

    SG3->Cells[i][j]=" ";

}

         CSE1->Value=1;

         CSE2->Value=1;

         CSE3->Value=1;

         CSE4->Value=1;

}

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

void __fastcall TForm1::Button3Click(TObject *Sender)

{

int i,j,n,m;

  //Заполнить случайным  числом до 100

 if (RB8->Checked)

  {  for (i=0;i<CSE1->Value;i++)

  for (j=0;j<CSE2->Value;j++){

  if (RB12->Checked)  SG1->Cells[i][j]=rand()%100;

  if (RB13->Checked)  SG2->Cells[i][j]=rand()%100;

  }

  }

  //Диогональная матрица

 if (RB9->Checked)

  {

if (CSE1->Value!=CSE2->Value)MessageBox(NULL,"Диогональная матрица - это квадратная матрица.","Error",MB_OK);

 else 
 

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       38
Изм Лист № докум. Подпись Дата
 

 

{

   for (i=0;i<CSE1->Value;i++)

    for (j=0;j<CSE2->Value;j++){

     //A

    if (RB12->Checked){

      if (i==j)SG1->Cells[i][j]=" ";

      else SG1->Cells[i][j]=IntToStr(0);

    }

   //B

   if (RB13->Checked){

    if (i==j)SG2->Cells[i][j]=" ";

    else SG2->Cells[i][j]=IntToStr(0);

    }

  }

}

}

   //Единичная матрица

  if (RB10->Checked)

   {

  

if (CSE1->Value!=CSE2->Value)MessageBox(NULL,"Единичная матрица - это квадратная матрица.","Error",MB_OK);

else

{

   for (i=0;i<CSE1->Value;i++)

    for (j=0;j<CSE2->Value;j++){

      //A

    if (RB12->Checked)

    {

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       39
Изм Лист № докум. Подпись Дата
if (i==j) SG1->Cells[i][j]=IntToStr(1);

    else      SG1->Cells[i][j]=IntToStr(0);

     }

  //B

  if (RB13->Checked){

    if (i==j) SG2->Cells[i][j]=IntToStr(1);

    else      SG2->Cells[i][j]=IntToStr(0);

     }

   }

}

}  //Нулевая матрица

  if (RB11->Checked)

  {

    for (i=0;i<CSE1->Value;i++)

    for (j=0;j<CSE2->Value;j++)

      SG1->Cells[i][j]=IntToStr(0);

    } 

} 

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

void __fastcall TForm1::RB14Click(TObject *Sender)

{ //Транспонирование  матрицы А

if (RB14->Checked) {

        SG2->Visible=False;

        Label3->Visible=False;

        CSE3->Visible=False;

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       40
Изм Лист № докум. Подпись Дата
        CSE4->Visible=False;

        Edit1->Visible=False;

        SG3->Visible=true;

        Button1->Enabled=true;

        Button2->Enabled=true;

        GB3->Enabled=true;

        Memo1->Visible=false;

   }

}

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

void __fastcall TForm1::Help1Click(TObject *Sender)

{

Application->HelpContext(2);

}

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

void __fastcall TForm1::Button4Click(TObject *Sender)

{

int i,j;

SG1->ColCount=SG3_i+1;

SG2->RowCount=SG3_j+1;

for(i=0;i<=SG3_i;i++)

for(j=0;j<=SG3_j;j++)

SG1->Cells[i][j]=SG3->Cells[i][j];

}

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

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       41
Изм Лист № докум. Подпись Дата
    Руководство программиста 

    Системное и техническое  обеспечение

  • операционная система Windows 9x/ME/2000/XP/2003
  • 16 Мб оперативной памяти
  • 1 Мб свободного пространства на жестком диске
  • Pentium 133 MHz
 

    Процесс установки

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

    Сохранение  данных

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

    Описание  процедур и глобальных переменных

    В данном программном средстве используются шесть глобальных переменных:

    int i_1, j_1, i_g_1, j_g_1- данные переменные используются для закрашивания ячеек максимального либо минимального значения, в зависимости от выбранного варианта;

     SG3_i, SG3_j – переменные используются в процессе экспонирования данных из результатирующей матрицы в матрицу А; 

Разраб.       Разработка  программ матричных вычислений Лист
Пров.        
Изм Лист № докум. Подпись Дата
    В данном программном средстве используются следующие процедуры:

void __fastcall TForm1::N2Click(TObject *Sender) - выход из программы;

void __fastcall TForm1::CSE1Change(TObject *Sender)-  Размерность матрицы А, колличество строк;

void __fastcall TForm1::CSE2Change(TObject *Sender)- Размерность матрицы А, колличество столбцов;

void __fastcall TForm1::RB1Click(TObject *Sender)- настройка интерфейса программы для сложения матриц А и В; 

void __fastcall TForm1::RB2Click(TObject *Sender) - настройка интерфейса программы для вычитания матриц А и В; 

void __fastcall TForm1::RB3Click(TObject *Sender) - настройка интерфейса программы для умножения матрицы А на число; 

void __fastcall TForm1::RB4Click(TObject *Sender)- настройка интерфейса программы для деления матрицы А на число; 

void __fastcall TForm1::RB6Click(TObject *Sender)- настройка интерфейса программы поиска минимального элимента в матрице; 

void __fastcall TForm1::RB7Click(TObject *Sender)- настройка интерфейса программы поиска среднего значения матрицы А; 

void __fastcall TForm1::CSE4Change(TObject *Sender) - Размерность матрицы А, колличество столбцов;

void __fastcall TForm1::CSE3Change(TObject *Sender) - Размерность матрицы В, колличество строк; 

void __fastcall TForm1::RB5Click(TObject *Sender) - настройка интерфейса программы поиска максимального элимента в матрице; 

void __fastcall TForm1::Button1Click(TObject *Sender) – в связи с выбранным элиментом из раздела «Действия» выполняются засчеты над матрицей (матрицами); 

void __fastcall TForm1::FormCreate(TObject *Sender) - присваивание изначальных значений глобальным переменным при инициализации программы; 

void __fastcall TForm1::SG1DrawCell(TObject *Sender, int ACol, int ARow,

      TRect &Rect, TGridDrawState State) – процедура закрашивания ячеек; 
 

Разраб.       Разработка  программ матричных вычислений Лист
Пров.        
Изм Лист № докум. Подпись Дата
 

 

void __fastcall TForm1::Button2Click(TObject *Sender) – процедура обнуления всех значений; 

void __fastcall TForm1::Button3Click(TObject *Sender) – процедура заполнения матрицы (матриц) в зависимости от выбранного варианта;

void __fastcall TForm1::RB14Click(TObject *Sender) -   настройка интерфейса программы для транспонированной матрицы;

void __fastcall TForm1::Help1Click(TObject *Sender) – вызов справки Help; 

void __fastcall TForm1::Button4Click(TObject *Sender) – экспорт результатирующей матрицы в матрицу А; 

Разраб.       Разработка  программ матричных вычислений Лист
Пров.        
Изм Лист № докум. Подпись Дата

Блок-схема 
 

    

Разраб.       Разработка  программ матричных вычислений Лист
Пров.       42
Изм Лист № докум. Подпись Дата
 

Информация о работе Разработка программ матричных вычислений