Практична робота 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.
Немає коментарів:
Дописати коментар