Willekeurige getallen genereren, is een getal even of oneven
In veel programma's moeten op een bepaald ogenblik willekeurige getallen gegeneerd worden. In VB.net brengt men de code daartoe
best onder in een 'class'. Hier worden een aantal class'es besproken, waar gewoon een willekeurig getal tussen twee grenzen
gegeneerd wordt, maar ook waar tussen twee grenzen één zelfde waarde slechts éénmaal mag voorkomen. Ook code waarmee men kan bepalen indien het getal even of
oneven is.
clsWilGet1:Willekeurig getal van Byte-datatype (0 tot 255) tussen twee limieten mag maar éénmaal voorkomen.
'System.Security.Cryptography moet in de class geImporteerd worden.
Imports System.Security.Cryptography
Public Class clsWilGet1
Dim _set As BitArray
Dim _min As Byte
Dim _max As Byte
Dim _tel As Integer
Public Sub New(ByVal min As Byte, ByVal max As Byte)
_min = min
If (min > max) Then
_max = min
Else
_max = max
End If
_set = New BitArray(_max - _min + 1)
_tel = max - min
End Sub
Public Function GeefVolgendGetal() As Integer
Dim randomGetal(0) As Byte
Dim testGetal As Integer
Dim rng As New RNGCryptoServiceProvider()
Do While _tel >= 0
rng.GetBytes(randomGetal)
testGetal = CInt(randomGetal(0))
testGetal = (CInt(testGetal) Mod (_max - _min + 1)) + _min
If Not _set.Item(testGetal - _min) Then
_set.Set(testGetal - _min, True)
_tel -= 1
Return testGetal
End If
Loop
Return -1
End Function
Public Sub Reset()
_tel = _max - _min
_set.SetAll(False)
End Sub
End Class
clsWilGet2:Willekeurig getal van Integer-datatype tussen twee limieten mag maar éénmaal voorkomen.
Public Class clsWilGet2
Private _min, _max As Integer
Private _set() As Integer 'Array of integers
Private _index As Integer
Public Sub New(ByVal min As Integer, ByVal max As Integer)
_min = min
If (min > max) Then
_max = min
Else
_max = max
End If
'vorm de reeks
_set = InitReeks()
End Sub
Private Function InitReeks() As Integer()
Dim random As New Random()
Dim getallen(_max - _min) As Integer
Dim waarde As Integer = _min
Dim tmp As Integer
Dim index1 As Integer
Dim index2 As Integer
'vul de rees met de getallen
For x As Integer = 0 To getallen.Length - 1
getallen(x) = waarde
waarde += 1
Next
'haal door elkaar 1000 iteraties moeten voldoende zijn
For x As Integer = 0 To 1000
'neem twee willekeurige indexen
index1 = random.Next(0, getallen.Length)
index2 = random.Next(0, getallen.Length)
'haal door elkaar
tmp = getallen(index1)
getallen(index1) = getallen(index2)
getallen(index2) = tmp
Next
Return getallen
End Function
Public Function GetNext() As Integer
Dim result As Integer
If (_index < _set.Length) Then
result = _set(_index)
_index += 1
Else
result = -1
End If
Return result
End Function
End Class
clsWilGet3:Willekeurig getal van Integer-datatype tussen twee limieten mag maar éénmaal voorkomen.
Public Class clsWilGet3
Private rand As Random
Private pool As List(Of Integer)
Sub New(ByVal min As Integer, ByVal max As Integer)
rand = New Random
pool = New List(Of Integer)(max - min)
For i As Integer = min To max
pool.Add(i)
Next
End Sub
Public Function GeefItem() As Integer
If pool.Count = 0 Then Return -1
' geef willekeurige index van de pool List.
Dim index As Integer = rand.Next(0, pool.Count)
' geef weer.
Dim draw As Integer = pool(index)
' verwijder van de pool List.
pool.RemoveAt(index)
Return draw
End Function
End Class
clsWilGetal1, clsWilGetal2, clsWilGetal3 weergeven in een console-toepassing.
Sub Main()
Dim raad1 As New clsWilGet1(1, 100)
Dim raad2 As New clsWilGet2(1, 100)
Dim raad3 As New clsWilGet3(1, 100)
For intTel As Integer = 0 To 20
Console.Write(raad1.GeefVolgendGetal & " - " & raad2.GetNext & " - " & raad3.GeefItem & vbCrLf)
Next
Console.ReadLine()
End Sub
Willekeurig getal tussen twee limieten
''' Generen van een willekeurig getal tussen 0 en 7, men kan de limieten wijzigen
Public Class clsWilGetal
Private Shared _intWilGetal As Integer
Public Shared ReadOnly Property Genereer() As Integer
Get
Dim intBoven As Integer = 6
Randomize()
_intWilGetal = CInt(Int((intBoven * Rnd()) + 1))
Return _intWilGetal
End Get
End Property
End Class
Is een getal Even of Oneven?
Sub OnOfEven()
Dim intTeller As Integer = 1
Dim strEven As String = "even"
Dim strOneven As String = "oneven"
Dim strResul As String = ""
Do While intTeller < 100 'hier tot 100 maar kan meer zijn
If intTeller Mod 2 = 0 Then 'getal is even
strResul = strEven
Else
strResul = strOneven
End If
Console.WriteLine(intTeller & "is " & strResul)
intTeller = intTeller + 1
Loop
End Sub
Priemgetallen weergeven tot opgegeven bovengrens
Public Function Priem(ByVal intMaxGrens As Integer) As String
Dim i As Integer
Dim j As Integer
Dim bflag As Boolean
Dim strResul As String = ""
For i = 1 To intMaxGrens
bflag = True
For j = 2 To i / 2
If i Mod j = 0 Then
bflag = False
End If
Next
If bflag Then
strResul += i.ToString & " "
End If
Next
Return Trim(strResul)
End Function
|