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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.12.2013, 20:56   #1
Garmata
 
Регистрация: 26.11.2013
Сообщений: 5
По умолчанию Деление на 0

В проекте при компиляции в введении стартовых данных
Выскакивает ошибка деление на ноль, что бы не присваивал переменной
Кто шарит помогите !

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DBCtrls, TeEngine, TeeProcs, Chart, Series;

type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Button1: TButton;
Chart1: TChart;
DBText1: TDBText;
Series1: TFastLineSeries;
Series2: TFastLineSeries;
Series3: TFastLineSeries;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Gd, Gm , Um, Ts: Integer;
R,L,Q,I,DI,t,Om,Tmax,T0,Tm,d,dt,UR, UC,UL : real;
const
EDS = 1.0 {Bольти};
Umax = 2.0 {Bольти };
C = 1E-6 {Фаради};

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
edit1.Text:=FloatToStr(L);
edit2.Text:=FloatToStr(R);
edit3.Text:=FloatToStr(T0);
edit4.Text:=FloatToStr(d);

Om:=1/sqrt(L*C); {цикліч. частота LC-контура}
dt:=d/Om; {крок}
Tmax:=2*pi*T0/Om; {часовий відрізок проведення розрахунків}

{задання початкових значень}
t:=0;
Q:=0;
I:=0;

{розвязок рівнянь методом ейлера}
while t <= Tmax do
begin
DI:=-(I*R*C*Om + Q - EDS*C);
I:=I+DI*d;
Q:=Q+I*d;
UR:=I*R*Om;
UC:=Q/C;
UL:=L*DI*Om*Om;
t:=t+dt;

end;
end;

end.
Garmata вне форума Ответить с цитированием
Старый 04.12.2013, 21:01   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от Garmata Посмотреть сообщение
в введении стартовых данных ..
Вы не вводите, а выводите
Код:
edit1.Text:=FloatToStr(L);
Надо наоборот
Код:
L:=StrToFloat(edit1.Text);
type_Oleg вне форума Ответить с цитированием
Старый 04.12.2013, 21:02   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А что должно выдавать при делении на 0? Посмотрите что в L и C задаете или не задаете
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.12.2013, 21:06   #4
Garmata
 
Регистрация: 26.11.2013
Сообщений: 5
По умолчанию

Спасибо большое !
Garmata вне форума Ответить с цитированием
Старый 04.12.2013, 21:16   #5
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Кстати, лучше в таких случаях обеспечить защиту от ввода всякой фигни, например букв, отриц. значений
Код:
 L:=StrToFloatDef(edit1.Text,0); 
 if L<=0 then 
  begin
   ShowMessage('индуктивность должна быть > 0');
   Exit;
  end;
type_Oleg вне форума Ответить с цитированием
Старый 04.12.2013, 21:27   #6
Alex2009
Proger Man
Форумчанин
 
Аватар для Alex2009
 
Регистрация: 07.03.2009
Сообщений: 584
По умолчанию

Вообще в школах учат что делить на 0 нельзя, ну а с точки зрения математики можно, но получаем в результате бесконечное число. Так вот мне интересно зачем вам нужно делить на 0?
ShowMessage('Добро пожаловать!');
Alex2009 вне форума Ответить с цитированием
Старый 04.12.2013, 21:44   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Вообще в школах учат что делить на 0 нельзя, ну а с точки зрения математики можно, но получаем в результате бесконечное число
Где такая математика? Что-то не встречал
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 04.12.2013, 21:50   #8
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Да, ∞ - это не число. В математике.
Правда, можно или нельзя, это надо смотреть определение понятия деление Я не помню.

Последний раз редактировалось type_Oleg; 04.12.2013 в 21:54.
type_Oleg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Деление atenon Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 18.10.2012 19:43
Деление Nikita++ Помощь студентам 8 19.03.2011 18:56
Деление в С++ Tanilita Общие вопросы C/C++ 5 26.02.2010 17:28
Деление |{ot Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 24.03.2009 01:50
деление natasha Общие вопросы Delphi 6 22.01.2007 12:39