Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2012, 20:12   #1
Sorento2
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 41
По умолчанию Вычисление функции через ряд

Здравствуйте. Поступил в институт, начались лабораторные по Си.
Честно говоря никогда программирование не изучал. Сейчас втягиваюсь))
Суть задания в трех картинках.
I3641op9Jok.jpg

jejXPIjhDKo.jpg

5N7BPt1vup8.jpg

Понимаю как сделать таблицу, как рассчитывает функцию(стандартно), понимаю как увеличить или уменьшить кол-во знаков и тому подобное. То есть вывод мне в целом понятен... Непонятно как задать разложение в 3 варианте. Как его вообще рассчитать.
Вот здесь кое что пытался сообразить. Не особо получилось. Если кто может помочь, прошу. Очень надо...
Вариант 3
Код:

#include <math.h>
#include <stdio.h>
#include <conio.h>

double fact(double n)
{
    if (n == 0) {
        return 1;
    } else {
        return n * fact(n - 1);
    }
}

int main()
{
      double n, x, b, xc, f, xn, xk, sh, i, t, j;
      while(1)
      {
       printf("t,xn,xk,b,sh");        
      scanf("%lf%lf%lf%lf%lf", &t,&xn,&xk,&b,&sh);
      for(x=xn;x<xk+sh/4;x+=sh)
      {
              xc=cos(x+b);                       
       n=0.0;
       for(i=0.0, f=1.0; fabs(f)<=fabs(xc)+fabs(t); f*=pow(x,n)*cos(b+3.14*n/2)/fact(n), i++)   
       n+=1.0;               
       printf("%lf\n%lf\n%lf\n%lf\n\n", x, xc, f, i);
      }
getch();
      }
      return 0;
}

Последний раз редактировалось Sorento2; 13.11.2012 в 21:23. Причина: Сам дурак, не тот вариант указал
Sorento2 вне форума Ответить с цитированием
Старый 13.11.2012, 20:33   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
	float x=0.1;
	for(int i=1;i<10;i++){
		printf("%2.5f\n",(pow(-1.0,i)*pow(x,i))/i);
	};
Подходит схема?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.11.2012, 20:40   #3
Sorento2
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 41
По умолчанию

Простите, не понял. А куда она должна подходить? Для определения знака?
Sorento2 вне форума Ответить с цитированием
Старый 13.11.2012, 20:45   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не. Это сам цикл построения ряда. Вычисляет очередной элемент, выводя его на экран консоли.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.11.2012, 21:00   #5
Sorento2
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 41
По умолчанию

Вообще говоря, мне то выводить элемент на экран не надо. Пока не пойму. Если не трудно, то объясните откуда такая схема взялась??
Sorento2 вне форума Ответить с цитированием
Старый 13.11.2012, 21:12   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тебе нужно вычислить значение функции через ряд. Соответственно в цикле каждый следующий элемент исходя из твоего варианта вычисляется формулой (pow(-1.0,i)*pow(x,i))/i где i - целое, итератор цикла (шаг цикла).
Если не нужно выводить на экран присваивай это выражение какой-то переменной.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.11.2012, 21:14   #7
Sorento2
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 41
По умолчанию

ПАААААРДООООООН!!!!!!!! ВАРИАНТ ТО НЕ СЕДЬМОЙ! Вариант третий((( блин(( простите(
Sorento2 вне форума Ответить с цитированием
Старый 13.11.2012, 21:39   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ВАРИАНТ ТО НЕ СЕДЬМОЙ
Упс. Есля это я проглядел - приношу извинения.
Картинку на третий вариант увеличь. Не видно там ниче.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.11.2012, 21:45   #9
Sorento2
Пользователь
 
Регистрация: 13.11.2012
Сообщений: 41
По умолчанию

Увеличение вряд ли поможет. Не вы просмотрели, я не то указал(( Там все равно вряд ли разглядите.

n-ый член выглядит вот так: x^n*cos(b+3.14*n/2))/n!
до него -x^2*cos(a)/2
Sorento2 вне форума Ответить с цитированием
Старый 13.11.2012, 22:20   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тогда так:
Код:
	double Член,x=0.1,b=2;
	int fac=1;
	for(int i=1;i<10;i++){
		Член=pow(x,i)*cos(b+3.14*i/2)/fac;
		printf("%2.5f\n",Член);
		fac*=i+1;
	};
Ну и в цикле Член тереби как хочешь
Хоть в таблицу хоть в выражение.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ВЫчисление функции с помощью разложения в ряд. katris Помощь студентам 1 03.03.2013 17:26
Вычисление функции разложением её в ряд Hita4 Паскаль, Turbo Pascal, PascalABC.NET 1 17.12.2011 21:00
Вычисление функции разложением её в ряд Hita4 Паскаль, Turbo Pascal, PascalABC.NET 0 12.12.2011 18:02
Вычисление арктангенса через ряд Тейлора. С++. chibbis Помощь студентам 1 23.12.2009 11:48
Вычисление функции разложением ее в ряд 5nizza77 Паскаль, Turbo Pascal, PascalABC.NET 1 15.10.2009 10:55