Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
infa.docx
Скачиваний:
0
Добавлен:
25.09.2019
Размер:
99.7 Кб
Скачать

Вопрос14.

Для использования массива в качестве параметров процедур и функций необходимо заранее описать тип массива в разделе объявления типов. Причем

тип фактического и формального параметров должен быть один и тот же.

Пример. Инициализация (обнуление) и вывод на экран одномерного массива:

const n=10;

type TVector=array[1..n] of integer;

procedure init(var a:TVector); {массив как параметр-

переменная}

var i:integer;

begin

for i:=1 to n do a[i]:=0;

end;

procedure print(a:TVector); {массив как параметр-

значение}

var i:integer;

begin

for i:=1 to n do write(a[i]:6,’ ’);

writeln;

end;

var v: TVector;

begin

init(v); {инициализация массива}

v[3]:=123; v[5]:=2345; v[n]:=34;

print(v); {вывод массива на экран}

end.

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

или функции, индексы массива не указываются:

procedure ИмяПроцедуры(ИмяМассива:array of ТипЭлементов);

Такое определение возможно только при описании формальных параметров подпрограмм.

То есть приведенное выше описание параметра-массива аналогично следующему:

ИмяМассива:array[0..N-1] of ТипЭлементов;

Где N– количество элементов массива, указанного в качестве фактического параметра при вызове подпрограммы ИмяПроцедуры .

Для определения реального количества элементов фактического параметра используются следующие функции:

high(ИмяМассива) для обычного массива возвращает верхнюю границу

массива, для открытого – максимальное значение индекса

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

Изменим процедуры из предыдущего примера для работы с массивами различного размера:

const n=10;

m=15;

type TVector1=array[1..n] of integer;

TVector2=array[1..m] of integer;

procedure init(var a:array of integer);

var i:integer;

begin

for i:=low(a) to high(a) do a[i]:=0;

end;

procedure print(a:array of integer);

var i:integer;

begin

for i:=low(a) to high(a) do write(a[i]:6,’ ’);

writeln;

end;

var v1: TVector1;

v2: TVector2;

begin

init(v1); {инициализация массива из

n=10 элементов}

init(v2); {инициализация массива из

m=15 элементов}

v1[3]:=123; v1[5]:=2345; v1[n]:=34;

v2[2]:=45; v2[8]:=567; v2[12]:=6789;

print(v1); {вывод массива из,n=10элементов на экран}

print(v2); {

вывод массива изm=15элементов на экран}

end.

Вопрос15.

Сортировка – процесс упорядочивания однородного набора данных по возрастанию (или убыванию) значения какого-либо признака

Сортировка – одно из наиболее важных действий над массивами в системах сбора и поиска информации. В отсортированном массиве можно

гораздо быстрее найти нужную информацию.

Далее признаком, по которому проводится сортировка, будем считать само значение элемента массива.

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

оказываются упорядоченными.

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

– количество операций присваивания и сравнения.

Все методы сортировки можно разделить на две большие группы: прямые и улучшенные методы сортировки.

Метод вставки (включения)

Массив разделяется на две части: отсортированную и неотсортированную.

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

В начале работы алгоритма в качестве отсортированной части массива

принимается только один первый элемент, а в качестве неотсортированной – все остальные.

Для массива из n элементов алгоритм метода вставки состоит из (n–1)-го прохода, каждый из которых содержит четыре последовательных действия:

1. взятие очередного i-го элемента массива из неотсортированной части и

сохранение его в дополнительной переменной;

2. поиск позиции j в отсортированной части массива, для которой вставка

сохраненного элемента не нарушит упорядоченности;

3. сдвиг элементов массива от (i–1)-го до j-го вправо, чтобы освободить

найденную позицию вставки;

4. вставка сохраненного элемента в найденную j-ю позицию.

Улучшение

Вкратце алгоритм метода вставки можно сформулировать так: для i=2..n

каждый элемент массива A[i] помещается на свое место в упорядоченной ранее части массива A[1], …, A[i–1], при этом, если необходимо, происходит сдвигэлементов массива.

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

образом.

На момент вставки элемента A[i] элементы массива A[1], …, A[i–1] уже отсортированы. Нужно выбрать средний элемент и сравнить его с A[i]. Если A[i]

меньше этого элемента, то поиск места вставки следует продолжать в левой половине упорядоченной части массива, иначе – в правой.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]