СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ
Политехнический институт
Кафедра стандартизации, метрологии и
управления качеством

 |
по
дисциплине “ИНФОРМАТИКА ”
Вариант 23 |
|
Руководитель
работы:
|
|
Коднянко
В.А. |
Разработал
студент: |
|
гр. МТ
17-07 Б
Верминская Т. В. |
Красноярск
2017 г.
СОДЕРЖАНИЕ
1. 2.
3.
4.
5.
|
Задание Метод решения
Алгоритмы и их описание
Программа, процедуры и их
описание
Анализ результатов расчета
Использованные источники
информации |
1. ЗАДАНИЕ
Задан прямоугольный
массив А из N строк и M столбцов.
Необходимо
отсортировать его строки в порядке роста, а также
сформировать одномерный массив U из наибольших
элементов строк массива А и отсортировать массив
U в порядке роста.
2. МЕТОД
РЕШЕНИЯ
Решение задачи основано на
использовании процедуры Sort, с помощью которой
выполняется сортировка строк массива А и
сформированного массива U.
После ввода данных
сначала производится последовательная
сортировка строк массива А и формирование
элементов массива U, как последних элементов в
отсортрованных строках. Далее при помощи
процедуры Sort выполняется сортировка массива U и
вывод расчетных данных.
3. АЛГОРИТМЫ И ИХ ОПИСАНИЕ
Алгоритмическое
решение задачи представлено в виде головного
алгоритма и процедуры Sort.
Блок – схема головного
алгоритма показана на рис. 1. Она состоит из
восьми блоков. После блока 1 запуска алгоритма в
блоке 2 осуществляется ввод исходного числового
материала: N, M – размеров массива А и самого
массива А. Затем в блоках 3 – 5,
которые образуют цикл со счетчиком i, выполняется последовательный
проход по строкам массива А. При каждом значении i
внутри цикла в блоке 4
выполняется сортировка текущей строки массива А посредством
обращения к процедуре Sort, а в блоке 5 - определение
элемента массива U, как наибольшего элемента
отсортированной строки. Далее в блоке 6 при
помощи процедуры Sort выполняется сортировка
массива U. В блоке 7 производится вывод расчетных
данных - массива А и массива U. В блоке 8 алгоритм
заканчивает работу.

Рис.1. Блок –
схема головного алгоритма
Блок – схема
процедуры Sort показана
на рис. 2.

Рис.2. Блок –
схема процедуры Sort
Она состоит из 6 блоков.
Формальными параметрами процедуры являются Z –
имя одномерного сортируемого массива и N – длина этого массива. Сортировка
выполняется по методу “пузырька”. Процедура
использует переменную L как
индикатор отсортированности массива. Сначала в
блоке 2 индикатор L получает
значение true (истина). Затем в блоках 3 – 4,
образующих цикл, производится проход по парам
соседних элементов. В том случае, если какая –
либо пара не отсортирована, производится
перестановка ее элементов, а переменная L получает значение false (ложь),
фиксируя таким способом факт перестановки. В
блоке 5 выясняется была ли при проходе по массиву
хотя бы одна перестановка. Если L ложна, т.е. факт перестановок
был зафикстрован, управление передается к блоку 2
для нового прохода по массиву. В противном случае
массив считается отсортированным и в блоке 6
процедура заканчивает работу.
4.
ПРОГРАММА,
ПРОЦЕДУРЫ И ИХ ОПИСАНИЕ
Компьютерное решение задачи выполнено на
персональном компьютере в среде Delphi. Тексты
рабочих подпрограмм написаны на языке Object Pascal.
В программе использовано
два динамических массива А и u, которые описаны
типами и переменными, приведенными на рис. 3.
Type //
описание типов динамических массивов
TArr1 = array of Real; // одномерный
TArr2 = array of TArr1; // двумерный
Var
fMain: TfMain; // эту строку уже вставила Delphi
a: TArr2;
u: TArr1;
n,m: Integer; |
Рис. 3. Типы
и переменные динамических массивов
На рис. 4 приведен текст
процедуры SortArr1 сортировки
динамического одномерного массива и
используемой ею процедуры Revers
перестановки значений двух переменных.
Процедура SortArr1 использована для
сортировки строк массива А и массива U.
procedure Revers(var
a,b: Real);
// перестановка значений переменных a и b
var z: Real;
begin
z:=a;
a:=b;
b:=z;
end;
procedure SortArr1(var a: TArr1);
// сортировка одномерного массива a,
// размер массива определяется автоматически
var i: Integer; L: boolean;
begin
if Length(a)>2 then // нужно
сортровать
repeat
L:=true;
for i:=1 to Length(a)-2 do
if (a[i]>a[i+1]) then
begin
Revers(a[i],a[i+1]);
L:=false;
end;
until L;
end; |
Рис. 4.
Текст процедур Revers и SortArr1
Расчеты, предписанные
заданием, выполнены при помощи процедуры,
представленной на рис 5.
procedure
TfMain.mmExecuteClick(Sender: TObject);
// Эта процедура решает задачу в целом
begin
n:=SpinEdit1.Value; // считывание количества строк А
m:=SpinEdit2.Value; // считывание количества столбцов
А
Memo2.Clear; // очистка редактора Memo2
if FormVspomArrToA then // передача
исходных данных в матрицу А
begin
OutStr('Исходная матрица A:'); // вывод
пояняющего заголовка
OutArr2(a,7,2); // вывод исходного массива А
Arr2SortAndFormU; // сортровка строк А и
формирование U
OutStr('Матрица A после сортировки строк:');
// надпись
OutArr2(a,7,2); // вывод отсортированного
массива А
OutStr('Массив U до сортировки:'); // надпись
OutArr1(u,7,2); // вывод исходного массива U
SortArr1(u); // сортровка массива U
OutStr('Массив U после сортировки:');
OutArr1(u,7,2); // вывод отсортированного
массива U
end;
end; |
Рис. 5. Процедура
сортировки строк массива А, формирования и
сортировки массива U, вывода результатов расчета
Для ввода размеров матрицы
использовано два компонента SpinEdit с
именем SpinEdit1 для N, SpinEdit2 - для M..
Для ввода элементов маассива А использован
компонент Memo с именем Memo1. Для вывода
результатов - компонент Memo с именем Memo2.
Для передачи данных из Memo1 в массив А
использована логическая функция FormVspomArrToA.
Вывод сопроводительных надписей в Memo2 к
результатам расчета выполнялся с помощью
процедуры OutStr.
Сортировка строк массива А и
формирование массива U вынесено в отдельную
процедуру, текст которой приведен на рис. 6.
procedure Arr2SortAndFormU;
// сортировка строк двумерного массива А
// и формирование одномерного массива U
// из наибольших элементов строк массива А
var i: Integer;
begin
SetLength(u,n+1);
for i:= 1 to Length(a)-1 do //
проход по строкам А
begin
SortArr1(a[i]); // сортировка i-строки массива A
u[i]:=a[i,m]; // передача набольшего элемента
в U
end;
end; |
Рис. 6. Текст процедуры сортировки строк
массива А и формирования массива U
Процедура использует цикл for - do,
в теле которого производится обращение к
процедуре SortArr1 сортировки текущей
строки массива А.
После сортировки строк массива А и
формирования массива U процедура рис. 5, выполняет
сортировку массива U и заканчивает работу
выводом этого массива.
5. РЕЗУЛЬТАТЫ РАСЧЕТОВ И ИХ
АНАЛИЗ
В качестве исходных данных были
использованы следующие значения: N=4, M=5. Вид
матрицы А в исходном состоянии показан на рис. 7.

Рис. 7. Матрица А в
исходном виде
В результате
выполненных расчетов получены данные,
представленные на рис. 8.

Рис. 8. Результаты
расчетов
Анализ данных рис. 7, 8
показывает, что в результате вычислений исходный
массив содержит строки, которые отсортированы в
порядке роста, а массив U действительно состоит
из максимальных элементов соответствующих строк
массива А и также отсортирован в порядке роста.
ИСПОЛЬЗОВАННЫЕ ИСТОЧНИКИ
ИНФОРМАЦИИ
В.А.Коднянко. Методические
указания к выполнению курсовой работы для
студентов направления “Технология,
оборудование и автоматизация
машиностроительного производства”. КГТУ,
Красноярск, 2004. 24 с.
- В.А.Коднянко.
Методические указания к самостоятельной работе
для студентов направления “Технология,
оборудование и автоматизация
машиностроительного производства”. КГТУ,
Красноярск, 2005. 35 с.
- В.А.Коднянко.
Программирование на языке Object Pascal. Электронное
учебное пособие. КГТУ, Красноярск, http://tms.kgtu.runnet.ru, 2005.
- В.А.Коднянко.
Программирование в среде Delphi. Электронное
учебное пособие. КГТУ, Красноярск, http://tms.kgtu.runnet.ru, 2004.
- В.А.Коднянко. Методические указания к
разработке учебного приложения в среде Delphi. КГТУ,
Красноярск, http://tms.kgtu.runnet.ru,
2005.
|