Primzahlsieb
Module Program
Function Sieb(n As Integer) As List(Of Integer)
Dim prim(n) As Boolean
For i As Integer = 2 To n
prim(i) = True
Next
For i As Integer = 2 To CInt(Math.Sqrt(n))
If prim(i) Then
For j As Integer = i * i To n Step i
prim(j) = False
Next
End If
Next
Dim erg As New List(Of Integer)
For i As Integer = 2 To n
If prim(i) Then erg.Add(i)
Next
Return erg
End Function
Sub Main()
Console.WriteLine(String.Join(" ", Sieb(50)))
Console.WriteLine(Sieb(10000).Count)
End Sub
End ModuleAusgabe
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 1229
Caesar-Chiffre
Module Program
Function Verschiebe(text As String, schluessel As Integer) As String
Dim erg As New System.Text.StringBuilder()
For Each c In text
If Char.IsLower(c) Then
erg.Append(ChrW((AscW(c) - AscW("a"c) + schluessel + 26) Mod 26 + AscW("a"c)))
ElseIf Char.IsUpper(c) Then
erg.Append(ChrW((AscW(c) - AscW("A"c) + schluessel + 26) Mod 26 + AscW("A"c)))
Else
erg.Append(c)
End If
Next
Return erg.ToString()
End Function
Function IstPalindrom(s As String) As Boolean
Dim t = New String(s.ToLower().Where(Function(c) Char.IsLetter(c)).ToArray())
Return t = StrReverse(t)
End Function
Sub Main()
Dim geheim = Verschiebe("Hallo VB!", 3)
Console.WriteLine(geheim)
Console.WriteLine(Verschiebe(geheim, -3))
Console.WriteLine(IstPalindrom("Anna") & " " & IstPalindrom("Basic") & " " & IstPalindrom("Ein Esel lese nie"))
End Sub
End ModuleAusgabe
Kdoor YE! Hallo VB! True False True
Auswertung mit LINQ
Module Program
Class Verkauf
Public Property Region As String
Public Property Produkt As String
Public Property Menge As Integer
Public Property Preis As Decimal
Public ReadOnly Property Umsatz As Decimal
Get
Return Menge * Preis
End Get
End Property
End Class
Sub Main()
Dim daten As New List(Of Verkauf) From {
New Verkauf With {.Region = "Nord", .Produkt = "Apfel", .Menge = 10, .Preis = 1.2D},
New Verkauf With {.Region = "Sued", .Produkt = "Birne", .Menge = 5, .Preis = 0.8D},
New Verkauf With {.Region = "Nord", .Produkt = "Birne", .Menge = 8, .Preis = 0.8D},
New Verkauf With {.Region = "West", .Produkt = "Apfel", .Menge = 20, .Preis = 1.1D},
New Verkauf With {.Region = "Sued", .Produkt = "Apfel", .Menge = 7, .Preis = 1.2D}
}
For Each g In daten.GroupBy(Function(v) v.Region).OrderBy(Function(x) x.Key)
Console.WriteLine($"{g.Key,-5} {g.Sum(Function(v) v.Umsatz),7:F2}")
Next
Console.WriteLine($"Gesamt: {daten.Sum(Function(v) v.Umsatz):F2}")
Dim bester = daten.OrderByDescending(Function(v) v.Umsatz).First()
Console.WriteLine($"Bester Posten: {bester.Produkt} in {bester.Region}")
Console.WriteLine($"Äpfel: {daten.Where(Function(v) v.Produkt = "Apfel").Sum(Function(v) v.Menge)}")
End Sub
End ModuleAusgabe
Nord 18.40 Sued 12.40 West 22.00 Gesamt: 52.80 Bester Posten: Apfel in West Äpfel: 37
Mini-Testframework
Module Program
Private bestanden As Integer = 0
Private fehler As Integer = 0
Sub Pruefe(name As String, bedingung As Boolean)
If bedingung Then
bestanden += 1
Console.WriteLine("ok " & name)
Else
fehler += 1
Console.WriteLine("FEHLER " & name)
End If
End Sub
Function Fak(n As Integer) As Integer
If n <= 1 Then Return 1
Return n * Fak(n - 1)
End Function
Sub Main()
Pruefe("Fak(5)", Fak(5) = 120)
Pruefe("Fak(0)", Fak(0) = 1)
Pruefe("Reverse", StrReverse("abc") = "cba")
Pruefe("absichtlich falsch", 1 + 1 = 3)
Console.WriteLine($"{bestanden} bestanden, {fehler} fehlgeschlagen")
End Sub
End ModuleAusgabe
ok Fak(5) ok Fak(0) ok Reverse FEHLER absichtlich falsch 3 bestanden, 1 fehlgeschlagen
Merke
- VB.NET eignet sich für übersichtliche Geschäftslogik und Auswertungen
- LINQ mit
GroupBy,Sum,OrderByersetzt Schleifen With-Initialisierer (New T With {...}) erzeugen Objekte kompakt- Für Tests nutzt man MSTest, NUnit oder xUnit
Aufgabe
Erweitere die Auswertung um den Durchschnittspreis je Produkt.