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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2011, 20:21   #1
Solvinder
 
Регистрация: 10.01.2011
Сообщений: 4
По умолчанию Не срабатывает условие сравнения чисел.

Уважаемые товарищи. Бьюсь второй день над такой проблемой. Пришлось писать вот такой изврат в Delphi.

procedure TForm1.Button1Click(Sender: TObject);
var
x:array[0..7] of real;
y:array[0..7] of real;
f:array[0..6] of real;
g:array[0..6] of real;
j,i:Integer;
lp,sum1,xmin,xmax,l,k,l1,k1:real;
begin
l:=100000;
k:=-99999;
l1:=100000;
k1:=-99999;
for i:=0 to 7 do
begin
x[i]:=StrToFloat(StringGrid1.Cells[0,i+1]);
if x[i]<l then l:=x[i];
if x[i]>k then k:=x[i];
end;
for i:=0 to 7 do
y[i]:=StrToFloat(StringGrid1.Cells[1,i+1]);
for i:=0 to 6 do
begin
f[i]:=StrToFloat(StringGrid2.Cells[0,1]);
if f[i]<l1 then l1:=f[i];
if f[i]>k1 then k1:=f[i];
end;
for i:=0 to 6 do
g[i]:=StrToFloat(StringGrid2.Cells[1,1]);
if l<=l1 then xmin:=l else xmin:=l1;
if k>=k1 then xmax:=k else xmax:=k1;
lp:=xmin;
i:=0;
j:=0;
sum1:=0;
repeat
form2.Memo1.Lines.Add(FloatToStr(lp ));
if lp=x[i] then
begin
sum1:=sum1+y[i];
i:=i+1;
end;

form2.Memo2.Lines.Add(FloatToStr(su m1));
lp:=lp+0.1;
until lp>xmax;
Form2.ShowModal;
end;


Вобщем смысл задачи таков. Из стрингридов заполняются 4 массива, потом по данным этих массивов выводятся координаты двух линии, это особо не важно. Суть проблемы. В том месте которое выделил красным не срабатывает условие на 3 раз, то есть происходит все следующим образом: в поставленной аналитической задаче x[0]=9,8 а следовательно xmin=9,8, т.е lp соответственно тоже 9,8 и первых вход в условие происходит отлично; Далее x[1]=10,2 и когда lp приращением на 0,1 доходит до значения 10,2 то условие срабатывает на ура и второй раз, далее x[2]=10,6 и когда lp опять же путем приращения доходит до 10,6 оно не срабатывает и соответственно дальше оно тоже не срабатывает.
Пробовал с другой аналитикой(цифрами) опять же не срабатывает. Что тут не так? very need your help pls.
P.S. Сорри за код всей процедуры, но выложил все, ошибку найти не могу сам второй день.

Последний раз редактировалось Solvinder; 28.04.2011 в 20:26.
Solvinder вне форума Ответить с цитированием
Старый 28.04.2011, 23:01   #2
Solvinder
 
Регистрация: 10.01.2011
Сообщений: 4
По умолчанию

Проблема решена
Нужно использовать типы с фиксированной точкой. Например Currency. С типом real возникает какая-то неточность.
Solvinder вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
скрипт для сравнения чисел в двух столбцах Olya1985 Microsoft Office Excel 8 02.01.2011 01:58
Условие не срабатывает segail Microsoft Office Excel 5 15.08.2010 15:10
Помогите пожалуйста с программой сравнения 3 чисел на Pascal rsany Помощь студентам 3 23.06.2009 00:10
алгоритм сравнения больших чисел со сдвигом WOLFak Паскаль, Turbo Pascal, PascalABC.NET 0 29.12.2008 22:36