Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект_ лекций по Паскалю_ИиКТ.doc
Скачиваний:
12
Добавлен:
24.09.2019
Размер:
2.85 Mб
Скачать

Некоторые типичные действия с массивами

К типичным действиям с массивами можно отнести следующие:

  1. вывод массива;

  2. ввод массива;

  3. поиск в массиве заданного элемента;

  4. поиск в массиве максимального или минимального элемента;

  5. сортировка массива.

Вывод массива

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

Например программа, выводящая на печать номера и названия дней недели, хранящиеся в массиве day, может быть реализована так:

Var

day : Array[1..7] of string[11] ;

i : Integer ;

Begin

day[1] := ‘Понедельник’ ;

day[2] := ‘Вторник’ ;

day[3] := ‘Среда’ ;

day[4] := ‘Четверг’ ;

day[5] := ‘Пятница’ ;

day[6] := ‘Суббота’ ;

day[7] := ‘Воскресенье’ ;

End.

При выводе отдельных элементов обычно указываются их индексы. Например:

i := 3 ; j :=2 ; k := 5 ;

a[i,j,k] := 7.5 ;

WriteLn( ‘a[‘,i:1,’,’,j:1,’,’,k:1,’]=‘,a[i,j,k]:3:1) ;

В результате на экран будет выведено a[3,2,5] = 7.5 .

Ввод массива

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

Например:

Type Dim2 = array[1..2] of integer ;

Dim432 = array[1..4,1..3] of Dim2 ;

Const

a : Dim2 = (0,3) ;

b : Dim432 = (((0,1), (0,4), (5,-7)),

((3,0), (0,0), (0,4)),

((0,1), (2,4), (-1,2))) ;

Как и вывод массива, ввод удобно реализовать при помощи инструкции FOR. Чтобы пользователь программы знал, ввода какого элемента массива ожидает программа, следует организовать вывод подсказок перел вводом очередного элемента массива. В подсказке обычно указывают индекс элемента массива.

Сортировка массива

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

где - верхняя граница индекса массива.

Так как можно сравнивать переменные типов INTEGER, REAL, CHAR и STRING, то можно сортировать массивы этих типов.

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

Существует много методов (алгоритмов) сортировки массивов. Рассмотрим два метода:

  1. метод прямого выбора

  2. метод прямого обмена

Сортировка методом прямого выбора

Алгоритм сортировки массива по возрастанию методом прямого выбора может быть представлен так:

  1. Просматривая массив от первого элемента, найти минимальный и поместить его на место первого элемента, а первый на место минимального.

  2. Просматривая массив от второго элемента, найти минимальный и поместить его на место второго элемента, а второй на место минимального.

  3. И так далее до предпоследнего элемента.

Ниже представлена программа сортировки массива целых чисел по возрастанию. Для демонстрации процесса сортировки программа выводит массив после каждого обмена элементов.

CONST

size = 5 ;

VAR

A : Array[1..5] of Integer ;

i : Integer ; { номер эл-та, от которого ведется поиск минимального эл-та }

min : Integer ; { номер минимального эл-та в части массива }

{ от i до верхней границы массива }

j : Integer ; {номер эл-та, сравниваемого с минимальным }

buf : Integer ; {буфер, используемый при обмене эл-тов массива }

k : Integer ;

BEGIN

Write(‘ Введите’,size:3,’ целых в одной строке через пробел ‘) ;

For k := 1 to size do read(A[k]);

writeln(‘ Сортировка ‘) ;

For i := 1 to size-1 do

Begin

{поиск минимального эл-та в части массива от A[i] до A[size]}

min := i ;

for j := i+1 to size do begin

if A[j]<A[min] then min := j ;

{ поменяем местами A[min] и A[i] }

buf := A[i] ;

A[i] := A[min] ;

A[min] := buf ;

{ выведем массив }

for k:=1 to size do write(A[k],’ ‘) ;

writeln ;

end ;

end ;

writeln( ‘ Массив отсортирован ’ ) ;

END.