ОПИСАНИЕ ИСХОДНЫХ ДАННЫХ, ПРАВИЛА ИХ ПОДГОТОВКИ, СВЕДЕНИЯ ОБ ОГРАНИЧЕНИЯХ НА ПРИМЕНЕНИЕ ПРОГРАММЫ

ТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ

ВОСТОЧНОУКРАИНСКОГО НАЦИОНАЛЬНОГО УНИВЕРСИТЕТА

имени ВЛАДИМИРА ДАЛЯ

(г. Северодонецк)

 

Кафедра Компьютерной инженерии

 

 

КУРСОВОЙ ПРОЕКТ (РАБОТА)

 

по программированию

 

 

на тему: Обработка матриц

 

 

студента 2 курса группы КИ-12д

направление подготовки__________________________________________________

                                                                                                                  (шифр и название направления подготовки)

специальности _________________________________________________________

                                                                                                           (шифр и название специальности)

Кротких В.Д.                                   ___________

                                                                        (подпись)

 

Руководитель проекта

 ____________________________           ____________

 (должность, ученое звание, ученая степень,                                                                                      (подпись)                                                            

               фамилия и инициалы)

 

Результаты защиты:

Национальная шкала: ________

Количество баллов: __________

Оценка: ECTS ______________

 

Члены комиссии:

_________________________ ________                                                                                                                                                                  (фамилия и инициалы)                                (подпись) 

________________________ ________                                                                                                                                                                  (фамилия и инициалы)                                                                (подпись) 

_________________________ ________                                                                                                                                                                  (фамилия и инициалы)                                                                (подпись)  

 

Дата_________

 

Северодонецк – 2014

 

ТЕХНОЛОГІЧНИЙ ІНСТИТУТ

СХІДНОУКРАЇНСЬКОГО НАЦІОНАЛЬНОГО УНІВЕРСИТЕТУ

імені ВОЛОДИМИРА ДАЛЯ

(м. Сєверодонецьк)

Факультет ________________________________________________________

Кафедра_________________________________________________________________

Освітньо-кваліфікаційний рівень____________________________________________

Напрям підготовки________________________________________________________

                                                                                                                               (шифр і назва)

Спеціальність____________________________________________________________

(шифр і назва)

 

 

ЗАВДАННЯ

НА КУРСОВИЙ ПРОЕКТ (РОБОТУ) СТУДЕНТ У

 

________________________________________________________________________

                                                           (прізвище, ім’я, по батькові)

1. Тема проекту (роботи): Обробка матриць    

керівник проекту (роботи)_________________________________________________,

( прізвище, ініціали, науковий ступінь, вчене звання)

затверджені розпорядженням по кафедрі від “___”__________20__року

 

2. Строк подання студентом проекту (роботи)_________________________________

 

3. Вихідні дані до проекту (роботи) Дана матриця дійсних чисел розміром nx ( n +1) , дійсні числа a 1 ,.. an , b 1 ,.. bn , натуральні числа p , q ( p ≤ n , q ≤ n +1). Утворити нову матрицю розміру ( n +1)( n +2) вставленням після рядку з номером p даної матриці нового рядка з елементами a 1 ,.. an і подальшим вставленням після стовпчику з номером q нового стовпчика з елементами b 1 ,.. bn . Якщо обидві матриці містять хоча б один рядок, елементи якого утворюють симетричну послідовність (паліндром), то обидві матриці  впорядкувати за спаданням добутків елементів рядків, інакше – перемножити матриці.

4. Зміст розрахунково-пояснювальної записки (перелік питань, які потрібно розробити)_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

5. Перелік графічного матеріалу (з точним зазначенням обов’язкових креслеників)

________________________________________________________________________________________________________________________________________________________________________________________________________________________

6. Дата видачі завдання___________


КАЛЕНДАРНИЙ ПЛАН

№ з/п Назва етапів курсового проектування Строк виконання етапів Примітка
1 Отримання завдання на курсову роботу 09.10.13
2 Аналіз тадослідження задачі 20.12.13
3 Розробка алгоритма вирішення задачі 08.01.14
4 Створення програми 08.01.14
5 Тестування та налагодження 22.01.14
6 Оформлення пояснювальної записки 24.01.14
7 Сдача курсової роботи на перевірку 25.01.14
8 Захист роботы 25.01.14

Студент         _________ ______________________

      ( підпис )                  (прізвище та ініціали)

Керівник проекту (роботи) _________ ______________________

           ( підпис )                  (прізвище та ініціали)

 


 

РЕФЕРАТ

 

Пояснительная записка к курсовой работе: 29 с., 14 рисунков, 3 приложения, 6 источников. Текст написан на русском языке.

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

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

Программа разработана с использованием среды визуального программирования Lazarus и языка Object Pascal. Результаты работы программы отображаются в соответствующих компонентах.

 

ДИАЛОГОВОЕ ОКНО, ТАБЛИЦА, СПИСОК ЭЛЕМЕНТОВ, ПОЛЕ ВВОДА, СОРТИРОВКА.


 

Содержание

Введение. 6

1 Постановка задачи. 7

2 Разработка алгоритма. 9

3 Структура программы.. 10

5 Инструкция оператору. 13

Выводы.. 16

Перечень ссылок. 17

Приложение А. 18

Приложение Б. 23

Приложение В.. 28

 

 


Введение

Lazarus– это среда разработки программ, ориентированных на работу в операционных системах семейства Windows. Программы в Lazarus создаются на основе современной технологии визуального проектирования. С помощью Lazarus можно создать удобный интерфейс программы, в который могут входить различные меню, окна для ввода и вывода текстовой информации и т.п. Такие оконные приложения – основной вид приложений, используемых в операционных системах семейства Windows.

Lazarus только упрощает процесс создания интерфейса, но не заменяет собой собственно программирования. Программы в Lazarus пишутся на языке ObjectPascal, который является преемником и развитием языка TurboPascal.

ObjectPascal — результат развития языка Турбо Паскаль, который, в свою очередь, развился из языка Паскаль. Паскаль был полностью процедурным языком, Турбо Паскаль, начиная с версии 5.5, добавил в Паскаль объектно-ориентированные свойства, а в ObjectPascal — динамическую идентификацию типа данных с возможностью доступа к метаданным классов (то есть к описанию классов и их членов) в компилируемом коде, также называемом интроспекцией — данная технология получила обозначение RTTI. Так как все классы наследуют функции базового класса TObject, то любой указатель на объект можно преобразовать к нему, после чего воспользоваться методом ClassType и функцией TypeInfo, которые и обеспечат интроспекцию.

Также отличительным свойством ObjectPascal от С++ является то, что объекты по умолчанию располагаются в динамической памяти. Однако можно переопределить виртуальные методы NewInstance и FreeInstance класса TObject. Таким образом, абсолютно любой класс может осуществить «желание» «где хочу — там и буду лежать». Соответственно организуется и «многокучность».

В основе разработки приложения в среде Lazrus лежит проект. Центральной частью проекта является форма, на которую помещаются необходимые для решения конкретной задачи компоненты.

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

· Файлы описания форм - текстовые файлы с расширением DFM, описывающие формы с компонентами. В этих файлах запоминаются начальные значения свойств, установленные Вами в окне свойств.

· Файлы программных модулей - текстовые файлы с расширением PAS, содержащие исходные программные коды. В этих файлах Вы пишите методы обработки событий, генерируемых формами и компонентами.

· Главный файл проекта - текстовый файл с расширением DPR, содержащий главный программный блок. Файл проекта подключает все используемые программные модули и содержит операторы для запуска приложения. Этот файл среда Lazarus создает и контролирует сама.

 

 

Постановка задачи

 

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

Массив - набор однотипных элементов, расположенных в памяти непосредственно друг за другом, доступ к которым осуществляется по индексам.

Описание двумерного массива (матрицы) в общем виде выглядит так:

Имя : array[1..n, 1..m] of тип ;

где:

имя — имя файловой переменной;

array — обозначение типа, показывающее, что Имя — это переменная, представляющая массив.

n – число строк в матрице.

m – число столбцов в матрице.

тип – стандартный тип, к которому принадлежат все элементы матрицы.

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

procedureTForml.Button1Click(Sender: TObject);

var

a: array [1..20,1..20] of real;

i,j,n,m: integer;

begin

writeln('Введите количество строк и столбцов

 матрицы A');

readln(n,m);

writeln('Введите матрицу');

for i:=1 to n do

for j:=1 to m do

read(A[i,j]);

writeln ('матрица А ' );

for i:=1 to n do

begin

for j:=1 to m do

write(a[i,j]:8:3, ' '); {Печать строки.}

writeln {Переход на новую строку.}

end;

Вначале выполнения курсовой работы необходимо проанализировать задание и определить перечень вопросов, которые будут решаться в данной работе. Основное назначение этого этапа – создание списка требований к программе, то есть определение того, что будет выполнять разрабатываемая программа. Для программы постановка задачи является самым важным и самым общим представлением требований к ней.

В самом начале выполнения программы пользователь может видеть пустую таблицу, которая в дальнейшем будет служить для отображения элементов матрицы. Чтобы создать новую матрицу, необходимо нажать кнопку «Создать матрицу». При нажатии кнопки программа вызывает функцию, которая генерирует новую матрицу вещественных чисел случайным образом. Далее, пользователю становится доступна функция генерации 2 одномерных массивов, которые будут использованы для созданий второй матрицы. Созданные массивы чисел отображаются как 2 отдельных списка элементов. Поскольку программа обрабатывает только исходную матрицу и 2 дополнительных массива элементов, использование этих компонентов позволяет, в итоге, получить вторую матрицу согласно условию задания. Финальным этапом работы программы является анализ и обработка двух матриц, в результате которых программа отобразит изменения в окне программы соответственно поставленной задаче.

Разработка алгоритма

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

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

Графическое представление алгоритма программы называется схемой алгоритма или блок-схемой.

Алгоритм работы данной программы заключается в следующем:

1) Создание матрицы 1 размерности nx(n+1) и помещение её содержимого в компоненту StringGrid1 (приложение А, рис. А.1);

2) Создание одномерных массивов A и B и помещение их содержимого в компоненты ListBox1 и ListBox2 (приложение А, рис.А.2);

3) Создание матрицы 2 размерности (n+1)x(n+2) со вставкой массивов A и B согласно заданным условиям и помещение её в компоненту StringGrid2 (приложение А, рис. А.3);

4) Проверка каждой строки матрицы 1 и матрицы 2 на наличие на наличие симметричных строк элементов (приложение А, рис. А.5);

5) Если в обеих матрицах найдены симметричные строки, то произвести сортировку строк матрицы 1 и матрицы 2 по убыванию произведения их элементов (приложение А, рис. А.6);

6) Иначе – создать матрицу 3 перемножив соответствующие элементы матрицы 1 м матрицы 2 в соответствии со свойствами произведения матриц (приложение А, рис. А.7);

7) Отобразить изменения в окне программы и вывести сообщение о том, что работа программы завершена (приложение А, рис. А.4).

 

Структура программы

Каждая написанная программа на языке Lazarus состоит из заголовка программы, поля используемых модулей Uses, который может не входить в саму структуру, а также блоков описания и исполнения (начинаются составным оператором begin и заканчиваются end).

Данная программа состоит из процедур, которые выполняют задачи, поставленные при разработке алгоритма.

Описание процедур представлено ниже:

1) procedure Button1Click(Sender: TObject) (приложение Б, строки 60-69);

2) procedure Button2Click(Sender: TObject) (приложение Б, строки 71-85);

3) procedure Button3Click(Sender: TObject) (приложение Б, строки 87-132);

4) procedure Button4Click(Sender: TObject) (приложение Б, строки 134-166);

5) procedure Sort(a,b: integer; var M:mas) (приложение Б, строки 180-205);

6) procedure Multiply(M,N: mas; var P: mas) (приложение Б, строки 207-216).

Также в программе присутствует одна функция, проверяющая матрицу на наличие симметричных строк:

function Check(a,b: integer; M:mas): Boolean; (приложение Б, строки 168-177).

При вызове Button 1 Click ( Sender : TObject ) происходит создание матрицы и заполнение ее случайными действительными числами.

При вызове TForm 1. Button 2 Click ( Sender : TObject ) случайным образом генерируются векторы действительных чисел, которые будут использованы для модификации матрицы.

При вызове TForm 1. Button 3 Click ( Sender : TObject ) программа считывает информацию из полей ввода и создает новую матрицу на основе предыдущей, в которую вставляются после соответствующего столбца и строки векторы действительных чисел.

При вызове TForm1.Button4Click(Sender: TObject) программа анализирует обе матрицы, вызывая функцию TForm1.Check(a,b: integer; M: mas): Boolean, и в соответствии с возвращенным значением либо упорядочивает обе матрицы по убыванию произведений элементов строк с помощью процедуры TForm1.Sort(a,b: integer; var M: mas), либо создает новую матрицу, полученную умножением первой матрицы на вторую, используя процедуры TForm1.Multiply(M,N: mas; var P: mas).

Схема алгоритма программы представлена в приложении А.

На рисунке 3.1 представлена структура программы.

 

 

 

 


Рисунок 3.1 – структура программы.

 


 

ОПИСАНИЕ ИСХОДНЫХ ДАННЫХ, ПРАВИЛА ИХ ПОДГОТОВКИ, СВЕДЕНИЯ ОБ ОГРАНИЧЕНИЯХ НА ПРИМЕНЕНИЕ ПРОГРАММЫ

В задании дана матрица действительных чисел. По умолчанию матрица генерируется с помощью процедуры TForm1.Button1Click(Sender: TObject), но, однажды будучи сгенерированной, матрица может быть отредактирована в поле StringGrid1. При вызове дальнейших процедур изменения будут учтены, и все процедуры и функции будут оперировать измененной матрицей.

Векторы чисел an и bn генерируются случайным образом, при условии, что матрица уже создана.

Оба числа p и q, необходимые для создания измененной матрицы, должны быть заданы в текстовых полях, иначе программа будет использовать заданные по умолчанию значения.

Перед разделом Var описывается запись:

type

mas = array[1..100,1..100] of real;

vector = array[1..100] of real;

{ TForm1 }

 

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

ListBox1: TListBox;

ListBox2: TListBox;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

StringGrid3: TStringGrid;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

function Check(a,b: integer; M:mas): Boolean;

procedure Sort(a,b: integer; var M:mas);

procedure Multiply(M,N: mas; var P: mas);

private

{ private declarations }

public

{ public declarations }

end;           

В разделе Var описываются исходный и результирующий файлы и форма программы.

 

var

Form1: TForm1;

Matrix1, Matrix2, Matrix3: mas;

A,B: vector;

p,q: byte;

i,j,k: integer;

Инструкция оператору

 

При запуске программы открывается окно, показанное на рисунке 5.1.

 

Рисунок 5.1 – Окно программы.

 

После этого пользователь должен нажать на кнопку «Создать матрицу», после чего поля таблицы заполнятся значениями матрицы.

 

 

Рисунок 5.2 – Пример сгенерированной матрицы

 

Для выполнения следующего шага – создания векторов действительных чисел An и Bn необходимо нажать кнопку «A[n] и B[n]», после чего под кнопкой появятся 2 списка значений векторов.

Рисунок 5.3 – После нажатия кнопки генерируются вектора действительных чисел

 

Кнопка «Обработка матрицы» становится активной, следовательно, можно создать матрицу 2 на основе матрицы 1. Чтобы задать номера строки и столбца, после которых будут вставляться новые элементы, пользователь должен ввести необходимые числа в поля ввода (p – номер строки, q – номер столбца). Если поля оставить пустыми либо ввести числа из некорректного диапазона, то эти значения задаются случайным образом.

Рисунок 5.4 – Пример того что произойдет после нажатия кнопки «Обработка матрицы»

 

Далее необходимо нажать на кнопку «Анализ матриц». В зависимости от того, имеются ли в обеих матрицах симметричные строки, выполняется либо упорядочивание матриц, либо их умножение.

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

 

Рисунок 5.5 – Пример измененных матриц.

 

После нажатия кнопки «Анализ матриц» программа обнаруживает, что в каждой матрице присутствуют симметричные строки. Выводится сообщение, что работа успешно завершена и в окне программы отображаются изменения.

Рисунок 5.6 – Пример результата

 

Выводы

Данная курсовая работа была выполнена в полном соответствии поставленному заданию и отлажена в среде Lazarus. В ходе выполнения курсовой работы была разработана программа для обработки матриц.

В ходе выполнения курсового проекта был разработан алгоритм программы. Согласно разработанному алгоритму была написана и отлажена программа.

Результаты работы оформлены в виде пояснительной записки.

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

· Работа c компонентами среды Lazarus;

· Использование процедур;

· Сортировка элементов массива;

· Работа с одномерными и двумерными массивами;

· Предотвращение ошибок.

В результате выполнения данной курсовой работы мы убедились в широких возможностях языка программирования Lazarus, закрепили практические навыки программирования в среде Lazarus.

 

Перечень ссылок

 

1) Зуев Е.А. Программирование на языке Delphi 6.0,7.0. – М.: Радио и связь, Веста, 1993.

2) Фаронов В.В. Delphi 7.0. Начальный курс. - М.: Нолидж, 2000.

3) http://beluch.ru/progr/100comp/8_2.htm

4) Е. Р. Алексеев, О. В. Чеснокова, Т. В. Кучер. Free Pascal и Lazarus. Учебник по программированию – М.: ДМК-пресс, 2010.

5) Климова Л.М. Pascal 7.0. Практическое программирование. Решение типовых задач. –М.:КУДИУ ОБРАЗ, 2000.

6) Методические указания к выполнению курсовой работы по дисциплине"Программирование"/Сост.: Н.С. Семенова, С.А. Сафонова – Северодонецк: Изд-во СТИ ВНУ, 2006. - 37с.


 

Приложение А.

СХЕМА АЛГОРИТМА ПРОГРАММЫ

 

Рисунок А .1 – Схема алгоритма procedure TForm1.Button1Click(Sender: TObject)

Рисунок А .2 – Схема алгоритма procedure TForm1.Button2Click(Sender: TObject).

 

Рисунок А .3 – Схема алгоритма procedure TForm1.Button3Click(Sender: TObject) (1 часть)

 

Рисунок А .3 – Схема алгоритма procedure TForm1.Button3Click(Sender: TObject) (2 часть)

 

 

Рисунок А .3 – Схема алгоритма procedure TForm1.Button3Click(Sender: TObject) (3 часть)

 

Рисунок А . 4 – Схема алгоритма procedure TForm1.Button4Click(Sender: TObject)(1 часть)

 

 

Рисунок А . 4 – Схема алгоритма procedure TForm1.Button4Click(Sender: TObject)(2 часть)

Рисунок А . 5 – Схема алгоритма function TForm1.Check (a,b: integer; M: mas): Boolean.

 

 

Рисунок А .6 – Схема алгоритма procedure TForm1.Sort(a,b: integer; var M: mas)

 

 

Рисунок А .7 – Схема алгоритма procedure TForm1.Multiply(M,N: mas; var P: mas).

Приложение Б

ТЕКСТ ПРОГРАММЫ


unit Unit1;

 

{$mode objfpc}{$H+}

 

interface

 

uses

Classes, SysUtils, FileUtil, LCLType, Forms, Controls, Graphics, Dialogs, StdCtrls,

Grids, ExtCtrls;

const

x = 4;

y = x+1;

z = y+1;

type

mas = array[1..100,1..100] of real;

vector = array[1..100] of real;

{ TForm1 }

 

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Edit1: TEdit;

Edit2: TEdit;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

ListBox1: TListBox;

ListBox2: TListBox;

StringGrid1: TStringGrid;

StringGrid2: TStringGrid;

StringGrid3: TStringGrid;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

function Check(a,b: integer; M:mas): Boolean;

procedure Sort(a,b: integer; var M:mas);

procedure Multiply(M,N: mas; var P: mas);

private

{ private declarations }

public

{ public declarations }

end;

 

var

Form1: TForm1;

Matrix1, Matrix2, Matrix3: mas;

A,B: vector;

p,q: byte;

i,j,k: integer;

implementation

 

{$R *.lfm}

 

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);

begin

Button2.Enabled:=true;

for i:=1 to x do

   for j:=1 to y do

       begin

         Matrix1[i,j]:=random(10)+random(10)/10;

         StringGrid1.Cells[j-1,i-1]:=FloatToStr(Matrix1[i,j]);

       end;

end;

 

procedure TForm1.Button2Click(Sender: TObject);

begin

Button3.Enabled:=true;

ListBox1.Clear;

ListBox2.Clear;

Listbox1.Visible:=true;

Listbox2.Visible:=true;

for i:=1 to y do

begin

   A[i]:=random(10)+random(10)/10;

   ListBox1.Items.Add(FloatToStr(A[i]));

   B[i]:=random(10)+random(10)/10;

   ListBox2.Items.Add(FloatToStr(B[i]));

end;

end;

 

procedure TForm1.Button3Click(Sender: TObject);

var temp: real;

index: integer;

begin

p:=3;

q:=2;

if ((Edit1.Text<>'') or (Edit2.Text<>'')) then

begin

     p:=StrToInt(Edit1.Text);

     q:=StrToInt(Edit2.Text);

     if (p<1) or (p>x) then p:=random(x)+1;

     if (q<1) or (q>y) then q:=random(y)+1;

end;

Edit1.Text:=IntToStr(p);

Edit2.Text:=IntToStr(q);

for i:=1 to x do

for j:=1 to y do

     begin

       Matrix1[i,j]:=StrToFloat(StringGrid1.Cells[j-1,i-1]);

       Matrix2[i,j]:=Matrix1[i,j];

     end;

for i:=y downto p+2 do

for j:=1 to z do

       begin

         temp:=Matrix2[i,j];

         Matrix2[i,j]:=Matrix2[i-1,j];

         Matrix2[i-1,j]:=temp;

       end;

for j:=z downto q+2 do

  for i:=1 to y do

     begin

        temp:=Matrix2[i,j];

        Matrix2[i,j]:=Matrix2[i,j-1];

        Matrix2[i,j-1]:=temp;

     end;

index:=0;

for j:=1 to z do

   if j<>q+1 then

      begin

         inc(index);

         Matrix2[p+1,j]:=A[index];

      end;

for i:=1 to y do

begin

Matrix2[i,q+1]:=B[i];

for j:=1 to z do

          StringGrid2.Cells[j-1,i-1]:=FloatToStr(Matrix2[i,j]);

end;

Button4.Enabled:=true;

end;

 

procedure TForm1.Button4Click(Sender: TObject);

var condition: boolean;

begin

for i:=1 to y do

   for j:=1 to z do

         begin

              if (i<=x) and (j<=y) then Matrix1[i,j]:=StrToFloat(StringGrid1.Cells[j-1,i-1]);

              Matrix2[i,j]:=StrToFloat(StringGrid2.Cells[j-1,i-1]);

         end;

condition:=false;

if check(x,y,Matrix1) and check(y,z,Matrix2) then condition:=true;

if condition=true then

begin

      sort(x,y,Matrix1);

      sort(y,z,Matrix2);

      for i:=1 to y do

          for j:=1 to z do

              begin

                   if (i<=x) and (j<=y) then StringGrid1.Cells[j-1,i-1]:=FloatToStr(Matrix1[i,j]);

                   StringGrid2.Cells[j-1,i-1]:=FloatToStr(Matrix2[i,j]);

               end;

end

else

  begin

       multiply(Matrix1, Matrix2, Matrix3);

       for i:=1 to x do

           for j:=1 to z do

               StringGrid3.Cells[j-1,i-1]:=FloatToStr(Matrix3[i,j]);

  end;

Application.MessageBox('Работа программы завершена успешно.', 'Info', MB_ICONINFORMATION);

end;

 

function TForm1.Check(a,b: integer; M: mas): Boolean;

begin

check:=true;

for i:=1 to a do

begin

   for j:=1 to b div 2 do

       if M[i,j]<>M[i,y-j+1] then check:=false;

   if check=true then break;

end;

end;

 

procedure TForm1.Sort(a,b: integer; var M: mas);

var

p: real;

product: vector;

begin

for i:=1 to a do

begin

p:=0;

for j:=1 to b do p:=p+M[i, j];

product[i]:=p;

end;

for i:=1 to a-1 do

  for j:=1 to a-i do

      if product[j] < product[j+1] then

         begin

         p:=product[j];

         product[j]:=product[j+1];

         product[j+1]:=p;

         for k:=1 to b do

             begin

               p:=M[j,k];

               M[j,k]:=M[j+1,k];

               M[j+1,k]:=p

             end

         end;

end;

 

procedure TForm1.Multiply(M,N: mas; var P: mas);

begin

for i:=1 to x do

for j:=1 to z do

   begin

     P[i,j]:=0;

     for k:=1 to y do

        P[i,j]:=P[i,j]+M[i,k]*N[k,j];

   end;

end; 

end.


Приложение В


Дата добавления: 2020-12-12; просмотров: 91; Мы поможем в написании вашей работы!

Поделиться с друзьями:




Мы поможем в написании ваших работ!