<< Пред.           стр. 17 (из 19)           След. >>

Список литературы по разделу

 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;
 {счетчики в циклах}
  i,j:integer;
  x:rec;
 {переменные для подсчета количества сравнений и перемещений
  во время сортировки}
  k_sr,k_p:integer;
  key:char;
 begin
 {переменные для подсчета количества сравнений и перемещений
  во время сортировки}
  k_sr:=0;k_p:=0;
 randomize;
 {Данный массив, содержащий имена студентов}
 mas[1].name:='Иван';mas[2].name:='Петр';mas[3].name:='Сидор';
 mas[4].name:='Василий';mas[5].name:='Денис';mas[6].name:='Геннадий';
 mas[7].name:='Борис';mas[8].name:='Марат';mas[9].name:='Казбек';
 mas[10].name:='Алексей';mas[11].name:='Владимир';mas[12].name:='Сидор';
 mas[13].name:='Виталий';mas[14].name:='Александр';mas[15].name:='Михаил';
 mas[16].name:='Евгений';mas[17].name:='Артур';mas[18].name:='Руслан';
 mas[19].name:='Мурат';mas[20].name:='Аркадий';
 {задание количества баллов у студента случайным образом}
 for i:=1 to 20 do
  mas[i].num:=random(19)+1;
 {вывод пояснений}
 getshadow;
 textbackground(lightgray);
 textcolor(red);gotoxy(15,1);write('Пример сортировки по убыванию методом прямого включения');
 textbackground(lightgray);
 textcolor(red); gotoxy(3,25); write('Esc - главное меню');
 textcolor(red); gotoxy(65,25); write('F1 - задание');
 box(58,0,80,25,1,15,double,'Статистика');
 textcolor(lightmagenta);
 gotoxy(59,3); write(' Сортировка методом ');
 gotoxy(61,4); write('прямого включения.');
 textcolor(white); gotoxy(59,5); write('---------------------');
 box(31,0,57,25,1,15,double,'После сортировки');
 textcolor(lightmagenta); gotoxy(32,3); write(' N Имя балл');
 box(1,0,30,25,1,15,double,'До сортировки');
 textcolor(lightmagenta); gotoxy(3,3); write('N Имя балл');
 {вывод на экран исходного массива}
 for i:=1 to 20 do
  begin
 textcolor(lightcyan); gotoxy(3,i+3); write(i);
 textcolor(yellow); gotoxy(7,i+3); write(mas[i].name);
 textcolor(lightred); gotoxy(25,i+3); writeln(mas[i].num);
  end;
 {сортировка по убыванию количества баллов}
 for i := 2 to 20 do
  begin
  x := mas[i];
  for j := i - 1 downto 1 do
  begin
  {k_sr - счетчик количества сравнений}
  k_sr:= k_sr+1;
  if x.num > mas[j].num then
  begin
  {k_p - счетчик количества перемещений}
  k_p:=k_p+1;
  {обмена содержимым элементов массива mas[j+1] и mas[j]
  с помощью переменной x}
  mas[j + 1] := mas[j];
  mas[j]:=x;
  end;
  end;
  end;
 
 {вывод на экран отсортированного массива}
 for i:=1 to 20 do
  begin
 textcolor(lightcyan); gotoxy(33,i+3); write(i);
 textcolor(yellow); gotoxy(37,i+3); write(mas[i].name);
 textcolor(lightred); gotoxy(52,i+3); writeln(mas[i].num);
  end;
 {вывод на экран количества сравнений и перестановок
  в массиве, осуществленных во время сортировки}
  textcolor(lightgreen); gotoxy(61,6); write('Сравнений:');
  textcolor(lightgray); gotoxy(75,6); write(k_sr);
  textcolor(lightgreen); gotoxy(61,8); write('Перестановок:');
  textcolor(lightgray); gotoxy(75,8); write(k_p);
  repeat
  key:=' '; if keypressed then key:=readkey;
  case key of
  {#59 - код клавиши F1}
  #59:begin
  {вывод окна с заданием для контрольного примера}
  {putshadow+box - вывод окна с тенью}
  putshadow(15,7,65,15);box(15,7,65,15,lightgray,0,double,'Задание');
  textcolor(red);
  gotoxy(21,9); write('Дан список, содержащий фамилии студентов');
  gotoxy(21,10); write('и их рейтинговые баллы. Необходимо от-');
  gotoxy(21,11); write('сортировать данный список по убыванию ');
  gotoxy(21,12); write('рейтинговых баллов.');
  textcolor(yellow);gotoxy(50,15);write('Enter - отмена');
  end;
  {#13 - код клавиши Enter}
  #13:getshadow;
  end;
  {#27 - код клавиши Esc}
  until key=#27;
 end;
 {**********************************************************
 ************************ Основная программа **************
 **********************************************************}
 const
 {массив строк - пунктов главного меню}
  menu:array[1..7] of string=(' Пример сортировки ',' Исследование (10 эл-тов)',
  ' Исследование (100 эл-тов) ',
  ' Исследование (1000 эл-тов) ',
  ' Исследование (10000 эл-тов) ',
  ' О программе '
  ,' Выход ');
 var
 {массивы чисел, используемые для исследования}
  a,a1:array[0..9] of integer; {10 - чисел}
  b,b1:array[0..99] of integer; {100 - чисел}
  c,c1:array[0..999] of integer; {1000 - чисел}
  d,d1:array[0..9999] of integer; {10000 - чисел}
  f:byte; {показатель того , какой массив
  поступает в процедуру для упо-
  рядочивания по убыванию:
  1 - неупорядоченный (слу-
  чайный);
  2 - упорядоченный по воз-
  растанию;
  3 - упорядоченный по убы-
  ванию}.
  k:char;
  item:byte;
 begin
 clrscr;cursoroff; {гашение курсора}
 repeat
 textbackground(0);clrscr;
 {fill - процедура, заполняющая заданную область экрана заданными символами заданного цвета}
 fill(lightgray,1,1,2,80,25,' ');
 {menuv - процедура, выводящая на экран вертикальное меню}
 menuv(25,10,menu,lightgray,black,red,lightgreen,yellow,'Сортировка',item,double);
 {item - переменная, содержащая номер выбранного пункта меню}
 case item of
 1:example;
 2:begin
  {getshadow - процедура, убирающая тень от меню}
  getshadow;
  {** исследуются 10 упорядоченных по возрастанию элементов **}
  {box - процедура, выводящая на экран окно}
  box(1,0,80,18,1,15,double,'10 элементов');
  {вызов процедуры upor, генерирующей упорядоченный по возрастанию
  массив чисел}
  upor(a,a);
  {вызов процедуры make, осуществляющей исследование методов сортировки}
  make(3,10,a,a1,1);
  {** исследуются 10 неупорядоченных (случайных) элементов **}
  {вызов процедуры notupor, генерирующей неупорядоченный(случайный) массив чисел}
  notupor(a,a);
  {вызов процедуры make, осуществляющей исследование методов сортировки}
  make(8,10,a,a1,2);
  {** исследуются 10 упорядоченных по убыванию элементов **}
  {вызов процедуры make, осуществляющей исследование методов сортировки}
  make(13,10,a1,a1,3);
  {ожидание нажатия клавиши Esc}
  repeat
  k:=readkey;
  until k=#27;
  end;
 3:begin
  {getshadow - процедура, убирающая тень от меню}
  getshadow;
  {box - процедура, выводящая на экран окно}
  box(1,0,80,18,1,15,double,'100 элементов');
  {исследуются 100 упорядоченных по возрастанию элементов}
  upor(b,b);
  make(3,100,b,b1,1);
  {исследуются 100 неупорядоченных (случайных) элементов}
  notupor(b,b);
  make(8,100,b,b1,2);
  {исследуются 100 упорядоченных по убыванию элементов}
  make(13,100,b1,b1,3);
  repeat k:=readkey; until k=#27;
  end;
 4:begin
  {getshadow - процедура, убирающая тень от меню}
  getshadow;
  box(1,0,80,18,1,15,double,'1000 элементов');
  {исследуется 1000 упорядоченных по возрастанию элементов}
  upor(c,c);
  make(3,1000,c,c1,1);
  {исследуется 1000 неупорядоченных (случайных) элементов}
  notupor(c,c);
  make(8,1000,c,c1,2);
  {исследуется 1000 упорядоченных по убыванию элементов}
  make(13,1000,c1,c,3);
  repeat
  k:=readkey;
  until k=#27;
  end;
 5:begin
  getshadow;
  box(1,0,80,18,1,15,double,'10000 элементов');
  {исследуются 10000 упорядоченных по возрастанию элементов}
  upor(d,d);
  make(3,10000,d,d1,1);
  {исследуются 10000 неупорядоченных (случайных) элементов}
  notupor(d,d);
  make(8,10000,d,d1,2);
  {исследуются 10000 упорядоченных по убыванию элементов}
  make(13,10000,d1,d,3);
  repeat
  k:=readkey;
  until k=#27;
  end;
 6:begin
  {getshadow - процедура, убирающая тень от меню}
  getshadow;
  {ввод окна с темой курсовой работы}
  box(10,5,70,15,lightgray,0,double,'О программе');
  putshadow(10,5,70,15);
  textcolor(brown);
  gotoxy(12,7);write('Данная программа является курсовой работой по дисциплине');
  gotoxy(21,8);write('"Алгоритмы и структуры обработки данных"');
  gotoxy(30,9);write('Тема курсовой работы: ');
  gotoxy(18,10);write(' "Исследование прямых методов сортировки"');
  gotoxy(17,11);write('Курсовую работу выполнили студенты группы 95-ОА-21');
  textcolor(red);gotoxy(3,25);write('Esc - главное меню');
  repeat
  k:=readkey;
  until k=#27;
  end;
 end;
 until item=7;
 end.
 {*********************конец программы********************}
 
 
 ЗАКЛЮЧЕНИЕ
 

<< Пред.           стр. 17 (из 19)           След. >>

Список литературы по разделу