Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
metodichka_SI.doc
Скачиваний:
30
Добавлен:
23.02.2015
Размер:
2.05 Mб
Скачать

1 Задача

Вычислить производную от функции cos(x)

#include"stdio.h"

#include"math.h"

double proiz(double x, double dx, double (*f)(double x));

double fun(double z);

intmain()

{

// точка вычисления производной

double x;

// приращение

double dx;

// значение производной

double z;

// ввод значения x и dx

scanf("%f%f",&x,&dx);

// вызов функции

z=proiz(x,dx,fun);

// вывод на экран значения производной

printf("%f",z);

return0;

}

// функция вычисления производной

double proiz(double x, double dx, double (*f)(double x))

{

double xk, xk1, pr;

xk = fun(x);

xk1 = fun(x+dx);

pr = (xk1/xk-1e0)*xk/dx;

return pr;

}

// функция от которой вычисляется производная

double fun(double z)

{

return(cos(z));

}

Самостоятельная работа

Написать программу вычисления асимптот функции.

Лабораторная работа №9

Рекурсия

Цель: применение на практике знаний работы с механизмом рекурсии. Понятие прямой рекурсии.

Методические рекомендации: лабораторная работа рассчитана на 2 часа и состоит из анализа четырех заданий и выполнения самостоятельной работы.

Обязательное зачетное задание.

Необходимый уровень знаний:

  • работа с функциями;

  • механизм прямой рекурсии.

1 Задача

Цель: первичное знакомство с рекурсией. Выход из рекурсии. Вызов оператора, стоящего после вызова рекурсии.

Вывести все числа до первого отрицательного числа.

#include<stdio.h>

//функция для вывода на экран целых чисел

void Print(int n);

intmain()

{

// рекурсивная вывода на консоль чисел 1..3

Print(3);

return(0);

}

//функция для вывода на экран целых чисел

void Print(int n)

{

printf("%d\n", n);

// условие выхода из рекурсии

if(n<0)

Print(n-1);

printf("%d", n);

}

2 Задача

Вычисление факториала.

Дополнительные условия: вычислить факториал без использования рекурсии.

#include<stdio.h>

long factorial(int n);

intmain()

{

// объявление числа, факториал которого необходимо вычислить

intnumber;

// вычисление и вывод факториала

printf("factorial =%ld\n", factorial(number));

return (0);

long factorial(int n)

{

fact = 1;

for (int j=1; j<n+1;j++)

{

fact*=j;

}

return (fact);

}

Дополнительные условия: вычислить факториал с использованием рекурсии.

#include<stdio.h>

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

// значение факториала

long factorial(int n); int main()

{

int number;

printf("factorial =%ld\n", factorial(number));

return (0);

}

long factorial(int n)

{

// условие выхода из рекурсии

// если n=1, то факториал 1 равен 1

if(n==1)

return (1);

return n*factorial(n-1);

}

}

3 Задача

Дополнительные условия: вычисление НОД с помощью алгоритма Эвклида.

#include<stdio.h>

// функция вычисления алгоритма Эвклида

void Evk(int x, int y);

intmain()

{

printf("Введите два числа \n");

scanf("%d%d", &x,&y);

printf("НОД =%d\n",Evk( x, y));

return (0);

}

int Evk(int x, int y)

{

if(x<y)

//проход по алгоритму если (x<y)

return Evk(y,x);

else if ((x%y)!=0)

// проход по алгоритму

returnEvk(y,x%y);

else return(y);

}

4 Задача

Вычисление числа Фибоначчи.

Дополнительные условия: вычисление чисел Фибоначчи без использования рекурсии. Для вычисления числа Фибоначчи использовать массив не более, чем их 3-х элементов.

#include<stdio.h>

//функция вычисления числа Фибоначчи

int fibon(int n);

int main()

{

int number;

long int fib;

printf("Input number \n");

scanf("%d", &number);

// рекурсивное вычисление числа Фибоначчи

fib = fibon(number);

// вывод числа Фибоначчи

printf("fibon =%ld\n", fib);

return (0);

}

int fibon(int n)

{

int i,a[3];

if (n<3)

return 1;

//первые два значения

a[1]=a[0]=1;

// цикл прохода до текущего числа

for (i=2; i<n; ++i)

{

//вычисление очередного числа Фибоначчи

a[2]=a[0]+a[1];

a[0]=a[1];

a[1]=a[2];

}

returna[2];

}

Дополнительные условия: вычислить числа Фибоначчи с использованием рекурсии.

Рекурсивная функция. Пример «плохой» рекурсии.

#include<stdio.h>

int fibon(int n);

int main()

{

int number;

long int fib;

printf("Input number \n");

scanf("%d", &number);

fib = fibon(number);

printf("fibon =%ld\n", fib);

return (0);

}

int fibon(int n)

{

if(n>2)

// алгоритм рекурсии

return fibon(n-2)+ fibon(n-1);

elsereturn1;

}

Самостоятельная работа

  1. Написать программу перевода числа из десятичной системы счисления в двоичную. Написать 2 варианта: перевод с помощью рекурсивной функции и без использования рекурсии.

  2. Вычислить корень функции f(x) на интервале [a,b]. Функцию f(x) задает пользователь.

Лабораторная работа №10

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]