| |
VB.NET - Ein- und UmsteigerSoftwaredesign an einem Beispiel bewerten | | | Autor: Theo_kkv | Datum: 08.01.20 09:29 |
| Hallo,
ich habe mit/für meine Kinder eine Schulaufgabe mit einem kleinen Programm gelöst. Mal abgesehen von der fachlichen Seite (die soweit korrekt ist), interessiert mich Eure Meinung, ob mein runtergeschriebener Code überhaupt dem aktuellen Design entspricht. Ich bitte um Hinweise, was/wie verbessert werden kann.
Vielen Dank
Grüße Tom
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim b As Double = 14.755 'm
Dim gamma As Double = 90.20295 '°
Dim soll_flaeche As Double = 12.42 'm²
Dim Iterationen As Integer = 1
Dim a As Double = 0.5 'Startwert
Do Until Math.Abs(soll_flaeche - Calculator.Flaeche(a, b, gamma)) < 0.01
Dim differenz As Double = soll_flaeche - Calculator.Flaeche(a, b, _
gamma)
If Calculator.Flaeche(a, b, gamma) < soll_flaeche Then
Select Case differenz
Case > 1
a += 0.25
Case > 0.5
a += 0.1
Case > 0.25
a += 0.05
Case > 0.1
a += 0.01
Case > 0.01
a += 0.001
End Select
Else
Select Case differenz
Case < -1
a -= 0.25
Case < -0.5
a -= 0.1
Case < -0.25
a -= 0.05
Case < -0.1
a -= 0.01
Case < -0.01
a -= 0.001
End Select
End If
Iterationen += 1
Loop
Label2.Text = Math.Round(Math.Abs(soll_flaeche - Calculator.Flaeche(a, _
b, gamma)), 3).ToString + Space(1) + "m²"
Label4.Text = Calculator.C(b, a, gamma).ToString
Label6.Text = Calculator.S(a, b, Calculator.C(b, a, gamma)).ToString
Label8.Text = a.ToString
Label10.Text = Iterationen.ToString
End Sub Public Class Calculator
Public Shared Function C(ByVal loc_b As Double, ByVal loc_a As Double, _
ByVal loc_gamma As Double) As Double
Return Math.Sqrt((loc_a * loc_a) + (loc_b * loc_b) - (2 * loc_a * loc_b _
* Math.Cos(loc_gamma * Math.PI / 180)))
End Function
Public Shared Function Flaeche(ByVal a As Double, ByVal b As Double, ByVal _
gamma As Double) As Double
Return Math.Sqrt(S(a, b, Calculator.C(b, a, gamma)) * (S(a, b, _
Calculator.C(b, a, gamma)) - a) * (S(a, b, Calculator.C(b, a, gamma)) - _
b) * (S(a, b, Calculator.C(b, a, gamma)) - Calculator.C(b, a, gamma)))
End Function
Public Shared Function S(ByVal loc_a As Double, ByVal loc_b As Double, _
ByVal loc_c As Double) As Double
Return ((loc_a + loc_b + loc_c) / 2)
End Function
End Class | |
Re: Softwaredesign an einem Beispiel bewerten | | | Autor: Manfred X | Datum: 08.01.20 10:40 |
| Hallo!
Ohne genauere Angaben läßt sich Code kaum sinnvoll bewerten.
Einige allgemeine Anmerkungen:
Es wäre zu bezweifeln, dass ein Windows.Forms.Form heute noch als aktuell einzuordnen ist.
Im Load-Event der Form sollten nur Aktionen ausgeführt werden, die zur Intialisierung der
Form erforderlich sind, aber kein Code für spezifische Aufgaben.
Den Zahlenfilter sollte man nicht über "Select Case" erledigen, sondern die Grenzwerte
könnten klassenglobal in ein Array eingetragen und über eine Schleife verarbeitet werden.
Die Benennung der Elemente (Controls, Parameter) sollte aussagekräftig sein.
Das gilt auch für die Benennung der Shared-Funktionen in der Calculator-Klasse.
Bei fest codierten Zahlen-Werten wären klassenglobale Constants einzusetzen.
Variable Werte abhängig von der Funktionalität als Settings deklarieren/speichern oder
in einer Datenbank ablegen.
So weit ich sehe, werden in der Funktion "Fläche" Berechnungen mit gleichen Parametern
mehrfach durchgeführt. Sinnvoll? Notwendig?
Beitrag wurde zuletzt am 08.01.20 um 10:54:05 editiert. | |
Re: Softwaredesign an einem Beispiel bewerten | | | Autor: Theo_kkv | Datum: 08.01.20 12:20 |
| Hallo,
hier doch noch einige Erläuterungen zur eigentlichen Aufgabe der Berechnung. Es stand die Aufgabe, in einem ebenen Dreieck mit gegebener Seite B, Winkel Gamma und !jetzt kommt's der Fläche des Dreiecks die "Seite A" auszurechnen. Daher die Variablenbezeichnung. Das Lösen dieser Aufgabe ist mit der euklidischen Geometrie gar nicht so trivial. Daher mein Ansatz mithilfe eines Startwertes über eine Iteration zum Ziel zu kommen. Mit einem angenommenen Startwert für Seite A von 0.5m werden über den Kosinussatz die Seite C, dann der Wert für "S" aus der heronschen Flächenformel und schließlich die Fläche selbst berechnet. Dann einige Vergleiche und Verbesserungen für den Startwert und los gehts wieder mit der Iteration. So lange bis es beim Abbruchwert passt.
Zu Deinen Hinweisen, Manfred X.
Du meinst sicher WPF. Darin habe ich mich (noch) nicht eingearbeitet. Die Lernkurve ist sicher recht steil. Für diese reine Berechnungsaufgabe ist eventuell auch F# geeignet.
Das mit dem Load-Event habe ich berichtigt.
In der Funktion "Fläche" (heronsche Flächenformel) werden nicht immer gleiche Parameter verwendet. Der Hilfswert in dieser Funktion für Seite C wird immer aus der Funktion "C" entnommen.
Kann man den Codebereich der Do Loop Schleife auch noch kapseln?
Tom | |
Re: Softwaredesign an einem Beispiel bewerten | | | Autor: Manfred X | Datum: 09.01.20 09:04 |
| Deine Routine Fläche könnte so aussehen:
Public Shared Function Flaeche _
(ByVal a As Double, b As Double, gamma As Double) As Double
Dim cval As Double = Calculator.C(b, a, gamma)
Dim sval As Double = S(a, b, cval)
Return Math.Sqrt(sval * (sval - a) * (sval - b) * (sval - cval))
End Function Das Select-Case-Statement wäre z.B. ungefähr so möglich:
Dim limits() As Double = {1, 0.5, 0.25, 0.1, 0.01, -0.0001}
Dim adjust() As Double = {0.25, 0.1, 0.05, 0.01, 0.001, 0}
sgn = Math.Sign(differenz)
diff = Math.Abs(differenz)
For i As Integer = 0 To limits.Length - 1
If diff > limits(i) Then adj_value = adjust(i) : Exit For
Next i
adj_value *= sgn | |
| 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 |
|
|
sevZIP40 Pro DLL
Zippen und Unzippen wie die Profis!
Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|