четвер, 27 листопада 2014 р.

Рекурсивні алгоритми мовою Паскаль

Задача 1. Знайти НСД та НСК двох цілих чисел.
var a,b:longint;

function NOD(x,y:longint):longint; { фукнция поиска наиб. общ. делителя }
begin
   if x<>0 then NOD:=NOD(y mod x,x) else NOD:=y;
end;

function NOK(x,y:longint):longint; { фукнция поиска наим. общ. кратного }
begin
   NOK:=( x div NOD(x,y) ) * y;
end;

begin { основная программа }
    readln(a,b);
    writeln( 'НОД этих чисел = ', NOD(a,b) );
    writeln( 'НОК этих чисел = ', NOK(a,b) );
end.



Задача 2. Знайти факторіал натурального числа.
var n:integer;

function f(x:integer):longint;
begin
   if x = 1 then f := 1 else f := x * f(x-1);
end;

begin
     writeln('введите N (N=1..13)');
     readln(n);
     writeln('N!=',f(n));
end.
Задача 3. Утворити різні перестановки із натуральних чисел.
const n = 3; { количество элементов в перестановке}
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.


Задача 4.  Відсортувати натуральні числа   у порядку зростання.

var a:array[1..10] of integer; { массив элементов }
    n:integer;
procedure QuickSort( L, R : Integer ); { Быстрая сортировка массива A[] }
var i,j,x,y : integer;
begin
  i := l; j := r;
  x := a[(l+r) div 2];
  repeat
    while (A[i] < x) do inc(i);
    while (x < A[j]) do dec(j);
    if ( i <= j ) then
    begin
      y:=A[i]; a[i]:=a[j]; a[j]:=y;
      inc(i); dec(j);
    end;
  until (i > j);
  if (l < j) then QuickSort(l,j);
  if (i < r) then QuickSort(i,r);
end;
begin
     writeln('введите 10 элементов массива:');
     for n:=1 to 10 do readln(a[n]);
     QuickSort( 1, 10 ); { на входе: левая и правая граница сортировки }
     writeln('после сортировки:');
     for n:=1 to 10 do writeln(a[n]);
end.


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

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