Code: Select all
Macro odd(a)
Not Int(a/2)*2=a
EndMacro
Macro even(a)
Int(a/2)*2=a
EndMacro
For a=1 To 10
If odd(a)
Debug Str(a)+" is odd number."
ElseIf even(a)
Debug Str(a)+" is even number."
EndIf
Next
Code: Select all
Macro odd(a)
Not Int(a/2)*2=a
EndMacro
Macro even(a)
Int(a/2)*2=a
EndMacro
For a=1 To 10
If odd(a)
Debug Str(a)+" is odd number."
ElseIf even(a)
Debug Str(a)+" is even number."
EndIf
Next
Code: Select all
Macro odd(a)
((a)&1)
EndMacro
Macro even(a)
(1-(a)&1)
EndMacro
Code: Select all
Procedure Odd(N)
ProcedureReturn 1&N
EndProcedure
Procedure Even(N)
ProcedureReturn 1-1&N
EndProcedure
Code: Select all
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; Project name : IsOddNumber, IsEvenNumber
; File Name : Is Odd-Even Number.pb.pb
; File version: 1.0.0
; Programmation : OK
; Programmed by : Guimauve
; Date : 13-04-2011
; Mise à jour : 13-04-2011
; Code PureBasic : 4.60
; Plateform : Windows, Linux, MacOS X
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Procedure.b IsOddNumber(Number.l)
If Number % 2
IsOdd.b = #True
Else
IsOdd = #False
EndIf
ProcedureReturn IsOdd
EndProcedure
Procedure.b IsEvenNumber(Number.l)
If Number % 2
IsEven.b = #False
Else
IsEven = #True
EndIf
ProcedureReturn IsEven
EndProcedure
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
; <<<<< !!! WARNING - YOU ARE NOW IN A TESTING ZONE - WARNING !!! <<<<<
; <<<<< !!! WARNING - THIS CODE SHOULD BE COMMENTED - WARNING !!! <<<<<
; <<<<< !!! WARNING - BEFORE THE FINAL COMPILATION. - WARNING !!! <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
For Number = 0 To 15
If IsOddNumber(Number)
Debug Str(Number) + " is odd number."
ElseIf IsEvenNumber(Number)
Debug Str(Number) + " is even number."
EndIf
Next
; <<<<<<<<<<<<<<<<<<<<<<<
; <<<<< END OF FILE <<<<<
; <<<<<<<<<<<<<<<<<<<<<<<
A bit faster approach for Eveneinander wrote:These macros fail if you send a float to them.
Procedures do the same task converting previously the floats to integers.
Cheers!Code: Select all
Procedure Odd(N) ProcedureReturn 1&N EndProcedure Procedure Even(N) ProcedureReturn 1-1&N EndProcedure
Code: Select all
Procedure Even(N)
ProcedureReturn 1&~N
EndProcedure
Code: Select all
Macro Even(n)
(~n#&1)
EndMacro
Code: Select all
Macro Even(n)
(~(n) & 1)
EndMacro
Not needed at allShield wrote:Never forget putting parenthesis around macro parameters.![]()
Code: Select all
Macro Even(n) (~(n) & 1) EndMacro
There is not safer to put parentheses there. The order of operations will be the same always in cases like that.skywalk wrote:Better safe than sorry. If you pass an argument into the macro, the parentheses preserve the order of operations.
Code: Select all
Macro IsEven(i)
~(i) & 1
EndMacro
Macro IsEvennp(i)
~i & 1
EndMacro
Macro IsEvenps(i)
(~i#&1)
EndMacro
Debug -22 + -24
Debug IsEven(-22 + -24)
Debug IsEvennp(-22 + -24)
Debug IsEvenps(-22 + -24)
Debug -22 + -23
Debug IsEven(-22 + -23)
Debug IsEvennp(-22 + -23)
Debug IsEvenps(-22 + -23)
Is it?Psychophanta wrote:There is not safer to put parentheses there. The order of operations will be the same always in cases like that.skywalk wrote:Better safe than sorry. If you pass an argument into the macro, the parentheses preserve the order of operations.
Code: Select all
Macro Even(n)
(~n#&1)
EndMacro
Macro EvenShield(n)
(~(n) & 1)
EndMacro
If Even(10 + 5)
Debug Str(10 + 5) + " is even."
Else
Debug Str(10 + 5) + " is NOT even."
EndIf
If EvenShield(10 + 5)
Debug Str(10 + 5) + " is even."
Else
Debug Str(10 + 5) + " is NOT even."
EndIf