![]() |
|
Модераторы: bsa |
![]()
|
|
| kelario |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.9.2008 Репутация: нет Всего: нет |
Доброе время суток.Хочу обратится к вам за помощью.Я только начинаю изучать программирование и всякие мелочи представляются мне крупными проблемами.
В общем есть программа: Вводим 2 числа (к примеру 1 и 100).Программа должна показать те числа,которые находятся в интервале между 2 введенными ранее числами и кубические корни которых равны целому числу.(тоесть в данном примере это будет 1,8,27,64).Программу я в принципе написал,но преподаватель сказал,что таким образом лучше это не реализовывать,так как С++ теоретически может извлечь даже из подходящего числа корень таким образом,что число будет иметь дробную часть,или наоборот из "неправильного числа " вывести целое.В общем,как написать программу правильнее?и еще,можно ли это как то сделать без доп. библиотеки мат.х,тоесть без функции pow? Помогите пожалуйста мудрые гуру!
п.с: если можно,представляйте плз как можно более простые решения.Я только только начинаю учится и поэтому мне будет сложно разобраться в продвинутом коде.(был бы очень признателен за краткие пояснения в сложных местах). Это сообщение отредактировал(а) kelario - 19.9.2008, 20:10 |
|||
|
||||
| ama_kid |
|
||||||||
![]() АСУТП-кодер ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1460 Регистрация: 5.3.2007 Где: Москва Репутация: нет Всего: 95 |
Вполне возможно, что твой преподаватель имел ввиду следующее: представление дробных чисел в памяти имеет особенность - у них в 99% случаев есть дробный "хвост" не равный нулю. Например, число 2.0 может храниться в виде 2.00000004532 или 2.0000000000533 Поэтому сравнивать вещественные числа лучше на диапазоне. Т.е. ты пишешь, к примеру:
P.S. Кстати, выражение
-------------------- самурай без меча подобен самураю с мечом, но только без меча |
||||||||
|
|||||||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 9 Всего: 14 |
гораздо проще алгоритм:
берем куб корень из левой границы округляем до меньшего далее возводим все целые числа начиная с этого в куб (это число надо проверить персонально на равенство куба левой ганице) пока куб не будет больше правой границы для отрицательных надо проверять на больше или равно левой границе и меньше или равно правой Это сообщение отредактировал(а) J0ker - 19.9.2008, 20:56 |
|||
|
||||
| IKM2007 |
|
|||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: 3 Всего: 40 |
kelario, можно по-проще.
Это сообщение отредактировал(а) IKM2007 - 19.9.2008, 20:55 -------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
|||
|
||||
| kelario |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.9.2008 Репутация: нет Всего: нет |
Спасибо!Все более или менее понятно,идея ясна.Но! Почему то программа не работает в том случае,если первое число отрицательное а второе положительное.Вот если первое положительное,а второе отрицательное то все ок,а так почему то нет :( В чем может быть проблема?
(знаю что d можно обьявить в начале и не делать мартышкин труд,но это так,проба пера Это сообщение отредактировал(а) kelario - 20.9.2008, 14:45 |
|||
|
||||
| IKM2007 |
|
||||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: 3 Всего: 40 |
Потому-что в первом случае передаешь в pow отрицательное число, а во втором случае положительное.
Это сообщение отредактировал(а) IKM2007 - 20.9.2008, 17:13 -------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
||||
|
|||||
| kelario |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.9.2008 Репутация: нет Всего: нет |
АА,понятно ок.Спасибо еще раз.А как этого можно избежать? если первое число отрицательное то использовать пов 2-го а если второе отрицательное то пов первого ? а если оба отрицательны то умножить их на -1 и потом приписать минус к результату?(или может все проще?)
|
|||
|
||||
| IKM2007 |
|
||||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: 3 Всего: 40 |
kelario, просто вместо
в строке 9 напиши
-------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
||||
|
|||||
| kelario |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.9.2008 Репутация: нет Всего: нет |
Ой,еще раз выручил
А с 2 отрицательными прога перескакивает порог 2 числа?тоесть показывает числа,выходящие за пределы отрезка между 2 введенными числами. Извиняюсь за назойливость. Это сообщение отредактировал(а) kelario - 20.9.2008, 20:52 |
|||
|
||||
| IKM2007 |
|
||||||||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: 3 Всего: 40 |
kelario, твой код отредактировать лень было, написал другой код.Работает для ВСЕХ случаев, НО иногда не показывает введенные 2 числа, если их кубические корни равны целому числу. Например если вводить -64 и 8, то выводит -27,-8,-1,0,1,8.Только что заметил...
Добавлено через 2 минуты и 37 секунд
Да. Что как понимать?
то же самое, что
-------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
||||||||
|
|||||||||
| kelario |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.9.2008 Репутация: нет Всего: нет |
А это зачем?В смысле для чего в 2 случаях добавляется и отнимается единица?Потому что округляем и при неудачных обстоятельствах можем потерять одно число ? |
|||
|
||||
| IKM2007 |
|
||||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: 3 Всего: 40 |
kelario, как видишь в строках 13-18
я присваиваю а1=min{a1,a2} и a2=max{a1,a2}. Теперь, если а1=-32.87, то y1 должен быть -32, то есть y1=(int)a1, а если а1>0, то y1=33, то есть y1=(int)a1+1. Анологично в
-------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
||||
|
|||||
| kelario |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.9.2008 Репутация: нет Всего: нет |
Не,я понимаю что происходит,просто зачем А при значение больше 0 увеличивать на 1 единицу ?почему у1 не может быть равен 32? Зачем ему быть 33 ?
|
|||
|
||||
| IKM2007 |
|
|||
![]() Зима близко ![]() ![]() Профиль Группа: Участник Сообщений: 702 Регистрация: 26.4.2008 Где: olmedreca Репутация: 3 Всего: 40 |
kelario, если у тебя есть интервал (a1,a2)=(-32.87,32.87), то в этом интервале целые числа
{-32,-31,-30,,,,,30,31,32}, следовательно y1=-2 и y2=32, а если дан интервал (32.87,64.87), то в этом интервале целые числа {33,34,35,,,,,62,63,64}, следовательно y1=33=(int)a1+1;. -------------------- "К чёрту обстоятельства, я создаю возможности." Брюс Ли |
|||
|
||||
| kelario |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 37 Регистрация: 19.9.2008 Репутация: нет Всего: нет |
Блин,точно.Сорри за тупость :(
Это сообщение отредактировал(а) kelario - 21.9.2008, 14:37 |
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |