Thema: Delphi Fehler beim Runden

Einzelnen Beitrag anzeigen

woibauer

Registriert seit: 3. Okt 2009
1 Beiträge
 
#1

Fehler beim Runden

  Alt 3. Okt 2009, 11:48
Warum rundet das Programm falsch ???

Aufgabe war die Dreiecksberechnung ohne Math-Unit zu benutzten


Delphi-Quellcode:
program Dreieck; {$APPTYPE CONSOLE} uses
  SysUtils;

var
  s, fa: integer;
  a, b, c, alpha_r, alpha_d, h, f, u: real;
  h_s, f_s, a_s, u_s, c_s, b_s, alpha_d_s: string;
  x: char;

const
  phi = 3.14159265358979323846264;

begin
  Repeat

  begin
    Writeln(
      'Berechnung des Flaecheninhaltes, Umfanges, der anderen Seit und der Hoehe ');
    Writeln(
      'eines Dreiecks durch die Eingab von 2 Seiten und dem dazwischen liegendem Winkel');
    Writeln('Start mit Return-Taste');
    readln(x);
    write('Erste Seite (c) in cm = ');
    readln(c);
    write('Zweite Seite (b) in cm = ');
    readln(b);
    write('Der Winkel zwischen den beiden Seiten (alpha) = ');
    readln(alpha_d);
    write('Genauigkeit des Rundens (Stellen)');
    readln(s);
    case s of
      1:
        fa := 10;
      2:
        fa := 100;
      3:
        fa := 1000;
      4:
        fa := 10000;
      5:
        fa := 100000;
      6:
        fa := 1000000;
      7:
        fa := 10000000;
      8:
        fa := 100000000;
      9:
        fa := 1000000000;
      10:
        fa := 10000000000;

    else
      fa := 10000000000;
      Writeln('');
      Writeln('Programm ist zu ungenau. Es wird mit 10 Stellen gerechnet')
    end;

    if alpha_d < 180 then
    begin
      alpha_r := alpha_d * (phi / 180);
      h := sin(alpha_r) * b;
      f := 0.5 * c * h;
      a := sqrt(b * b + c * c - 2 * b * c * cos(alpha_r));
      u := a + b + c;
      c_s := FloatToStr(c);
      b_s := FloatToStr(b);
      alpha_d_s := FloatToStr(alpha_d);
      h_s := FloatToStr(round(h * fa) / fa);
      f_s := FloatToStr(round(f * fa) / fa);
      a_s := FloatToStr(round(a * fa) / fa);
      u_s := FloatToStr(round(u * fa) / fa);
      Writeln('');
      Writeln('Das Dreieck mit der Seite c ', c_s, ' cm');
      Writeln('und der Seite b ', b_s, ' cm');
      Writeln('und dem Winkel alpha ', alpha_d_s, ' in Grad');
      Writeln('hat einen Flaecheninhalt von ', f_s, ' cm im Quadrat');
      Writeln('und einen Umfang von ', u_s, ' cm');
      Writeln('');
      Writeln('die letzte Seite a betraegt ', a_s, ' cm');
      Writeln('und die Hoehe h ist ', h_s, ' cm');
      Writeln('');
      Writeln(h, ' h ', f, ' f ', a, ' a ', u, ' u');
    end
    else
      Writeln('Das Dreieck ist nicht berechenbar');
    Writeln('');
    Writeln('Zum Beenden # eingeben und mit Return bestaetigen');
    readln(x);
  end;
  Until x = '#end.
  Mit Zitat antworten Zitat