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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2017, 15:05   #1
furgingerbread
Пользователь
 
Регистрация: 14.11.2016
Сообщений: 12
По умолчанию Delphi. Ряды. Вывод в таблицу.

Здравствуйте!

Проблема с запуском программы. Ошибка EConvertError with message "is not a valid floating point value".

Задание во вложении, а здесь привожу код:

Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Label8: TLabel;
    Edit5: TEdit;
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

const
N = 100;
type
Tx = array[1..N] of Extended;
Ter = array[1..N] of Integer;
var
X,S: Tx;
Er:Ter;
Er2,Km,M: Integer;
E,Xn,Xk,Dx: Extended;

procedure FillX(var X: Tx);   // Заполнение массива X
var
I:Integer;
begin
X[1]:=Xn;
for I:=2 to M do
X[I]:=X[I-1] + Dx;
end;

procedure Series(X: Tx; E, Xn, Xk:extended; Km:Integer; var S:Tx; var Er2: Integer); // Вычисление суммы ряда
var
  R: extended;
  I,J:Integer;
begin
  S[1]:=0;
  X[1]:=Xn;
  R:=1;
  Er2:=1;
  I:=1;
  J:=1;
  while (X[I]<Xk) do
   begin
   repeat
     S[J]:= S[J] + R;
     R:= R*X[I]/J;
       if abs(R)<E then
         begin
           J:=Km;
           Er2:=Er2-1;
       end;
     Inc(J);
   until (J > Km);
   Inc(I);
   end;
end;

Procedure RezOut(M: integer; var X,S:Tx; var Er: Ter); // Вывод результатов
var
I,J: Integer;
    begin
    for I:=1 to M do
    for J:=1 to M do
    if (Er[I]=0) then
    begin
     Form1.StringGrid1.Cells[I, 0]:=('X[' + IntToStr(I) + ']=' + FloatToStr(X[I]));
     Form1.StringGrid1.Cells[I,1]:=FloatToStrF(S[J], ffGeneral, 6, 5);
    end
    else
     ShowMessage('Сумма ряда не найдена');
   end;

procedure TForm1.Button1Click(Sender: TObject);
begin
E:=StrToFloat(Edit1.Text);
Xn:=StrToFloat(Edit2.Text);
Xk:=StrToFloat(Edit3.Text);
Dx:=StrToFloat(Edit4.Text);
M:= trunc((Xk - Xn)/Dx + 1);
Edit5.Text:=(IntToStr(M));
StringGrid1.Cells[0, 0]:='X/Y';
StringGrid1.Cells[0, 1]:='Y';

FillX(X);
Series(X,E,Xn,Xk,Km,S,Er2);
RezOut(M,S,X,Er);
end;

end.

Подскажите, какие здесь косяки? Как исправить ошибку?

Большое спасибо.
Вложения
Тип файла: docx Задание.docx (17.3 Кб, 13 просмотров)

Последний раз редактировалось furgingerbread; 19.02.2017 в 16:00. Причина: Понял, почему не запускалась форма. Главная программа находилась не в том месте. Теперь значение выводится, но неправильно.
furgingerbread вне форума Ответить с цитированием
Старый 19.02.2017, 15:26   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Обычно в Edit-ах числа надо ставить, а не пробелы
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 19.02.2017, 15:39   #3
furgingerbread
Пользователь
 
Регистрация: 14.11.2016
Сообщений: 12
По умолчанию

В Edit-ах пользователь должен вводить числа, для чего используются преобразования StrToFloat.

Если речь о пробелах перед StrToFloat в этом куске:

Код:
E:= StrToFloat(Edit1.Text);
Xn:= StrToFloat(Edit2.Text);
Xk:= StrToFloat(Edit3.Text);
Dx:= StrToFloat(Edit4.Text);
то я их убрал, но ошибка по-прежнему вылезает.
furgingerbread вне форума Ответить с цитированием
Старый 19.02.2017, 18:14   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Скорее всего, дело в десятичном разделителе decimal separator - см. http://www.freepascal.org/docs-html/...separator.html
Попробовать заменить десятичную точку в содержимом Edit '.' на ',' или наоборот. Попробовать в 'Е' формате, напр., число пи : 31415Е-4
Если охота работать с привычной дес. точкой, перед первым чтением записать :
DecimalSeparator := '.' ;

Последний раз редактировалось digitalis; 19.02.2017 в 22:39.
digitalis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод информации из Combobox в таблицу fnt C/C++ Базы данных 0 18.03.2015 21:58
вывод из базы данных в таблицу ... s88s PHP 9 11.12.2014 10:17
Вывод информации в таблицу Desha Обсуждение статей 1 11.11.2009 13:21
Delphi ряды tanek Помощь студентам 2 27.09.2009 04:38
Вывод массива в таблицу Kycaka Общие вопросы C/C++ 30 26.05.2009 19:19