|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
22.05.2014, 13:21 | #1 |
Пользователь
Регистрация: 11.12.2013
Сообщений: 56
|
вопросы про логическое "не" и макросы
во первых уже не раз встречал формулировку !число, что это значит? как можно логически отрицать число? кроме как !1 = 0, !0 = 1? не понимаю
во вторых нашел такую вот красивую рекурсивную формулировку факториала, только почему то у меня выдает ошибку error C3861: factorial: идентификатор не найден #define factorial(x) !x ? 1 : x * factorial(x - 1) Последний раз редактировалось _BYTE; 22.05.2014 в 13:25. |
22.05.2014, 13:41 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
имхо, через define рекурсивную формулу описать нельзя.
Пишите функцию. |
22.05.2014, 13:43 | #3 |
Пользователь
Регистрация: 11.12.2013
Сообщений: 56
|
|
22.05.2014, 14:06 | #4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
!x - это для сравнения x с нулём/не нулём
это аналог такого программного кода: Код:
|
22.05.2014, 14:21 | #5 |
Пользователь
Регистрация: 11.12.2013
Сообщений: 56
|
вроде понятнее... только тогда я какую то фигню выходит нарыл -_- факториал нуля то 0 а не 1... вот так наверное будет тогда правильнее, если уж функцией делать
Код:
з.ы. люблю я тернарный оператор =) Последний раз редактировалось _BYTE; 22.05.2014 в 14:26. |
22.05.2014, 14:32 | #6 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
1) не рекомендую использовать подобный код для нахождения факториала ОТРИЦАТЕЛЬНЫХ чисел.
2) при умножении любого числа на ноль, всегда получается ноль! Код:
Цитата:
p.s. кстати, Вы, похоже, не понимаете, что такое рекурсия... Рекомендую пошагово пройтись (можно на бумажке с ручкой) и разобраться... Последний раз редактировалось Serge_Bliznykov; 22.05.2014 в 14:34. |
|
22.05.2014, 14:46 | #7 |
Пользователь
Регистрация: 11.12.2013
Сообщений: 56
|
1. но для того же я и присобачил вот это: ((x >= 0) ? x : - x), т.е. это фактически тоже самое что abs, просто не надо таскать за собой юнит с абсом... но ктати при попытке ввести отрицательное число выдало ошибку почему интересно...
2. ну это то я знаю 3. че реально единице? О_О че то у меня это логически в голове не укладывается... ведь вот именно из пункта 2: 0*0 = 0 же... как тогда факториал 0 = 1? это бред же... 4. да я никогда не понимал рекурсию особо, просто она красивее намного и короче |
22.05.2014, 15:31 | #8 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Цитата:
|
|
23.05.2014, 07:30 | #9 |
Пользователь
Регистрация: 11.12.2013
Сообщений: 56
|
ответьте пожалуйста почему у меня это условие не срабатывает??? ((x >= 0) ? x : - x)
|
23.05.2014, 08:55 | #10 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
срабатывает. это же ваш любимый тернарный оператор.
если x больше/равен нуля, то результат выражения в скобках будет равен x, если x отрицательное значение, то результат выражения в скобках будет -x (т.е. положительное число), потом полученный результат сравнивается с нулём. На значение x (отрицательное) это никак не влияет, именно оно и берётся при умножении. Вы, вероятно, хотели так написать: Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Глупые вопросы про указатели | Qaliti | Общие вопросы C/C++ | 4 | 05.01.2014 00:28 |
Банальные вопросы про Апи Хуки. | LXandR | Общие вопросы C/C++ | 6 | 25.08.2012 13:31 |
Вопросы про INTERNET | Trash Band | Помощь студентам | 3 | 27.12.2011 11:25 |
Вопросы про компонент HTTPRIO | Anatai | Компоненты Delphi | 0 | 24.01.2011 13:13 |
Вопросы новичка про C++ | k1r1ch | C++ Builder | 5 | 25.11.2009 15:11 |