СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ

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

Кафедра стандартизации, метрологии и управления качеством

по дисциплине “ИНФОРМАТИКА
Вариант 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 алгоритм заканчивает работу.

alg_main.gif (4060 bytes)

Рис.1. Блок – схема головного алгоритма

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

alg_sort.gif (3736 bytes)

Рис.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.

is_data.gif (1444 bytes)

Рис. 7. Матрица А в исходном виде

В результате выполненных расчетов получены данные, представленные на рис. 8.

res_data.gif (3280 bytes)

Рис. 8. Результаты расчетов

Анализ данных рис. 7, 8 показывает, что в результате вычислений исходный массив содержит строки, которые отсортированы в порядке роста, а массив U действительно состоит из максимальных элементов соответствующих строк массива А и также отсортирован в порядке роста.


ИСПОЛЬЗОВАННЫЕ ИСТОЧНИКИ ИНФОРМАЦИИ

  1. В.А.Коднянко. Методические указания к выполнению курсовой работы для студентов направления “Технология, оборудование и автоматизация машиностроительного производства”. КГТУ, Красноярск, 2004. 24 с.
  2. В.А.Коднянко. Методические указания к самостоятельной работе для студентов направления “Технология, оборудование и автоматизация машиностроительного производства”. КГТУ, Красноярск, 2005. 35 с.
  3. В.А.Коднянко. Программирование на языке Object Pascal. Электронное учебное пособие. КГТУ, Красноярск, http://tms.kgtu.runnet.ru, 2005.
  4. В.А.Коднянко. Программирование в среде Delphi. Электронное учебное пособие. КГТУ, Красноярск, http://tms.kgtu.runnet.ru, 2004.
  5. В.А.Коднянко. Методические указания к разработке учебного приложения в среде Delphi. КГТУ, Красноярск, http://tms.kgtu.runnet.ru, 2005.

 

 

 

</body> </html>