Алгоритм нахождения максимального значения в матрице




Тип массив

Классификация: нестандартный, структурированный тип.

Имя определяет программист.

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

Для структурированных типов данных, естественно, важнейшей характеристикой является структурная организация. Поэтому мы начнем рассмотрение типа массив с пункта 3.

Структурная организация

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

Рис. 18.1. – Структурная организация данных типа массив

Элементы массива располагаются в памяти подряд. Объем памяти определяется по формуле: количество ячеек массива умножить на объем памяти, занимаемый одним элементом. Объем памяти под элемент массива однозначно определяется типом элемента.

Определение типа

Синтаксис определения типа массив приведен на рис. 18.2. По правилам структурного программирования определение типа массив обязательно необходимо выполнять в разделе нестандартных типов (5-ый раздел программы).

Рис. 18.2. – Правило определения типа массив

Типы индексов и элементов можно задавать, как именем типа, так и непосредственным определением типа. В первом случае, естественно, что этот тип должен быть либо стандартным, либо ранее определенным.

Синтаксическим ограничением является требование - тип индекса только простой порядковый тип. Тип элемента любой, кроме, типа файл.

Например, определим тип данных для представления информации о среднемесячных температурах за год:

 

Real Real Real Real Real Real Real Real Real Real Real Real
                       
jn fv mr ap ma iun iul av sn ok nb dk

Дадим этому типу имя temp. В разделе описания нестандартных типов можем дать следующие определения:

вариант 1 (в качестве индесов используем номера месяцев)

type temp=array[1..12]of real;

вариант 2 (в качестве индексов используем имена месяцев)

type mes=(jn, fv, mr, ap, ma, iun, iul, av, sn, ok, nb, dk);

temp=array[mes]of real;

вариант 3 (в качестве индексов используем диапазон из имен месяцев)

type mes=(jn, fv, mr, ap, ma, iun, iul, av, sn, ok, nb, dk);

temp=array[jn..dk]of real;

вариант 4 (в качестве индексов используем имя интервального типа, построенного на базе перечисляемого типа из имен месяцев)

type mes=(jn, fv, mr, ap, ma, iun, iul, av, sn, ok, nb, dk);

god=jn..dk;

temp=array[god]of real;

Множество значений

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

Множество операций

Не существует операций над массивами целиком (за исключением унарной операции определения адреса переменной типа массив). Можно выполнять операции только над элементами массива. Над элементами массива допустимы все операции, определенные для типа элемента.

Элемент массива определяется следующей синтаксической диаграммой на рис. 18.3.

Рис. 18.3. – Определение элемента массива

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

Например, если определены

type temp=array[1..12]of real;

var t1993: temp;

то третий элемент массива можем определить даже таким экзотическим способом t1993[ord(trunc(1.7+2.0001))].

Многомерные массивы

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

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

Введем определения:

1) массив называется одномерным, если его элементами являются данные любого типа, кроме типа массив;

2) массив называется многомерным, если его элементами являются данные типа массив.

Различают двумерные массивы - массив из одномерных массивов, трехмерные массивы - массив из двумерных массивов и так далее.

Различным по размерностям массивам соответствуют математические аналоги данных. Так одномерный массив (последовательность простых данных) – вектор (рис. 18.4)

Рис. 18.4. – Одномерный массив (вектор)

Массив имеет одно измерение (по координате X). Для выбора элемента достаточно указать один индекс.

Двумерный массив - это таблица или матрица (рис. 18.5).

Рис. 18.5. – Двумерный массив (таблица или матрица)

Массив имеет два измерения - по строкам и столбцам (по координатам Y и X). Для выбора элемента необходимо указать два индекса - номер строки и номер столбца.

Трехмерный массив - это набор из таблиц или информационный параллелепипед (рис. 18.6).

Рис. 18.6. – Трехмерный массив

Массив имеет три измерения - по страницам, строкам и столбцам (по координатам Z, Y и X). Для выбора элемента необходимо указать три индекса - номер страницы, номер строки и номер столбца.

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

       

Число элементов в этой структуре - есть количество страниц в трехмерном массиве. Элемент этой структуры - массив, имеющий следующую структуру:

     

Число элементов в этой структуре - есть количество строк в одной странице трехмерного массива. Элемент этой структуры - массив, имеющий следующую структуру:

             

Число элементов в этой структуре - есть количество столбцов в трехмерном массиве. Элемент этой структуры - данное любого допустимого типа, кроме типа массив.

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

Рис. 18.7. – Правило определения типа многомерный массив

Рис. 18.8. – Элемент многомерного массива

Можно привести примеры многомерных массивов на примере классных журналов:

- одна строка журнала с оценками ученика по какому-либо предмету это одномерный массив;

- одна страница в журнале - двумерный массив;

- один журнал - трехмерный массив;

- все журналы в школе - четырехмерный массив;

- все журналы в городе - пятимерный массив;

- все журналы в области - шестимерный массив;

- все журналы в стране - семимерный массив;

- все журналы на Земле - восьмимерный массив;

- все журналы в Солнечной системе - девятимерный массив

- и т.д.

Опишем тип данных, который соответствует классному журналу (рис. 18.9).

Рис. 18.9. – Модель классного журнала

Допустим, что элементом массива является символ ('5','4','3','2','1',' ','н').

Можем определить тип массив следующим образом:

type tx = 1..6;

mas1 = array[tx] of char;

ty = (Ivanov, Petrov, Sidorov);

mas2 = array[ty] of mas1;

tz = (Angl, Inf, Liter, Fizik);

mas3 = array[tz] of mas2;

Второе вариант определения:

type tx = 1..6;

ty = (Ivanov, Petrov, Sidorov);

tz = (Angl, Inf, Liter, Fizik);

mas3 = array[tz, ty, tx] of char;

Работать с элементами массива мы можем двумя способами. Например, переменная G11a имеет тип mas3, тогда в этот журнал по информатике Сидорову за третье занятие поставить 5 можно такими способами:

G11a[Inf][Sidorov][3]:='5'

G11a[Inf, Sidorov, 3]:='5'

Алгоритм нахождения максимального значения в матрице

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

Найти максимальное значение в двумерном массиве вещественных чисел.

Математическая модель

Метод решения

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

1) max:=A1,1

2) " i:=1..n:

" j:=1..n:

если Ai,j > max max:= Ai,j

Примечание: индексы изменяются от 1, так как иначе пропускаются элементы матрицы. Поэтому элемент с индексами 1, 1 сравнивается сам с собой.

Информационная модель

Таблица 18.1. Информационная модель

Статус Назначение Имя Тип
Вход исходная матрица A TMatr
Выход максимальное значение max Real
Промеж. индексы по строкам и столбцам i,j Integer

Type Tmatr=array[1..n,1..m]of real;

Const n=3; m=4;

Программная модель

program poisk_max_matr;

const n=3;

m=4;

type TMatr=array[1..n,1..m] of real;

var A:TMatr;

max:Real;

i,j:Integer;

begin

{построчный ввод матрицы}

for i:=1 to n do

begin

{ввод i-ой строки}

for j:=1 to m do

read(A[i,j]);

{обработка нажатия клавиши Enter}

readln

end;

 

{построчный вывод матрицы}

writeln('Исходная матрица:');

for i:=1 to n do

begin

{вывод i-ой строки}

for j:=1 to m do

write(A[i,j]:10:2); {одно число занимает 10 позиций,

из них 2 позиции в дробной части}

{переход на новую строку экрана}

writeln

end;

 

{реализация метода решения - поиск максимума}

max:=A[1,1];

for i:=1 to n do

for j:=1 to m do

if A[i,j]>max then max:=A[i,j];

 

{вывод результата}

writeln('Максимальное значение=',max:10:2)

end.

Алгоритмы сортировки

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

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

1-ый метод сортировки “Выбор с перестановкой”

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

Метод заключается в следующем:

1) формируются все элементы массива с первого по предпоследний;

2) для каждого формируемого места решаются две задачи:

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

б) Осуществляется перестановка значения, расположенного на формируемом месте, с экстремальным значением.

Проиллюстрируем метод рисунком 18.10. Исходный массив сортируется по возрастанию и состоит из пяти целочисленных элементов: 8, 3, 4, 9, 7

Рис. 18.10. – Сортировка выбором с перестановкой

Разработка подпрограммы

I. Спецификация

1. Назначение: сортировка массива из n вещественных чисел методом "Выбор с перестановкой".

2. Имя подпрограммы: SORTVP

3. Вид: процедура

4. Перечень параметров:

Таблица 18.2. Перечень параметров

Статус Назначение Имя Тип Вид
Вход/выход сортируемый массив A TM параметр-переменная
Вход количество элементов в массиве n integer параметр-значение
Вход признак сортировки (true – сортировка по возрастанию; false – по убыванию) pr boolean параметр-значение

*Примечание.

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

Const t = число < 65535/6;

Type TM = array[1..t] of real;

5. Заголовок подпрограммы:

Procedure SORTVP (var A:TM; n:integer; pr:boolean);

II. Метод решения

1) Если количество сортируемых элементов больше. чем число элементов в массиве, то решение задачи прекращается

Если n > t Halt

2) Формируются элементы массива с первого по предпоследний

" i:=1..n-1:

3) Для каждого формируемого места i решаются две задачи

a) поиск экстремального значения (при сортировке по возрастанию – минимума, по убыванию – максимума) начиная с формируемого места по последний элемент массива;

b) перестановка значений в массиве: на место экстремального значения заносится значение, расположенное на формируемом месте; на формируемое место заносится найденное экстремальное значение

Задача a:

(используется общий алгоритм поиска экстремального значения)

a1) первое значение, среди которых ищется экстремальное берется за экстремальное (для нашего алгоритма – это значение с формируемого места i), при этом фиксируется местоположение экстремального значения в массиве

extr:=Ai

nm:=i

a2) перебираются все остальные значения, среди которых ищется экстремальное. Для нашего алгоритма это все значения, начиная со следующего элемента массива за формируемым местом (i+1) по последний элемент массива (n)

" j:=i+1..n:

a3) если очередной j-ый элемент массива при поиске максимума больше (при поиске минимума – меньше), чем найденное ранее экстремальное значение, то экстремальное значение меняется на это очередное значение (значение j-го) элемента (при этом фиксируется новое положение экстремального значения в массиве)

Если pr Aj < Extr Aj > Extr

Задача b:

(перестановка). Иллюстрация решения задачи на рис. 18.11.

Рис. 18.11. – Процесс перестановки

b1) Anm:= Ai

b2) Ai:= Extr



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: