Finns det någon färdig funktion i vb som kontrollerar om talet är udda eller jämt? Du kan ju alltid använda Mod Du kan skriva: resultat = tal1 mod tal2 Oki, I Gat It I Think! Lämpligast är att du gör en liten funktion som t ex kontrollerar om ett tal är jämt. Varför använda mod? Anders, visst fungerar det med din lösning 'tal AND 1'. Vad man dock ska betänka är hur True och False är definerade, idag är False = 0 och True är allt som skilljer sig från False. Nu kommer förmodligen inte definitionen av just True och False att förändras i framtiden men tänk om MS skulle få för sig att definera om dessa konstanter till t ex True = -1 och False = 1, då går det inge bra med 'tal AND 1' längre om du däremot använder 'If (tal AND 1) = 1 Then...' så kommer det alltid att fungera, eller med 'CBool(tal Mod 2 = 0)' >idag är False = 0 och True är allt som skilljer sig från False Ok, håller med om att True är definerat som -1, gick lite fort där, vad jag egentligen menade är precis som du skriver att allt som inte är 0 tolkas som True.Udda/jämna tal?
Sv: Udda/jämna tal?
<code>
1 Mod 2 = 1
2 Mod 2 = 0
3 Mod 2 = 1
4 Mod 2 = 0
osv osv...
Negativa tal
-1 Mod 2 = -1
-2 Mod 2 = 0
-3 Mod 2 = -1
-4 Mod 2 = 0
</code>
Mao, Udda tal är 1 (eller -1), Jämna är 0Sv: Udda/jämna tal?
<code>
If tal Mod 2 = 0 Then
MsgBox "Jämt tal"
ElseIf tal Mod 2 = 1 Then
MsgBox "Udda tal"
End If
</code>Sv: Udda/jämna tal?
Det Mod gör är att den delar tal1 med tal2 och resulterar ut det restrerande talet...
alltså skriver man resulat = 2 mod 2 så kommer man få 0 ...
skrive rman reslutat = 3 mod 2 så blir det 3/2 vilket går 1 gång.. och ger en rest på 1 ... resultanten blir altså 1.Sv: Udda/jämna tal?
Det verka fuka!
<code>
'Form anrop.
Call Gender_Check(4)
'Medelar Jämt tal!
'Modul
Public Function Value_Check(tal As Integer) As String
If tal Mod 2 = 0 Then
MsgBox "Jämt tal"
ElseIf tal Mod 2 = 1 Then
MsgBox "Udda tal"
End If
End Function
</code>
Tusen tack!!!!!!! :-))Sv: Udda/jämna tal?
Det kan t ex se ut så här.
<code>
Sub main()
Debug.Print IsEven(5) 'Falskt
Debug.Print IsEven(8) 'Sant
Debug.Print IsEven(-4) 'Sant
Debug.Print IsEven(-3) 'Falskt
Debug.Print Not IsEven(1) 'Sant, Kollar ju om 1 INTE är jämt
End Sub
Public Function IsEven(Value As Long) As Boolean
IsEven = CBool(Value Mod 2 = 0)
End Function
</code>
//
JanneSv: Udda/jämna tal?
i ett udda tal är den lägst sinifikanta biten satt:
<code>
If tal And 1 Then
MsgBox "Udda tal"
Else
MsgBox "Jämt tal"
End If
</code>Sv: Udda/jämna tal?
Men som sagt var så kommer förmodligen definitionen för True/False att bestå även i framtiden men tänk på detta i samband med användande av 'systemkonstanter'
//
Janne.Sv: Udda/jämna tal?
Nja... False = 0 och True = -1, och sen så tolkas allt som är skilt från noll som true.
Vad som är ett viktigare argument är att det dels är lättare att förstå mod-varianten, och dels så finns det ingen eller mycket liten prestandafördel med Andreas variant.
Båda funktionerna finns primitivt i processorn.Sv: Udda/jämna tal?
Från MSDN (ang VB).
Boolean variables are stored as 16-bit (2-byte) numbers, but they can only be True or False. Boolean variables display as either True or False (when Print is used) or #TRUE# or #FALSE# (when Write # is used). Use the keywords True and False to assign one of the two states to Boolean variables.
When other numeric types are converted to Boolean values, 0 becomes False and all other values become True. When Boolean values are converted to other data types, False becomes 0 and True becomes -1.
//
Janne.