121803
Goto Top

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

Content-Key: 270864

Url: https://administrator.de/contentid/270864

Printed on: April 25, 2024 at 13:04 o'clock

Member: rubberman
rubberman May 01, 2015 at 13:15:17 (UTC)
Goto Top
Hallo daniel4916x,

schau mal wie man Code ins Forum stellt (kann du auch nachträglich noch in deinem Beitrag ändern face-wink).

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

Grüße
rubberman
Mitglied: 121803
121803 May 01, 2015 at 13:28:20 (UTC)
Goto Top
Hallo rubberman

Tut mir leid, dass wusste ich nicht.

Wenn man zum Beispiel den Winkel 90 eingibt, kommt 1 - das wäre ja richtig.
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)
Un die Anforderungen sind fast komplett nicht beachtet. (Ausser das Abbrechen Feld ist vorhanden)

Danke Dir
Gruss daniel4916x
Member: rubberman
rubberman May 01, 2015 at 13:40:18 (UTC)
Goto Top
Hallo daniel4916x

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
Mitglied: 121803
121803 May 01, 2015 at 13:59:30 (UTC)
Goto Top
Hallo rubbermann
Dann ist gut. Ich war einweing verwirrt wegen dem Bogen bzw. Gradmass :/
Kannst Du mir helfen die weiteren Anforderungen im Code zu ergänzen?
Wenn jemans was anklickt ?
Dankeschön!
Grüsse daniel4916x
Member: rubberman
rubberman May 01, 2015 updated at 14:22:14 (UTC)
Goto Top
OK, fangen wir mal mit ganz grundsätzlichen Dingen an:

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
Mitglied: 114757
114757 May 01, 2015 updated at 15:04:11 (UTC)
Goto Top
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
Gruß jodel
Member: rubberman
rubberman May 01, 2015 at 15:09:10 (UTC)
Goto Top
Stellt sich die Frage, wo beim Posten einer Komplettlösung der Lerneffekt bleibt...

Grüße
rubberman
Mitglied: 114757
114757 May 01, 2015 updated at 15:27:03 (UTC)
Goto Top
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 ...
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.
Member: rubberman
rubberman May 01, 2015 updated at 15:36:06 (UTC)
Goto Top
Die Quittung gibt es zu Prüfung ...
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
Grüße
rubberman