Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
5 / 5 / 1
Регистрация: 12.06.2012
Сообщений: 60
1

Функция округления чисел

25.04.2013, 14:11. Просмотров 2903. Ответов 25
Метки нет (Все метки)

Здравствуйте, подскажите пожалуйста. Написала функцию округления цифр

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void RoundingFunction(double RoundingVariable, int& ResultVariable)
{
    double IntegerPart=0;
    ResultVariable=0;
    if (modf(abs(RoundingVariable),&IntegerPart)<=0.5)
    {
        if (RoundingVariable>0)
            ResultVariable=floor(RoundingVariable);
        else
            ResultVariable=ceil(RoundingVariable);
    }
    else
    {
        if (RoundingVariable>0)
            ResultVariable=ceil(RoundingVariable);
        else
            ResultVariable=floor(RoundingVariable);
    }
}
И вот мне интересно, возможен ли такой вариант, при вызове функции передать туда элемент динамического массива? Например:

C++
1
RoundingFunction(IndexRho,IndexRhoM[i*column+j]);
Когда компилируешь ошибок нет. Но стоит попытаться использовать массив IndexRhoM, он выдает мне необработанное исключение, при чем ссылается на эту функцию. Подскажите. Можно ли так сделать? Кстати, он выдает мне warning в этой функции так как по сути я присваиваю целому значению double значение.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.04.2013, 14:11
Ответы с готовыми решениями:

Функция округления
Добрый вечер,дала задание написать свою функцию округления числе,и применить её на своем...

Функция округления double
Как в С++ округлить double до int? С помощью какой функции?

Функция округления вещественного числа с заданой точностью
Написать функцию,которая принимает в качестве параметров вещественное число и количество знаков...

Функция округления вещественного числа с заданной точностью
Написать шаблон функции, которая принимает в качестве параметров вещественное число и количество...

25
Модератор
Эксперт по электронике
8231 / 6098 / 814
Регистрация: 14.02.2011
Сообщений: 21,179
25.04.2013, 18:35 21
Цитата Сообщение от Eumi Посмотреть сообщение
Создайте файл с таким массивом.
и так 5*5
а в обращении есть
Цитата Сообщение от Eumi Посмотреть сообщение
y[IndexRhoM[i]*360+IndexThetaN[i]]
т.е может быть и 360 и 720
вот тебе и выход за пределы

я обычно делаю так
расписываю выражения
например
Цитата Сообщение от Eumi Посмотреть сообщение
for (i=0; i<n; i++)
HoughTransformArray[IndexRhoM[i]*360+IndexThetaN[i]]=HoughTransformArray[IndexRhoM[i]*360+IndexThetaN[i]]+Gradient[i];
C++
1
2
3
4
for (i=0; i<n; i++)
{ int ind1=IndexRhoM[i]*360+IndexThetaN[i];
   HoughTransformArray[ind1]=HoughTransformArray[ind1]+Gradient[i];
}
а потом в отладчике слежу за ind1
можно ввести отладочную печать
C++
1
printf("%d",ind1);
тогда понятно какие значения принимает индекс и есть ли выход за пределы
1
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.04.2013, 18:39 22
Вот Ваш проблемный случай:
C++
1
2
3
4
5
for (i=0; i<n; i++)
{
   int index = IndexRhoM[i]*360+IndexThetaN[i]; // Индекс выходит за пределы
   HoughTransformArray[index]=HoughTransformArray[index]+Gradient[i];
}
P.S. ValeryS тоже об этом сказал.
1
5 / 5 / 1
Регистрация: 12.06.2012
Сообщений: 60
25.04.2013, 19:20  [ТС] 23
Tulosba, ValeryS,
ясно=) все верно матрица может быть и 320 на 720=) это не страшно. Я, просто в один момент немного поменяла формулу

было:
C++
1
IndexRho=MaxRho-(MaxRho-RhoPolarCoordinate[i*column+j])*(MaxRho-1)/(2*MaxRho);
а стало:
C++
1
IndexRho=2*MaxRho-(MaxRho-RhoPolarCoordinate[i*column+j])*(MaxRho-1)/(2*MaxRho);
но при этом забыла, что количество строк тоже должно увеличиваться в двое. то есть все решает одна строчка
C++
1
2
3
    RoundingFunction(MaxRho,MaxRhoInt);
    MaxRhoInt=2*MaxRhoInt; // вот эта вот=)))
    AlocatePicture(HoughTransformArray, MaxRhoInt, MaxTheta);
Tulosba, ValeryS спасибо вам огромное за помощь. Я просто уже столько с этим кодом вожусь что у меня ум за разум заходит. Без ваших пояснений, не додумалась бы, что дело в пределах. Еще раз спасибо большое. К сожалению репутацию я вам меня пока не могу=) ошибки не выдает, теперь буду возиться, чтобы все это работало правильно=)
0
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
25.04.2013, 21:13 24
Eumi, да Вам много чего не помешает в коде перелопатить.
0
5 / 5 / 1
Регистрация: 12.06.2012
Сообщений: 60
26.04.2013, 00:25  [ТС] 25
Цитата Сообщение от Tulosba Посмотреть сообщение
Eumi, да Вам много чего не помешает в коде перелопатить.
Например? Hough Transform я только начала делать=) алгоритм еще сырой=) его переделывать и переделывать еще=) а если подскажите что нить по остальной части буду очень благодарна, потому что на мой взгляд новичка, все нормально=) при условии что мне сказали глубоко не лезть=)
0
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
26.04.2013, 07:56 26
Eumi, вся программа написана хоть и на c++, но в стиле обычного c. Имитация двумерности массивов. Выделение/освобождение памяти в куче. Дублирование кода. Да много чего на взгляд новична незаметного
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2013, 07:56

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Функция floor для округления значения до определённого числа знаков дробной части
Всем привет ребята. кто мог бы объяснить где и что неправильно у меня в коде и как это исправить....

Как избежать округления дробных чисел
как сделать что бы не округляло ??? float t; float z,m; using namespace std; void main(void)...

Как избежать округления дробных чисел
не виводит дробь а только целие числа. где проблема ? #include &lt;iostream.h&gt; #include &lt;math.h&gt;...

Каков принцип округления дробных чисел у компьютера/компилятора?
Всем привет. У меня тут такой вопрос для темы: Как именно осуществляется округление дробных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.