| |
Allgemeine Diskussionenpq-Formel automatisieren | | | Autor: marie93 | Datum: 25.03.11 05:56 |
| Also, ich brauche unbedingt Hilfe. Für die Schule soll ich die pq-Formel mit vb automatisieren. Kann mir bitte jemand dabei helfen?
LG | |
Re: pq-Formel automatisieren | | | Autor: marie93 | Datum: 25.03.11 21:05 |
| Ehm ja.. Das was man öffnet, wenn man in Microsoft Excel "Alt" + "F11" drückt.. Sry, ich kenn mich nicht so aus. Zuerst fängt man ja mit der Bekanntgabe und Dimensionierung der Variablen an, dann
Umwandlung des Inhaltes der TB in numerische Werte und Zuordnung zur Variablen. Dann hab ich halt Schwierigkeiten mit der Programmierung vom "Berechnen" Button.. Wir sollen das mit If, Then, Else& sowas programmieren, aber ich konnte das nie wirklich& da diese Aufgabe als Klausur gewertet wird ist das schlecht.. Hat jemand soetwas vll. schonmal programmiert? | |
Re: pq-Formel automatisieren | | | Autor: Franki | Datum: 26.03.11 05:57 |
| Hallo,
also VBA sollst du verwenden.
Wie weit bist du denn schon, hast du p und q in entsprechenden Variablen vom richtigen Typ? Die Formel kennst du?
Das mit dem If...Then...Else brauchst du dafür primär eigentlich nicht, sondern die Grundrechenarten + Quadrieren + Quadratwurzel. Je nach Könnte es sein, dass der Teil unter der Wurzel negativ ist, dann entsprechende Fehlerbehandlung.
Heinweis: Um Brüche z.B. linear zu bekommen musst du evtl. zusätzliche Klammern in deinen Programmcode einfügen die in der gedruckten Form in einem Mathebuch nicht vorhanden sind.
Also schreibe doch mal wo genau es hängt bei dir, wie weit du bist und wo du nicht weiter kommst. Und für welches Fach brauchst du das eigentlich? Mathe oder was anderes?
Ansonsten ist das hier auch kein Hausaufgabenforum, wenn dir das jemand fertig schreiben würde, wäre dir rein gar nichts geholfen trotz einer guten Note in der Klausur weil du es nicht verstanden hast.
Gruß,
Frank | |
Quadratische Gleichung?? | | | Autor: Manfred X | Datum: 26.03.11 17:31 |
| Hallo!
Der Weg zur Berechnung der Lösung einer quadratischen Gleichung
steht in jedem Mathebuch. Mal umgesetzt in VB könnte das so aussehen:
Eingegeben werden p und q, zurück kommen die beiden Lösungen
bzw. die Funktion wird False.
Public Function Quadratische_Gleichung _
(ByVal p As Double, ByVal q As Double, _
ByRef L1 As Double, ByRef L2 As Double) As Boolean
'für Prüfung gegen 0
Const epsilon As Double = 0.000000001
'Diskriminante berechnen
Dim disk As Double
diskr = (p / 2#) * (p / 2#) - q
'Fallunterscheidung
If Abs(diskr) < epsilon Then
'Diskriminante wird als 0 eingeordnet
L1 = -p / 2: L2 = 0#
Quadratische_Gleichung = True
ElseIf diskr >= epsilon Then
'positive Diskriminante
L1 = -p / 2# - Sqr(diskr)
L2 = -p / 2# + Sqr(diskr)
Quadratische_Gleichung = True
Else
'negative Diskriminante (nicht lösbar)
L1 = 0: L2 = 0
Quadratische_Gleichung = False
End If
End Function Ein Excel-Makro, das diese Funktion nutzt, könnte
etwa so aussehen. (Eine Tastenkombi zuordnen.)
Annahme: Die Tabelle nennt sich Tabelle1. In der
ersten Spalte jeder Zeile stehen die p-Werte, in der
zweiten Spalte die q-Werte.
Die Lösungen werden - falls vorhanden - in die Spalten
3 und 4 eingetragen.
Sub QuadratischeGleichung()
' QuadratischeGleichung Makro
Dim row As Integer
Dim p As Double, q As Double, L1 As Double, L2 As Double
For row = 1 To 100
Tabelle1.Cells(row, 3) = "": Tabelle1.Cells(row, 4) = ""
If IsNumeric(Tabelle1.Cells(row, 1)) And _
IsNumeric(Tabelle1.Cells(row, 2)) Then
p = Tabelle1.Cells(row, 1): q = Tabelle1.Cells(row, 2)
If p <> 0 And q <> 0 Then
If Quadratische_Gleichung(p, q, L1, L2) Then
Tabelle1.Cells(row, 3) = L1
If L2 <> 0# Then Tabelle1.Cells(row, 4) = L2
Else
Tabelle1.Cells(row, 3) = "nicht lösbar"
Tabelle1.Cells(row, 4) = "nicht lösbar"
End If
End If
End If
Next row
End Sub MfG
Manfred | |
Re: pq-Formel automatisieren | | | Autor: marie93 | Datum: 27.03.11 19:08 |
| Also, ich hab die Userform jetz so gemacht, dass man die quadratische Gleichung eingeben kann. Halt __x²+__x+__. Bis jetz siehts so aus.. ich weiß, ist noch nich wirklich was.. aber wie mach ich jetz bei Private Sub CB_Berechnen_Click()weiter? Die quadratische Gleichung muss ja erstmal in die richtige Form umgewandelt werden, wenn man vor x² noch was stehen hat..
Option Explicit
Dim a As Double, b As Double, c As Double, p As Double, q As Double, Diskriminante As Double
Private Sub CB_Berechnen_Click()
a = CDbl(TB_a.Text)
b = CDbl(TB_b.Text)
c = CDbl(TB_c.Text)
p = CDbl(TB_p.Text)
q = CDbl(TB_q.Text)
Diskriminante = CDbl(TB_Diskriminante.Text)
End Sub
Private Sub CB_Neu_Click()
TB_a.Text = ""
TB_b.Text = ""
TB_c.Text = ""
TB_x1.Text = ""
TB_x2.Text = ""
TB_p.Text = ""
TB_q.Text = ""
TB_a.SetFocus
Beitrag wurde zuletzt am 27.03.11 um 19:20:43 editiert. | |
Re: pq-Formel automatisieren | | | Autor: Franki | Datum: 28.03.11 03:14 |
| Hallo,
Zitat: | | Also, ich hab die Userform jetz so gemacht, dass man die
quadratische Gleichung eingeben kann. Halt __x²+__x+__. Bis
jetz siehts so aus.. ich weiß, ist noch nich wirklich was..
aber wie mach ich jetz bei Private Sub
CB_Berechnen_Click()weiter? Die quadratische Gleichung muss
ja erstmal in die richtige Form umgewandelt werden, wenn man
vor x² noch was stehen hat..
| |
Du musst halt prüfen, ob da etwas <> 1 steht vor dem x². Wenn du da ein Eingabefeld hast in deiner Form musst du das auswerten. Könnte ja auch jemand auf die Idee kommen da eine 0 einzutragen (Dann abbrechen) oder einen negativen Wert.
Wenn da etwas gültiges steht, muss du den Rest der Gleichung halt durch diesen Wert dividieren und dann erst weiter machen bzw. die dann neuen Werte für p und q an deine Funktion uebergeben.
Was du da bis jetzt hast, hat noch nichts mit Berechnung zu tun.
Du mußt bei der Programmierung genauso logisch vorgehen und alle Eventualitäten berücksichtigen die du auch per Hand berücksichtigen würdest.
Also If vor dem x Etwas Then
Prüfe auf Gültigkeit, dann den Rest dividieren
Dann erst die Werte für p und q übergeben.
End If
Gruß,
Frank | |
Re: pq-Formel automatisieren | | | Autor: Manfred X | Datum: 28.03.11 14:15 |
| Hallo!
In welcher Form soll die Gleichung eigentlich eingegeben werden?
Parameter: p,q oder a,b,c?
Die Umrechnung von a,b,c auf p,q erfolgt durch einfache Division,
falls a <> 0 (bzw. Epsilon)
Im Click-Ereignis Deines Button muss zunächst geprüft werden,
ob überhaupt numerische Eingaben in den Textboxen vorliegen.
Sonst stürzt Dein Programm ab oder es liefert eine Ausnahme (On Error ...).
Funktion: IsNumeric.
If Not IsNumeric(Tb_a.text) then msgbox("bla bla"): exit sub
usw. (für a, b, c)
if abs(a) < 0.0000001 then msgbox("a: ungleich 0 eingeben"): exit sub
MfG
Manfred
Beitrag wurde zuletzt am 28.03.11 um 14:31:36 editiert. | |
Re: pq-Formel automatisieren | | | Autor: marie93 | Datum: 28.03.11 16:52 |
| So, jetzt siehts so aus, aber ich komme i.wie nicht weiter...
Option Explicit
Dim a As Double, b As Double, c As Double, x1 As Currency, x2 As Currency, p As Double, q As Double
Private Sub CB_Berechnen_Click()
On Error GoTo Fehler
a = CDbl(TB_a.Text)
b = CDbl(TB_b.Text)
c = CDbl(TB_c.Text)
p = CDbl(TB_p.Text)
q = CDbl(TB_q.Text)
If a <> 0 Then
p = b / a
q = c / a
Else
p = b
q = c
End If
If a = "" Then
ElseIf b = "" Then
ElseIf c = "" Then
Fehler:
MsgBox "Quadratische Funktion eingeben!", vbCritical, "Fehler!"
End If
x1 = -p / 2 + Sqr((p / 2) * (p / 2) - q)
x2 = -p / 2 - Sqr((p / 2) * (p / 2) - q)
End Sub
Private Sub CB_Ende_Click()
End
End Sub
Private Sub CB_Neu_Click()
TB_a.Text = ""
TB_b.Text = ""
TB_c.Text = ""
TB_p.Text = ""
TB_q.Text = ""
TB_x1.Text = ""
TB_x2.Text = ""
TB_a.SetFocus | |
Re: pq-Formel automatisieren | | | Autor: Manfred X | Datum: 28.03.11 17:57 |
| Hallo!
Beitrag wurde zuletzt am 28.03.11 um 18:27:04 editiert. | |
Re: pq-Formel automatisieren | | | Autor: Manfred X | Datum: 28.03.11 18:28 |
| Hallo!
Wenn Du statt "IsNumeric" zu verwenden, lieber einen Fehler auffängst,
muss die Error-Sprungmarke ganz nach hinten in der Routine.
Danach kommt nur noch die Fehlermeldung und End Sub.
Keine weiteren Anweisungen.
Eine Abfrage der Textboxen auf Leerstring ist unzureichend.
Wenn a = 0 im Dialog gesetzt wird, liegt keine quadratische Gleichung vor.
Bei der Berechnung muss zunächst die Determinante
bestimmt werden. Danach folgt die Fallunterscheidung:
keine, eine oder zwei reelle Lösungen der Gleichung
(d.h. der Ausdruck unter der Wurzel kann negativ werden.
Das führt dann zu einer Fehlermeldung).
Private Sub CB_Berechnen_Click()
Dim a#, b#, c#, p#, q#, diskr#, x1#, x2#
Const eps# = 0.0000001
On Error GoTo Fehler
If Not IsNumeric(tb_a.Text) Or Not IsNumeric(tb_b.Text) Or _
Not IsNumeric(tb_c.Text) Then _
MsgBox ("Unzulässige oder fehlende Eingabe(n)"): Exit Sub
a = CDbl(tb_a.Text): b = CDbl(tb_b.Text): c = CDbl(tb_c.Text)
If Abs(a) < eps Then MsgBox ("a: ungleich 0 eingeben"): Exit Sub
p = b / a: q = c / a
'Determinante berechnen
diskr = (p / 2) * (p / 2) - q
'Fallunterscheidung durchführen und Lösung berechnen
If diskr < -eps Then
lb_Result.Caption = "Keine reelle Lösung (neg. Diskriminante)"
ElseIf Abs(diskr) <= eps Then
lb_Result.Caption = CStr(Round(-p / 2, 4))
Else
x1 = -p / 2 + Sqr(diskr)
x2 = -p / 2 - Sqr(diskr)
'Lösungen gerundet in ein "Lösungslabel" übertragen
lb_Result.Caption = CStr(Round(x1, 4)) & " " & CStr(Round(x2, 4))
'Kontrollrechnung (optional)
If Abs(x1 ^ 2 * a + x1 * b + c) > 2# * eps Then Stop
If Abs(x2 ^ 2 * a + x2 * b + c) > 2# * eps Then Stop
End If
Exit Sub
Fehler:
MsgBox "Fehler ist aufgetreten" & vbCrLf & Err.Description
End Sub MfG
Manfred
Beitrag wurde zuletzt am 28.03.11 um 18:31:07 editiert. | |
Re: pq-Formel automatisieren | | | Autor: marie93 | Datum: 31.03.11 14:20 |
| Was muss ich hier dran ändern, um auch ungerade Zahlen eingeben zu können?
Option Explicit
Dim a As Double, b As Double, c As Double, Wurzel As Double, x1 As Double, x2 As Double, n1 As Double, n2 As Double, n3 As Double
Private Sub CB_Rechnen_Click()
a = CDbl(TB_a.Text)
b = CDbl(TB_b.Text)
c = CDbl(TB_c.Text)
If a = 0 Then
n1 = a
n2 = b
n3 = c
Wurzel = Runden(Sqr(((b / 2) ^ 2) - c), 2)
If Wurzel > 0 Then
x1 = Runden((-b / 2) - Wurzel, 2)
x2 = Runden((-b / 2) + Wurzel, 2)
If Wurzel = 0 Then
x1 = Runden((-b / 2), 2)
TB_x2.Visible = False
Label_x2.Visible = False
If Wurzel < 0 Then
TB_x1.Visible = False
Label_x1.Visible = False
TB_x2.Visible = False
Label_x2.Visible = False
End If
End If
End If
End If
If a <> 0 Then
n1 = Runden(a / a, 2)
n2 = Runden(b / a, 2)
n3 = Runden(c / a, 2)
Wurzel = Runden(Sqr((((b / a) / 2) ^ 2) - (c / a)), 2)
If Wurzel > 0 Then
x1 = Runden(-b / 2 / a - Wurzel, 2)
x2 = Runden(-b / 2 / a + Wurzel, 2)
If Wurzel < 0 Then
TB_x1.Visible = False
Label_x1.Visible = False
TB_x2.Visible = False
Label_x2.Visible = False
If Wurzel = 0 Then
x1 = Runden(-b / a / 2, 2)
TB_x2.Visible = False
Label_x2.Visible = False
End If
End If
End If
End If
TB_n1.Text = Format(n1)
TB_n2.Text = Format(n2)
TB_n3.Text = Format(n3)
TB_Wurzel.Text = Format(Wurzel)
TB_x1.Text = Format(x1)
TB_x2.Text = Format(x2)
End Sub
Private Sub CB_Ende_Click()
End
End Sub
Private Sub CB_Löschen_Click()
TB_a.Visible = False
TB_b.Visible = False
TB_c.Visible = False
TB_n1.Visible = False
TB_n2.Visible = False
TB_n3.Visible = False
TB_Wurzel.Visible = False
TB_x1.Visible = False
TB_x2.Visible = False
Label_a.Visible = False
Label_b.Visible = False
Label_c.Visible = False
Label_0.Visible = False
Normalform.Visible = False
Wurzel.Visible = False
Label_x1.Visible = False
Label_x2.Visible = False
Label1.Visible = False
Label2.Visible = False
Label3.Visible = False
Label4.Visible = False
Label_n0.Visible = False
End Sub
Private Sub CB_Neu_Click()
TB_a.Text = Empty
TB_b.Text = Empty
TB_c.Text = Empty
TB_Wurzel.Text = Empty
TB_x1.Text = Empty
TB_x2.Text = Empty
TB_n1.Text = Empty
TB_n2.Text = Empty
TB_n3.Text = Empty
TB_a.Visible = True
TB_b.Visible = True
TB_c.Visible = True
TB_n1.Visible = True
TB_n2.Visible = True
TB_n3.Visible = True
TB_Wurzel.Visible = True
TB_x1.Visible = True
TB_x2.Visible = True
Label_a.Visible = True
Label_b.Visible = True
Label_c.Visible = True
Label_0.Visible = True
Normalform.Visible = True
Label_Wurzel.Visible = True
Label_x1.Visible = True
Label_x2.Visible = True
Label1.Visible = True
Label2.Visible = True
Label3.Visible = True
Label4.Visible = True
Label_n0.Visible = True
End Sub
Function Runden(vZahl As Variant, iStellen As Integer)
Runden = CVar(Format(vZahl * (10 ^ iStellen), "0") / (10 ^ iStellen))
End Function | |
Re: pq-Formel automatisieren | | | Autor: Manfred X | Datum: 31.03.11 16:41 |
| Hallo!
Was verwendest Du eigentlich für eine VB-Version?
Gibt es da keine Funktionen wie IsNumeric, Round?
Wieso setzt Du bei einer Eingabe von a=0 dann a=1
statt in dem Fall die triviale Lösung zu berechnen
oder die Auswertung abzubrechen.
Beitrag wurde zuletzt am 31.03.11 um 16:41:54 editiert. | |
Re: pq-Formel automatisieren | | | Autor: Manfred X | Datum: 31.03.11 17:18 |
| Achso .. noch eins:
Deine IF-Konstruktionen sind sinnlos geschachtelt.
Du mußt mit ELSEIF arbeiten.
Wenn es ELSEIF in Deinem BASIC nicht geben sollte,
kannst Du die IF-Bedingungen HINTEREINANDER setzen. | |
Re: pq-Formel automatisieren | | | Autor: marie93 | Datum: 06.04.11 15:51 |
| ja, ok das habe ich jetzt geändert.. aber wieso kann man denn keine ungeraden zahlen eingeben? | |
Re: pq-Formel automatisieren | | | Autor: marie93 | Datum: 06.04.11 20:10 |
| Also, wenn ich ungerade Zahlen für a, b und c eingabe, dann wird
"dis = Runden(Sqr((((b / a) / 2) ^ 2) - (c / a)), 2)" gelb markiert. | |
Re: pq-Formel automatisieren | | | Autor: Manfred X | Datum: 06.04.11 20:25 |
| Hallo!
Vielleicht doch eine Fallunterscheidung durchführen
und eine negative Wurzel vermeiden????
Ich weiss, ich wiederhole mich .... Sorry.
MfG
Manfred | |
Re: pq-Formel automatisieren | | | Autor: Franki | Datum: 07.04.11 05:50 |
| Hallo,
grundsätzlich ist es doch egal, ob ein Koeffizient bei einer quadratischen Gleichung grade oder ungrade ist.
Da muss bei dir ein anderes Problem vor liegen, denn ob das z.B.
2x^2 + 4x + 6 oder
3x^2 + 5x + 7 lautet ist der pq Formel völlig egal.
Und alleine dadurch kann etwas unter der Wurzel ja auch nicht negativ werden.
Schau dir doch die Variablen mal genau an wenn das "gelb markiert" ist, du kannst mit der Maus drüber jahren und siehst den Wert. As muss eine andere Ursache bei dir haben.
Gruß,
Frank | |
Re: pq-Formel automatisieren | | | Autor: marie93 | Datum: 07.04.11 13:44 |
| Fallunterscheidung habe ich jetzt gemacht, aber es funktioniert immer noch nicht.. Kann mir vll. jemand sagen, was ich noch ändern muss?
Private Sub CB_Rechnen_Click()
a = CDbl(TB_a.Text)
b = CDbl(TB_b.Text)
c = CDbl(TB_c.Text)
If a = 0 Then
n1 = a
n2 = b
n3 = c
Wurzel = Runden(Sqr(((b / 2) ^ 2) - c), 2)
ElseIf Wurzel > 0 Then
x1 = Runden((-b / 2) - Wurzel, 2)
x2 = Runden((-b / 2) + Wurzel, 2)
ElseIf Wurzel = 0 Then
x1 = Runden((-b / 2), 2)
TB_x2.Visible = False
Label_x2.Visible = False
ElseIf Wurzel < 0 Then
TB_x1.Visible = False
Label_x1.Visible = False
TB_x2.Visible = False
Label_x2.Visible = False
End If
If a <> 0 Then
n1 = Runden(a / a, 2)
n2 = Runden(b / a, 2)
n3 = Runden(c / a, 2)
Wurzel = Runden(Sqr((((b / a) / 2) ^ 2) - (c / a)), 2)
ElseIf Wurzel > 0 Then
x1 = Runden(-b / 2 / a - Wurzel, 2)
x2 = Runden(-b / 2 / a + Wurzel, 2)
ElseIf Wurzel < 0 Then
TB_x1.Visible = False
Label_x1.Visible = False
TB_x2.Visible = False
Label_x2.Visible = False
ElseIf Wurzel = 0 Then
x1 = Runden(-b / a / 2, 2)
TB_x2.Visible = False
Label_x2.Visible = False
End If
TB_n1.Text = Format(n1)
TB_n2.Text = Format(n2)
TB_n3.Text = Format(n3)
TB_Wurzel.Text = Format(Wurzel)
TB_x1.Text = Format(x1)
TB_x2.Text = Format(x2) | |
Re: pq-Formel automatisieren | | | Autor: Manfred X | Datum: 07.04.11 13:53 |
| Hallo!
Du mußt die Unterscheidung treffen, ehe Du die SQR-Funktion aufrufst.
Ich habe oben eine Lösung gepostet - der kannst die Fallunterscheidung
doch entnehmen. Deine Verzweigung ist völlig falsch.
Ich verstehe auch nicht, was dieses if "a = 0" soll.
Diese Bedingung liefert keine quadratische Gleichung.
Wenn Du das a einfach wegläßt, setzt Du a = 1.
MfG
Manfred | |
Re: pq-Formel automatisieren | | | Autor: Franki | Datum: 08.04.11 04:30 |
| Hallo,
welche Falluntercheidung meinst du denn jetzt? Die, ob a = oder <> 0 ist, oder ob a grade oder ungrade ist?
Ich sehe da nur die erste Prüfung, die ist aber völlig uninteressant bzw. eigentlich auch falsch, da keine Fehlerbehandlung vorhanden ist.
Ich versuche das mal zu bechreiben: Du hast ja
a = CDbl(TB_a.Text)
Das funktioniert ja sowieso nur dann wenn der User im Textfeld auch etwas eingegeben hat was sich umwandeln lässt. Das kann natürlich auch die 0 sein. Aber wenn er da nichts eingegeben hat, würde das nicht funktionieren, da ein leerer String nicht per CDbl() umgewandelt werden kann.
Wenn der User jedoch die Möglichkeite hat da entweder nichts einzugeben oder halt gezielt die 0 eintippt, soltest du da auch unterscheiden. Denn wenn gezielt die 0 eingegeben wurde ist es keine quadratische Gleichung. Wenn er nichts eingegeben hat, kannst du den Leerstring durch eine 1 ersetzten.
Private Sub CB_Rechnen_Click()
Dim a As Double
If IsNumeric(TB_a.Text) = True Then
' Nur dann handelt es sich um eine Zahl
a = CDbl(TB_a.Text)
If a = 0 Then
MsgBox "Keine quadratische Gleichung"
Exit Sub
End If
Else
' Hier prüfen, ob nichts eingegeben worden ist
' oder z.B. Buchstaben
If Trim(TB_a.Text) = "" Then
a = 1
Else
MsgBox "Es dürfen nur Ziffern eingegeben werden"
Exit Sub
End If
End If
MsgBox a
' Hier kannst du weiter rechnen da es mathematisch gesehen
' sich um eine quadratische Gleichung handelt.
' Jetzt erst mal prüfen, ob der Teil unter der Wurzel nicht 0
' oder netagiv wird. Dann erst weiter machen.
End Sub Was mich jedoch auch wundert ist die Tatsache, dass du da ständig rundest in deinem Code. Das macht man normalerweise erst am Ende (sowohl mathematisch als auch kaufmännisch gesehen) Jede Rundung hat mathematisch gesehen eine gewisse Ungenauigkeit die sich in der Häufigkeit summieren kann. Aber gut, das ist jetzt hier ja nicht das Thema.
Aber was es mit dem Grade/Ungrade auf sich hat verstehe ich immer noch nicht.
Gruß,
Frank | |
Re: pq-Formel automatisieren | | | Autor: marie93 | Datum: 11.04.11 22:10 |
| Ach, ich kriegs einfach nicht hin..
Option Explicit
Dim a As Double, b As Double, c As Double, dis As Double, x1 As Double, x2 As Double, N1 As Double, N2 As Double, N3 As Double
Private Sub CB_Rechnen_Click()
b = CDbl(TB_B.Text)
c = CDbl(TB_C.Text)
If IsNumeric(TB_A.Text) = True Then
a = CDbl(TB_A.Text)
End If
If a = 0 Then
MsgBox "Keine quadratische Gleichung"
ElseIf a = 1 Then
N1 = b
N2 = c
dis = Sqr(((b / 2) ^ 2) - c)
ElseIf dis > 0 Then
x1 = (-b / 2) - dis
x2 = (-b / 2) + dis
ElseIf dis = 0 Then
x1 = (-b / 2)
TB_X2.Visible = False
Label17.Visible = False
ElseIf dis < 0 Then
TB_X1.Visible = False
Label16.Visible = False
TB_X2.Visible = False
Label17.Visible = False
End If
If a <> 0 Then
N1 = b / a
N2 = c / a
dis = Sqr((((b / a) / 2) ^ 2) - (c / a))
ElseIf dis > 0 Then
x1 = -b / 2 / a - dis
x2 = -b / 2 / a + dis
ElseIf dis < 0 Then
TB_X1.Visible = False
Label16.Visible = False
TB_X2.Visible = False
Label17.Visible = False
ElseIf dis = 0 Then
x1 = -b / a / 2
TB_X2.Visible = False
Label17.Visible = False
End If
If b = 0 Then
TB_N1 = 0
ElseIf c = 0 Then
TB_N2 = 0
End If
End Sub
Private Sub CB_Ende_Click()
End
End Sub
Private Sub CB_Neu_Click()
Label17.Visible = True
TB_X2.Visible = True
TB_A.Text = Empty
TB_B.Text = Empty
TB_C.Text = Empty
TB_Dis.Text = Empty
TB_X1.Text = Empty
TB_X2.Text = Empty
TB_N1.Text = Empty
TB_N2.Text = Empty
TB_A.SetFocus | |
Re: pq-Formel automatisieren | | | Autor: Manfred X | Datum: 12.04.11 10:56 |
| Hallo!
Langsam fällt mir nichts mehr ein .....
Ich habe jetzt eine Textbox für die Angabe der Zahl der
Nachkommastellen eingebaut.
Für die Anzeige des Resultats verwende ich ein Label.
'Form zur Lösung einer quadratischen Gleichung
Option Explicit
Dim a As Double, b As Double, c As Double 'a * x^2 + b * x + c = 0
Dim p As Double, q As Double
Dim diskr As Double 'Diskriminante
Dim x1 As Double, x2 As Double 'Lösungen für x
Dim N As Integer 'Nachkommastellen (
' Rundungsgenauigkeit)
'Erforderliche Controls:
'TB_A, TB_B, TB_C Textboxen für die Parameter der Gleichung
'TB_N Textbox für die Rundungsgenauigkeit (alle Werte)
'LB_Result Label für das Ergebnis
'CB_Rechnen CommandButton für die Berechnung
Private Sub CB_Rechnen_Click()
If Not IsNumeric(tb_a.Text) Then
MsgBox "Geben sie einen numerischen Wert für a ein": Exit Sub
End If
If Not IsNumeric(tb_b.Text) Then
MsgBox "Geben sie einen numerischen Wert für b ein": Exit Sub
End If
If Not IsNumeric(tb_c.Text) Then
MsgBox "Geben sie einen numerischen Wert für c ein": Exit Sub
End If
If Not IsNumeric(tb_n.Text) Then
MsgBox "Geben sie die Nachkommastellen im Bereich 1-4 ein": Exit Sub
End If
If CDbl(tb_n.Text) < 1 Or CDbl(tb_n.Text) > 4 Then
MsgBox "Geben sie die Nachkommastellen im Bereich 1-4 ein": Exit Sub
End If
N = CInt(tb_n.Text)
a = Round(CDbl(tb_a.Text), N)
b = Round(CDbl(tb_b.Text), N)
c = Round(CDbl(tb_c.Text), N)
If a = 0 Then
MsgBox "Es liegt keine quadratische Gleichung vor": Exit Sub
End If
p = b / a: q = c / a
diskr = (p / 2#) * (p / 2#) - q
diskr = Round(diskr, N)
If diskr < 0 Then
lb_Result.Caption = "Keine reelle Lösung (neg. Diskriminante)"
ElseIf diskr = 0 Then
lb_Result.Caption = CStr(Round(-p / 2#, N))
Else
x1 = -p / 2# + Sqr(diskr)
x2 = -p / 2# - Sqr(diskr)
lb_Result.Caption = CStr(Round(x1, N)) & " " & CStr(Round(x2, N))
End If
End Sub | |
Re: pq-Formel automatisieren | | | Autor: Franki | Datum: 13.04.11 03:24 |
| Hallo,
Zitat: | | Ach, ich kriegs einfach nicht hin.. | |
Das bedeutet was?
Du musst bzw. solltest schon konkrete Angaben mahen was wo genau nicht funktiniert, wo Fehler auftreten bei dir, in welcher Codezeile usw. usw.
Geht nicht gibts nich, aber geht nich, ist auch nur ein Problem was nicht "geht"
Wie duch schon in den anderen Antworten erfhahren hast, ist das mit der Lösung von quadratischen Gleichungen eigentlich keine grosse Sache. Da es bei dir aber nicht klappt brauchen wir konkrete Details an welcher Stelle von deinem Code es genau hängt. Sonst wird ds mit der Hilfe hier nichts.
Gruß
Frank | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevWizard für VB5/6
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere Infos
|