Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1355222180
Darvin
2012-12-11 14:36
2013.08.25
Программная инсталляция драйвера


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


8-1232368698
golovanog
2009-01-19 15:38
2013.08.25
Проблема источников в OpenAL (проиграть 999 семплов одновременно)


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


15-1363818230
Германн
2013-03-21 02:23
2013.08.25
Космический аппарат вышел за пределы Солнечной системы!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский