Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1536to1540
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Hilfe bei Klausuraufgabe

Hilfe bei Klausuraufgabe
23.01.2017 11:09:59
Peter
Wertes Forum,
Prüfungszeit = Unsicherheitszeit
Ich soll eine Funktion in VBA programmieren mit folgenden Eigenschaften:
  • Funktion mit dem Namen liste_cmp

  • Die Funktion soll zwei Felder mit Integer Werten als Parameter akzeptieren beide Felder sind gleich groß.

  • Die Funktion soll für jedes Feld die Summe der Elemente ermitteln.

  • Die Funktion soll in der Lage sein, Listen beliebiger Länge zu verarbeiten

  • Die Funktion soll ‐1 zurückgeben, wenn die Summe der Elemente der ersten Liste größer ist.

  • Die Funktion soll +1 zurückgeben, wenn die Summe der Elemente der zweiten Liste
    größer ist.

  • Die Funktion soll 0 zurückgeben, wenn die Summe der Elemente der beiden Listen
    gleich ist.

  • Mein Lösungsansatz lautet wie folgt:
    
    Function liste_cmp(Feld1(), Feld2() As Integer) As Integer
    Dim i, a, b As Integer
    For i = LBound(Feld1) To UBound(Feld2)
    For i = LBound(Feld2) To UBound(Feld2)
    b = b + Feld2(i)
    a = a + Feld1(i)
    Next i
    Next i
    If a  b Then
    liste_cmp = -1
    Else
    liste_cmp = 0
    End If
    End Function
    

    Wenn jemand mal drüber schauen könnte und Verbesserungen parat hat wäre ich sehr dankbar.
    Gruß Peter

    3
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Hilfe bei Klausuraufgabe
    23.01.2017 11:46:45
    AlterDresdner
    Hallo Peter,
    zwei wesentliche Fehler:
    1. zwei Schleifen mit gleicher Laufvariable i übereinander (for i=...
    kann man so nicht machen, ergibt Übersetzungsfehler
    2. Grenzen des For falsch (gemischt Feld1 und Feld2)
    führt zu Fehler, wenn beide Felder nicht gleich dimensioniert sind.
    Anbei eine Lösung:
    Sub nn() 'Sub zum Test liste_cmp
    Dim a, F1, F2
    F1 = Array(1, 0, 3, 4, 5)
    F2 = Array(4, 3, 2, 1)
    a = liste_cmp(F1, F2)
    End Sub
    Function liste_cmp(Feld1, Feld2) As Integer
    Dim i, a, b As Integer
    If UBound(Feld1) - LBound(Feld1)  UBound(Feld2) - LBound(Feld2) Then 'Test auf gleiche Lä _
    nge
    MsgBox "Feldlängen sind unterschiedlich", vbCritical, "Fehler im Aufruf liste_cmp"
    liste_cmp = -99
    Exit Function
    End If
    For i = LBound(Feld1) To UBound(Feld1) 'Summe feld1
    a = a + Feld1(i)
    Next i
    For i = LBound(Feld2) To UBound(Feld2) 'Summe Feld2
    b = b + Feld2(i)
    Next i
    If a  b Then
    liste_cmp = -1
    Else
    liste_cmp = 0
    End If
    End Function
    

    Gruß derALteDresdner
    Anzeige
    AW: Hilfe bei Klausuraufgabe
    23.01.2017 12:13:03
    Peter
    Vielen Dank derALteDresdner!
    Ich habe noch paar Fragen:
    Ich muss Feld1 und Feld2 nicht als integer deklarieren:Function liste_cmp(Feld1(), Feld2() As Integer)?
    Ich kann auch die Klammern weglassen der Arrays weglassen?
    AW: Hilfe bei Klausuraufgabe
    23.01.2017 13:11:01
    AlterDresdner
    Hallo Peter,
    die Deklarationen und die Klammern kannst Du weglassen, das erleichtert das Testen ungemein.
    Sonst müsstest Du z.B. ein mit Dim F1(4) as Integer deklariertes Feld als Parameter verwenden, dass Du dann nur mit einer For-Schleife und nicht einfach mit =Array(... füllen könntest
    Wenn Du am Anfang der Function noch die Testzeilen
      If Not IsArray(Feld1) Or Not IsArray(Feld2) Then
    MsgBox "Einer der Parameter ist kein Feld", vbCritical, "Fehler im Aufruf liste_cmp"
    liste_cmp = -99
    End If
    If VarType(Feld1(UBound(Feld1)))  vbInteger Or _
    VarType(Feld2(UBound(Feld2)))  vbInteger Then
    MsgBox "Einer der Parameter ist nicht vom Typ Integer", _
    vbCritical, "Fehler im Aufruf liste_cmp"
    liste_cmp = -99
    Exit Function
    End If
    

    einfügst, wird die Korrektheit der übergebenen Paramer überprüft.
    Gruß der AlteDresdner
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige