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

I:integer;

begin

{первый элемент принимает значение 1}

a[0]:=1;

 for i:=1 to high(a) do

begin

{каждый последующий элемент принимает значение,

равное значению предыдущего элемента + случайное число}

a[i]:=a[i-1]+random(2);

end;

 for i:=0 to high(a) do

a1[i]:=a[i];

end;

{*********************************************************}

{** процедура, генерирующая не упорядоченный (случайный) массив чисел**}

{*********************************************************}

procedure notupor(a:array of integer;var a1:array of integer);

var

{i - счетчик в циклах}

I:integer;

begin

 for i:=0 to high(a) do

begin {элемент массива принимает случайное значение из диапазона 0 <= a[i] < 9999}

a[i]:=random(9999);

end;

 for i:=0 to high(a) do

a1[i]:=a[i];

end;

{*********************************************************}

{***** процедура, осуществляющая сортировку методом прямого выбора***}

{*********************************************************}

procedure pr_choose(a:array of integer;var a1:array of integer;var k,k1:longint);

var

{i,j - счетчики в циклах}

I,j:integer;

{x - переменная для осуществления обмена между a[i] и a[j]}

X:integer;

begin

{k1 - переменная для подсчета количества сравнений

 k - переменная для подсчета количества перемещений}

k:=0;k1:=0;

{high(a) - функция, возвращающая номер последнего элемента массива}

for i := 0 to high(a) - 1 do

begin

for j := i + 1 to high(a) do

begin

k1:=k1+1;

if a[i] < a[j] then

begin

k:=k+1;

{перестановка i-го с j-м элементом с помощью переменной x}

x:=a[i];

a[i]:=a[j];

a[j]:=x;

end;

end;

end;

for i:=0 to high(a) do

 a1[i]:=a[i];

end;

{**********************************************************

 ***** процедура, осуществляющая сортировку методом прямого *

 *************** обмена(метод пузырька) *********************

**********************************************************}

procedure pr_obm(a:array of integer;var a1:array of integer;var k,k1:longint);

var

{i,j - счетчики в циклах}

I,j:integer;

{x - переменная для осуществления обмена между a[j-1] и a[j]}

X:integer;

begin

{k1 - переменная для подсчета количества сравнений

 k - переменная для подсчета количества перемещений}

k:=0;k1:=0;

for i := 1 to high(a) do

 begin

for j := high(a) downto i do

begin

k1:=k1+1;

if a[j - 1] < a[j] then

begin

k:=k+1;

{обмена содержимым элементов массива a[j-1] и a[j]

с помощью переменной x}

x := a[j - 1];

a[j - 1] := a[j];

a[j] := x;

end;

end;

 end;

 for i:=1 to high(a) do

a1[i]:=a[i];

end;

{*********************************************************}

{*** процедура, осуществляющая сортировку методом прямого включения **}

{*********************************************************}

procedure pr_ins(a:array of integer;var a1:array of integer;var k,k1:longint);

var

{i,j - счетчики в циклах}

I,j:integer;

{x - переменная для осуществления обмена между a[i] и a[j]}

X:integer;

begin

{k1 - переменная для подсчета количества сравнений

 k - переменная для подсчета количества перемещений}

k:=0;k1:=0;

for i := 1 to high(a) do

begin

x := a[i];

for j := i - 1 downto 0 do

begin

k1:=k1+1;

if x > a[j] then

begin

k:=k+1;

{обмена содержимым элементов массива a[j+1] и a[j]

с помощью переменной x}

a[j + 1] := a[j];

a[j]:=x;

end;

end;

end;

for i:=0 to high(a) do

a1[i]:=a[i];

end;

{**********************************************************

процедура, осуществляющая исследование методов сортировок для

 *********** заданного массива чисел ***********************

**********************************************************}

procedure make(x1,n:integer;a,a1:array of integer;k:byte);

var

{количество перестановок}

 kol_pr_ins, kol_pr_obm,kol_pr_choose:longint;

{количество сравнений}

 kol_sr_ins, kol_sr_obm,kol_sr_choose:longint;

s:string;

begin

case k of

1:s:='упорядоченных по возрастанию';

2:s:='неупорядоченных (случайных)';

3:s:='упорядоченных по убыванию';

end;

{--------метод прямого включения---------}

pr_ins(a,a1,kol_pr_ins,kol_sr_ins);

{--------метод прямого обмена (метод пузырька)--------}

pr_obm(a,a1,kol_pr_obm,kol_sr_obm);

{---------метод прямого выбора----------}

pr_choose(a,a1,kol_pr_choose,kol_sr_choose);

{** вывод результата исследования **}

{вывод шапки таблицы}

gotoxy(3,x1);textcolor(cyan);textbackground(1);

writeln('Для ',high(a)+1,' ',s,' элементов:');

gotoxy(3,x1+1);textcolor(lightgreen);textbackground(1);

writeln('Методы: прямого включения прямого обмена прямого выбора');

{вывод полученных при исследовании данных}

gotoxy(3,x1+2);textcolor(white);write('перест.');

gotoxy(17,wherey);write(kol_pr_ins);

gotoxy(37,wherey);write(kol_pr_obm);

gotoxy(58,wherey);writeln(kol_pr_choose);

gotoxy(3,x1+3);write('сравн.');

gotoxy(17,wherey);write(kol_sr_ins);

gotoxy(37,wherey);write(kol_sr_obm);

gotoxy(58,wherey);writeln(kol_sr_choose);

str(high(a)+1,s);box(1,19,80,24,1,15,double,s+' элементов');

 gotoxy(4,20);write('Сортировка ',s,' элементов по убыванию');

 gotoxy(4,21);write('Сортируются ',s,' упорядоченных(по возрастанию) элементов');

 gotoxy(4,22);write('Сортируются ',s,' неупорядоченных(случайных) элементов');

 textbackground(lightgray);

 textcolor(red);gotoxy(3,25);write('Esc - главное меню');

end;

{*********************************************

 Пример сортировки методом прямого включения

 Дан массив записей, содержащий:

-имя студента;

-кол-во баллов (рейтинг).

Необходимо отсортировать данный массив по

убыванию количества баллов у студента.

*********************************************}

procedure example;

type

{rec - запись, содержащая:

name - имя студента;

num - кол-во баллов (рейтинг).}

 rec=record

name:string;

num:byte;

end;

var

{mas - массив записей rec}

 mas:array[1..20] of rec;

{счетчики в циклах}