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

Анализ технического задания и постановка задачи проектирования. Разработка алгоритма программы и пользовательского интерфейса. Описание переменных, объектов и процедуры VIVOD, SOR_UB, SORT_VOZR и др. Описание сервисных процедур и инструкция оператору.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 13.01.2015
Размер файла 638,7 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Технологический институт

Восточноукраинский национальный университет имени Владимира Даля (г. Северодонецк)

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

Пояснительная записка к курсовой работе

По дисциплине: «Программирование»

На тему: «Обработка матриц»

Северодонецк 2013

Содержание

  • Реферат
  • Введение
  • 1. Анализ технического задания и постановка задачи проектирования
  • 2. Разработка алгоритма программы
  • 3. Разработка программы и пользовательского интерфейса
    • 3.1 Описание переменных и объектов
    • 3.2 Описание процедуры mnMatrClick
    • 3.3 Описание процедуры mnMassClick
    • 3.4 Описание процедуры VIVOD
    • 3.5 Описание процедуры SORT_UB
    • 3.6 Описание процедуры SORT_VOZR
    • 3.7 Описание сервисных процедур
  • 4. Инструкция оператору
  • Выводы
  • Перечень ссылок
  • Приложения

Реферат

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

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

Программа разработана с использованием среды визуального программирования IDE Lazarus и языка Free Pascal.

Введение

Данный курсовой проект был разработан в среде Lazarus IDE v0.9.28 с базовым языком программирования Free Pascal. Среди множества языков Pascal является наиболее универсальным и легко изучаемым языком. При этом его удобно использовать для создания сложных приложений, базами данных, приложения масштаба предприятия. FreePascal Lazarus так же прост в обучении, как и Visual Basic, но при этом средства языка программирования Pascal позволяет использовать все современные возможности объектно-ориентированного программирования.

Lazarus - это система с открытым исходным кодом, которая построена на компиляторе Free Pascal Compiler с добавлением Интегрированной Среды Разработки (IDE), которая включает в себя подсветку синтаксиса, редактор кода и визуальный проектировщик форм, а также библиотеку компонентов, которая очень хорошо совместима с Библиотекой Визуальных Компонентов Lazarus (VCL). Библиотека Визуальных Компонентов Lazarus (LCL) включает эквиваленты для большинства объектов управления из VCL например, формы, кнопки, текстовые поля и так далее, которые используются для создания приложений, которые имеют графический интерфейс (GUI).

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

1. Анализ технического задания и постановка задачи проектирования

Дана числовая матрица 8*10. Создать одномерные массивы А и В, состоящие из элементов ограниченных контурами: 1,1 -1,2 -3,2 - 3,5 - 5,5 - 5,1 - 1,1 и 1,10 - 2,9 - 3,8 - 4,7 -5,8 - 6,9 - 7,10 - 1,10. Найти min массива А и последний отрицательный элемент массива В: они делят А и В на 2 части. Создать новые массивы С1 и С2, соединив, соответственно, первую часть массива А с второй массива В, и наоборот. Отсортировать С1 по убыванию, С2 по возрастанию методом выбора.

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

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

2) Разработка обработчиков событий от элементов экранных форм, разработка алгоритмов и программных кодов действий согласно заданию.

3) Подготовка тестовых исходных данных и отладка программы.

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

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

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

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

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

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

- возможность автоматического заполнения исходной матрицы размером 8 на 10 произвольными целыми числами;

- возможность интерактивного редактирования содержимого матрицы после автозаполнения;

- вывод сведений о программе (задании курсовой работы, разработчике);

- формирование массивов А и В согласно заданию из элементов матрицы, а также их отображение на экранной форме;

- нахождение минимального элемента массива А и последнего отрицательного элемента массива В;

- формирование массива С1 из первой части массива А и второй части В, массива С2 из второй части массива А и первой части В, вывод массивов С1 и С2 на экран;

- сортировку массива С1 по убыванию и С2 по возрастанию методом выбора и отображение полученных массивов на экранной форме.

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

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

Так для ввода исходных данных матрицы будем использовать визуальный компонент SGMatrix типа TStringGrid (таблица строк), предназначенный для отображения информации в виде таблицы, каждая ячейка которой может содержать символьную строку. Нумерация строк и столбцов таблицы начинается с 0. Координаты каждой ячейки таблицы задаются парой чисел. Первое число - номер столбца, второе - номер строки. Например, ячейка с адресом (2,4) расположена в третьем столбце и пятой строке. Поскольку в задании размер исходной матрицы известен заранее и нет необходимости его изменения, то на этапе формирования интерфейса зададим размеры объекта SGMatrix, кроме того, предположим, что в матрице нет шапки и столбца с нумерацией строк, поэтому значения полей установим следующим образом:

- поле ColCount (число столбцов в таблице) установим равным 10;

- поле RowCount (число строк в таблице) установим равным 8;

- FixedCols (число фиксированных столбцов) и FixedRows (число фиксированных строк) установим равными 0.

Для возможности редактирования содержимого таблицы пользователем флаг goEditing поля Options установим равным true [1].

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

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

1) вывод информации о разработчике и задании курсового проекта;

2) автоматическое формирование исходных данных и заполнение матрицы случайными числами;

3) формирование массивов А и В как элементов внутри контуров матрицы, нахождения в массиве А минимума и последнего отрицательного элемента в массиве В, и формирования массивов С1 и С2, сортировка массивов С1, С2 и их вывод на форму;

4) вывод содержимого массива на форму в объект типа TMemo;

5) модуль сортировки по убыванию методом выбора;

6) модуль сортировки по возрастанию методом выбора.

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

Запуск модулей 1, 2, 3 будет осуществляться при нажатии на соответствующие пункты меню. В теле обработчика модуля 3 информация с визуального компонента матрицы будет переноситься во внутренний двумерный массив, будут формироваться массивы А и В как элементы соответствующих контуров матрицы. Затем определяется минимальный элемент массива А и последний отрицательный массива В, выводятся сами эти элементы и их индексы в массивах. Затем, формируются массивы С1 и С2, согласно заданию, как соответственно первая часть А и вторая В и наоборот. Для вывода полученных массивов будет использован модуль 4, который реализуем как отдельную процедуру с именем Vivod. Потом выполняется сортировка массива А при помощи модуля 5, а массива В при помощи модуля 6.

Учитывая всё выше сказанное, составим обобщенный алгоритм приложения, который представлен в приложении на рисунке A.1. На алгоритме приведены основные события экранной формы и обработчики этих событий.

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

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

3.1 Описание переменных и объектов

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

Таблица 3.1 - Описание переменных программы

Наименование

Тип

Назначение

Form1

TForm

Экранная форма программы, для интерфейса с пользователем

M

array[1..8,1..10] of integer;

Переменная, используемая для хранения исходной матрицы

A, B

array of integer

Массивы, формируемые из элементов матрицы

С1, С2

array of integer

Массивы, формируемые из элементов массивов А и В согласно заданию

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

Таблица 3.2- Описание визуальных объектов на форме Form1

Наименование

Тип

Назначение

MainMenu1

TMainMenu

Главное меню

SGMatrix

TStringGrid

Объект, используемый для ввода и отображения элементов матрицы M

Memo1

TMemo

Объекты, используемый для вывода результирующих массивов A, В, C1, C2 и отсортированных версий C1 и С2

Внешний вид разработанной экранной формы приведен на рисунке 3.1

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

Таблица 3.3 - Описание пунктов главного меню

Наименование

Назначение

mnMatr

«Заполнить матрицу», нажатие инициирует процедуру заполнения матрицы случайными величинами

mnMass

«Заполнить массивы», нажатие инициирует процедуру формирования массивов А и В, а затем и массивов С1, С2, их сортировку и вывод

mnInfo

«О программе», нажатие инициирует вывод сообщения о задании и о разработчике

mnExit

«Выход» нажатие инициирует завершение приложения

Рисунок 3.1 - Разработанная экранная форма

Рисунок 3.2 - Разработанное главное меню

В разработанной программе содержится описание четырех процедур обработчиков событий и трех вспомогательных процедур. К обработчикам событий относятся mnMatrClick, mnMassClick, mnInfoClick, mnExitClick, к вспомогательным - процедуры SORT_UB, SORT_VOZR и VIVOD.

Приведем подробное описание этих процедур в следующих разделах.

3.2 Описание процедуры mnMatrClick

В процедуре осуществляется автоматическое заполнение исходной матрицы случайными числами. Алгоритм процедуры автозаполнения приведен на рисунке А.2, а код приведен в строках 89 - 96 листинга из приложения Б. В процедуре выполняется инициализация генератора случайных чисел (блок 2), а затем организовано два цикла - цикл по i - по строкам, по j - по столбцам матрицы. Отметим, что при работе с визуальным компонентом TStringGrid в методе Cells на первое место следует ставить индекс столбца, а на второе - индекс строки, что отличается от привычной индексации двумерных массивов. Поскольку в задании не указан диапазон чисел, то выберем его самостоятельно, исходя из предположений, что массив A должен содержать как положительные, так и отрицательные числа. Для этого сгенерируем случайное число в интервале от 0 до 100 и вычтем из него 50. Получим распределение случайных чисел в интервале от -50 до 50. Для генерации случайных чисел используется функция Random(100).

3.3 Описание процедуры mnMassClick

В этой процедуре происходит формирование массивов А и В как элементов внутри контуров матрицы М, происходит нахождение минимума в массиве А и последнего отрицательного элемента массива В. Эти найденные элементы делят массивы А и В на две части. Из первой части массива А и второй части массива В формируется массив С1, а из второй части массива А и первой части массива В - массив С2. Алгоритм всех выполняемых действий приведен на рисунке А.4, а код процедуры содержится в строках 98-233 приложения Б.

В разделе описания этой процедуры объявляются вспомогательные переменные типа integer, их назначение приведено в таблице 3.4.

Таблица 3.4. - Описание переменных процедуры mnMassClick

Имя

Назначение

i, j

вспомогательные переменные для организации циклов

k

хранит номер последнего занесенного элемента при формировании массива А,В

iMin

индекс минимального элемента массива А

iNeg

индекс последнего отрицательного элемента массива В

При формировании массива А в него заносятся элементы, которые принадлежат контуру 1,1 -1,2 -3,2 - 3,5 - 5,5 - 5,1 - 1,1 и находятся внутри него, а массив В содержит элементы принадлежащие контуру 1,10 - 2,9 - 3,8 - 4,7 - 5,8 - 6,9 - 7,10 - 1,10 и внутри него. (рисунок 3.3).

№/№

1

2

3

4

5

6

7

8

9

10

1

a0

a1

b0

2

a2

a3

b1

b2

3

a4

a5

a6

a7

a8

b3

b4

b5

4

a9

a10

a11

a12

a13

b6

b7

b8

b9

5

a14

a15

a16

a17

a18

b10

b11

b12

6

b13

b14

7

b15

8

Рисунок 2.3 - Элементы массивов А и В

После формирования массивов А и В в строках 110 - 135 и 136 - 155 происходит их вывод в элемент Memo1. Для вывода полученных массивов в строках 158, 168 используется процедура Vivod, которая описана ниже. В строках 160-164 организован цикл для поиска минимума в массиве А, а в строках 170-177 цикл для поиска последнего отрицательного элемента в массиве В и вывод самих значений и их индексов на экранную форму в поле Memo1. Следует заметить, что если в массиве В не найден отрицательный элемент, то этот индекс принимается равным -1, а если в массиве А несколько минимальных элементов, то выводится индекс первого из них. В строках 184-200 и 205-221 формируются соответственно массивы С1 и С2, С1 формируется как первая часть массива А и вторая часть массива В и С2 - как вторая часть массива А и первая часть массива В, а затем они выводятся на экран при помощи процедуры VIVOD. Если в массиве В нет отрицательных (индекс равен -1), то все элементы массива В рассматриваются как вторая часть и будут включены в массив С1. Кроме того, сам минимум массива А и последний отрицательный элемент массива В в массивы С1 и С2 не включаются. После того как сформированы массивы С1 и С2, выполняется их сортировка и вывод отсортированных версий на экран (строки 226 _ 232 листинга).

3.4 Описание процедуры VIVOD

Поскольку, при выводе каждого из массивов A, B, C1, C2 на экранную форму в визуальный элемент типа TMemo, используется одинаковая последовательность действий, целесообразно для вывода разработать отдельную процедуру, со следующим синтаксисом:

procedure VIVOD(A:array of integer;Memo:TMemo;sNazv:String);

где А - массив, элементы которого необходимо вывести на форму;

Memo - объект, в который производится вывод;

sNazv - строка, задающая текстовое название массива (выводится перед массивом).

В теле процедуры последовательно формируется строка, в которой перечисляются элементы массива через точку с запятой. После того как строка сформирована, она заносится в конец объекта Memo. Также процедура позволяет задать некоторое название массива для вывода перед элементами в качестве параметра sNazv.

Алгоритм этой процедуры приведен на рисунке А.5, а код в строках 35-51 листинга из приложения Б.

3.5 Описание процедуры SORT_UB

Предназначена для сортировки массива по убыванию методом выбора. Суть этого метода заключается в том, что при сортировке массива a[1], a[2], ..., a[n] по убыванию методом простого выбора организуется цикл из n-1 проходов (n - размерность массива). На каждом проходе среди всех элементов a[i], ... a[n] находится элемент с максимальным значением, и этот элемент меняется местами с элементом a[i]. Таким образом, при одном прогоне самый максимальный элемент оказывается на первом месте массива. На следующем прогоне необходимо уже искать максимум во всем массиве кроме первого элемента, а когда найдем его, то поменять местами со вторым элементом массива, на третьем прогоне поиск максимума осуществляется с 3-го элемента и до конца и он меняется местами с третьим элементом и так далее. Учитывая, что нумерация элементов массивов ведется с 0, можем записать алгоритм следующим образом:

1. Принять номер шага i=0.

2. Среди элементов a[i], a[i+1],.. , a[n-1] найти максимальный элемент.

Пусть это элемент a[iMax]

3. Поменять местами элементы а[i] и a[iMax].

4. Нарастить номер шага i= i+1;

5. Если i<(n-1), перейти на шаг 2. Если i=(n-1) конец алгоритма сортировки.

Алгоритм процедуры приведен на рисунке А.3, а код приведен в строках 52-69 листинга из приложения Б.

3.6 Описание процедуры SORT_VOZR

Предназначена для сортировки массива по возрастанию методом выбора. Суть этого метода заключается в том, что при сортировке массива a[1], a[2], ..., a[n] по возрастанию методом простого выбора организуется цикл из n-1 проходов (n - размерность массива). На каждом проходе среди всех элементов a[i], ... a[n] находится элемент с наименьшим значением, и этот элемент меняется местами с элементом a[i]. Таким образом, при одном прогоне самый меньший элемент оказывается на первом месте массива. На следующем прогоне необходимо уже искать минимум во всем массиве кроме первого элемента, а когда найдем его, то поменять местами со вторым элементом массива, на третьем прогоне поиск минимума осуществляется с 3-го элемента и до конца и он меняется местами с третьим элементом и так далее. Учитывая, что нумерация элементов массивов ведется с 0, можем записать алгоритм следующим образом:

1. Принять номер шага i=0.

2. Среди элементов a[i], a[i+1],.. , a[n-1] найти минимальный элемент.

Пусть это элемент a[iMin]

3. Поменять местами элементы а[i] и a[iMin].

4. Нарастить номер шага i= i+1;

5. Если i<(n-1), перейти на шаг 2. Если i=(n-1) конец алгоритма сортировки.

Алгоритм процедуры приведен на рисунке А.3, а код приведен в строках 70-87 листинга из приложения Б.

3.7 Описание сервисных процедур

Процедуры mnInfoClick, mnExitClick являются обработчиками нажатия на пункты «О программе» и «Выход» главного меню, а их коды приведены в строках 234-238, 239-243 приложения Б соответственно. В теле первого обработчика происходит модальный вызов формы FInfo с заданием на курсовой проект и информации о разработчике.

Обработчик mnExitClick инициирует закрытие приложения.

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

Разработанная программа представляет собой исполняемый файл matrix.exe размером 13 037 384 байт. В программе выполняется обработка матриц.

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

Рисунок 4.1 - Главное окно программы

Пункт главного меню имеет пункты:

- «Команды» - «Заполнить матрицу» ;

- «Команды» - «Заполнить массивы» ;

- «Команды» - «Выход» (закрывает программу);

- «О программе» (при нажатии отображается окно, изображенное на рисунке 4.2)

Рисунок 4.2 - Информационное окно

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

Примеры тестовых запусков приведены на рисунках В.1, В.2, В.3. Следует заметить, что при формировании массивов С1 и С2, последний отрицательный элемент массива В и минимальный элемент массива А в массивы С1 и С2 не включаются.

Так на рисунке В1 приведен случай, когда min элемент А и последний отрицательный В расположены в средине массивов.

На рисунке В.2 приведен пример, когда min A находится в конце массива, а массив В не содержит отрицательных чисел вообще, вследствие чего массив С2 не содержит ни одного элемента.

На рисунке В.3 приведен пример , когда min A стоит первым в массиве, а массив В заканчивается отрицательным элементом, вследствие чего массив С1 не содержит ни одного элемента.

Алгоритмы сортировки и вывода построены таким образом, что корректно обрабатывают случаи когда их аргументы - пустые массивы и не вызывают никаких ошибок.

Выводы

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

Курсовая работа позволила закрепить навыки работы с матрицами и массивами, объектами среды Lazarus, методы сортировки массивов.

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

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

1. Валентин Озеров «Советы по Delphi», 1999

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

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

4. Е.Р. Алексеев, О.В. Чеснокова, Т.В. Кучер «Free Pascal и Lazarus: Учебник по программированию» - ALT Linux, 2010, 438 с.

5. Материалы сети интернет http://wiki.lazarus.freepascal.org

Приложение А

Алгоритм программы

Рисунок А.1 - Обработка событий главной формы программы

Рисунок А.2 - Заполнение матрицы случайными величинами

Рисунок А.3 - Алгоритм сортировки методом выбора а) по убыванию, б) по возрастанию

Рисунок А.4 - Алгоритм формирования массивов А, В, С1, С2

Рисунок А.5 - Алгоритм процедуры VIVOD

Приложение Б

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

1. unit Unit1;

2. {$mode objfpc}{$H+}

3. interface

4. uses

5. Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,

6. Menus, StdCtrls, Grids, Windows, UInfo;

7. type

8. { TForm1 }

9. TForm1 = class(TForm)

10. MainMenu1: TMainMenu;

11. Memo1: TMemo;

12. MenuItem1: TMenuItem;

13. MenuItem2: TMenuItem;

14. mnExit: TMenuItem;

15. mnMass: TMenuItem;

16. mnMatr: TMenuItem;

17. mnInfo: TMenuItem;

18. SGMatrix: TStringGrid;

19. procedure mnExitClick(Sender: TObject);

20. procedure mnMatrClick(Sender: TObject);

21. procedure mnMassClick(Sender: TObject);

22. procedure mnInfoClick(Sender: TObject);

23. private

24. { private declarations }

25. public

26. { public declarations }

27. end;

28. var

29. Form1: TForm1;

30. M:array[1..8,1..10] of integer;

31. A,B,C1,C2:array of integer;

32. implementation

33. { TForm1 }

34. //вывод массива в объект Меmo

35. procedure VIVOD(A:array of integer;Memo:TMemo;sNazv:String);

36. var i,ln:integer;

37. s:string;

38. begin

39. s:='[';

40. ln:= Length(A);

41. for i:=0 to Ln - 2 do

42. s:= s+ IntTostr(A[i]) + '; ';

43. // последний элемет массива

44. if (ln>0) then

45. s:=s+ IntTostr(A[ln-1]);

46. s:=s+']';

47. Memo.Lines.Add('');

48. Memo.Lines.Add(sNazv);

49. Memo.Lines.Add(s);

50. end;

51. // процедура сортировки по убыванию методом выбора

52. procedure SORT_UB (var A : array of Integer);

53. var

54. i, j : Integer;

55. N, iMax, tmp : Integer;

56. begin

57. N:=Length(A);

58. for i := 0 to N - 2 do // цикл по i - номер шага

59. begin

60. iMax := i; // iMax - позиция максимального элемента

61. for j := i + 1 to N-1 do // поиск максимального элемента

62. if A[j] > A[iMax] then

63. iMax := j;

64. tmp := A[i]; // ставим максимальный элемент i-е место

65. A[i] := A[iMax]; // где i- номер шага

66. A[iMax] := tmp;

67. end;

68. end;

69. // процедура сортировки по возрастанию методом выбора

70. procedure SORT_VOZR (var A : array of Integer);

71. var

72. i, j : Integer;

73. N, iMin, tmp : Integer;

74. begin

75. N:=Length(A);

76. for i := 0 to N - 2 do // цикл по i - номер шага

77. begin

78. iMin := i; // iMin - позиция минимального элемента

79. for j := i + 1 to N-1 do // поиск минимального элемента

80. if A[j] < A[iMin] then

81. iMin := j;

82. tmp := A[i]; // устанавливаем минимальный на i-е место

83. A[i] := A[iMin]; // где i- номер шага

84. A[iMin] := tmp;

85. end;

86. end;

87. // нажатие на "Заполнить матрицу"

88. procedure TForm1.mnMatrClick(Sender: TObject);

89. var i,j:integer;

90. begin

91. randomize; // инициализация генератора случайных чисел

92. for i:=0 to 7 do

93. for j:=0 to 9 do

94. SGMatrix.Cells[j,i]:=IntToStr(Random(100)-50);

95. end;

96. // нажатие на "Заполнить массивы"

97. procedure TForm1.mnMassClick(Sender: TObject);

98. var

99. i,j,k,iMin,iNeg:integer;

100. begin

101. // очистка результатов

102. Memo1.Clear;

103. // читаем содержимое матрицы с формы в M

104. for i:=1 to 8 do // цикл по строкам

105. for j:=1 to 10 do // цикл по столбцам

106. M[i,j]:=StrToInt(SGMatrix.Cells[j-1,i-1]);

107. // формируем массив А

108. SetLength(A,19);

109. // элементы контура 1,1-1,2-2,1-2,2

110. A[0] := M[1,1];

111. A[1] := M[1,2];

112. A[2] := M[2,1];

113. A[3] := M[2,2];

114. k:=4;

115. // элементы 3,1 - 3,5

116. for i:=1 to 5 do

117. begin

118. A[k]:=M[3,i];

119. k:=k+1;

120. end;

121. // элементы 4,1 - 4,5

122. for i:=1 to 5 do

123. begin

124. A[k]:=M[4,i];

125. k:=k+1;

126. end;

127. // элементы 5,1 - 5,5

128. for i:=1 to 5 do

129. begin

130. A[k]:=M[5,i];

131. k:=k+1;

132. end;

133. // формируем массив B

134. SetLength(B,16);

135. k:=0;

136. // элемент контура 1,10 - 4,7 - 4,10

137. for i:=1 to 4 do

138. for j:=10-i+1 to 10 do

139. begin

140. B[k]:=M[i,j];

141. k:=k+1;

142. end;

143. // элементы 5,8-5,10

144. for i:=8 to 10 do

145. begin

146. B[k]:=M[5,i];

147. k:=k+1;

148. end;

149. // элементы 6,9 - 6,10 - 7,10

150. B[k]:=M[6, 9]; k:=k+1;

151. B[k]:=M[6,10]; k:=k+1;

152. B[k]:=M[7,10];

153. // выводим массив А на форму

154. Vivod(A,Memo1,'Массив A');

155. // находим минимальный элемент массива A

156. iMin:=0; // индекс минимального элемента

157. // цикл по элементам массива А

158. for i:=1 to Length(A)-1 do

159. if A[i]<A[iMin] then

160. iMin:=i;

161. Memo1.Lines.Add('Минимальный элемент в массиве А '+ IntToStr(A[iMin])+

162. ' его номер '+IntToStr(iMin+1));

163. // выводим массив В на форму

164. Vivod(B,Memo1,'Массив А');

165. // находим последний отрицательный в массиве В

166. iNeg:=-1; // инициализируем индекс

167. // организуем цикл от конца массива В к началу

168. for i:=Length(B)-1 downto 0 do

169. if B[i]<0 then

170. begin

171. iNeg:=i; // нашли отрицательный элемент

172. break; // выходим из цикла

173. end;

174. if (iNeg <> -1) then // был ли найден отрицательный элемент

175. Memo1.Lines.Add('Последний отрицательный элемент в массиве В ' +

176. IntToStr(B[iNeg])+' его номер '+IntToStr(iNeg+1))

177. else

178. Memo1.Lines.Add('В массиве B только положительные числа');

179. // формируем массив С1 из первой части А и второй части В

180. SetLength(C1,0); // инициализируем длину массива

181. k:=0;

182. // переписываем первую часть массива А

183. for i:=0 to iMin-1 do

184. begin

185. k:=k+1;

186. SetLength(C1,k);

187. C1[k-1]:=A[i];

188. end;

189. // переписываем вторую часть массива В

190. for i:=iNeg+1 to Length(B)-1 do

191. begin

192. k:=k+1;

193. SetLength(C1,k);

194. C1[k-1]:=B[i];

195. end;

196. // выводим массив С1

197. Vivod(C1,Memo1,'Массив С1');

198.

199. // формируем массив С2 из второй части А и первой части В

200. SetLength(C2,0); // инициализируем длину массива

201. k:=0;

202. // переписываем вторую часть массива А

203. for i:=iMin+1 to Length(A)-1 do

204. begin

205. k:=k+1;

206. SetLength(C2,k);

207. C2[k-1]:=A[i];

208. end;

209. // переписываем первую часть массива B

210. for i:=0 to iNeg-1 do

211. begin

212. k:=k+1;

213. SetLength(C2,k);

214. C2[k-1]:=B[i];

215. end;

216. // выводим массив С2

217. Vivod(C2,Memo1,'Массив С2');

218. //сортировка массивов

219. SORT_UB(C1); // сортировка по убыванию С1

220. SORT_VOZR(C2); // сортировка по возрастанию С2

221. // вывод отсортированных массивов

222. Vivod(C1,Memo1,'Отсортированный массив С1');

223. Vivod(C2,Memo1,'Отсортированный массив С2');

224. end;

225. // нажантие на "О программе"

226. procedure TForm1.mnInfoClick(Sender: TObject);

227. begin

228. FInfo.ShowModal;

229. end;

230. // нажатие на "Выход"

231. procedure TForm1.mnExitClick(Sender: TObject);

232. begin

233. Close;

234. end;

235. initialization

236. {$I unit1.lrs}

237. end.

Приложение В

Примеры выполнения

Рисунок В.1 - Элементы min A и последний отрицательный B находятся в срединах массивов

Рисунок В.2 - Элемент min A находится в конце массива, а массив В не содержит отрицательных

Рисунок В.3 - Элемент min A в начале массива, а B заканчивается отрицательным элементом

Размещено на Allbest.ru

...

Подобные документы

  • Анализ, математическая постановка задачи. Описание алгоритма работы основной программы. Детализация отдельных участков программы. Графический интерфейс программы "15". Описания используемых типов, глобальных переменных, процедур, функций. Процесс отладки.

    курсовая работа [48,8 K], добавлен 14.02.2009

  • Анализ и постановка задач дисциплины "Компьютерная графика". Разработка структуры, функциональной схемы и программной документации. Руководство программисту и оператору. Выбор и обоснование языка программирования. Описание процедур, функций, оценок.

    дипломная работа [3,6 M], добавлен 16.11.2011

  • Разработка программы обработки типизированных файлов с кодом на языке Object Pascal, с использованием компонентов Delphi для ввода и вывода данных. Разработка экранных форм и алгоритма программы. Описание программных модулей и инструкция оператору.

    курсовая работа [1,5 M], добавлен 08.02.2011

  • Разработка алгоритма решения задачи численного интегрирования методом трапеции. Словесное описание и блок-схема разработанного алгоритма программы. Описание интерфейса, главного окна и основных форм программы. Проверка работоспособности программы.

    курсовая работа [1,4 M], добавлен 16.03.2012

  • Техническое задание и блок-схема алгоритма программы построения графиков функций. Инструкция по инсталляции и описание работы программного продукта GRAPHIC. Инструкция оператору и ограничения данной версии программы. Программный код приложения.

    курсовая работа [391,2 K], добавлен 05.12.2009

  • Разработка программы для работы в операционных системах семейства Windows. Использование среды Delphi - современной технологии визуального проектирования. Создание пользовательского интерфейса, оконного приложения, меню; задание исходной матрицы.

    курсовая работа [1,5 M], добавлен 12.01.2011

  • Разработка программы тестирования студентов по MS PowerPoint с кодом на языке Delphi. Создание алгоритма для решения функциональных требований задачи. Описание переменных, вспомогательных процедур, входных и выходных данных для реализации программы.

    курсовая работа [1,5 M], добавлен 21.09.2010

  • Написание программы для работы с клиентами средствами языка Delphi, которая предусматривает ввод, редактирование и удаление информации. Разработка алгоритма решения задачи, описание переменных, вспомогательных процедур, входных и выходных данных.

    курсовая работа [355,7 K], добавлен 21.09.2010

  • Панель элементов: "данные", "компоненты". Описание структуры базы данных. Блок-схема реализации программы, техническое описание. Вид окна "ввод пароля". Список элементов пользовательского интерфейса. Исходный код программы. Инструкция пользователя.

    курсовая работа [983,0 K], добавлен 29.09.2016

  • Анализ и описание алгоритма. Основные характеристики выбранного компьютера, программных сред (операционная система и среда программирования). Описание компонентов и интерфейса программы, а также модулей, процедур и функций. Вызов и загрузка программы.

    курсовая работа [1,3 M], добавлен 26.04.2015

  • Разработка эскизного и технического проектов программы, моделирующей игру "Кости". Постановка задачи, описание алгоритма; написание программы, организация входных и выходных данных; выбор программных средств; спецификация, текст, условия выполнения.

    курсовая работа [93,8 K], добавлен 11.02.2012

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

    курсовая работа [85,9 K], добавлен 31.10.2014

  • Разработка СУБД - программного модуля для систематизации, хранения и обработки сведений о работниках лаборатории. Технологический процесс машинной реализации задачи, составление алгоритма, описание переменных процедур и функций. Листинг программы.

    курсовая работа [1,7 M], добавлен 11.01.2013

  • Разработка программного продукта на языке Delphi 7.0. Матричный метод решения однородных и неоднородных систем линейных уравнений. Разработка интерфейса. Тестирование и описание объектов программы. Описание процесса вычисления определителей матриц.

    курсовая работа [366,1 K], добавлен 04.02.2015

  • Этапы процедуры принятия решений. Разработка математического алгоритма. Блок-схема алгоритма работы программы. Разработка программы на языке программирования С++ в среде разработки MFC. Текст программы определения технического состояния станка с ЧПУ.

    курсовая работа [823,0 K], добавлен 18.12.2011

  • Технические характеристики: постановка задачи, описание основных типов входных и выходных данных. Описание алгоритмов основной программы и процедур удаления и исправления данных в таблицах. Выбор языка программирования. Технико-экономические показатели.

    курсовая работа [478,1 K], добавлен 28.12.2012

  • Разработка программного продукта - приложения, позволяющего заносить данные анкетирования в базу данных MS SQL. Описание логики работы приложения, особенности пользовательского интерфейса. Формы просмотра анкет, описание процедур и функций программы.

    курсовая работа [1,2 M], добавлен 16.08.2012

  • Разработка приложения для шифрования данных с помощью алгоритма DES5: процесс шифрования, расшифрования, получение ключей. Спецификация программы, процедуры и функции; описание интерфейса пользователя. Реализация задачи в среде программирования DELPHI.

    курсовая работа [812,6 K], добавлен 27.03.2012

  • Разработка полноценной правильно функционирующей игровой программы "Парные картинки", изучение процедур и функций. Использование масштабируемых средств для построения баз данных. Компоненты Delphi в программе. Описание пользовательского интерфейса.

    курсовая работа [1,3 M], добавлен 13.07.2012

  • Формирование текстового документа с именем goto.cpp., содержимое которого взято из русифицируемой справки MSDN по оператору безусловного перехода. Выбор оптимального алгоритма решения задачи, разработка интерфейса, отладка и тестирование программы.

    курсовая работа [499,8 K], добавлен 10.11.2009

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.