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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2014, 23:17   #1
Shoshona
Пользователь
 
Регистрация: 03.06.2014
Сообщений: 22
Радость Функция вычисления суммы ряда по формуле

Помогите пожалуйста с кодом программы! Вроде работает, но выводит странный результат. Не могу найти ошибку.
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}


procedure CalkFact(Zn:integer; var Rez:integer); 
var j: Integer; 
begin
Rez:=1; 
for j := 1 to Zn do Rez:=Rez*j; 
end; 

procedure TForm1.Button1Click(Sender: TObject);
var x1,x2,h:real; 
N:integer; 
i:integer; 
sum:real; 
ZnFact:integer; 
stroka:string;
begin 
Memo1.Clear; 
N:=StrToInt(Edit1.Text); 
x1:=StrToFloat(Edit2.Text); 
x2:=StrToFloat(Edit3.Text); 
h:=StrToFloat(Edit4.Text); 
repeat 
sum:=0; 
for i:=1 to n do
begin
CalkFact(i,ZnFact);
sum:=sum+cos(2*Pi*x1)/(exp(ln(2)*i)+sin(ZnFact));
end;
stroka:= 'f('+FloatToStr(x1)+') = '+ FloatToStrF(sum,ffFixed,7,3);
Memo1.Lines.Add(stroka);
x1:=x1+h; 
until x1>x2; 
end;


end.
Изображения
Тип файла: jpg пвапвапфв.jpg (5.5 Кб, 130 просмотров)

Последний раз редактировалось Stilet; 12.06.2014 в 09:47.
Shoshona вне форума Ответить с цитированием
Старый 11.06.2014, 23:45   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,504
По умолчанию

Для справки: уже при n=13 , 13! = 6227020800
А максимальное Integer = 2147483647
Поэтому при n>12 будет фигня всякая.
Так что делайте факториал например Double или Real
И вообще, зачем процедура, лучше функция , и лучше с рекурсией, например
Код:
function fFact(Zn:Integer):Double;
begin
 if Zn=0 then Result:=1 else Result:=Zn*fFact(Zn-1);
end;
А для степени есть функция Power

А еще лучше - вообще обойтись без степеней и факториалов, используя для вычислений следующих слагаемых предыдущие.
type_Oleg вне форума Ответить с цитированием
Старый 11.06.2014, 23:51   #3
Shoshona
Пользователь
 
Регистрация: 03.06.2014
Сообщений: 22
По умолчанию

Спасибо учту!
Сейчас попробую!
Shoshona вне форума Ответить с цитированием
Старый 11.06.2014, 23:55   #4
Shoshona
Пользователь
 
Регистрация: 03.06.2014
Сообщений: 22
По умолчанию

У меня выбивает ошибку Floating point division by zero - это означает, что я делю где-то на ноль?
Shoshona вне форума Ответить с цитированием
Старый 12.06.2014, 09:47   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Именно так. Там где есть операции деления поставь условия проверки на ноль.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.06.2014, 09:58   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В знаменателе членов ряда ноль вообще не может быть. Откуда оно взялось?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 12.06.2014, 10:07   #7
Shoshona
Пользователь
 
Регистрация: 03.06.2014
Сообщений: 22
Хорошо

Спасибо. Попробую!
Shoshona вне форума Ответить с цитированием
Старый 12.06.2014, 11:16   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
В знаменателе членов ряда ноль вообще не может быть. Откуда оно взялось?
Shoshona, обратите внимание на пост Аватара!
Деления на ноль в данной формуле быть не может.
Это говорит об ошибке в вашем коде!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Рекурсия для вычисления суммы ряда malikon Помощь студентам 3 02.05.2014 20:46
Алгоритм вычисления суммы ряда cmcm1 Помощь студентам 1 21.09.2013 23:05
написать функцию вычисления суммы ряда (С++) Герман85 Помощь студентам 0 02.06.2013 21:42
программа для вычисления суммы ряда Vitalina69 Общие вопросы Delphi 2 01.12.2010 19:47
вычисления суммы ряда kJlaCuk Паскаль, Turbo Pascal, PascalABC.NET 3 17.09.2008 23:24