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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.11.2008, 13:14   #1
innaa639
Пользователь
 
Аватар для innaa639
 
Регистрация: 13.11.2008
Сообщений: 80
Хорошо Решите задачку

Заданы вещественные числа x<>0, E>0. Вычислить сумму с точностью до Е(10^-6). Определить количество слагаемых. В процессе вычисления выдать на экран промежуточные результаты.
1 + Знак суммы(a(a-1)...(a-k+1))xk/k!, (E>0,|x|<1).
k=1
innaa639 вне форума Ответить с цитированием
Старый 30.11.2008, 13:29   #2
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Цитата:
Сообщение от innaa639 Посмотреть сообщение
Заданы вещественные числа x<>0, E>0. Вычислить сумму с точностью до Е(10^-6). Определить количество слагаемых. В процессе вычисления выдать на экран промежуточные результаты.
1 + Знак суммы(a(a-1)...(a-k+1))xk/k!, (E>0,|x|<1).
k=1
Недавно делал похожую задачу(кстати с форума)

Код:
const eps=0.000001;
var z:real;
    sum,x:real;
    i:integer;
function fact(y:integer):real;
begin
if y=1 then fact:=1
   else fact:=y*fact(y-1);
end;

begin
writeln('input z');
readln(z);
sum:=0;i:=0;
repeat
inc(i);
x:=sqr(z+2)/fact(i);{нужно записать сюда функцию }
sum:=sum+x;
writeln('Step ',i,':',sum);
until x<=eps;
writeln('Summa ',sum:3:3);
end.
i - количество слагаемых
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 30.11.2008, 14:14   #3
innaa639
Пользователь
 
Аватар для innaa639
 
Регистрация: 13.11.2008
Сообщений: 80
По умолчанию

Так это код к моей задачке или нет?
innaa639 вне форума Ответить с цитированием
Старый 30.11.2008, 14:16   #4
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

С факториалом Вы дальше fact(12) не уедете. Здесь надо применить рекуррентное отношение.
puporev вне форума Ответить с цитированием
Старый 30.11.2008, 14:17   #5
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

НЕТ
Вам нужно вместо
Код:
x:=sqr(z+2)/fact(i);
записать свою функцию
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 30.11.2008, 14:20   #6
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Код:
function fact(x:integer):real;
var i,j:integer;
begin
j:=1;
for i:=1 to x do
 j:=j*i;
fact:=j;
end;
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 30.11.2008, 14:27   #7
innaa639
Пользователь
 
Аватар для innaa639
 
Регистрация: 13.11.2008
Сообщений: 80
По умолчанию

а как записать знак суммы в функции или вообще мою функцию,я этого вообще не понимаю
innaa639 вне форума Ответить с цитированием
Старый 30.11.2008, 14:30   #8
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

суммирование происходит в цикле repeat until пока слагаемое не станет меньше 10^-6
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 30.11.2008, 14:56   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот нормальный код программы.
Код:
uses crt;
var x,e,a,s,s1,t:real;
    k:integer;
begin
clrscr;
repeat
write('x=');readln(x);
write('a=');readln(a);
until (abs(x)<1)and(x<>0);//проверяем правильность ввода х
e:=0.000001;s:=1;k:=1;t:=a*x;//начальные значения
while abs(s-s1)>=e do //пока разность между очередной и предшествующей суммой >e
  begin
   s:=s1;//s присваиваем значение вычисленного s1
   s1:=s+t;//вычисляем новую сумму
   writeln('k=',k,'  s1=',s1:10:7,'  s=',s:10:7);//выводим на экран количество слагаемых
//под знаком суммы, предыдущую и полученную суммы                                      
   t:=t*(a-k+1)/k; //вычисляем очередное слагаемое
   inc(k); //увеличиваем счетчик
 end;
readln
end.
puporev вне форума Ответить с цитированием
Старый 30.11.2008, 15:00   #10
innaa639
Пользователь
 
Аватар для innaa639
 
Регистрация: 13.11.2008
Сообщений: 80
По умолчанию

Но этом коде оно бесконечно вводит икс и а
innaa639 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решите задачу(( volk86 Паскаль, Turbo Pascal, PascalABC.NET 0 29.11.2008 19:47
Решите задачку на Delphi evrey Общие вопросы Delphi 1 01.06.2008 21:47