
- •Массивы. Основные операции над ними. Алгоритмы обработки массивов. Структурные типы данных. Способы представления в памяти.
- •Описание статических массивов в программе. Доступ к элементам.
- •Массивы констант.
- •Операции с элементами массива.
- •Ввод-вывод элементов одномерного массива.
- •Алгоритм нахождения суммы и произведения элементов массива.
- •Нахождения максимального элемента массива и его номера.
- •Упорядочивание массива по возрастанию
- •Поиск в массиве.
- •Ввод-вывод элементов двумерного массива.
- •Динамические массивы.
- •Задачи.
Нахождения максимального элемента массива и его номера.
Алгоритм решения задачи следующий. Пусть в переменной с именем Maxхранится максимальный элемент массива, а в переменной с именемNmax- его номер. Предположим, что первый элемент массива является максимальным, и запишем его в переменнуюMax, а вNmaxзапишем его номер (т.е. 1). Затем все элементы, начиная со второго, сравниваем с максимальным. Если текущий элемент массива (i-й) оказывается больше максимального, то записываем его в переменнуюMax, а в переменнуюNmaxтекущее значение индексаi.
Рис.5 Нахождения максимального элемента массива и его номера
Соответствующий участок программы будет иметь вид:
const n=10;
var x: array [1..n] of integer;
i, Max, NMax : integer;
begin
{ввод элементов массива}
Max:=X[1];
Nmax:=1;
for i:=2 to N do
if X[i]>Max then
begin
Max:=X[i];
Nmax:=i;
end;
writeln(‘Max = ‘,Max,’ Max position = ‘, Nmax);
В данном примере можно обойтись одной переменной Nmax, т.к. зная позицию максимального элемента, мы знаем и его значение. Тогда код можно переписать так
Nmax:=1;
for i:=2 to N do
if X[i]>X[NMax] then
Nmax:=i;
writeln(‘Max = ‘,X[NMax],’ Max position = ‘, Nmax);
Упорядочивание массива по возрастанию
Решим следующую задачу: задан массив из nцелых чисел, упорядочить массив по возрастанию. Блок-схема представлена на рис.6. Алгоритм упорядочивания состоит в следующем. Сравниваем текущий и последующий элементы массива, если текущий больше последующего, то меняем их местами. В результате этих действий самый большой элемент станет на последнее место, т.е. наN-е. Теперь повторяем этот алгоритм дляN-1 элемента массива и устанавливаем максимальный элемент на (N-1)-е место. Так повторяем до тех пор, пока не упорядочим весь массив. Для упорядочивания по убыванию необходимо при сравнении элементов массива заменить знак “больше” на знак “меньше”. Такой метод получил название пузырьковой сортировки.
Рис.6. Алгоритм упорядочивания массива
Пример программы упорядочивания массива (пузырьковая сортировка).
const n=10;
var i,j,b: integer;
y: array [1..n] of integer;
begin
for i:=1 to n do //ввод элементов массива
begin
write('y[',i']='); readln (y[i]);
end;
writeln ('массив y ');
for i:=1 to n do //вывод элементов массива
write (y [i],' ');
writeln;
for j:=1 to n-1 do
for i:=1 to n-j do
if y[i] > y[i+1] then
begin // Меняем элементы местами
b:=y[i];
y[i]:=y[i+1];
y[i+1]:=b;
end;
writeln('упорядоченный массив');
for i:=1 to n do
write (y[i],' ');
writeln;
end.
Пузырьковая сортировка является самой медленной. Так как для размещения элемента на свое место необходимо много раз переставить его с соседними элементами. Сортировка выбором (selectionsort) работает несколько быстрее пузырьковой, т.к. в ней существенно меньше перестановок элементов. Задача сортировки выбором - искать наименьший элемент, который затем меняется местами с элементом из начала массива. Затем находится наименьший из оставшихся элементов и меняется местами со вторым элементом. Процесс продолжается до тех пор, пока все элементы не займут свое конечное положение.
const n=10;
var i,j,x,k: integer;
M: array [1..n] of integer;
{x-значение минимального элемента, k- позиция минимального элемента}
begin
………
For I:=1 to N-1 do
begin
k:=i;{запоминаем начальную позицию и первое значение минимума}
X:=M[i];
For J:=i+1 to n do {поиск нового минимального значения}
If M[j] < x then
begin
k:=j;
x:=M[k];
end;
If i<>k then begin
M[k]:=M[i];{меняем местами i-й и минимальный k-й}
M[i]:=x; end;
end;
……
end.