Тема: Циклы в Си
Показать сообщение отдельно
Старый 16.04.2014, 15:34   #10 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Kampuchiec Посмотреть сообщение
Выводит вот такую картину
Нет, не то.
Еще раз.
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.
Вот что получилось у меня:
Название: AA01.jpg
Просмотров: 136

Размер: 17.5 Кб
Видно, как s постепенно сходится к значению 1/е = 0.367879, что свидетельствует о правильности алгоритма. Вывод: Вы где-то накосячили с вводом программы. Поэтому и прошу выложить Ваш листинг.
Да, Вам еще следует перед циклом while добавить temp = 1.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070