All pastes #753839 Raw Edit

Something

public text v1 · immutable
#753839 ·published 2007-10-29 16:20 UTC
rendered paste body
program lab3;
var
   num1,num2,num3 : longint;    { первые 3 члена последовательности }
   n		  : longint;     
{-------------------------------------------------------------------------------------------------}
function sort(a1,a2,a3	: longint) : longint; forward;
function posl(a1,a2,a3 : longint; n : longint) : longint; forward;
function g(a : longint; b : longint) : longint; forward;
function p(a,b,c : longint; n : longint) : longint; forward;
{-------------------------------------------------------------------------------------------------}
{ упорядочевание }
function sort(a1,a2,a3	: longint) : longint;
var
   max,min,mid : longint; { максимальное, минимальное, среднее }
begin	       
   { init }
   a1 := 2 * a1; a2 := abs(a2); a3 := -(a3);
   { maximum }
   if (a1 >= a2) and (a1 >= a3) then max := a1;
   if (a2 >= a1) and (a2 >= a3) then max := a2;
   if (a3 >= a2) and (a3 >= a1) then max := a3;
   { minumum }
   if (a1 <= a2) and (a1 <= a3) then min := a1;
   if (a2 <= a1) and (a2 <= a3) then min := a2;
   if (a3 <= a2) and (a3 <= a1) then min := a3;
   { middle }
   if ((a1 >= a2) and (a1 <= a3)) or ((a1 <= a2) and (a1 >= a3)) then mid := a1;
   if ((a2 >= a1) and (a2 <= a3)) or ((a2 <= a1) and (a2 >= a3)) then mid := a2;
   if ((a3 >= a2) and (a3 <= a1)) or ((a3 <= a2) and (a3 >= a1)) then mid := a3;
   sort := p(max,min,mid,n);
end; { sort }
{-------------------------------------------------------------------------------------------------}
{ рекурентное вычисление Ak до заданного условия остановки }
function posl(a1,a2,a3 : longint; n : longint) : longint;
var
   a4	 : longint;    { очередной член последовательности }
   kposl : longint;     { счётчик }
begin	 
   if (n >= 4) then begin
      for kposl := 4 to n do begin
	 {a4 := ((7/3)*a3 + a2)*(1/2) + a1;}
	 a4 := ((((7 * a3) div 3) + a2) div 2) + a1;
	 a1 := a2; a2 := a3; a3 := a4;
      end; { for }
   end { if }
   else begin
      if (n = 1.0) then a4 := a1;
      if (n = 2.0) then a4 := a2;
      if (n = 3.0) then a4 := a3;
   end; { else }
   posl := a4;
end; { posl }
{-------------------------------------------------------------------------------------------------}
{ подсчёт суммы  n членов a в степени k }
function g(a : longint; b : longint) : longint;
var
   kg : longint;     { счётчик }
   sg : longint;    { сумма n членов a в степени k }
   pg : longint;    { a в степени k }
begin
   pg := 1;
   sg := 0;
   if odd(a) then begin
      g := g(a+b,b-1);
   end { if }
   else begin
      if (b <= 0) then begin
	 g := 1;
      end
      else begin
	 for kg := 1 to b do begin
	    pg := pg * a;
	    sg := sg + pg;
	    g := sg;
	 end; { for }
      end; { else }
   end; { else }
end; { g }
{-------------------------------------------------------------------------------------------------}
{ подсчёт произведения Ak}
function p(a,b,c : longint; n : longint) : longint;
var
   kp : longint;     { счётчик }
   sp : longint;    { произведение}
   ap : longint;    { Ak }
begin
   sp := 1;
   for kp := 1 to n do begin
      ap := posl(a,b,c,kp);
      sp := sp + ((g(ap,kp+1))-1);
      p := sp;
   end; { for }
   p := sp;
end; { p }
{-------------------------------------------------------------------------------------------------}
begin
   { input }
   write('n: '); readln(n);
   write('a1: '); readln(num1);
   write('a2: '); readln(num2);
   write('a3: '); readln(num3);
   { main }
   writeln(sort(num1,num2,num3));
end.