Harmonisches Mittel berechnen

hi!

ich würde gerne von einer bestimmten anzahl von zahlen das harmonische mittel berechnen. die formel dafür lautet xharm = n/(1/x(i)). die anzahl der zahlen wird vom benutzer eingegeben und heißt n. ebenso die zahlen x(i) sollen mit inputbox eingegeben werden und das ganze mit paramarray!!! genau das macht mir schwierigkeiten. so weit hab ichs bis jetzt:

Public Function xharm(ParamArray x()) As Double

Dim i As Integer

n = InputBox(„Wieviele Zahlen sollen eingegeben werden“, „Anzahl der Zahlen“)

For i = 1 To n

xharm = n / (1 / x(i))

Next

Debug.Print xharm

End Function

Public Sub xharm_haupt()

Dim n As Integer

Call xharm(x)

End Sub

Hi,

mit der Mathematik wirst Du mir helfen müssen, in Statistik bin ich nicht mehr so fit.

Public Function xharm(ParamArray x()) As Double

Du hast Paramarray falsch verwendet. Aus der Hilfe:

Function Summe(ByVal Arg1 As Integer, ParamArray AndereArg())
Dim Ergebnis 
' Beim Aufruf der Funktion mit:
Ergebnis = Summe(4, 3 ,2 ,1)
' erhalten die lokalen Variablen die folgenden Werte: Arg1 = 4,
' AndereArg(1) = 3, AndereArg(2) = 2 usw., sofern die
' Untergrenze für Datenfeldindizes 1 ist.

Dim i As Integer

n = InputBox(„Wieviele Zahlen sollen eingegeben werden“,
„Anzahl der Zahlen“)

In der Funktion? Das würde ich in die Prozedur schreiben und an die Funktion übergeben

For i = 1 To n

xharm = n / (1 / x(i))

xharm wird hier n mal überschrieben, immer wieder neu gesetzt.
Das kann ich mir einfach nicht vorstellen, daß das richtig ist.

Next

Debug.Print xharm

End Function

Public Sub xharm_haupt()

Dim n As Integer

Call xharm(x)

Du dimensionierst n, gibst weder n noch x einen Wert und übergibst die nicht dimensionierte Variable x? Das wird sich VB nicht gefallen lassen.

End Sub

Ein Code, der erst mal läuft, aber vermutlich nicht das macht, was Du möchtest, was ich aber bisher verstanden habe, würde so aussehen:

Option Explicit

Private Sub Command1\_Click()
 Dim n As Integer
 Dim x() As Integer
 Dim i As Integer
 n = InputBox("Bitte Anzahl eingeben")
 ReDim x(1 To n)
 For i = 1 To n
 x(i) = InputBox("bitte Wert " + CStr(i) + " eingeben")
 Next
 Me.Caption = xharm(n, x)
End Sub

Private Function xharm(ByVal n As Integer, ByRef x() As Integer) As Double
 Dim i As Integer
 For i = 1 To n
 xharm = n / (1 / x(i))
 Next
End Function

Die Schleife in der Funktion kann so eigentlich kaum richtig sein, ich weiß aber nicht, wie sie richtig aussehen muss.

Gruß, Rainer

Hallo noch mal,

versuche doch mal diese Funktion, das wirst Du wohl gemeint haben:

Private Function xharm(ByVal n As Integer, ByRef x() As Integer) As Double
 Dim i As Integer
 Dim su As Double
 For i = 1 To n
 su = su + x(i)
 Next
 xharm = n / (1 / su)
End Function

Gruß, Rainer

funktioniert bestens jedcoh würde ich gerne das ganze mit paramarray(x) machen, jedoch nimmt er das nicht an

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo,

funktioniert bestens jedcoh würde ich gerne das ganze mit
paramarray(x) machen, jedoch nimmt er das nicht an

das würde so funktionieren:
Private Function xharm(ByVal n As Integer, ParamArray x())

Dann müsstest Du die Funktion aber so aufrufen:

Mittel = xharm(n, Wert1, wert2, Wert3, Wert4)

Und das ist ja nicht das, was Du brauchst.

Gruß, Rainer