vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevAniGif - als kostenlose Vollversion auf unserer vb@rchiv CD Vol.5  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Allgemeine Diskussionen
pq-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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: pq-Formel automatisieren 
Autor: ModeratorRalfE (Moderator)
Datum: 25.03.11 09:24

Mit welchem VB sollst du das Automatisieren? Weiterhin, welche Programmiererfahrungen hast du? Was macht dir speziell Schwierigkeiten?

Ralf

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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)
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel