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

Лабораторная работа №21. Перестановка элементов массива

Цель: Изучить правила работы с элементами одномерного массива.

Пояснения к работе

Одномерный массив – это фиксированное количество элементов одного и того же типа,

объединенных одним именем, где каждый элемент имеет свой номер.

Описание массива:

  1. Const n1=5; n2=30; {где n1 – номер первого элемента, а n2 – номер последнего элемента}.

Type Myarray = Array [n1..n2] Of Integer;

Var A: Myarray;

  1. Const n=30; {n – это количество элементов массива}

Type Myarray = Array [1..n] Of Integer;

Var A: Myarray;

  1. 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. Начинаем с первой пары элементов, если а[1]>а[2], то меняем их местами, иначе оставляем без изменения. Затем берем вторую пару элементов (а[2] и а[3]), если а[2]>а[3], то меняем их местами и так далее. На первом шаге будут просмотрены все пары элементов массива и для i от 1 до n-1. В результате максимальный элемент массива переместиться в конец массива. Поскольку саамы большой элемент находится на своем месте, рассмотрим часть массива без него, то есть с первого до (n-1)-го элемента.

  2. Повторим предыдущие действия для (n-1) части массива, в результате чего второй по величине элемент массива переместится на последнее место рассматриваемой части массива, то есть на (n-1)-ое место во всем массиве.

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

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

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

  1. Выбрать максимальный элемент массива;

  2. Поменять его местами с последним элементом (после этого самый большой элемент будет стоять на своем месте);

  3. Повторить п.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

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