powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / нечетные числа
25 сообщений из 44, страница 1 из 2
нечетные числа
    #33843042
AngelSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подскажите, есть в с++ встроенная функция, определяющая четное число или нечетное? (что-то вроде odd в Паскале)
...
Рейтинг: 0 / 0
нечетные числа
    #33843081
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вряд ли существует. напиши макрос, например:

Код: plaintext
1.
#define odd(x) (x% 2 )
...
Рейтинг: 0 / 0
нечетные числа
    #33843115
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngelSQLподскажите, есть в с++ встроенная функция
С++ такой фигнёй не занимается :)
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
нечетные числа
    #33843120
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AngelSQLподскажите, есть в с++ встроенная функция, определяющая четное число или нечетное? (что-то вроде odd в Паскале)

чёт от нечета отличается только младшим битиком ... Вы его можете отдетектить маленькой кучкой своих подходов...

с уважением
(круглый)
...
Рейтинг: 0 / 0
нечетные числа
    #33843158
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kolobok0
чёт от нечета отличается только младшим битиком ... Вы его можете отдетектить маленькой кучкой своих подходов...


Точно. ступил.

Код: plaintext
1.
#define odd(x) (x& 1 )

Так будет лучше.
...
Рейтинг: 0 / 0
нечетные числа
    #33843190
ZeusTheTrueGod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ни один нормальный программист не будет юзать такие макросы, потому что из-за этого появятся труднонаходимые ошибки.
Поэтому юзайте
Код: plaintext
bool odd(int x) {return x% 2 ;}
...
Рейтинг: 0 / 0
нечетные числа
    #33843221
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZeusTheTrueGodНи один нормальный программист не будет юзать такие макросы, потому что из-за этого появятся труднонаходимые ошибки.
Поэтому юзайте
Код: plaintext
bool odd(int x) {return x% 2 ;}


в общем Вы правы...Есть только маленьчкое замечание....

остаток от деления - будет найден скорее всего (не проверял) методом сдвига в право на одын (оптимизатор сработает), сохранением результата в другой переменной и далее анализ...В Вашем случае, даже будет расход на колл и ретурн (у Вас же не инлайн). А в некоторых случаях Вам и инлайн не поможет (внешняя в дэлеле к примеру)...

проверка же младшего бита будет преобразована к азмовской команде test (для x86 имеется ввиду). И далее принятие решения...Что уже на одну команду меньше чем в Вашем примере (хотя возможно отдельная функция испоганит всё малину)... А если ышо убрать колл - ретурн и того прелесть...


с уважением
(круглый)
ЗЫ
Есть способ ышо циклический сдвиг и анализ на отрицательное число... Мона сдвинуть в перенос и обработать переход по переносу...Мона наложить маску и обработать переход по нулю... Да там мона хфантазировать достаточно долго :)
...
Рейтинг: 0 / 0
нечетные числа
    #33843244
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZeusTheTrueGodНи один нормальный программист не будет юзать такие макросы, потому что из-за этого появятся труднонаходимые ошибки.
Поэтому юзайте
Код: plaintext
bool odd(int x) {return x% 2 ;}


Да, вы что! Аргументы?
...
Рейтинг: 0 / 0
нечетные числа
    #33843257
Sandro_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
макрос
Код: plaintext
1.
#define odd(x) (x% 2 )
может вызвать ошибку если например написать:
Код: plaintext
1.
std::cout << odd( 3 + 1 ) <<"\n"
Поэтому если писать макрос, то x надо обязательно взять в скобки:
Код: plaintext
1.
#define odd(x) ((x)% 2 )

quot ZeusTheTrueGod]Ни один нормальный программист не будет юзать такие макросы, потому что из-за этого появятся труднонаходимые ошибки.
Поэтому юзайте
Код: plaintext
bool odd(int x) {return x% 2 ;}
[/quot]

Функции действительно безопаснее. На мой взгляд самым лучшим решением будет шаблонная функция:
Код: plaintext
1.
2.
template<typename T>
bool odd(T x) {return x% 2 ;}
...
Рейтинг: 0 / 0
нечетные числа
    #33843286
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sandro_K
Поэтому если писать макрос, то x надо обязательно взять в скобки:

Согласен.

Sandro_K
Функции действительно безопаснее. На мой взгляд самым лучшим решением будет шаблонная функция:
Код: plaintext
1.
2.
template<typename T>
bool odd(T x) {return x% 2 ;}


Зависит от размера и разношерстности области пременимости.
...
Рейтинг: 0 / 0
нечетные числа
    #33844914
ZeusTheTrueGod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зато такой шаблон нельзя вставить в библиотеку
...
Рейтинг: 0 / 0
нечетные числа
    #33845171
Sandro_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ZeusTheTrueGodЗато такой шаблон нельзя вставить в библиотеку
Да это конечно очень большая проблема. :)

Шаблон надо будет вставить в заголовочный файл, который будет распространяться вместе с библиотекой.
Вот обновленная версия, она должна быть не менее эффективна чем макрос:
Код: plaintext
1.
2.
template<typename T>
inline bool odd(T x) {return x& 1 ;}

Хотя я в своих программах скорее всего не буду писать ни макросов, ни функций, ни шаблонов, напишу просто x%2 или x&1 :)
...
Рейтинг: 0 / 0
нечетные числа
    #33845207
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sandro_KХотя я в своих программах скорее всего не буду писать ни макросов, ни функций, ни шаблонов, напишу просто x%2 или x&1 :)

Я тоже не буду, есстественно. Человек просил... :)
...
Рейтинг: 0 / 0
нечетные числа
    #33845387
freebeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sandro_K
Вот обновленная версия, она должна быть не менее эффективна чем макрос:
Код: plaintext
1.
2.
template<typename T>
inline bool odd(T x) {return x& 1 ;}

Вопрос в студию: что данная функция вернет для типов double/float? :)
...
Рейтинг: 0 / 0
нечетные числа
    #33845419
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
то, что она вернёт для дабла - фигня по сравнению с тем, что она вернёт для комплексного числа.
...
Рейтинг: 0 / 0
нечетные числа
    #33845527
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ругнется при компиляции, поскольку неявное преобразование будет с потерей информации
...
Рейтинг: 0 / 0
нечетные числа
    #33845554
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
freebeer
Вопрос в студию: что данная функция вернет для типов double/float? :)

Числа с плавающей точкой не бывают четными или не четными
...
Рейтинг: 0 / 0
нечетные числа
    #33845562
freebeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluk (Kazan)ругнется при компиляции, поскольку неявное преобразование будет с потерей информации
Точно - error C2296: '&' : illegal, left operand has type 'double'
...
Рейтинг: 0 / 0
нечетные числа
    #33845600
Фотография Gluk (Kazan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sorry сплоховал, она даже не пыталась его преобразовывать :)
...
Рейтинг: 0 / 0
нечетные числа
    #33845700
freebeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh
Числа с плавающей точкой не бывают четными или не четными
4.0 -оно какое ?
...
Рейтинг: 0 / 0
нечетные числа
    #33845704
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
freebeer4.0 -оно какое ?
судя по всему, зависит от младшего бита
Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
нечетные числа
    #33845762
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
freebeer Akh
Числа с плавающей точкой не бывают четными или не четными
4.0 -оно какое ?

не целое. Приблизительно 4 с точностью до первого знака после запятой. Ты это хотел услышать?
...
Рейтинг: 0 / 0
нечетные числа
    #33845776
Sandro_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня при попытки компиляции данного шаблона для типов double, float, и complex компилятор выдает ошибки. На мой взгляд это правильно.
Если число дробное то например 4.2 2.5 то нельзя сказать четное оно или нет
Если double содержит целое число, то пусть программист, при определении четное оно или нет, явно напишет преобразование типа.
Что касается комплексных чисел, то я вообще сильно сомневаюсь что они быть четными.
...
Рейтинг: 0 / 0
нечетные числа
    #33845804
freebeer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akh[quot freebeer]
не целое. Приблизительно 4 с точностью до первого знака после запятой. Ты это хотел услышать?

Что не целое, я догадался :).. Определение четности, плз... И как оно соотносится с типом числа...
...
Рейтинг: 0 / 0
нечетные числа
    #33845819
Sandro_K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
freebeer Akh[quot freebeer]
не целое. Приблизительно 4 с точностью до первого знака после запятой. Ты это хотел услышать?

Что не целое, я догадался :).. Определение четности, плз... И как оно соотносится с типом числа...

Чётность в теории чисел — характеристика целого числа, определяющая его способность делиться нацело на два. Если целое число делится на два, оно называется чётным (примеры: 2, 28, —8, 40), если нет — нечётным (примеры: 1,3, 75, —19). Нуль считается чётным числом.

Чётное число — целое число, которое делится на 2 без остатка: …−4,−2,0,2,4,6,8…

Нечётное число — целое число, которое не делится на 2 без остатка: …−3,−1,1,3,5,7,9…

Иными словами чётное и нечётное — собственные названия классов вычетов [0] и [1] по модулю 2.
...
Рейтинг: 0 / 0
25 сообщений из 44, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / нечетные числа
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]