Отримання знань

дистанційна підтримка освіти школярів


Тут ви можете виконати завдання чи задати питання по змiсту цього уроку.

Михальов Володимир (StarRover) 2014-07-20 13:08:40
Приклад 3. Вирахувати факторіал натурального числа n (n!).

За означенням факторіал n!=1*2*3...*...n-1*n

Завдання. Запишіть рекурентну формулу та алгоритм рекурсивної функції обчислення факторіалу.

n! = 1, якщо n=1
n*(n-1)!, якщо n>1

{Fact}
var
n:longint;
function Fact(x:longint):longint;
begin
if x=0
then Fact:=1
else Fact:=x*Fact(x-1);
end;
begin
Read(n);
WriteLn(Fact(n));
end.
Михальов Володимир (StarRover) 2013-11-18 11:54:14
Приклад 4. Знайти найменший???(напевно потрібно "найбільший") спільний дільник двох натуральних чисел.

Рекурентна формула алгоритма Евкліда, запишеться :

(НСД двох чисел рівний НСД меншого та різниці між більшим та меншим - відома теорема Евкліда)
Завдання. Запишіть алгоритм рекурсивної функції обчислення НСД двох натуральних чисел.

{GCD}
var
x,y:longint;
function GCD(a,b:longint):longint;
begin
if a=b
then GCD:=a
else if a>b
then GCD:=GCD(a-b,b)
else if a then GCD:=GCD(a,b-a);
end;
begin
Read(x,y);
WriteLn(GCD(x,y));
end.

Михальов Володимир (StarRover) 2014-08-10 15:53:51
1.Відтворіть рекурентну формулу для цього алгоритма.
----------------------------------------------------
P(1)=1;
P(n)=n*P(n-1)
========================================================
2. Напишіть на Pascal програму, що використовуватиме дану процедуру. Програма читає з клавіатури кількість символів і самі символи і виводить на екран всі можливі перестановки

ПРИКЛАД

Введення

3

а b с

Виведення

abc

bac

cba

bca

acb

cab

--------------------------------------------------
{Change}
const
max=10;
var
n:longint;
a:array[1..max] of char;
s:string[max*2];
procedure Change(k:longint);
var
i:longint;
t:char;
begin
if k=1 then begin
for i:=1 to n do Write(a[i]);
WriteLn;
end
else begin
Change(k-1);
for i:=1 to k-1 do begin
t:=a[i];a[i]:=a[k];a[k]:=t;
Change(k-1);
t:=a[i];a[i]:=a[k];a[k]:=t;
end;
end;
end;
Procedure ReadMas;
var
i,k:longint;
t:char;
begin
Read(s);
i:=0;
k:=0;
while i<=n do begin
k:=k+1;
if s[k]<>' ' then begin
i:=i+1;
a[i]:=s[k];
end;
end;
end;
begin
ReadLn(n);
ReadMas;
Change(n);
end.

Повернутися до уроку

Повернутися до перелiку уроків курсу

В системі: гості - (1); користувачі - (0)