C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Аналог вычисления, с Паскаля на С++
** Начинающий
Отправлено: 24.05.2005, 13:57


Не зарегистрирован







Вообщем возникла такая проблема... как ни пробовал прописывать такое вычисление в С++ считается не верно, хотя Паскаль считает правильно. Помогите wink.gif

CODE
t:=round(10+350*sqrt((2700000+r*95000)/s));

Где все переменные типу Инт.

Заранее благодарен.
Guest
Отправлено: 24.05.2005, 14:25


Не зарегистрирован







Для начала так
t:=round(10+350*sqrt((2700000.0+r*95000.0)/s));

А лучше явно привести к double.
xim
Отправлено: 24.05.2005, 14:35


Станционный диспетчер

Группа: Участник
Сообщений: 143



Если версия Builder 6+, то можно воспользоваться функцией Round в Math.hpp, иначе round, описанный ниже
CODE

#include <math.h>

int round(double dVal)
{// можно поискать и другие способы округления
 int res;
 double num=0.0,fract;
 res=floor(num);
 fract=modf(dVal,&num);
 if(fract>=0.5)res++;
 return res;
}
...
t:=round(10+350*sqrt(double(2700000+r*95000)/double(s)));
...
** Начинающий
Отправлено: 24.05.2005, 14:45


Не зарегистрирован







Нет, паскаль та считает, приведённый мной код как раз корректно, не могу заставить С++ посчитать тоже самое и получить такой же результат, какой выдаёт паскаль sad.gif

Вот таке пробовал:
CODE
long t=10+350*sqrt((2700000+r*95000)/s);

CODE
long t=floor(10+350*sqrt((2700000+r*95000)/s));

CODE
long t=ceil(10+350*sqrt((2700000+r*95000)/s));


Ну не понимаю, в чём проблема... при том ошибается в целой части
sad.gif
Guest
Отправлено: 24.05.2005, 14:51


Не зарегистрирован







QUOTE

Для начала так
t:=round(10+350*sqrt((2700000.0+r*95000.0)/s));

Doga
Отправлено: 24.05.2005, 14:55


Мастер участка

Группа: Участник
Сообщений: 575



CODE

long t=(long)RoundTo(10.0+350.0*sqrt((2700000.0+((double)r)*95000.0)/((double)s)),0);


Такая запись даст самый точный результат для t.
** Начинающий
Отправлено: 24.05.2005, 15:09


Не зарегистрирован







QUOTE (Doga @ 24/05/2005, 14:55)
CODE

long t=(long)RoundTo(10.0+350.0*sqrt((2700000.0+((double)r)*95000.0)/((double)s)),0);


Такая запись даст самый точный результат для t.

Вооооо, Doga, это то что нада... не знаю пока как такое самому сочинить, но считает теперь верно.

Спасибо огромное. smile.gif

З.Ы. Где можно в интернете почитать литературу по С++ Билдеру для "полных чайников" начиная от типов данных и.т.д. с хорошим "разжевыванием". biggrin.gif
Rius
Отправлено: 24.05.2005, 15:16


Мастер участка

Группа: Участник
Сообщений: 321



Страуструп "С++", потом Архангельский "Borland C++ Builder 5 (и 6 тоже есть)" или Холлингвурд "C++ Builder 5 for developers".
Gedeon
Отправлено: 24.05.2005, 16:20


Ветеран

Группа: Модератор
Сообщений: 1742



Лучше уж тогда начинать с
Б.В. Керниган, Д.М. Ричи. Язык С.

А вот дальше Г. Шилдт "Самоучитель С++" мне нравится больше Страуструппа.
Doga
Отправлено: 24.05.2005, 18:34


Мастер участка

Группа: Участник
Сообщений: 575



Рад, что смог помочь smile.gif

Вернуться в Вопросы программирования в C++Builder