Einzelnen Beitrag anzeigen

OwNy

Registriert seit: 16. Dez 2005
Ort: Iffezheim
11 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Rechner machen mit Brüche

  Alt 18. Dez 2005, 12:30
ja toxman mir war halt langweilig un auserdem is das das erste "programm" das ich mache :/

matze genau so meinte ich das die dezimalzahl zu einem bruch umwandeln. ich probier jetz ma dran rum. ich melde mich dan später.
mfg

edit.:
Also: Ich hab einen Button gemacht mit dem caption button1 und ein edit fenster mit dem namen f (hab ich so aus dem code von matze rausgelesen das der so heisen soll) und hab die ganze sache mal reingekopiert, geht aber anscheinend auch!
nun trag ich in das edit feld mit dem namen f die dezimalzahl 0,5 ein (sollte dan ja 1/2 rauskommen ) und klick auf den rechenbutton. scheint zu funktionieren nur sagt er dann: Numerator: 273 Denumerator:50
und nich 1/2. was hab ich falsch gemacht?
hier mal der code :

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    f: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type
  TFraction = record
    Numerator: Integer;
    Denominator: Integer;
  end;

function Dec2Frac(const Decimal, Accuracy: Double): TFraction;
var
  tempd: Double;
  f: TFraction;
  neg: Shortint;
begin
  f.Numerator := 0;
  f.Denominator := 1;
  if Decimal < 0 then
    neg := -1
  else
    neg := 1;
  tempd := 0;
  while Abs(tempd - Decimal) > Accuracy do begin
    if Abs(tempd) > Abs(Decimal) then
      inc(f.Denominator)
    else
      f.Numerator := f.Numerator + neg;
    tempd := f.Numerator / f.Denominator;
  end;
  //tempi := gcd(f.Numerator,f.Denominator);
  Result := f;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Decimal: Double;
  Rational: TFraction;
begin
  // Werte zuweisen:
  Decimal := 5.46;

  // Umwandlung in einen Bruch
  // je kleiner der 2. Parameter, desto genauer das Ergebnis und desto länger die Rechenzeit
  Rational := Dec2Frac(Decimal, 0.000001);

  // Ergebnis anzeigen (Ausgabe für 5.46: 273/50):
  ShowMessage('Numerator: ' + IntToStr(Rational.Numerator) + #13#10 +
              'Denumerator: ' + IntToStr(Rational.Denominator));
end;

end.
Chris Lorenz
  Mit Zitat antworten Zitat