Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С++ ЕНФ / мои отчёты / Отчёт по Лабе №2.doc
Скачиваний:
16
Добавлен:
25.05.2014
Размер:
96.26 Кб
Скачать

1.3.Рекурсивные функции

Рекурсивной называют функцию, которая прямо или косвенно вызывает сама себя. Классический пример - это функция вычисляющая факториал n! = 1*2*...*n, 0! = 1

Сравнивая рекурсию с итерационными методами, отмечают, что рекурсивные алгоритмы наиболее пригодны в случаях, когда поставленная задача или используемые данные определены рекурсивно. В противном случае гораздо эффективнее применять итеративные методы.

2.Практическая часть

2.1.Описание программы 2lb1.Cpp

В данной программе просится вывести число a, принадлежащееN, в степениb, принадлежащейR.. Программа должна создать две функции.1-я функция, которая находит произведение 2-х чисел, располагается после функции main.2-я функция, которая выводит результат на экран, располагается до функции main. Данная процедура осуществляется непосредственно согласно введенным правилам объявления и описания функции. Также используется функцияpow(a,b), которая возводит целое положительное числоaв вещественную степеньb.

2.2.Описание программы 2lb2.Cpp

В данной программе просится вычислить периметр параллелограмма с помощью inline функции. Для реализации этой идее применяются правила объявления inlineфункции, код которой вставляется в место вызова.

2.3.Описание программы laba1_3.Cpp

В данной программе просят вычислить частичную сумму ряда .

Расчет при этом производится 2-мя способами:

1) с помощью рекурсивной функции ;

2) с помощью функции, содержащей итерационный цикл.

Первая функция r() реализуется за счет рекурсивного обращения к самой себе условием окончания данного обращения в случае достижения аргументом iзначения ноль, что соответствует выходу значения аргумента суммы ряда за обозначенный предел. Вторая функция it() реализуется за счет цикла for с условием окончания i=n, где n –значение максимального аргумента суммы ряда, введенного пользователем и проверенного на положительность и целостность.

Заключение

  • В ходе написания программ я получил навык в методе разделения выполняемых задач по соответствующим функциям

  • После написания программ я всецело осознал преимущество использования функций в программах

  • При многократном вычислении одного и того же выражения в программе я понял, но конечно же не увидел наглядно, как inlineфункция помогает избежать лишних затрат времени на традиционное обращение к функции на основе стека

  • При использовании рекурсивной функции я в полной мере убедился в том, что её преимущество перед функцией с итерационным циклом состоит лишь в наглядности вычисляемого выражения

Список литературы

  1. Подбельский В.В. Язык Си++. – М.: Финансы и статистика,1996.­­­­­–560 с.

  2. Дейтел Х., Дейтел П. Язык пограммирования С++: перевод с англ.

М.:ЗАО «Издательство БИНОМ»,1998,1024с.

Приложение а

Листинг программы 2LB1.cpp

Листинг программы

//Program 1

#include <iostream.h>;

#include <math.h>;

#include <conio.h>;

/* Directiva preprocessora #include <imya faila>:osushestvlyaet

poisk faila v standartnih directoriyah.

iostream.h-input and output on a stream,uses functions cout,cin

math.h- matematicheskie funcsii,

conio.h-rabota s ekranom,uses functions clrscr(),getch()

*/

float st(float b,float c);

float v(float b,float c)

{cout<<"chislo a v stepeni b = \n\n"<<st(b,c)<<endl<<endl;};

void main()

{

clrscr();

float b=0,c=0; int a=0;

cout<<"proga vichislyayushaya chislo a v stepeni b \n\n";

cout<<"vvedite stepen chisla \n\n";

cin>>b;

cout<<"vvedite chislo a \n\n";

cin>>c;

a=c;

while (a<2 || a!=c) //proverka na prinadlegnost k N

{cout<<"a dolgno bit >=2 & celoe";

cout<<"vvedite chislo a \n\n";

cin>>c; a=c;};

v(b,a);

getch();}

}

float st(float b,float c)

{return pow(c,b);} //a v stepeni b

Листинг программы 2LB2.cpp

Листинг программы

//Program 2

#include <iostream.h>;

#include <math.h>;

#include <conio.h>;

/* Directiva preprocessora #include <imya faila>:osushestvlyaet

poisk faila v standartnih directoriyah.

iostream.h-input and output on a stream,uses functions cout,cin

math.h- matematicheskie funcsii,

conio.h-rabota s ekranom,uses functions clrscr(),getch() */

inline float p(float x, float y);

void main()

{

clrscr();

cout<<"proga schitayushaya perimetr parallelogramma \n\n";

float x=0,y=0;

cout<<"vvedite dlinu 1 storoni parallelogramma \n\n";

cin>>x;

while (x<=0)

{cout<<"dlina storoni dolgna bit >0 \n\n";

cout<<"vvedite dlinu 1 storoni parallelogramma \n\n";

cin>>x;};

cout<<"vvedite dlinu 2 storoni parallelogramma \n\n";

cin>>y;

while (y<=0)

{cout<<"dlina storoni dolgna bit >0 \n\n";

cout<<"vvedite dlinu 2 storoni parallelogramma \n\n";

cin>>y;};

cout<<"perimetr= "<<p(x,y);

getch();

}

inline float p(float x, float y)

{return 2*(x+y);}

Листинг программы 2LB3.cpp

Листинг программы

//Program 3

#include <iostream.h>;

#include <math.h>;

#include <conio.h>;

/* Directiva preprocessora #include <imya faila>:osushestvlyaet

poisk faila v standartnih directoriyah.

iostream.h-input and output on a stream,uses functions cout,cin

math.h- matematicheskie funcsii,

conio.h-rabota s ekranom,uses functions clrscr(),getch() */

float r(int);

float it(int,float);

void main()

{

clrscr();

int n=0; float k,f,s=0;

cout<<"proga vichislyayushaya chastichnuyu summu ryada \n\n";

cout<<"vvedite chislo n \n\n";

cin>>k;

n=k;

while ((n<1)||(n!=k))//proverka na prinadlegnost k N

{cout<<"n dolgno bit >=1 & celoe \n\n";

cout<<"vvedite chislo n \n\n"; cin>>k; n=k;};

cout<<"summa po rekursii = "<<r(n)<<endl;

//vivod otveta po rekursii

cout<<"summa po itteracii = "<<it(n,s)<<endl;

//vivod otveta po itteracii

getch();

}

float it(int n,float s)

{

for (float i=1;i<=n;i++)

s+=(i+1.)/(2*i+1.); /*funkciya v cikle i ot 1 do n pribavlyaet k predidusheyi

summe poluchivsheecya chastnoe*/

return s;} //vozvrashaet s

float r(int n)

{ if (n==1) {return ((n+1.)/(2*n+1.));}

else {return ((n+1.)/(2*n+1.)+r(n-1));};}

//funkciya pribavlyaet k znacheniyu r(n) znach. r(n-1) poka n!=1

Соседние файлы в папке мои отчёты