Форум: "Начинающим";
Текущий архив: 2013.08.25;
Скачать: [xml.tar.bz2];
ВнизОб округлении в 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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.002 c