Kurz: Sub Main() Console.WriteLine(String.Join(” ”, Sieb(50))) Console.WriteLine(Sieb(10000).Count) End Sub End Module `output 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 1229
Teil des Kurses Visual Basic .NET
Kapitel 7 von 8 im Kurs Visual Basic .NET. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.
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
1229Caesar-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 TrueAuswertung 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: 37Mini-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 fehlgeschlagenMerke
- 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
Übungsaufgabe
Erweitere die Auswertung um den Durchschnittspreis je Produkt.
Quiz zur Selbstkontrolle
Wofür ist With {…} bei New?
- Eigenschaften direkt beim Erzeugen setzen (richtig)
- Objekte löschen
- Kopieren
- Klassen erben
Wofür steht Decimal?
- Exakter Typ für Geldbeträge (richtig)
- Zehn Zeichen
- Hexadezimalzahl
- Datum
Welche Sprachen teilen die .NET-Bibliotheken mit VB.NET?
- C# und F# (richtig)
- Java und Kotlin
- Python und Ruby
- C und C++
Weiter im Kurs
Zurück: Generics, Async und Nebenläufigkeit
Weiter: Referenz und Spickzettel
Alle Kapitel: Visual Basic .NET im Überblick