Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2013.08.25;
Скачать: CL | DM;

Вниз

Об округлении в Delphi.   Найти похожие ветки 

 
Айдар   (2012-12-14 05:51) [0]

Всем привет! Возникла проблема с округлением. Дан интервал [x1;x2], мне нужно найти произведение всех целочисленных отрицательных чисел входящих в данный промежуток. Вот "кусок" программы: x1:=strtofloat(edit1.Text);
x2:=strtofloat(edit2.Text);
K:=1;
If x2<x1 Then
Label3.Caption:="Неправильно заданы границы интервала [x1,x2]"
Else begin
xmin:=trunc(x1);
xmax:=trunc(x2);
For i:=xmin to xmax do
If (i<0) Then K:=K*i;
f1book1.numberrc[2,4]:=K;
end;
Если вводить в интервал целые числа, то программа работает правильно, но при введении в интервал дробных чисел программа считает неправильно. Например дан интервал [-10;-8,1], trunc x1=-10, trunc x2=-9, следовательно произведение целочисленных отрицательных чисел в данном промежутке равно 90, но программа выводит как -720. Подскажите пожалуйста, как это исправить? Спасибо за внимание.


 
Inovet ©   (2012-12-14 06:15) [1]

> [0] Айдар   (14.12.12 05:51)
> Например дан интервал [-10;-8,1], trunc x1=-10, trunc x2=-9

Неправда, Trunc(-8.1) = -8

И зачем в цикле проверять i<0, когда можно пер циклом проверить
xmax:=trunc(x2);

if(xmax) >= 0 then xmax := -1;


 
Inovet ©   (2012-12-14 06:20) [2]

Floor


 
Inovet ©   (2012-12-14 06:23) [3]

Ну и Ceil для первого


 
O'ShinW ©   (2012-12-14 09:02) [4]

проще подойти формально - пока меньше, множь

var
 x1,x2: Double;
 i, K: Integer;
begin
 x1 := -10;
 x2 := -8.1;
 K:=1;
 If x2<x1 Then
   Exit Else
 begin
   i := Round(int(x1));
   while i < x2 do
   begin
     K := K*i;
     inc(i);
   end;
   ShowMessageFmt("%f %f %d",[x1, x2, K]);
 end;
end;


 
Inovet ©   (2012-12-14 19:06) [5]

> [4] O"ShinW ©   (14.12.12 09:02)
> проще подойти формально

Правильно - вспомнить математику и сделать без перебора.



Страницы: 1 вся ветка

Текущий архив: 2013.08.25;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
15-1364131639
TUser
2013-03-24 17:27
2013.08.25
Пенроуз в Политехническом музее


2-1355296974
Вася
2012-12-12 11:22
2013.08.25
ШИМ из LPT порта


1-1311150598
FosterGrand
2011-07-20 12:29
2013.08.25
Сбой кодировки в ToolBar


2-1355737828
aka
2012-12-17 13:50
2013.08.25
Задания на вычислительную практику


4-1266492114
Alik
2010-02-18 14:21
2013.08.25
Вызов стандратного окна даты времени