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

Алгоритми табуляції перестановок



Практична робота 19
«Алгоритми табуляції  перестановок на мові Pascal»

Завдання 1. Скласти і реалізувати алгоритм  для    табулювання значень  перестановок натуральних чисел. Наприклад:  Перестановки для трьох чисел:  123   132   213   231   321  312(усього шість).

Program Perestanovka1;                               { оголошення назви алгоритму }
const n=5;                                                  { оголошення  константи, кількість чисел в  перестановці }
var a: array [1..n] of integer;                       { оголошення масиву цілих чисел  для запису  перестановок }
      index: integer;                                                { оголошення  цілої змінної для кодування чисел в перестановках}
procedure generate (l, r: integer);                 { оголошення підпрограми генератора перестановок }
var i, v: integer;                                           { оголошення змінних цілих чисел  для  алгоритму }
begin
      if (l = r) then begin                                                { оголошення перевірки рівності двох індексів }
        for i:=1 to n do write (a [i], '');        { оголошення циклу з лічильником  для виведення  перестановок }
        writeln;
      end    else    begin                                  
        for i:=l to r do begin            { оголошення циклу з лічильником  для генерації  перестановок }
           v:=a[l]; a[l]:=a[i]; a[i]:=v;                      {Обмін a[i], a[j]}
           generate (l + 1, r);                         {Виклик нової генерації перестановок - це рекурсія в алгоритмі}
           v:=a[l]; a[l]:=a[i]; a[i]:=v;                    {Обмін a [i], a [j]}
        end;        end;    end; 
begin
      for  index:=1  to  N  do  a[index]:=index;    { цикл  з лічильником  для генерації  перестановок }
      generate(1, n);     end.    {виклик  процедури  для генерації  перестановок }
Протестуйте алгоритм  чотири рази  тобто треба  змінити число табуляції: 1)соnst=3; 2) соnst=4;  3) соnst=6.

Завдання 2. Скласти і реалізувати алгоритм  для знаходження   табулювання значень кубічної функції, що задана рекурсивною формулою у=((а1х+а2)х+а3)х+a4.
program  Cubesfunction;                     {назва    алгоритму  табуляції}
var  a1, a2, a3, a4,  x, y, d: real;      i, k: integer;     {оголошення  змінних величин: дійсні числа та цілі числа}
begin           { початок   виконання алгоритму і введення випадкових коефіцієнтів  кубічної функції}
 a1:=1+random(3);  writeln( ' Якщо cтарший коефіцієнт кубічної функції a1=', a1); writeln;
a2:=2+random(7);  writeln(' Якщо квадратичний коефіцієнт кубічної функції a2=', a2); writeln;
a3:=-(4+random(10));  writeln(' Якщо лінійний коефіцієнт кубічної функції a3=', a3); writeln;
a4:=-(3+random(10));  writeln(' Якщо вільний коефіцієнт кубічної функції a4=', a4); writeln;
x:=-(1+random(20));  writeln(' Якщо початковий аргумент кубічної функції x=', x); writeln;
d:=1+random(3);  writeln( ' Якщо величина кроку табуляції  кубічної функції d=', d); writeln;
k:=15+random(5);  writeln( ' Якщо кількість кроків табуляції k=', k); writeln;
for i:=1 to k do begin       {виконання циклу з лічильником по kрокам для обчислення  значень функції}
x:=x+(i-1)*d;    y:=((a1*x+a2)*x+a3)+a4;       { виведення результатів табулювання на  екран монітора}
writeln( ' номер кроку табуляції  i=', i,  ' аргумент функції  х=', x, ' значення функції  y=', y); writeln; end; writeln('********'); end.   {закінчення алгоритму}
Протестуйте алгоритм  чотири рази та порівняйте результати табуляції і виберіть той варіант, при якому можна знайти найточніше наближення   нулів кубічної функції, тобто випадок ((a1*x+a2)*x+a3)*x+a4=0.


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

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