
- •Лабораторная работа №18. Создание одномерных массивов
- •Пояснения к работе
- •Лабораторная работа №19. Создание одномерных массивов
- •Пояснения к работе
- •Лабораторная работа №20. Создание одномерных массивов
- •Пояснения к работе
- •Лабораторная работа №22. Удаление элементов массива
- •Пояснения к работе
- •Лабораторная работа №21. Перестановка элементов массива
- •Пояснения к работе
- •Лабораторная работа №23. Сортировка массивов
- •Пояснения к работе
- •Лабораторная работа №24. Сортировка массивов
- •Пояснения к работе
- •Лабораторная работа №25. Сортировка массивов
- •Пояснения к работе
Лабораторная работа №21. Перестановка элементов массива
Цель: Изучить правила работы с элементами одномерного массива.
Пояснения к работе
Одномерный массив – это фиксированное количество элементов одного и того же типа,
объединенных одним именем, где каждый элемент имеет свой номер.
Описание массива:
Const n1=5; n2=30; {где n1 – номер первого элемента, а n2 – номер последнего элемента}.
Type Myarray = Array [n1..n2] Of Integer;
Var A: Myarray;
Const n=30; {n – это количество элементов массива}
Type Myarray = Array [1..n] Of Integer;
Var A: Myarray;
Var A: Аrray [1..n] Of Integer;
{Myarray – это имя нового типа;}
{Аrray – служебное слово в переводе с английского означает “массив”, “набор”; Of – служебное слово в переводе с английского “из”};
Так как каждый элемент имеет свой номер, то к каждому можно обращаться
непосредственно. Для того, чтобы обратиться к і-му элементу этого массива, необходимо
записать:
А[i] - сначала имя массива, а в квадратных скобках указывается номер элемента, к
которому обращаемся. Например, обращение к первому элементу массива А — А[1], а к
пятому — А[5].
program Bolt;{Uses crt;}
const n=5;
type Omas=array [1..n] of integer;
var
a:Omas;B,C:integer;
Procedure Init(var z:Omas);
var i:byte;
begin
for i:=1 to n do
{Readln(z[i]);}z[i]:=random(30);
end;
Procedure Print(z:Omas);
var i:byte;
begin
for i:=1 to n do
Write('[',i,']=',z[i],' ');Writeln();
end;
Procedure Maxi(z:Omas;B1,C1:integer);
var i,j,f:byte;vr,min,max:integer;
begin i:=1;j:=n;
while (z[i] MOD C1<>0) do begin
i:=i+1;j:=z[i];max:=i;
end;
while (z[j] MOD B1<>0) do begin
j:=j-1;f:=z[j];min:=j;
end;
vr:=z[max];
z[max]:=z[min];
z[min]:=vr;
Writeln('Изменённый массив a:');
for i:=1 to n do Write('[',i,']=',z[i],' ');
end;
begin
clr scr;
W
riteln('Заполнить
массив a:');
Init(a);Print(a);
Write('Введите B:');Readln(B);
Write('Введите C:');Readln(C);
Maxi(a,B,C);
end.
Рисунок 1 – задача 1
Лабораторная работа №23. Сортировка массивов
Цель: Научиться использовать методы сортировки при решении задач
Пояснения к работе
Элементы массива можно сортировать:
- по возрастанию – каждый следующий элемент больше предыдущего а[1]< а[2]< а[3]<… < а[n];
- по неубыванию – каждый следующий элемент не меньше предыдущего, т.е. больше или равен а[1]≤ а[2]≤ а[3]≤… ≤ а[n];
- по убыванию – каждый следующий элемент меньше предыдущего а[1]>а[2]>а[3]>… >а[n];
- по невозрастанию – каждый следующий элемент не больше предыдущего, т.е. меньше или равен а[1]≥ а[2]≥ а[3]≥… ≥ а[n];
Сортировка методом простого обмена:
Этот
метод заключается в последовательных
просмотрах массива сверху вниз (от
начала к концу) и обмене местами соседних
элементов, расположенных “неправильно”,
то есть таких, что
.
Начинаем с первой пары элементов, если а[1]>а[2], то меняем их местами, иначе оставляем без изменения. Затем берем вторую пару элементов (а[2] и а[3]), если а[2]>а[3], то меняем их местами и так далее. На первом шаге будут просмотрены все пары элементов массива
и
для i от 1 до n-1. В результате максимальный элемент массива переместиться в конец массива. Поскольку саамы большой элемент находится на своем месте, рассмотрим часть массива без него, то есть с первого до (n-1)-го элемента.
Повторим предыдущие действия для (n-1) части массива, в результате чего второй по величине элемент массива переместится на последнее место рассматриваемой части массива, то есть на (n-1)-ое место во всем массиве.
Эти действия продолжают до тех пор, пока количество элементов в текущей части массива не уменьшится до двух. В этом случае необходимо выполнить сравнение и упорядочить последние два элемента.
При сортировке выполняется n-1 просмотр массива, после этого массив отсортирован.
Сортировка методом простого выбора:
Выбрать максимальный элемент массива;
Поменять его местами с последним элементом (после этого самый большой элемент будет стоять на своем месте);
Повторить п.1-2 с оставшимися n-1 элементами, то есть рассмотреть часть массива, начиная с первого элемента до предпоследнего, найти в ней максимальный элемент и поменять его местами с предпоследним n-1 элементом массива, затем оставшимися n-2 элементами и так далее, пока не останется один самый маленький элемент, уже стоящий на своем месте.
Всего потребуется n-1 раз выполнить эту последовательность действий.
Сортировка методом прямого включения:
Сортировка этим методом производится последовательно шаг за шагом. Например, для сортировки по возрастанию: на k-ом шаге считается, что часть массива, содержащая первые k-1 элемент уже упорядочена, то есть а[1]< а[2]< а[3]<… < а[k-1]. Далее необходимо взять k-ый элемент и подобрать для него место в отсортированной части массива такое, чтобы после его вставки упорядоченность не нарушилась, то есть а[j]< а[k]< а[j+1].Затем надо вставить элемент а[k] на найденное место.
С каждым шагом отсортированная часть массива увеличивается. Для выполнения полной сортировки потребуется выполнить n-1 шаг.
2)program Derf;Uses CRT;
const n=8;
type omas=array [1..n] of integer;
var
a:Omas;
Procedure Init(var z:Omas);
var i:byte;
begin
for i:=1 to n do
readln(z[i]);
end;
Procedure Print(var z:Omas);
var i:byte;
begin
for i:=1 to n do
Write('z[',i,']=',z[i],' ');
Writeln;
end;
Procedure Sortirovka(var z:omas);
var
i,j,k:byte;m:integer;
begin
for i:=n downto 2 do
begin
k:=i;m:=z[i];if z[i]>=0 then begin
for j:=1 to i-1 do
if ((z[j]>m) and (z[j]>0)) then
begin
k:=j;
m:=z[k];
end;
if k<>i then begin
z[k]:=z[i];
z[i]:=m;
end;
end;
end;
end;
begin
Writeln('Введите массив:');
Init(a);Writeln;Print(a);
Writeln('Отсортированный массив:');
S
ortirovka(a);Print(a);
end.
Рисунок 1 – задача 1