ЛОЙКО В И СТРУКТУРЫ И АЛГОРИТМЫ ОБРАБОТКИ ДАННЫХ КРАСНОДАР 2004 261 С 17

 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.  {*********************конец программы********************}      ЗАКЛЮЧЕНИЕ  

Пролистать наверх