Лабы по программированию (КИ МГОУ) / Лабы по программированию 1 курс / Лаба6 / отчёт 6
.docЛабораторная работа №6
Тема: Программирование алгоритмов при помощи рекурсивных процедур и функций.
Цель работы: Познакомиться с понятием «рекурсия» и особенностями рекурсивных процедур и функций языка программирования Pascal:
-
Изучить понятия прямой и косвенной рекурсии;
-
Закрепить практические навыки работы в инструментальной среде Delphi на примере реализации алгоритмов при помощи рекурсивных процедур и функций.
Выполнил студент группы
Задание 1
Исходный код программы:
var k,n:integer; F:real; function RecFact(n:integer): Longint; begin if n=0 then RecFact:=1 else RecFact:=n*RecFact(n-1) end;
function NonRecFact(n:integer):Longint; var p:integer; Begin p:=1; while n>1 do begin p:=n*p; n:=n-1; end; NonRecFact:=p End;
begin write('Vibereti sposob resheniya (1,2): '); readln(k); write('n= '); readln(n); case k of 1: begin F:=NonRecFact(n); writeln('Povtorenie') end; 2: begin F:=RecFact(n); writeln('Rekursivnoe') end; end; writeln('F:=',F:10:0); writeln('***End program***'); readln; end. |
Исходные данные:
Результаты расчёта: Блок схема:
|
Задание 2
Исходный код программы:
var n,m,k:integer; F:real; function RecNOD(n,m:integer):integer; Begin if n=m then RecNOD:=n else if n>m then RecNOD:=RecNOD(n-m,m) else RecNOD:=RecNOD(n,m-n) end;
function NonRecNOD(n,m:integer):integer; Begin while n<>m do if n>m then n:=n-m else m:=m-n; NonRecNOD:=n end;
begin write('Vibereti sposob resheniya (1,2): '); readln(k); write('n= '); readln(n); write('m= '); readln(m); case k of 1: begin F:=RecNOD(n,m); writeln('Povtorenie') end; 2: begin F:=NonRecNOD(n,m); writeln('Rekursivnoe') end; end; writeln('F:=',F:10:0); writeln('***End program***'); readln; end. |
Исходные данные:
Результаты расчёта: Блок схема:
|
Задание 3
Исходный код программы:
var F:real; n:integer; function Fib(n:integer):integer; var u,u0,u1,u2:integer; i:integer; begin u0:=1; u1:=1; for i:=3 to n do begin u2:=u0+u1; u0:=u1; u1:=u2; end; Fib:=u2; end; begin writeln('Chislo fibonachi= ',Fib(9)); readln; end. |
Исходные данные:
Результаты расчёта: Блок схема:
|
Задание 4
Исходный код программы:
var n:integer; function Eight(n:integer; a:real; b:real):real; begin if n=1 then Eight:=sqrt(6.0) else Eight:=sqrt(a+b*Eight(n-1,a+1.0,b+1.0)) end; begin Write('Vvedite znachenie argumenta n: '); read(n); Writeln('Rezultat: ',Eight(n,6.0,2.0)); readln; end. |
Исходные данные:
Результаты расчёта: Блок схема:
|
Задание 5
Исходный код программы:
var x:integer; function Eight(n:integer):real; begin if n=1 then Eight:=sqrt(8.0-sqrt(8.0+sqrt(8.0))) else Eight:=sqrt(8.0-sqrt(8.0+sqrt(8.0-Eight(n-1)))) end; begin Write('Vvedite znachenie argumenta: '); Read(x); Writeln('Rez:',Eight(x)); Writeln('Proverka: ',1.0+2.0*sqrt(3.0)*sin(3.141592653/9.0)); readln; end. |
Исходные данные:
Результаты расчёта: Ответ Функция вычисляет значение по формуле: Таким образом при вводе любого числа функция будет принимать одно и тоже значение. Проверка результата происходит по формуле . Отсюда получаем что Значение функции при любом входном параметре n будет равно значению выражения P.
|