Announcement

Collapse
No announcement yet.

Taschenrechner: Arcsin, Arccos, Arctan

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Taschenrechner: Arcsin, Arccos, Arctan

    Wunderschönen Sonntag Morgen Allerseits,
    ich beschäftige mich erst seit kurzem mit Delphi, von daher bin ich über jeden Tipp dankbar.
    Undzwar bin ich grade dabei mir einen eigenen Taschenrechenr zu programmieren (ja, aus Eigeninteresse ). Folgende Funktionen bietet er bis jetzt, welche auch funktionieren:

    Funktionen:
    -Addition
    -Subtraktion
    -Multiplikation
    -Divison
    -Quadratwurzel: x^(1/2)
    -Beliebige Wurzel: x^(1/y)
    -Quadrierung: x^2
    -x^3
    -x^y
    -Kehrwert: 1/x
    -Natürlicher Logarithmus: ln(x)
    -Logarithmus zur Basis 10: lg
    -Sinus: sin(x)
    -Cosinus: cos(x)
    -Tangens: tan(x)

    Des Weiteren habe ich die Konstanten Pi, die eulersche Zahl und den Goldenen Schnitt (Phi) als Konstanten hinzugefügt (nicht wirklich von Beudeutung).
    Widmen wir uns nun meinem Problem:

    Mein Taschenrechner macht folgendes, sobald ich auf den Sin(x) Button klicke.
    Code:
    procedure Tcalc.btsinClick(Sender: TObject);
    begin
    if edaus.Text <> ''
     then begin
          if cbDEG.checked
           then begin
            edaus.Text := FloatToStr(Sin(DegToRad(StrToFloat(edaus.Text))));
           end
           else if cbRAD.Checked
                 then begin
                  edaus.Text := FloatToStr(Sin(StrToFloat(edaus.Text)));
                 end;
     end;
    end;
    Die Ausgaben, die ich in beiden Fällen erhalte (RAD bzw DEG) Stimmen.


    Beim Arcsin sieht das jedoch ganz anders aus:
    Code:
    procedure Tcalc.btarcsinClick(Sender: TObject);
    begin
    if ABS(StrToFloat(edaus.Text)) <= 1
     then begin
          if cbDEG.checked
           then begin
            edaus.Text := FloatToStr(ArcSin(DegToRad(StrToFloat(edaus.Text))));
           end
           else if cbRAD.Checked
                 then begin
                  edaus.Text := FloatToStr(ArcSin(StrToFloat(edaus.Text)));
                 end
     end
     else if (cbDEG.checked) or (cbRAD.checked)
           then begin
            edaus.Text := 'Ungütliger Wert: |x| < 1';
           end;
    end;
    Das ist meine Berechnung für den Arcsin. Sie kann jedoch nicht stimmen da
    X = Arcsin(sin(x))
    gilt. Leider trifft diese Formel bei meinem Taschenrechner nicht zu. Folglich gehe ich davon aus, dass ich einen Fehler in der Arcsin Berechnung gemacht habe. Jedoch weiß ich leider nicht wo.

    Ich bin für heden Tipp und jede Anmerkung dankbar
    MfG
    Matthias

  • #2
    Hi,

    Du darfst DecToRad nicht auf den Sinus anwenden, sondern nur auf Winkel.
    M.E. müsste Dein Statement so heißen:

    if cbDEG.checked
    then begin
    edaus.Text :=
    FloatToStr(RadToDeg(ArcSin(StrToFloat(edaus.Text)) ));


    Gruß frauwue
    docendo discimus

    Comment

    Working...
    X