![]() |
#1 (permalink) |
Member
Регистрация: 05.12.2012
Сообщений: 27
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]() #include <stdio.h> #include <conio.h> #include <math.h> int main() { float x, s, f, x_nach, x_kon, delta_x, eps, temp; int n, fact; printf("\nVvod ishodnyh dannyh\n"); printf("\nx_nach="); scanf("%f", &x_nach); printf("\nx_kon="); scanf("%f", &x_kon); printf("\ndelta_x="); scanf("%f", &delta_x); printf("\neps="); scanf("%f", &eps); printf("\nDlya x=%5.3f do %5.3f s shagom $5.3f i tochnostyi %5.3f\n", x_nach, x_kon, delta_x, eps); printf("\n x n s f"); printf("\n--------------------------------------"); x = x_nach; do { temp = 1.0; s = 0; n = 1; f = exp(-x); fact=1; while (fabs(temp) > eps) { temp=pow(-1,n)*(pow(x,n)/fact); s+=temp; n++; fact+=n*(n-1); } printf("\n%5.3f %d %0.6f %0.6f", x, n, s, f); x += delta_x; } while (x <= x_kon); printf("\n--------------------------------------"); return 0; } |
![]() |
![]() |
![]() |
|
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Можете поискать интересующую информацию в аналогичных топиках Вложенные циклы с разветвлениями, использование массивов Pascal, циклы Pascal, циклы, управляемые условиями |
![]() |
#2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]()
Это еще что за ахинея? Разберитесь, для начала, что такое факториал и как его правильно считать.
Попробуйте так: do { s = 1; n = 1; f = exp(-x); fact = 1; while (fabs(temp) > eps) { temp=pow(-1,n)*(pow(x,n)/fact); s+=temp; n++; fact*= n; } ... И да, fact лучше задать в формате float, иначе он может вылететь за разрядную сетку. |
![]() |
![]() |
![]() |
#5 (permalink) |
Member
Регистрация: 05.12.2012
Сообщений: 27
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
![]()
eps=0.01 (10 символов)
|
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
#10 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
![]()
Нет, не то.
Еще раз. 1. Уберите цикл по х, оставьте только х=1. 2. В цикле по n организуйте вывод указанных параметров. 3. Покажите текст программы. К сожалению, СИ-транслятора у меня нет, поэтому я переписал Ваш код на Паскаль так, чтобы было максимально близко. Вот что получилось (стандартной функции Pow у меня нет, поэтому она введена вручную): Код:
Uses CRT; Var s,fact,temp,eps,x,f:Real; n:Integer; function Pow(z:real; M:integer):Real; Var i:integer; Y:real; Begin if M=0 then Pow:=1 else if M=1 then Pow:=z else begin Y:=z; for i:=2 to M DO Y:=Y*z; Pow:=Y; end; end; Begin ClrScr; x:=1; eps:=0.01; temp:=1; s:=1; n:=1; f:=exp(-x); fact:=1; while abs(temp)>eps do begin temp:=pow(-1,n)*(pow(x,n)/fact); s:=s+temp; writeln(' n = ',n,' temp = ',temp:11:8, ' s = ',s:11:8); Inc(n); fact:=fact*n; end; Readkey End. ![]() Видно, как s постепенно сходится к значению 1/е = 0.367879, что свидетельствует о правильности алгоритма. Вывод: Вы где-то накосячили с вводом программы. Поэтому и прошу выложить Ваш листинг. Да, Вам еще следует перед циклом while добавить temp = 1. |
![]() |
![]() |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
![]() |
Опции темы | |
Опции просмотра | |
|
|