Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
MET1.doc
Скачиваний:
3
Добавлен:
01.05.2025
Размер:
1 Мб
Скачать
☆

4. Массивы

Массив – это конечный упорядоченный набор элементов одного типа. Весь набор имеет общее имя, каждая компонента имеет порядковый номер (индекс).

Описание типа массив имеет следующий вид:

Array[<тип_1>, <тип_2>,...,<тип_N>] of <тип_комп>;

где <тип_1>, <тип_2>,...,<тип_N> - типы индексов, <тип_комп> - тип компонентов массива (базовый тип). Количество индексов N определяет размерность массива. Одномерный массив (N=1) называют вектором, двумерный (N=2) – матрицей. Матрица, у которой количество строк и столбцов одинаково, называется квадратной, а число ее строк называют порядком матрицы..

Массив, как и любые другие структурированные типы, может быть объявлен в программе двумя способами:

  1. сначала в разделе описания типов TYPE задается идентификатор типа, который затем используется при описании переменной в разделе VAR;

  2. тип определяется непосредственно при описании переменной.

Над массивами определена лишь одна операция присваивания, причем массивы при этом должны быть идентичными. Над компонентами массива допустимы все операции, что и для элементов базового типа. Для доступа к компонентам массива используется частичная переменная: <имя массива>[<индекс_1>,…,<индекс_N>]. Массивы обрабатываются поэлементно с помощью циклов.

Сортировка

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

Рассмотрим некоторые простые способы сортировки. Для определенности остановимся на сортировке по возрастанию целочисленного массива A[1..N].

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

…

For j:=1 to (N-1) do {цикл для проходов, j – начало неотсортированной части}

Begin

N_min:=j;

For i:=j+1 to N do {проход для нахождения индекса минимального}

If A[i]<A[N_min] Then

N_min:=i;

P:=A[j]; A[j]:=A[N_min];A[N_min]:=P{установка минимума в начало части}

End;

…

  1. Метод обмена (“пузырька”). Выполняются проходы по неотсортированной части массива с целью упорядочивания пар соседних элементов в порядке возрастания. В результате обменов значениями соседних элементов элемент с наибольшим значением выталкивается (всплывает как пузырек) в конец неотсортированной части.

…

For j:=1 to (N-1) do {цикл для проходов}

For i:=1 to (N-j) do {проход для нахождения “пузырька”}

If A[i]>A[i+1] Then

Begin

P:=A[i]; A[i]:=A[i+1];AIi+1]:=P

End;

…

Пример 7. Найти сумму элементов последовательности целых чисел , где N>1, находящихся между элементами с максимальным и минимальным значениями, считая их единственными (в сумму включить и сами элементы).

Program Example_7;

Const N=10;

Type Massiv=Array[1..N] of Integer;

Var A:Massiv; i, N_min, N_max, Nach, Kon:1..N; Sum:Integer;

Begin

{ввод массива}

For i:=1 to N do

Begin

Write(‘A[‘,i,’]=’); Readln(A[i])

End;

{поиск номеров максимального и минимального элементов массива}

N_max:=1; N_min:=1;

For i:=2 to N do

Begin

If A[i]>A[N_max] Then

N_max:=i;

If A[i]<A[N_min] Then

N_min:=I

End;

{запоминание границ суммирования}

If N_max<N_min Then

Begin

Nach:=N_max; Kon:=N_min

End

Else

Begin

Nach:=N_min; Kon:=N_max

End;

{суммирование}

Sum:=0;

For i:= Nach to Kon do

Sum:=Sum+A[i];

Writeln(‘Сумма между элементами A[‘,Nach,’] и A[’,Kon,’] равна ‘,Sum)

End.

Пример 8. Переставить строки действительной матрицы B[1..N,1..M] в порядке убывания их первых элементов.

Program Example_8;

Var B:Array[1..10, 1..10] of Real; N, M, i, j, k, N_max; P:Real;

Begin

Write(‘Задай размеры матрицы (не более 10):’);

Readln(N,M);

{ввод матрицы}

For i:=1 to N do

For j:=1 to M do

Read(B[i,j]);

{применим метод выбора для сортировки по первым элементам строк}

For k:=1 to N-1 do

Begin

{нахождение номера строки с наибольшим первым элементом}

N_max:=k;

For i:=k+1 to N do

If B[i,1]>B[N_max,1] Then

N_max:=i;

{перемещение найденной строки для упорядочивания по первым элементам }

For j:=1 to M do

Begin

P:=B[k,j]; B[k,j]:=B[N_max,j]; B[N_max,j]:=P

End

End;

Writeln(‘Упорядоченная матрица:’);

For i:=1 to N do

Begin

For j:=1 to M do

Write(B[i,j]:6:2,’ ‘);

Writeln

End

End.

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