Обработка матриц

3



	СОДЕРЖАНИЕ

	

	ВВЕДЕНИЕ 

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

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

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

	3.1 Создание оконного приложения 

	3.2 Этапы создания оконного приложения

	3.3 Страница Стандартные Палитры Компонентов 

	3.4 Организация ввода и вывода данных 

	3.5 Создание меню приложений в среде Delphi 

	3.6 Структура проекта Delphi 

	3.7 Форма в режиме дизайна 

	3.8 Форма в режиме выполнения 

	3.9 Задание исходной матрицы 

	4. Отладка программы

		4.1 Синтаксические ошибки

		4.2 Ошибки периода выполнения программы

		4.3 Логические ошибки

	ВЫВОДЫ 

		ПЕРЕЧЕНЬ ССЫЛОК 

	ПРИЛОЖЕНИЯ 

	

	


	ВВЕДЕНИЕ

	

	Тема курсовой работы по программированию «Обработка матриц».

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

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

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

	


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

	

	Дана числовая матрица 7*9. Создать одномерные массивы А и В, состоящие из элементов контуров

	

	1,3-1,4-2,4-3,5-5,3-5,2-4,2-4,1-3,1-3,2-2,3-1,3

	3,9-5,11-7,9-6,8-4,8-3,9

	

	Найти min из положительных элементов массива А и max из отрицательных В.

	Они делят А и В на 2 части. Создать новые массивы С1 и С2, соединив соответственно вторую часть массива А с первой массива В, и наоборот. Отсортировать С1 по возрастанию, С2 по убыванию методом пузырька.

	Требуется создать одномерные массивы А и В, состоящие из элементов контуров. Найдем минимальные положительные значения массива А и максимальные отрицательные значения из массива В. Создадим новые массивы С1 и С2 и отсортируем значения по возрастанию и убыванию, предварительно ознакомившись с «методом пузырька».

	

	


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

	

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

	Ввод значений элементов матрицы.

	Задание массивов А и В.

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

	Формируются новые массивы С1 и С2, методом объединения соответственно второй части массива А с первой массива В, и наоборот.

	Сортируются массивы С1 по возрастанию, С2 по убыванию методом пузырька. Сортировка заключается в циклическом попарном сравнении двух элементов. Максимальный (минимальный) элемент ставится в конец пары. После просмотра всего массива последним элементом будет максимальный (минимальный) элемент. Операция попарного сравнения начинается заново с начала массива и повторяется n-1 раз (где n – число элементов массива).

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

	

	


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

	

	3.1 Создание оконного приложения

	

	После запуска Delphi на экране компьютера появляется окно, представленное на рисунке 3.1.

	

	

	Рисунок 3.1 - Окна и панели среды Delphi

	

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

	

	

	Рисунок 3.2 - Панель инструментов

	

	Палитра Компонентов главного окна содержит большой набор объектов, которые можно добавить в форму. Именно компоненты являются средством создания приложений в среде Delphi (рисунок 3.3). Палитра Компонентов использует постраничную группировку объектов. Для этого в Палитре находится набор закладок – Стандартные, Дополнительно, Система и т.д.

	

	

	Рисунок 3.3 - Палитра Компонентов

	

	В центре экрана располагается окно формы с заголовком Form1, которое используется для размещения компонентов Delphi.

	Окно редактора кода, содержащее код программы, по умолчанию имеет заголовок Unit1.pas и предназначено для создания и редактирования кода программы.

	Окно Инспектора Объектов позволяет изменять свойства (характеристики) компонентов (рисунок 3.4). Инспектор Объектов состоит из двух страниц, каждую из которых можно использовать для определения поведения данного компонента. Первая страница - это список свойств, вторая - список событий. Свойствами объекта являются, например, его размер, положение на экране или на форме, текст заголовка или текст на командной кнопке, цвет и т.д. Событие - это то, что происходит во время работы приложения. В Delphi у каждого события есть имя. Например, щелчок кнопкой мыши – это событие OnClick, двойной щелчок - событие OnDblClick. В Delphi реакция на событие реализуется как процедура обработки события.

	

	

	Рисунок 3.4 - Окно Инспектора Объектов

	3.2 Этапы создания оконного приложения

	

	Процесс создания простейшего оконного приложения можно разбить на 2 этапа: этап конструирования формы и этап программирования.

	На этапе конструирования приложения выполняются следующие операции:

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

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

	- Для того, чтобы придать компоненту нужные свойства, следует использовать страницу Параметры Инспектора Объектов. Левая колонка содержит название параметра, а правая – его конкретное значение. Параметры могут быть простыми или сложными. Простые – числа, строки, значение True/False. Сложные параметры определяются совокупностью значений. Слева от имени таких параметров указывается символ «+». Двойной щелчок раскрывает список значений сложного параметра. Закрывается раскрытый список тоже двойным щелчком на имени параметра.

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

	Особенности этого этапа:

	- Каждый компонент может реагировать на определенный набор событий. Для того, чтобы узнать, на какие именно события откликается компонент, необходимо выделить его, затем перейти на страницу События Инспектора Объектов. Страница содержит 2 колонки. В первой колонке перечислены имена событий, на которые откликается компонент, вторая заполняется программистом и содержит имена созданных обработчиков событий.

	- Обработчик событий представляет собой процедуру и имеет имя, состоящее из двух частей, разделенных точкой. Первая часть представляет собой имя класса создаваемой формы. Вторая часть имени создается либо программистом, либо средой Delphi, если программист не ввел своё имя. В последнем случае оно представляет собой объединение имени компонента и имени события без предлога On.

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

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

	




	3.3 Страница Стандартные Палитры Компонентов

	

	На этой странице расположены пиктограммы, соответствующие перечисленным ниже компонентам.

	MainMenu позволяет поместить главное меню в программу. На форме MainMenu выглядит, как просто иконка. Иконки данного типа называют "невидимыми компонентами", поскольку они невидимы во время выполнения программы. Создание меню включает три шага:

			размещение MainMenu на форме;

			вызов Дизайнера Меню через свойство Items в Инспекторе Объектов;

			определение пунктов меню в Дизайнере Меню.

	PopupMenu позволяет создавать контекстные меню. Этот тип меню появляется по щелчку правой кнопки мыши.

	Label (метка) служит для отображения текста на экране. Для изменения шрифта и цвета метки, можно использовать свойство Font в Инспекторе Объектов.

	Edit (строка ввода) - стандартный управляющий элемент Windows для ввода. Он может быть использован для отображения короткого фрагмента текста и позволяет пользователю вводить текст во время выполнения программы.

	Memo – используется для работы с большими текстами. Memo может переносить слова, сохранять в Clipboard фрагменты текста и восстанавливать их, а также выполнять другие основные функции редактора.

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

	CheckBox (выключатель, флажок) отображает строку текста с маленьким окошком рядом, в котором можно поставить отметку.

	RadioButton (радиокнопка) позволяет выбрать только одну опцию из нескольких.

	ListBox (список) нужен для показа прокручиваемого списка.

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

	

	3.4 Организация ввода и вывода данных

	

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

	Для получения вводимого значения можно использовать функцию InputBox. Эта функция имеет 3 строковых параметра – для заголовка окна, подписи к строке ввода и значения, которое помещается в строку. Результат этой функции – введенная строка.

	

	Str:=InputBox(‘Окно ввода', ‘Сообщение’,’ Ввод данных’).

	

	Строка ввода Edit также может использоваться для ввода данных. Введенные значения заносятся в свойство text. Это свойство имеет строковый тип. Следовательно, после ввода данных Edit1.text хранит в строковом представлении то, что было введено в строку ввода Edit.

	Для преобразования строки в число используются функции Object Pascal - StrToFloat и StrToInt.

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

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

	Функции FloatToStr(a) и IntToStr(c) предназначены для преобразования в строку, соответственно, вещественного или целого числа.

	

	Рисунок 3.5 - Размещение компонентов Edit и Label на форме

	

	Само по себе внесение данных в строку ввода не приведет к их обработке. Для того, чтобы это произошло, нужно использовать компонент Button – кнопку. Этот компонент предназначен для формирования события при нажатии на эту кнопку. На рисунке 3.6 представлена форма с кнопкой Button1. Свойство Caption этой кнопки – "Вычисление квадратного корня".

	

	

	Рисунок 3.6 - Форма с кнопкой Button

	

	Для кнопки Button событие OnClick является событием по умолчанию, поэтому, для создания заготовки обработчика события, достаточно выполнить двойной щелчок по кнопке Button. В результате окно редактора кода станет активным и будет содержать заготовку обработчика события TForm1.Button1Click. Между словами begin – end следует поместить операторы, которые будут выполняться при нажатии кнопки.

	Таблица StringGrid (таблица строк) предназначена для отображения двумерной информации. Каждая ячейка может содержать символьную строку. Значок таблицы находится на странице Дополнительно палитры компонентов.

	

	

	Рисунок 3.7 - Страница Дополнительно палитры компонентов

	

	Нумерация строк и столбцов таблицы начинается с 0. Координаты каждой ячейки таблицы задаются парой чисел. Первое число – номер столбца, второе – номер строки. Например, ячейка с номером (3,5) расположена в четвертом столбце и шестой строке.

	Основные свойства таблицы:

	Name –имя компонента. Используется в программе для доступа к свойствам компонента.

	Cells – соответствующий таблице двумерный строковый массив.

	Cells[i,j] – элемент, который находится в столбце i и в строке j.

	ColCount – число столбцов в таблице.

	RowCount - число строк в таблице.

	FixedCols – число фиксированных столбцов. По умолчанию –1.

	FixedRows - число фиксированных строк. По умолчанию –1.

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

	DefaultDrawing – если свойство имеет значение True, то прорисовка ячеек при рисовании таблицы будет происходить автоматически, в противном случае нужно создать свои средства отображения.

	DefaultColWidth– задает исходную ширину всех столбцов.

	DefaultRowHeight - задает исходную высоту всех строк.

	Col – номер столбца, в котором находится активная ячейка. Свойство доступно только на этапе выполнения программы.

	Row - номер строки, в которой находится активная ячейка. Свойство доступно только на этапе выполнения программы.

	Для определения поведения таблицы используется свойство Options. Оно содержит различные флаги. Например, флаг goEditing позволяет редактировать ячейки таблицы, то есть на этапе выполнения программы разрешается вводить и редактировать данные в ячейке. Эти свойства следует задать в Инспекторе Объектов (рисунок 3.8). На вкладке Параметры указано количество зафиксированных вверху строк – 1, зафиксированных колонок – 0.

	

	

	Рисунок 3.8 - Инспектор Объектов таблицы строк tab1

	

	3.5 Создание меню приложений в среде Delphi

	

	В Delphi для создания главного меню имеется визуальный компонент Main Menu, расположенный на странице Standard Палитры Компонентов. Процесс создания главного меню на этапе конструирования формы осуществляется при помощи встроенного конструктора меню (Menu Designer).

	Вначале нужно поместить компонент Main Menu на форму, а затем вызвать конструктор. Для вызова конструктора можно дважды щелкнуть левой кнопкой по компоненту Main Menu или вызвать контекстное меню, в котором выбрать команду Menu Designer. В открывшемся окне (рисунок 3.9) следует ввести названия пунктов меню.

	

	Рисунок 3.9 - Окно ввода названий пунктов меню

	

	При вводе названия элемента меню, определяется значение свойства Caption для этого пункта (рисунок 3.10).

	

	

	Рисунок 3.10 -Инспектор объектов для второго пункта

	

	Подчеркнутая буква в имени пункта означает клавишу быстрого перехода. Задать её можно с помощью символа &, помещаемого перед соответствующим символом текста.

	После ввода всех пунктов меню нужно закрыть окно конструктора. На форме остается созданное меню (рисунок 3.11).

	

	

	Рисунок 3.11 - Форма с двумя пунктами меню

	Для определения реакции на выбор пунктов следует по очереди выбирать все пункты меню и щелкать по ним мышкой. В результате появляется окно Редактора Кода, в котором нужно ввести программный код для обработчика события OnClick.

	

	3.6 Структура проекта Delphi

	

	Программа Delphi – это несколько связанных между собой файлов. Любая программа состоит из файла проекта (с расширением .dpr) и одного или нескольких модулей с расширением .pas. Файл проекта не предназначен для редактирования пользователем и создается автоматически самой системой программирования Delphi.. Модули имеют стандартную конструкцию, предусмотренную языком Pascal.

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

	

	3.7 Форма в режиме дизайна

	

	

	Рисунок 3.13 – Форма в режиме дизайна

	




	3.8 Форма в режиме выполнения

	

	

	Рисунок 3.14 – Форма в режиме выполнения

	

	3.9 Задание исходной матрицы

	

	

	Рисунок 3.15 - Задание массива А и В (случайным образом)

	

	

	Рисунок 3.16 - Задание массивов С1 и С2 (по частям массивов А и В с последующей сортировкой)

	

	Листинг программы приводим в Приложении Б.


	4. Отладка программы

	

	Термин «отладка» означает исправление ошибок в программе и обеспечение ее правильной работы. Возникающие в процессе создания программы ошибки классифицируются следующим образом:

			Синтаксические ошибки.

			Ошибки периода выполнения программы.

			Логические ошибки.

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

	

		4.1 Синтаксические ошибки

	

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

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

	На рисунке 4.1 изображено окно редактора кода в тот момент, когда программа была запущена на компиляцию и компилятор обнаружил синтаксические ошибки. Напомним, что запуск на компиляцию и выполнение программы осуществляется командой Выполнить/Выполнить (функциональная клавиша F9), а запуск программы только на компиляцию можно осуществить при помощи команды Проект/Компилировать < имя файла проекта > (комбинация клавиш Ctrl+F9). В нижней части редактора кода содержатся сообщения об ошибках. Сообщение начинается словом [Ошибка], заключенным в квадратные скобки, далее идет имя файла проекта, затем в круглых скобках указывается номер строки программы, где была допущена ошибка и, в заключение, после двоеточия идет текст, поясняющий смысл допущенной ошибки.

	

	

	Рисунок 4.1 - Сообщение компилятора о синтаксической ошибке

	

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

	

		4.2 Ошибки периода выполнения программы

	

	Другой возможный тип ошибок - это ошибки этапа выполнения (или семантические ошибки). Это происходит в том случае, если транслируется корректная программа, а затем при ее выполнении предпринимается попытка выполнить недопустимое действие, например, открыть несуществующий файл для ввода или выполнить деление на 0. В этом случае Delphi генерирует так называемое исключение (Exception) – рисунок 4.2.

	

	

	Рисунок 4.2 - Сообщение о сгенерированном исключении

	

	Сообщение, содержащееся в этом окне, информирует, что произошло деление на ноль, и выполнение программы приостановлено. Нажатие кнопки OK прерывает выполнение программы. Открывается окно редактора кода, в котором строка, содержащая ошибку, будет выделена синей полосой (рисунок 4.3).

	

	

	Рисунок 4.3 - Строка кода, содержащая ошибку периода выполнения

	

		4.3 Логические ошибки

	

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

	В больших и сложных программах логические ошибки и ошибки периода выполнения достаточно трудно отследить и обнаружить. В этих случаях вполне естественным является желание выполнить программу в интерактивном режиме, наблюдая за изменениями значений отдельных переменных или выражений. При этом желательно иметь возможность останавливаться в определенном месте программы и смотреть, что там происходит. Часто бывает полезно изменять значения некоторых переменных при выполнении программы. Это позволит повлиять на ее поведение и увидеть, в какую сторону оно изменилось. Все эти возможности наряду с другими средствами предоставляет отладчик Delphi, являющийся составной частью интегрированной среды разработки.

	Интегрированная среда Delphi предоставляет пользователю несколько команд пошаговой отладки доступных в меню Выполнить (рисунок 4.4).

	

	

	Рисунок 4.4 – Команды отладки

	

	В Delphi имеется два режима трассировки - без захода в подпрограмму и с заходом в неё.

	Если необходимо выполнить трассировку части программы, то следует установить в редакторе кода указатель на тот оператор, с которого следует начать трассировку, и выполнить команду Выполнить/Выполнять до Курсора (функциональная клавиша F4). Затем можно продолжить трассировку, нажимая клавиши F7 или F8.

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

	Для внесения новой точки останова выполняется команда Выполнить/Добавить Точку Останова или нажатие функциональной клавиши F5.




	ВЫВОДЫ

	

	В процессе выполнения курсовой работы были выполнено:

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

	- разработка алгоритма разрабатываемой программы;

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

	- произведена отладка программы.

	

	


		ПЕРЕЧЕНЬ ССЫЛОК

		

			Абрамов В.Г., Трифонов Н.П., Трифонова Г.Н. Введение в язык Паскаль. - М.: Наука, 1988.

			Довгаль С.И., Литвинов Б.Ю., Сбитнев А..И. Персональные ЭВМ : Турбо Паскаль V7.0, объектное программирование, локальные сети. – Киев: Информсиситема сервис, 1993.

			Епанешников А.М., Епанешникова В.А. Программирование в среде Turbo Pascal 7.0.-М.: Диалог – МИФИ,1999.

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

			Кандзюба С.П., Громов В.Н. Delphi 7.Базы данных и приложения. Лекции и упражнения. – К.: Издательство "ДиаСофт", 2001.

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

			Марченко А. И., Марченко Л.А.. Программирование в среде Turbo Pascal 7.0.-К.: Век+,1999.

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

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

	

	


	ПРИЛОЖЕНИЕ А

	

	Схема алгоритма

	

	

	




	Продолжение Приложения А

	

	

	

	


	ПРИЛОЖЕНИЕ Б

	

	Листинг программы

	

	unit Unit1;

	interface

	uses

	Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

	Dialogs, StdCtrls, Grids;

	type

	TForm1 = class(TForm)

	gbMatrix: TGroupBox;

	sgMatrix: TStringGrid;

	buZapoln: TButton;

	gbMassiv: TGroupBox;

	lbA: TLabel;

	lbB: TLabel;

	sgA: TStringGrid;

	sgB: TStringGrid;

	buMassiv: TButton;

	sgC2: TStringGrid;

	sgC1: TStringGrid;

	lbC1: TLabel;

	lbC2: TLabel;

	buC: TButton;

	procedure FormCreate(Sender: TObject);

	procedure buZapolnClick(Sender: TObject);

	procedure buMassivClick(Sender: TObject);

	procedure buCClick(Sender: TObject);

	private

	{ Private declarations }

	public

	{ Public declarations }

	end;

	var

	Form1: TForm1;

	matrix: array [1..7, 1..9] of integer;

	a, b, c1, c2: array [1..20] of integer;

	kol_a, kol_b, kol_c1, kol_c2, min_a, min_a_i, max_b, max_b_i: integer;

	implementation

	{$R *.dfm}

	procedure TForm1.FormCreate(Sender: TObject);

	var

	i, j: integer;

	begin

	Randomize; // включить генератор случайных чисел

	for i:= 1 to 7 do

	sgMatrix.Cells[0, i]:= IntToStr(i);

	for i:= 1 to 9 do

	sgMatrix.Cells[i, 0]:= IntToStr(i);

	for i:= 1 to 7 do

	for j:= 1 to 9 do

	begin

	matrix[i, j]:= random(31);

	sgMatrix.Cells[j, i]:= IntToStr(matrix[i, j]);

	end;

	end;

	procedure TForm1.buZapolnClick(Sender: TObject);

	var i, j: integer;

	begin

	for i:= 1 to 7 do

	for j:= 1 to 9 do

	begin

	matrix[i, j]:= StrToInt(sgMatrix.Cells[j, i]);

	end;

	end;

	procedure TForm1.buMassivClick(Sender: TObject);

	var i: integer;

	begin

	// задание массива А

	kol_a:= 10;

	sgA.ColCount:= kol_a + 1;

	for i:= 1 to kol_a do

	begin

	a[i]:= random(31)- random(41);

	sgA.Cells[i, 0]:= IntToStr(i);

	sgA.Cells[i, 1]:= IntToStr(a[i]);

	end;

	// задание масива В

	kol_b:= 7;

	sgB.ColCount:= kol_b + 1;

	for i:= 1 to kol_b do

	begin

	b[i]:= random(21)- random(26);

	sgB.Cells[i, 0]:= IntToStr(i);

	sgB.Cells[i, 1]:= IntToStr(b[i]);

	end;

	// поиск максимума и минимума

	min_a:= 100;

	min_a_i:= 1;

	max_b:= -100;

	max_b_i:= 1;

	for i:= 1 to kol_a do

	if (a[i]>0) and (a[i]<min_a)then

	begin

	min_a:= a[i];

	min_a_i:= i;

	end;

	for i:= 1 to kol_b do

	if (b[i]<0) and (b[i]>max_b)then

	begin

	max_b:= b[i];

	max_b_i:= i;

	end;

	end;

	procedure TForm1.buCClick(Sender: TObject);

	var i, j, k: integer;

	begin

	// формирование массивов с1 и с2

	kol_c1:=0;

	for i:= min_a_i+1 to kol_a do

	begin

	kol_c1:= kol_c1+1;

	c1[kol_c1]:= a[i];

	end;

	for i:= 1 to max_b_i do

	begin

	kol_c1:= kol_c1+1;

	c1[kol_c1]:= b[i];

	end;

	kol_c2:=0;

	for i:= 1 to min_a_i do

	begin

	kol_c2:= kol_c2+1;

	c2[kol_c2]:= a[i];

	end;

	for i:= max_b_i+1 to kol_b do

	begin

	kol_c2:= kol_c2+1;

	c2[kol_c2]:= b[i];

	end;

	// сортировка массивов с1 и с2

	for j:= kol_c1 downto 2 do

	for i:= 1 to kol_c1 do

	if c1[i] > c1[i+1] then

	begin

	k:=c1[i] ;

	c1[i]:=c1[i+1];

	c1[i+1]:=k;

	end;

	for j:= kol_c2 downto 2 do

	for i:= 1 to kol_c2 do

	if c2[i] < c2[i+1] then

	begin

	k:=c2[i] ;

	c2[i]:=c2[i+1];

	c2[i+1]:=k;

	end;

	// отображение с1 и с2

	sgC1.ColCount:= kol_c1 + 1;

	for i:= 1 to kol_c1 do

	begin

	sgC1.Cells[i, 0]:= IntToStr(i);

	sgC1.Cells[i, 1]:= IntToStr(c1[i]);

	end;

	sgC2.ColCount:= kol_c2 + 1;

	for i:= 1 to kol_c2 do

	begin

	sgC2.Cells[i, 0]:= IntToStr(i);

	sgC2.Cells[i, 1]:= IntToStr(c2[i]);

	end;

	end;

	end.