Ausgabeprobleme bei einem Algorithmus

Hi!

Ich versuche den Algorithmus von Guenther zu programmieren.
Er steht auf der nachfolgenden HP Seite 6 unter Algorithmus

http://www.msr.uni-bremen.de/download/Quali-3.pdf

Mein Problem ist, dass, wenn ich ein RQL verwende, das
??? Ich weiß nicht warum…

Frage: Wo liegt in folgendem Code der Fehler?

'Ich starte mein Programm mit dem Button "Start"
Private Sub Start\_Click()
Dim AQL, RQL, alpha, beta, X, Y As Double
Dim n, c As Long

c = 0
n = 1
alpha = 0.05
beta = 0.1

'TextRQL/AQL sind Textboxen, über welche ich die beiden Werte eingebe
RQL = 1 / TextRQL.Value
AQL = 1 / TextAQL.Value

'Operationscharakteristiken X(AQL),Y(RQL), c, n berechnen
 Do
 Do
 Y = WorksheetFunction.BinomDist(c, n, RQL, True)
 If (Y \> beta) Then
 n = n + 1
 End If
 Loop While (Y \> beta)
 X = WorksheetFunction.BinomDist(c, n, AQL, True)
 If (1 - X \> alpha) Then 
 c = c + 1
 n = c
 End If
 Loop While (1 - X \> alpha)

'c, n ausgeben 
 Cells(1, 2).Value = c
 Cells(2, 2).Value = n

End Sub

'Ich beende mein Programm mit dem Button "Ende"
Private Sub Ende\_Click()
 Unload UserForm1
End Sub

Hallo,

‚den‘ Fehler kann ich Dir nicht zeigen, weil ich nur VB richtig kenne die Eigenheiten von VBA nicht. Eventuell hilft es Dir ja schon, wenn Du den grundsätzlichen Fehler entfernst, der mir aufgefallen ist.

Dim AQL, RQL, alpha, beta, X, Y As Double
Dim n, c As Long

Damit dimensionierst Du ‚Y‘ als Double und ‚c‘ als Long. Alle anderen sind Variant deklariert und nehmen auch einen String an, wenn er ihnen angeboten wird, z.B. bei der Übergabe von Informationen aus einer Textbox. Es kann Dir passieren, daß eine Variable so einen String enthält und Du den als Long an Deine Funktion übergeben willst, woran die sich dann natürlich verschluckt.

Das Du vor hattest sieht so aus:

Dim AQL As Double, RQL As Double, alpha As Double, beta As Double, X As Double, Y As Double
Dim n As Long, c As Long

Gruß, Rainer

Danke Rainer, leider hat die Änderung das Problem nicht
gelöst… ich lasse den Code aber auf jeden Fall so wie von
dir vorgeschlagen!

Gruss SanSebastian

Ich versuche den Algorithmus von Guenther zu programmieren.
Er steht auf der nachfolgenden HP Seite 6 unter Algorithmus
http://www.msr.uni-bremen.de/download/Quali-3.pdf
Mein Problem ist, dass, wenn ich ein RQL verwende, das
??? Ich weiß nicht warum…
Frage: Wo liegt in folgendem Code der Fehler?

Hi Sebastian,
scheinbar ist da eine Endlosschleife drinnen, probiere mal diesen Code und beobachte A1 und B1, vielleicht hilft er dir weiter.
Wenn nicht müßtest du auch noch alpha,beta,x,y beobachten…
Debug.print kennst du?
(Noch) nicht überprüft ob die Umsetzung des Algorythmuses korrekt ist, Do-Loop schreckt mich immer ab, ich mag lieber While-Wend, aber ist wohl Geschmackssache, außer es ist programmtechnisch festgelegt.
Auch das Binomdist hat abschreckende Wirkung :smile:
Welche Wertebereiche kommen dann für TextRQL und TextAQL?

Option Explicit
Sub tt()
Dim AQL, RQL, alpha, beta, X, Y, TextRQL, TextAQL
Dim n, c
TextRQL = 9
TextAQL = 7
c = 0
n = 1
alpha = 0.05
beta = 0.1 'TextRQL/AQL sind Textboxen, über welche ich die beiden Werte eingebe
RQL = 1 / TextRQL
AQL = 1 / TextAQL 'Operationscharakteristiken X(AQL),Y(RQL), c, n berechnen
Do
 Do
 Y = WorksheetFunction.BinomDist(c, n, RQL, True)
 If (Y \> beta) Then
 Range("a1") = n
 n = n + 1
 End If
 Loop While (Y \> beta)
 X = WorksheetFunction.BinomDist(c, n, AQL, True)
 If (1 - X \> alpha) Then
 c = c + 1
 n = c
 Range("B1") = n
 End If
Loop While (1 - X \> alpha) 'c, n ausgeben
Cells(1, 2).Value = c
Cells(2, 2).Value = n
End Sub 'Ich beende mein Programm mit dem Button "Ende", nö, mit Strg+Pause :smile:))

Gruß
Reinhard

Hallo Reinhard,

danke für den Code der mir erst die Augen geöffnet hat.
Ich vermute wir sollten dies prüfen um zu verstehen, dass
RQL immer größer sein muss als AQL, am besten viel größer.
Dazu dient auch die Kurve auf dem gelinkten PDF, die über
dem Algorithmus steht.
Es wird immer zu einer Endlosschleife kommen, wenn RQL

Hallo Sebastian,

danke für den Code der mir erst die Augen geöffnet hat.
Ich vermute wir sollten dies prüfen um zu verstehen, dass
RQL immer größer sein muss als AQL, am besten viel größer.
Dazu dient auch die Kurve auf dem gelinkten PDF, die über
dem Algorithmus steht.
Es wird immer zu einer Endlosschleife kommen, wenn RQL

Hi Sebastian,

ohne mich näher damit zu beschäftigen, würde ich erstmal
vor jedem LOOP ein debug.print y einfügen. In der äußeren
Schleife würde ich zudem vorerst einen Breakpoint auf das
debug.print setzen (mit F9), um festzustellen, ob der überhaupt
aus der ersten Schleife rauskommt. Dann kannst Du noch in den
Schleifen einen Counter hochzählen lassen und z.B. alle 100,
500 oder was weiss ich mal ein STOP ausführen, damit Du Dir die
Werte mal anschauen kannst. Eine Schleife laufen zu lassen, von
der man nicht weiss, ob sie das macht was man erwartet dürfte
ziemlich unbefriedigend sein.

LG

ALex