Сделать домашней|Добавить в избранное
 

Сайт, посвящен программированию,
исходникам разных программ и
известным алгоритмам

 
Исходники программ » Языки программирования » C/C++ » Пример использования циклов и рекуррентной функции на C
на правах рекламы

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

Автор: admin от 20-02-2012, 12:13

Условие:
Вычислить сумму S=(Summa)An(x) при различных значениях параметра х. Вычисляемая сумма является разложением в ряд некоторой функции y=f(x), которую также необходимо вычислить для каждого значения х, изменяющегося с шагом h=0,1 и принадлежащего интервалу, указанному в варианте задания*. При расчете сумм ряда количество членов ряда взять исходя из условия:
Пример использования циклов и рекуррентной функции на C

Результаты программы должны содержать:
- значения x,
- значения функции y,
- значения сумм S , а также
- абсолютное значение разности |S-y| для каждого значения аргумента х.

Пояснения к вычислению:
Для вычисления сумм S целесообразно (если это возможно) использовать рекуррентные соотношения, то есть выражать последующий член ряда через предыдущий.

*Вариант задания:

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



Решение:
Решение любой задачи программирования лучше начинать с примерного алгоритма решения, которое записано на языке, понятном любому человеку. Это делается для того, чтобы тому, кто будет после вас работать с программной частью, было легче разобраться в "исходниках" вашей программы.

Итак, словесный алгоритм:
- сначала подключаем библиотеки stdio.h и math.h - потому что в программе будут использоваться математические выражения и операции стандартного ввода/вывода.
- создадим функцию вещественного типа, которая вычисляет у(х) по варианту задания. И сделаем возвращение этой переменной к начальному значению. Это и называется рекуррентным соотношением.
- в главной функции мы создадим цикл для вычисления нужных нам параметров. Будем использовать цикл for и цикл с постусловием do - while. Итак опишем все действия в циклах:
До тех пока i<1, при этом i начальное 0.1, а прибавляется шаг h=0.1, вычислять y для каждого значения i. Присвоим начальное значение суммы s=0, что дальше делать? К начальному значению s прибавляем s*pow(0.1,2)/(2*(i+1)*(2*i+1)) – найдено из формулы, которая есть в задании, до тех пор пока модуль разности s-y будет больше или равен 0.01 выполнять действия, как меньше стал модуль - выводим то, что требовалось в задании.

Исходный код:

#include <stdio.h>
#include <math.h>
float func(float x) //рекуррентная функция
{
    float y;
    y = exp(x)+exp(-x)/2
      return y;
}

int main()
{
    float y,s,i;
    for(i=0.1;i<=1;i+=0.1)
    {
        s=1; //начальное значение суммы So=1
        y=func(i);
     do
        {
        s+=s*pow(i,2)/(2*(i+1)*(2*i+1));
        }
        while((fabs(s-y)=>0.01));
        printf("x=%f\ty(x)=%f\ts=%f\t|s-y(x)|=%f\n",i,y,s,fabs(s-y));
    }
    return 0;
}


Результат:

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



P.S.: в следующий раз также наглядно рассмотрим, как использовать одномерные массивы в решении похожей задачи.

 

Если вам нравится то, что мы пишем, пожалуйста, нажмите на интересующую вас рекламу сбоку, сверху, или сразу после статьи. Будет стимул писать лучше и чаще. Хорошего вам дня.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий