Binäre Suche in einem Array/Struktogramm

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von hal2000.

    Binäre Suche in einem Array/Struktogramm

    Hallo. Ich soll mit Hilfe eines vorgegebenen Struktogramms/Algorithmus ein Programm umsetzen ( eine Methode schreiben). Jedoch gestaltet sich das noch sehr schwer. Ich habe keine Programmiererfahrung und muss eine Klausur zu diesem Thema schreiben.
    das Struktogramm ist im Anhang. Wäre echt supernett, wenn mir jemand bei der lösung behilflich wäre, damit ich für die anderen Aufgaben sehe, wie das funktioniert. ich hab ja schon mal einen Anfang gemacht, denke aber nicht das es stimmt.

    VB.NET-Quellcode

    1. Public Function BinäreSuche(ByVal Anfang As Integer, ByVal Ende As Integer)
    2. Dim a(), s As Integer
    3. For Anfang = 0 To Ende.length-1



    naja und weiter weiß ich nicht, wobei, das hier auch nicht gut aussieht

    das ist die genaue aufgabenstellung :Setzen Sie die binäre Suche in einem Array um.
    Schreiben Sie eine Methode, die als Eingabe eine zu suchende ganze Zahl und ein aufsteigend
    sortiertes Array mit ganzen Zahlen erhält. Als Ausgabe wird der Index des gefundenen
    Elements oder ‐1 (falls keine Übereinstimmung vorkommt) zurückgegeben. Verwenden Sie
    den folgenden Algorithmus und definieren Sie zusätzlich notwendige, lokale Variablen,
    Rückgabewert etc.
    Hinweis: Die length‐Eigenschaft gibt die Anzahl der Elemente eines Arrays an. Die Zählung
    beginnt bei 0. Der Operator „\“ berechnet den ganzzahligen Teil einer Division (7 \ 2 = 3).
    (
    Bilder
    • struktogramm.jpg.png

      71,09 kB, 1.152×844, 3.284 mal angesehen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „HWIMIKE“ ()

    Hi,

    Klausuraufgabe - die Anfragen häufen sich in letzter Zeit...
    [Allgemein] Klausuraufgabe


    Wie auch immer.

    Ist das angehängte Struktogramm vorgegeben?

    Ne copy&Paste-Lösung gibts nicht, aber eine kleine (hier: große) Hilfestellung schon

    VB.NET-Quellcode

    1. Function BinSearch(a() As Integer, s As Integer) As Integer
    2. Dim ret As Int32 = -1
    3. Dim Anfang As Int32 = 0
    4. Dim Ende As Int32 = a.Length - 1
    5. Dim Mitte As Int32
    6. While ret = -1 And Anfang <= Ende
    7. Mitte = (Anfang + Ende) \ 2
    8. If a(Mitte) = s Then
    9. ret = Mitte
    10. Exit While
    11. Else
    12. If s > a(Mitte) Then
    13. Anfang = Mitte + 1
    14. Else
    15. Ende = Mitte - 1
    16. End If
    17. End If
    18. End While
    19. Return ret
    20. End Function


    Edit: Da ich deinen Kommilitonen auch die komplette Lösung gepostet habe, wäre es nur fair, das hier auch zu tun.
    Gruß
    hal2000

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „hal2000“ ()

    Nur aus Spass noch 2 andere Implementierungen: eine rekursive und die andere die faulste:
    Rekursion:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Function BinSearchRecursive(ByVal a() As Integer, ByVal s As Integer) As Integer
    2. Return (BinSearchRecursive(a, s, 0, a.Length - 1))
    3. End Function
    4. '
    5. Private Function BinSearchRecursive(ByVal a() As Integer, ByVal s As Integer, ByVal lowerIndex As Integer, ByVal upperIndex As Integer) As Integer
    6. ' not found ?
    7. If lowerIndex > upperIndex Then Return -1
    8. ' divide area in half
    9. Dim middleIndex As Integer = CInt((lowerIndex + upperIndex) / 2)
    10. ' compare
    11. Select Case a(middleIndex)
    12. Case s : Return middleIndex
    13. Case Is > s : Return (BinSearchRecursive(a, s, lowerIndex, middleIndex - 1))
    14. Case Is < s : Return (BinSearchRecursive(a, s, middleIndex + 1, upperIndex))
    15. End Select
    16. End Function

    Faul:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Function BinSearchLazy(ByVal a() As Integer, ByVal s As Integer) As Integer
    2. Dim result As Integer = Array.BinarySearch(searchArray, s)
    3. If result < 0 Then Return -1 Else Return result
    4. End Function
    Danke sehr, das ist eine große Hilfe!

    Ja, das Struktogramm war vorgegeben.
    Eine Frage noch. Gibt es empfehlenswerte Literatur, wo es mehrere Beispiele nach dieser Art gibt. Habe schon so einiges durchgewälzt, aber nichts brauchbares gefunden zu struktogramm in ein Programm umsetzen.

    HWIMIKE schrieb:

    struktogramm in ein Programm umsetzen

    Es gibt nur etwa 5 Formen, mit denen der ganze Ablauf dargestellt werden kann. Der Programmablauf ergibt sich aus den geometrischen Formen, die mit dem enthaltenen Text kombiniert werden. Mit einem Struktogramm als Vorlage ist das Programmieren am einfachsten, da alles genau vorgegeben ist und man nur stumpf abschreiben muss. Die Probleme tauchen erst auf, wenn die Aufgabe nicht mehr "schreibe ab", sondern "entwickle ...". In diesem Fall musst du zuerst das Struktogramm selbst erstellen.

    Weitere Informationen zu Struktogrammen findest du bei Wikipedia.
    Gruß
    hal2000