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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.03.2010, 20:02   #1
santi90
 
Регистрация: 14.02.2010
Сообщений: 9
По умолчанию Написал прогу! немного не то считает!

нужно найти сумму ряда с точностью e=10^-3, общий член которого равен
an=(10^n)/n!
нам сказали сделать с кнопочками!!вот текст:

Код:
unit Unit1;

interface

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

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

var
  Form1: TForm1;

implementation

{$R *.dfm}
function factorial(n:Word):Longint;
var f:longint;
    i:integer;
begin
f:=1;
for i:=2 to n do
f:=f*i;
result:=f;
end;

procedure TForm1.Button1Click(Sender: TObject);
const e=0.1E-2;
var               {объявление локальных переменных}
Code1,Code2:integer;
v2,v3:real;
s1,s3: string;
v1,n:integer;
begin
   s1:= Edit1.Text ;  {чтение строки из Edit1 в s1}
   Val(s1,v1, Code1);  {преобразование строки s1 в число v1 и выдача кода ошибки}
                       {если нет ошибки, то Code1=0}
   if Code1 <> 0 then Label4.Caption:='Неверный ввод ';
        if (Code1=0) then  {если нет ошибок ввода}
      begin
      while v2>e do
      begin
      v3:=0;
      v2:=(exp(ln(10)*(v1)))/factorial(v1);   {расчет суммы}
      v3:=v3+v2;
      Str(v3:5:2, s3);  {преобразование суммы в строку}
      Label4.Caption:='OK, сумма равна:'+ s3;  {вывод сроки в элемент Label4}
      end;
      end;
      end;
      end.
помогите кому не лень! что не правильно делаю?? если без while он просто считает v2(общий член!)
а с циклом !он пишет то деление на ноль! то слишком большое число!
ЗАРАНЕЕ СПАСИБО!

Последний раз редактировалось Stilet; 23.03.2010 в 13:28.
santi90 вне форума Ответить с цитированием
Старый 23.03.2010, 12:44   #2
Dr.Ern
 
Регистрация: 06.03.2010
Сообщений: 5
По умолчанию

привет! WHILE это тоже типа цикл.В твоём случае при выполнении цикла
while переменная v3 постоянно обнуляется (v3:=0). отсюда и резельтат -
просто считает v2(общий член!)! поставь строку v3:=0 выше строки
while v2>e do и у тебя всё должно получиться!

а в твоём случае переменная v1 должна меняться? из условия задачи она должна меняться от 1 и далее пока
v2 не будет меньше е
а у тебя переменная берётся из edit

Последний раз редактировалось Dr.Ern; 23.03.2010 в 12:58. Причина: *
Dr.Ern вне форума Ответить с цитированием
Старый 23.03.2010, 18:42   #3
Dr.Ern
 
Регистрация: 06.03.2010
Сообщений: 5
По умолчанию

Код:


unit Unit1;

interface

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

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

var
Form1: TForm1;

implementation

{$R *.dfm}
function factorial(n:Word):Longint;
var f:longint;
i:integer;
begin
f:=1;
for i:=2 to n do
f:=f*i;
result:=f;
end;

procedure TForm1.Button1Click(Sender: TObject);
const e=0.1E-2;
var {объявление локальных переменных}
Code1,Code2:integer;
v2,v3:real;
s1,s3: string;
v1,n:integer;
begin
v3:=0;
v2:=0;
v1:=1;
repeat
v3:=v3+v2;
v2:=(exp(ln(10)*(v1)))/factorial(v1);
v1:=v1+1;
until v2>e;
Str(v3:5:2, s3); {преобразование суммы в строку}
Label4.Caption:='OK, сумма равна:'+ s3; {вывод сроки в элемент Label4}
end;
end.


Я бы сделал так!
Dr.Ern вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c++ time.h Помогите немного разобраться. Хочу написать прогу, чтоб просто считывало дату с системы,и (см) Познающий Помощь студентам 3 09.08.2009 15:59
Помогите немного исправить Прогу ApXoH Паскаль, Turbo Pascal, PascalABC.NET 6 04.05.2009 14:22
Массив,прогу написал,сделайте её меньше enot27 Паскаль, Turbo Pascal, PascalABC.NET 0 08.12.2008 11:30
Написал прогу в паскале... deu4er Помощь студентам 2 19.11.2008 20:08
Написал бэкдор, оцените KORN Софт 7 18.11.2007 08:55