Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Четность\нечетность / 25 сообщений из 61, страница 1 из 3
28.12.2009, 12:39
    #36389581
Lexx_SQL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Добрый день!

Подскажите, пожалуйста, как проще определить четное число или нечетное в VB.
Есть ли какие-нибудь стандартные функции?
Спасибо.
...
Рейтинг: 0 / 0
28.12.2009, 12:51
    #36389620
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Код: plaintext
1.
2.
Public Function Check(ByVal Value As Integer) As Boolean
    Check = (Value \  2  = Value /  2 )
End Function

например, так
...
Рейтинг: 0 / 0
28.12.2009, 12:54
    #36389636
_Boroda_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Lexx_SQL,

ЕНЕЧЕТ - ISODD(ссылка)
ЕЧЁТН - ISEVEN(ссылка)
...
Рейтинг: 0 / 0
28.12.2009, 13:56
    #36389829
Igor Mitichev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Lexx_SQL,

У меня получилось где-то так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Dim testNumber As Integer

Private Sub Form_Load()
 testNumber =  5 

  If chek(testNumber) Then
   MsgBox "четное"
  Else
   MsgBox "нечетное"
  End If

 End
End Sub

Private Function chek(number As Integer) As Boolean
   If (number /  2  - Fix(number /  2 )) Then
    chek = False
   Else
    chek = True
   End If
End Function

...
Рейтинг: 0 / 0
28.12.2009, 14:07
    #36389861
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Ну вы даете, граждане.

IsOdd и IsEven — функции экселя.
Check = (Value \ 2 = Value / 2) — два математических и одно логическое действие.

Check = Value Mod 2 = 0 — самый кошерный способ.

Jah loves you.
...
Рейтинг: 0 / 0
28.12.2009, 14:09
    #36389866
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Вариант с Fix вообще за гранью добра и зла.

Jah loves you.
...
Рейтинг: 0 / 0
28.12.2009, 14:10
    #36389872
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
А разве нельзя проверять на остаток от деления на больше еденицы?
Код: plaintext
1.
2.
Function IsEven(ByVal nNumber as Long) As Boolean
IsEven = (nNumber Mod  2 ) =  0 
End Function


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
28.12.2009, 14:13
    #36389878
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Код: plaintext
IsEven = ((nNumber Mod  2 ) =  0 )

=

Код: plaintext
Check = (Value \  2  = Value /  2 )

ничем не лучше и не хуже
...
Рейтинг: 0 / 0
28.12.2009, 14:15
    #36389887
_Boroda_
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Можно так:

Sub ttt()
n_ = IIf(Application.WorksheetFunction.IsOdd([a1]), "нечетн", четн")
MsgBox n_
End Sub
...
Рейтинг: 0 / 0
28.12.2009, 14:18
    #36389893
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
а индусы бы наверно просто тупо проверяли какая самая последняя цифра, если 0,2,4,6 или 8, то чётная, иначе нечётная.
Во всяком случае у них в оракле бывали коды и похлеще.
...
Рейтинг: 0 / 0
28.12.2009, 14:21
    #36389904
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Djon Playerа индусы бы наверно просто тупо проверяли какая самая последняя цифра, если 0,2,4,6 или 8, то чётная, иначе нечётная.
Во всяком случае у них в оракле бывали коды и похлеще.

кстати да, тоже вариант. не факт, что будет намного медленней
...
Рейтинг: 0 / 0
28.12.2009, 14:28
    #36389924
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Konst_OneDjon Playerа индусы бы наверно просто тупо проверяли какая самая последняя цифра, если 0,2,4,6 или 8, то чётная, иначе нечётная.
Во всяком случае у них в оракле бывали коды и похлеще.

кстати да, тоже вариант. не факт, что будет намного медленней
Ну тогда с меня код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Function isOdd(number As Integer) As Boolean
 Select Case Right(number,  1 )
   Case  0 ,  2 ,  4 ,  6 ,  8 
       isOdd = True 'Чётное
   Case Else
       isOdd = False 'Нечётное
 End Select
End Function
...
Рейтинг: 0 / 0
28.12.2009, 14:28
    #36389926
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Konst_One
Код: plaintext
IsEven = ((nNumber Mod  2 ) =  0 )

=

Код: plaintext
Check = (Value \  2  = Value /  2 )

ничем не лучше и не хуже
Это если не проверять.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Private Sub Form_Load()
Dim r As Boolean
d = Timer
For x =  1  To  100000000 
    r = Check( 2222 )
Next
Debug.Print Timer - d
d = Timer
For x =  1  To  100000000 
    r = Check1( 2222 )
Next
Debug.Print Timer - d
End Sub


Public Function Check(ByVal Value As Integer) As Boolean
    Check = (Value \  2  = Value /  2 )
End Function

Public Function Check1(ByVal Value As Integer) As Boolean
    Check1 = Value Mod  2  =  0 
End Function

 15 , 14063  
 13 , 35938  
...
Рейтинг: 0 / 0
28.12.2009, 14:31
    #36389934
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
не думаю, что это существенное отличие в скорости работы. если автору надо выжать каждую миллисекунду, то тогда конечно
...
Рейтинг: 0 / 0
28.12.2009, 14:32
    #36389935
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Djon Playerа индусы бы наверно просто тупо проверяли какая самая последняя цифра, если 0,2,4,6 или 8, то чётная, иначе нечётная.
Во всяком случае у них в оракле бывали коды и похлеще.

зачем так много? преобразовать в бинарное представление и проверять Right-ом на "0" или "1"
...
Рейтинг: 0 / 0
28.12.2009, 14:33
    #36389938
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Shocker.ProDjon Playerа индусы бы наверно просто тупо проверяли какая самая последняя цифра, если 0,2,4,6 или 8, то чётная, иначе нечётная.
Во всяком случае у них в оракле бывали коды и похлеще.

зачем так много? преобразовать в бинарное представление и проверять Right-ом на "0" или "1"



а вот это уже на бейсике посложнее будет и не оправдано
...
Рейтинг: 0 / 0
28.12.2009, 14:35
    #36389947
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Konst_OneShocker.ProDjon Playerа индусы бы наверно просто тупо проверяли какая самая последняя цифра, если 0,2,4,6 или 8, то чётная, иначе нечётная.
Во всяком случае у них в оракле бывали коды и похлеще.

зачем так много? преобразовать в бинарное представление и проверять Right-ом на "0" или "1"



а вот это уже на бейсике посложнее будет и не оправданоДа ну?
Код: plaintext
1.
2.
3.
4.
Public Function Check1(ByVal Value As Integer) As Boolean
    Check1 = Not Value And  1 
End Function

 12 , 46875  
...
Рейтинг: 0 / 0
28.12.2009, 14:36
    #36389950
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Konst_Oneа вот это уже на бейсике посложнее будет и не оправдано

А, черт, забыл, что VB нет встроенной функции преобразования в бинарный вид (в MSX - была)

Что-то не приходит больше в голову извращенных способов :)
...
Рейтинг: 0 / 0
28.12.2009, 14:40
    #36389963
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
[quot Antonariy
Да ну?
Код: plaintext
1.
2.
3.
4.
Public Function Check1(ByVal Value As Integer) As Boolean
    Check1 = Not Value And  1 
End Function

 12 , 46875  
[/quot]

это не преобразование в бинарный вид, но как вариант хороший. надо бы в фак все перечисленные способы как статейку =)
...
Рейтинг: 0 / 0
28.12.2009, 14:41
    #36389965
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Преобразование неявное.

Jah loves you.
...
Рейтинг: 0 / 0
28.12.2009, 14:43
    #36389974
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
AntonariyПреобразование неявное.

Jah loves you.

это битовая операция, но никак не преобразование.
...
Рейтинг: 0 / 0
28.12.2009, 14:43
    #36389975
Djon Player
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Shocker.ProKonst_Oneа вот это уже на бейсике посложнее будет и не оправдано

А, черт, забыл, что VB нет встроенной функции преобразования в бинарный вид (в MSX - была)

Что-то не приходит больше в голову извращенных способов :)

Тут есть два варианта преобразования в бинарный код в зависимости от знака числа. Смотреть Листинг 7.
...
Рейтинг: 0 / 0
28.12.2009, 14:46
    #36389977
Core12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Да не думал что такой простой вопрос может вызвать бурю обсуждений
Код: plaintext
1.
2.
3.
4.
5.
6.
 Dim i As Integer
 i =  5 
   If (i Mod  2  =  0 ) Then
     MsgBox "Четное"
   Else
     MsgBox "Не Четное"
   End If

Как вариант можете оформить как процедуру передавать ей свое число и возвращать она вам будет
...
Рейтинг: 0 / 0
28.12.2009, 14:48
    #36389981
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Core12,

уже было
...
Рейтинг: 0 / 0
28.12.2009, 14:51
    #36389987
Core12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Четность\нечетность
Сори не заметил
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Четность\нечетность / 25 сообщений из 61, страница 1 из 3
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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