неділя, 18 березня 2018 р.

Сортування чисел методом «Бульбашкою»


Практична робота 24.   Сортування  чисел  методом «Бульбашкою»
Завдання 1.Реалізувати алгоритм сортування методом «Бульбашкою», що використовує чотири допоміжні процедури та функції.
program sorting;                                         { назва  алгоритму }
const maxcnt=5;                                        { назва  постійної довжини масиву  чисел}
type vector=array[1..maxcnt] of real;           {назва динамічного масиву із дійсних чисел  }
var cmpcnt,swpcnt:  integer;                        {назва змінних величин:  цілих чисел }
     trace:  boolean;                                     {назва змінних величин:  логічних (так/ні) }
procedure writevector(n: integer; m: vector);  {допоміжна процедура друкування масиву}
var i: integer;                                                 {назва змінних величин:  цілих чисел }
begin      writeln('   це m[1]  елемент відсортованого рядка' , m[1]:6:2);   {цикл друку}
  for i:=2 to n do writeln('  це m[', i, '] -ий елемент відсортованого рядка ', m[i]:6:2);
  writeln;  end;                           {закінчення процедури друкування елементів масиву }
function   less(a, b: real): boolean;                {допоміжна функція порівняння елементів}
begin       cmpcnt:=cmpcnt+1;                  { неповне розгалуження для  порівняння чисел }        
  If  trace   then  writeln('Порівняння', a:6:2, ' з ', b:6:2);   less:=a<b;  end;
   procedure swap(var a,b:real);                       {допоміжна процедура - обмін елементів }
var c:real;                                              {назва змінних величин:  дійсних  чисел }
begin        swpcnt:=swpcnt+1;      c:=a; a:=b; b:=c    end;  {виконується   обмін елементів }
procedure bubble(n: integer; var m: vector);      {процедура  сортування  - "Бульбашка" }
var i,j:integer;                                                     {назва змінних величин:  цілих чисел }
begin
  for i:=n-1 downto 1 do                   {цикл з лічильником від більшого до меншого }
    for j:=1 to i do                         {вкладений цикл з лічильником від меншого до більшого }
   if less(m[j+1],m[j]) then begin    { неповне розгалуження з використанням  логік-функції}
            swap(m[j],m[j+1]);       {використання процедури обміну елементами }
            if   trace   then    writevector(n,m)  end;  end;  { процедура  друку елементів }
{Основний алгоритм, який використовує допоміжні алгоритми}
var    n,i: integer;                {назва змінних величин:  цілих  чисел }
          m: vector;                    {назва змінних величин:  масиву  чисел }
         ans: char;                     {назва змінних величин:  буквених символів }
begin
  repeat                               {цикл з післяумовою  для введення довжини масиву   }
    write('Введено розмір масиву(від 1 до ', maxcnt, '): ');
    n:=1+random(5);   writeln('n=', n);      {випадкове  ціле чисел – це довжина масиву}
  until (1<=n) and (n<=maxcnt);                {Умова перевірки закінчення циклу}
  writeln('Введено масив випадкових чисел:');
  for i:=1 to n do  begin              {цикл з лічильником  для введення елементів масиву }
    m[i]:=2+random(159);  writeln('Введено  випадковe число:', m[i]);
  writeln;   end;                  {цикл з лічильником  для виведення елементів масиву }
  write('Показати процес роботи? (y/N) '); readln(ans);            {діалог з користувачем}
   trace:=(ans='y')or(ans='Y');
  writeln('Обрано метод сортування "Бульбашка":');        cmpcnt:=0; swpcnt:=0;
   bubble(n,m);               {виклик процедури сортування «бульбашкою» чисел }
  writeln('Всього виконано ', cmpcnt, ' порівнянь та ', swpcnt, ' перестановок');
  writeln(' Відсортований масив в порядку зростання:');    writevector(n,m);   end.

Немає коментарів:

Дописати коментар