- •Оглавление
- •Введение
- •Методические указания
- •Темы курсовых проектов
- •Пример выполнения курсового проекта
- •1 Постановка задачи
- •2 Краткая теория
- •2.1 Сортировка методом прямого включения
- •2.2 Сортировка методом прямого выбора
- •2.3 Сортировка с помощью прямого обмена (пузырьковая)
- •3 Метод исследования
- •4 Результаты исследования
- •5 Контрольный пример
- •6 Заключение
- •7 Приложение Описание процедур, используемых в программе
- •Текст программы( на языке программирования Pascal)
- •I:integer;
- •I:integer;
- •I,j:integer;
- •X:integer;
- •I,j:integer;
- •X:integer;
- •I,j:integer;
- •X:integer;
- •I,j:integer;
- •Item:byte;
- •{Fill - процедура, заполняющая заданную область экрана заданными символами заданного цвета}
- •1:Example;
- •2:Begin
- •{Вызов процедуры make, осуществляющей исследование методов сортировки}
- •{Вызов процедуры make, осуществляющей исследование методов сортировки}
- •{Вызов процедуры make, осуществляющей исследование методов сортировки}
- •3:Begin
- •4:Begin
- •5:Begin
- •6:Begin
- •Gotoxy(12,7);write('Данная программа является курсовым проектом по дисциплине');
- •Список литературы
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;
{счетчики в циклах}
