проверка на четность, и вообще на любой диапазон между числами.

Предыдущая тема Следующая тема Перейти вниз

проверка на четность, и вообще на любой диапазон между числами.

Сообщение  electrik в Сб Дек 18, 2010 5:55 pm

сразу оговорюсь, разговор пойдет только о целых числах.
у начинающих программистов, всегда вставал вопрос проверки на четность или на нечетность числа.
мы изобретали хитровывернутые алгоритмы, зачастую не самые лучшие.
все просто
проверим число 6 на четность.
Код:

print 6 mod 2
вернет 0, число четное.
если не ноль, число не четное, в данном случае на нечетных числах возвращается 1.
так же можно проверять каждое третье, пятое, пятнадцатое число и т.д.
проверим число 12, является ли оно третим. я не знаю как такие числа называются, поэтому, я обозвал их третими и т.д.
Код:

print 12 mod 3
вернет 0, число третье. если не ноль, значит число другое.
что такое оператор mod?
Делит одно число на другое и возвращает только остаток.

еще один способ, который действует только на проверку четности.
смысл, проверяем самый первый бит.
Код:

dim a as integer = 23
if a and &h1 then
print"nechetnoe"
else
print "chetnoe"
end if
sleep 5000

electrik

Сообщения : 394
Дата регистрации : 2008-09-02
Возраст : 36
Откуда : галактика Млечный путь, система Солнечная, планета Земля, страна россия, город Санкт Петербург

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: проверка на четность, и вообще на любой диапазон между числами.

Сообщение  Котоёж в Вс Дек 19, 2010 3:57 pm

electrik пишет:
проверим число 12, является ли оно третим. я не знаю как такие числа называются, поэтому, я обозвал их третими и т.д.
кратное числу три, кратное трём.
avatar
Котоёж

Сообщения : 15
Дата регистрации : 2008-12-21
Возраст : 27
Откуда : Россия, Томск

Посмотреть профиль http://fotoncat.heliohost.org/

Вернуться к началу Перейти вниз

Re: проверка на четность, и вообще на любой диапазон между числами.

Сообщение  Саня в Вт Дек 28, 2010 9:09 pm

Хочу добавить небольшую фичу про оператор mod т.к. он здесь используется. Если делимое положительно, а делитель отрицателен, то остаток будет положителен, но если делимое > нуля, тогда как делитель меньше нуля, то остаток будет отрицателен.
Код:

? 57 Mod -7
? -57 Mod -7
? -57 Mod 7

Sleep
Результат:
1
-1
-1

PS:
это связано с такой же особенностью целочисленного деления в idiv -е.
avatar
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 23
Откуда : Екатеринбург

Посмотреть профиль http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

Re: проверка на четность, и вообще на любой диапазон между числами.

Сообщение  VerhoLom в Вт Янв 11, 2011 12:12 pm

а еще можно проверить нулевой бит числа: если он 0 - число четное, если нет - нечетное. pig

ассемблерная вставка и команды BT* в этом деле побыстрее будут!
avatar
VerhoLom

Сообщения : 67
Дата регистрации : 2010-07-06
Возраст : 35

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: проверка на четность, и вообще на любой диапазон между числами.

Сообщение  Саня в Ср Мар 23, 2011 9:45 pm

если уж так говорить, то помню на С встречал такой способ определить, является ли число степенью двойки или нет :
Код:

  dim i as integer = 8
  dim h as integer = 10

  ?  i and ( i-1 ) ' Вернет 0, значит i - степень двойки
      /'      8 = 1000b,  8-1 = 7 = 111b
                        1000b
                  and  0111b
                        0000b
      '/
  ? h and ( h - 1) ' вернет 8 <> 0, значит не является степенью двойки
    /'  10 = 1010b, 10-1 = 9 = 1001b
                            1010b
                      and 1001b
                            1000b
    '/
sleep
avatar
Саня

Сообщения : 65
Дата регистрации : 2010-04-28
Возраст : 23
Откуда : Екатеринбург

Посмотреть профиль http://vkontakte.ru/id30561430#/id57547166

Вернуться к началу Перейти вниз

Re: проверка на четность, и вообще на любой диапазон между числами.

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения