Основы алгоритмизации и программирования. Часть третья. Структурированные типы данных. Асламова В.С - 17 стр.

UptoLike

33
begin
writeln (ввод положительного числа: );
readln(z);
writeln(десятичное число: ,z:6);
writeln(восьмеричное число: );
convert(z);
end.
Пример 11:
Получение чисел Фибоначчи. Будем вычислять n–ый элемент ряда
Фибоначчи как итеративно (т.е. в цикле, начиная с f[1] до f[n]), так и
рекурсивно по формуле (1). Причём рекурсивная функция вызывает себя
дважды.
program fibonacci(input,output);
uses crt; {uses фраза указывает на
использование в
программе объектов описанных в другом месте }
function fibit(n:integer):integer; {с помощью итерации}
var a,b,c,i:integer;
begin
a:=1; b:=1;
if (n=1) or (n=2) then fibit:=1 else
begin
for i:=3 to n do begin
c:=a+b; a:=b; b:=c;
end; {для for}
fibit:=c;
end; {для else}
end; {для тела функции}
function fibrek(n:integer):integer;
begin
write( ); delay(300);
{за счёт стандартной процедуры delay программа
приостанавливается на 0.3 сек.}
if (n+1) or (n=2) then fibrek:=1
else fibrek:=fibrek(n-1)+fibrek(n-2);
write (chr(8), chr(8)); delay(300);
{chr(8) код клавиши Backspace}
end;
var k,n,result:integer;
begin {основная программа}
clrscr; {очистка экрана}
write (k=?);
readln(k);
34
for n:=1 to k do begin
writeln(итеративно: ,fibit(n):5);
writeln(рекурсивно: );
writeln(!…#…!…=…!…#);
write(глубина рекурсии: );
result:=fibrek(n);
writeln;
write(result);end;
end.
Итерация требует меньше места в памяти и машинного времени
выполнения, чем рекурсия, которой необходимы затраты на управление
стеком. Поэтому следует отдавать предпочтение итерации.
Задание:
Написать программу для решения примера 7, 11, используя
рекурсивную процедуру. Написать программу примера 8 и10, используя
рекурсивную функцию.
Побочный эффект при использовании
подпрограммы функции
Этот эффект возникает, когда в теле функции имеются операторы
присваивания, которые изменяют значение глобальных переменных,
описанных в объемлющем блоке. В этом случае возникает ситуация при
которой значение выражения, использующее вызов такой функции зависит
от порядка следования операндов, что является потенциалом трудно
уловимых программных ошибок.
Примером побочного эффекта служит следующая программа
program sideffect;
var a,z:integer; {a,z- глобальные переменные}
function change(x:integer):integer;
begin
z:=z-x; {изменение значения глобальной переменной}
change:=sqr(x);
end;
begin
z:=10; a:=change(z); writeln(a, :3,z);
z:=10; a:=change(10)*change(z);
writeln(a, :3,z);
z:=10; a:=change(z)* change(10);
   begin                                                                                        for n:=1 to k do begin
     writeln (′ввод положительного числа: ′);                                                    writeln(′итеративно: ′,fibit(n):5);
     readln(z);                                                                                  writeln(′рекурсивно: ′);
     writeln(′десятичное число: ′,z:6);                                                          writeln(′! # ! = ! #′);
     writeln(′восьмеричное число: ′);                                                            write(′глубина рекурсии: ′);
     convert(z);                                                                                 result:=fibrek(n);
   end.                                                                                          writeln;
                                                                                                 write(result);end;
        Пример 11:
                                                                                         end.
       Получение чисел Фибоначчи. Будем вычислять n–ый элемент ряда
Фибоначчи как итеративно (т.е. в цикле, начиная с f[1] до f[n]), так и                      Итерация требует меньше места в памяти и машинного времени
рекурсивно по формуле (1). Причём рекурсивная функция вызывает себя                   выполнения, чем рекурсия, которой необходимы затраты на управление
дважды.                                                                               стеком. Поэтому следует отдавать предпочтение итерации.
   program fibonacci(input,output);                                                           Задание:
        uses crt;                         {uses фраза указывает на использование в          Написать программу для решения примера 7, 11, используя
                                 программе объектов описанных в другом месте }        рекурсивную процедуру. Написать программу примера 8 и10, используя
   function fibit(n:integer):integer;                        {с помощью итерации}
   var a,b,c,i:integer;                                                               рекурсивную функцию.
   begin
         a:=1; b:=1;                                                                                   Побочный эффект при использовании
         if (n=1) or (n=2) then fibit:=1 else                                                              подпрограммы функции
         begin
           for i:=3 to n do begin                                                            Этот эффект возникает, когда в теле функции имеются операторы
            c:=a+b; a:=b; b:=c;
            end;                                          {для for}                   присваивания, которые изменяют значение глобальных переменных,
            fibit:=c;                                                                 описанных в объемлющем блоке. В этом случае возникает ситуация при
         end;                                             {для else}                  которой значение выражения, использующее вызов такой функции зависит
   end;                                                   {для тела функции}          от порядка следования операндов, что является потенциалом трудно
   function fibrek(n:integer):integer;                                                уловимых программных ошибок.
   begin
                                                                                               Примером побочного эффекта служит следующая программа
         write(′ ′); delay(300);
                                                                                         program sideffect;
                                 {за счёт стандартной процедуры delay программа
                                                                                         var a,z:integer;               {a,z- глобальные переменные}
                                                    приостанавливается на 0.3 сек.}
                                                                                         function change(x:integer):integer;
   if (n+1) or (n=2) then fibrek:=1
                                                                                         begin
                       else fibrek:=fibrek(n-1)+fibrek(n-2);
                                                                                              z:=z-x;                  {изменение значения глобальной переменной}
      write (chr(8),′ ′chr(8)); delay(300);
                                                                                              change:=sqr(x);
                                       {chr(8) код клавиши Backspace}
                                                                                         end;
   end;
                                                                                         begin
   var k,n,result:integer;
                                                                                              z:=10; a:=change(z); writeln(a,′ ′:3,z);
   begin                                {основная программа}
                                                                                              z:=10; a:=change(10)*change(z);
         clrscr;                        {очистка экрана}
                                                                                              writeln(a,′ ′:3,z);
         write (′k=?′);
                                                                                              z:=10; a:=change(z)* change(10);
         readln(k);
                                            33                                                                                  34