121803
May 01, 2015
7374
9
0
VBA - Sinus eines Winkels berechnen
Hallo zusammen
Ich habe im Studium eine kleine VBA Aufgabe zu lösen.
Fragestellung:
Erstellen Sie einen Taschenrechner, der den Sinus eines Winkels berechnet.
Eingabe: Winkel von 0 bis 360 Grad;
Ausgabe: Sinus-Wert (-1 bis +1)
Das Programm soll möglichst robust und stabil laufen, d.h. bei Falscheingaben nicht abstürzen bzw. falschen Eingabewerten erneut fragen
Anforderungen:
Sinus korrekt berechnet
Werte kleiner 0 und grösser 360 abgewiesen
Dezimalwerteingabe von Winkel (z.B. 180.3) verarbeitet
Falscheingabe abgewiesen
Abbrechen möglich
Ich habe einen Code vorbereitet.
Leider weiss ich nicht ob dieser "robust" genug ist. Könnt ihr mit Tipps für die Verbesserung geben (Am besten als Code zum ausprobieren und testen)
*Code*
Option Explicit
Sub Sinus()
Dim Pi As String 'Definiert die Variabel
Dim Eingabe As Double 'Definiert die Variabel
Dim Zwischenresultat As Double 'Definiert die variabel
Dim Resultat As Double 'Definiert die variabel
Pi = 3.1415 'Diese Zeile definiert Pi
Eingabe = InputBox("Bitte geben Sie den Winkel ein:") 'Hier wird die InputBox gemacht
Zwischenresultat = Sin(Eingabe * Pi / 180) 'Diese Zeile gibt das Resultat aus, jedoch nicht gerundet
Resultat = Round(Zwischenresultat, 2) 'Diese Zeile Rundet das Resultat auf zwei Stellen.
MsgBox Resultat 'Diese MessageBox gibt das Resultat definitiv aus (im Rad Mass)
End Sub
*Code*
Vielen Dank und Grüsse
daniel4916x
Ich habe im Studium eine kleine VBA Aufgabe zu lösen.
Fragestellung:
Erstellen Sie einen Taschenrechner, der den Sinus eines Winkels berechnet.
Eingabe: Winkel von 0 bis 360 Grad;
Ausgabe: Sinus-Wert (-1 bis +1)
Das Programm soll möglichst robust und stabil laufen, d.h. bei Falscheingaben nicht abstürzen bzw. falschen Eingabewerten erneut fragen
Anforderungen:
Sinus korrekt berechnet
Werte kleiner 0 und grösser 360 abgewiesen
Dezimalwerteingabe von Winkel (z.B. 180.3) verarbeitet
Falscheingabe abgewiesen
Abbrechen möglich
Ich habe einen Code vorbereitet.
Leider weiss ich nicht ob dieser "robust" genug ist. Könnt ihr mit Tipps für die Verbesserung geben (Am besten als Code zum ausprobieren und testen)
*Code*
Option Explicit
Sub Sinus()
Dim Pi As String 'Definiert die Variabel
Dim Eingabe As Double 'Definiert die Variabel
Dim Zwischenresultat As Double 'Definiert die variabel
Dim Resultat As Double 'Definiert die variabel
Pi = 3.1415 'Diese Zeile definiert Pi
Eingabe = InputBox("Bitte geben Sie den Winkel ein:") 'Hier wird die InputBox gemacht
Zwischenresultat = Sin(Eingabe * Pi / 180) 'Diese Zeile gibt das Resultat aus, jedoch nicht gerundet
Resultat = Round(Zwischenresultat, 2) 'Diese Zeile Rundet das Resultat auf zwei Stellen.
MsgBox Resultat 'Diese MessageBox gibt das Resultat definitiv aus (im Rad Mass)
End Sub
*Code*
Vielen Dank und Grüsse
daniel4916x
Please also mark the comments that contributed to the solution of the article
Content-Key: 270864
Url: https://administrator.de/contentid/270864
Printed on: April 27, 2024 at 01:04 o'clock
9 Comments
Latest comment
Hallo daniel4916x,
schau mal wie man Code ins Forum stellt (kann du auch nachträglich noch in deinem Beitrag ändern ).
Grüße
rubberman
schau mal wie man Code ins Forum stellt (kann du auch nachträglich noch in deinem Beitrag ändern ).
Leider weiss ich nicht ob dieser "robust" genug ist.
Was haben deine Tests ergeben, wenn du mal gegen die Anforderungen der Aufgebe getestet hast:Werte kleiner 0 und grösser 360 abgewiesen
Dezimalwerteingabe von Winkel (z.B. 180.3) verarbeitet
Falscheingabe abgewiesen
Abbrechen möglich
Dezimalwerteingabe von Winkel (z.B. 180.3) verarbeitet
Falscheingabe abgewiesen
Abbrechen möglich
Grüße
rubberman
Hallo daniel4916x
Grüße
rubberman
Tut mir leid, dass wusste ich nicht.
Macht ja nichts. Einfach deinen Beitrag bearbeiten, dann kannst du das korrigieren.Wenn ich jedoch 180 oder andere Winkel eingebe kommt etwas komisches heraus (bei 180 Grad kommt 0, bei 360 Grad kommt 0, bei 45 Grad 0.71)
Und warum sollte das komisch sein? Das sind die richtigen Ergebnisse, alles andere wäre falsch (ein Taschenrechner oder Tabellenbuch hätte dir das bereits bestätigt).Un die Anforderungen sind fast komplett nicht beachtet.
Was willst du dagegen tun?(Ausser das Abbrechen Feld ist vorhanden)
Das ist bei der Inputbox so. Aber wie reagierst du, wenn es jemand anklickt?Grüße
rubberman
OK, fangen wir mal mit ganz grundsätzlichen Dingen an:
Wenn du Falscheingaben abfangen musst, musst du Bedingungen definieren. Wie sehen diese aus?
Hilfe:
- Wenn Abbrechen angeklickt wird, gibt die Inputbox Funktion einen leeren String zurück.
- Wenn etwas anderes als eine Zahl eingegeben wird, gibt die IsNumeric Funktion den Wert False zurück.
- Welche Operatoren verwendest du in einer Bedingung um abzufragen ob der Wert zwischen 0 und 360 liegt?
Grüße
rubberman
Dim Pi As String
Was ist ein String und warum sollte deiner Meinung nach Pi ein String sein? Warum Dim? Ist Pi nicht eine Konstante?Dim Eingabe As Double
Hmm, theoretisch hast du ja Recht, der Benutzer soll einen numerischen Wert eingeben. ABER du sollst ja davon ausgehen, dass der Benutzer eine Falscheingabe machen könnte und diese abfangen, ohne dass dein Code crasht. Welchen Typ gibt es in VBA, der jeden möglichen (Sub-)Typ annehmen kann?Wenn du Falscheingaben abfangen musst, musst du Bedingungen definieren. Wie sehen diese aus?
Hilfe:
- Wenn Abbrechen angeklickt wird, gibt die Inputbox Funktion einen leeren String zurück.
- Wenn etwas anderes als eine Zahl eingegeben wird, gibt die IsNumeric Funktion den Wert False zurück.
- Welche Operatoren verwendest du in einer Bedingung um abzufragen ob der Wert zwischen 0 und 360 liegt?
Grüße
rubberman
Dim Pi 'Definiert die Variabel
Dim Eingabe 'Definiert die Variabel
Dim Resultat 'Definiert die variabel
Pi = 3.1415
do while true
Eingabe = InputBox("Bitte geben Sie den Winkel ein:") 'Hier wird die InputBox gemacht
if Eingabe = "" then exit do
If IsNumeric(Eingabe) then
if Eingabe >= 0 and Eingabe <= 360 then
Resultat = Round(Sin(Eingabe * Pi / 180),2)
MsgBox "Ergebnis: " & Resultat
exit do
else
Msgbox "Falsche Eingabe: Wert liegt nicht zwischen 0 und 360", vbExclamation
end if
else
Msgbox "Falsche Eingabe: Wert ist nicht numerisch", vbExclamation
End if
Loop
Zitat von @rubberman:
Stellt sich die Frage, wo beim Posten einer Komplettlösung der Lerneffekt bleibt...
Der will eh nichts lernen ...siehe seinen letzten Post ...Stellt sich die Frage, wo beim Posten einer Komplettlösung der Lerneffekt bleibt...
Ich wäre froh um einen Code, damit ich mittels einer Anregung den Auftrag abschließen kann.
So hat das ganze hier wenigstens ein schnelles Ende, auch für die Nachwelt.
Die Quittung gibt es zu Prüfung ...
So steht das seit 2 Stunden in meinem VBE
Grüße
rubberman
So steht das seit 2 Stunden in meinem VBE
Sub Sinus()
Dim Eingabe As Variant
Const Pi As Double = 3.141592654
Eingabe = InputBox("Bitte geben Sie den Winkel ein:")
' InputBox wurde abgebrochen oder es erfolgte keine Eingabe:
If Eingabe = "" Then Exit Sub
' Eingabefehler:
While Not IsNumeric(Eingabe) Or Eingabe < 0 Or Eingabe > 360 'Ein If Statement wäre hier äquivalent zu verwenden.
MsgBox "Falscheingabe.", vbCritical, "Fehler"
Call Sinus 'die Sinus-Funktion erneut (rekursiv) aufrufen
Exit Sub
Wend
MsgBox Sin(Eingabe * Pi / 180), vbInformation, "Ergebnis"
End Sub
rubberman