unit Bruchrechnung;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Buttons;
type
TForm1 =
class(TForm)
EndeButton: TButton;
RechnenButton: TButton;
Zaehler1Edit: TEdit;
Nenner1Edit: TEdit;
OperatorEdit: TEdit;
Zaehler2Edit: TEdit;
Nenner2Edit: TEdit;
GanzzahlEdit: TEdit;
ErgebnisZaehlerEdit: TEdit;
ErgebnisNennerEdit: TEdit;
procedure EndeButtonClick(Sender: TObject);
procedure RechnenButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
// function für die Berechnung des ggT
function ggT(a, b : Integer) : Integer;
var rest:integer;
begin
repeat
Rest := a
MOD b;
a := b;
b := Rest;
until Rest = 0;
Result := a;
end;
// Alle Berechnungs-Prozeduren
procedure B_kuerzen (ggT, ErgebnisZaehler, ErgebnisNenner : Integer);
var ggTeiler:integer;
begin
if (ErgebnisZaehler <> 0)
AND (ErgebnisNenner <> 0)
then
begin
ggTeiler := ggT(ErgebnisZaehler, ErgebnisNenner);
ErgebnisZaehler := ErgebnisZaehler
DIV ggTeiler;
ErgebnisNenner := ErgebnisNenner
DIV ggTeiler;
end;
end;
procedure B_addieren(Zaehler1, Zaehler2, Nenner1, Nenner2 : Integer;
var ErgebnisZaehler, ErgebnisNenner: Integer);
begin
ErgebnisZaehler := (Zaehler1 * Nenner2) + (Zaehler2 * Nenner1);
ErgebnisNenner := Nenner1 * Nenner2;
end;
procedure B_subtrahieren(Zaehler1, Zaehler2, Nenner1, Nenner2 : Integer;
var ErgebnisZaehler, ErgebnisNenner: Integer);
begin
ErgebnisZaehler := (Zaehler1 * Nenner2) - (Zaehler2 * Nenner1);
ErgebnisNenner := Nenner1 * Nenner2;
end;
procedure B_dividieren(Zaehler1, Zaehler2, Nenner1, Nenner2 : Integer;
var ErgebnisZaehler, ErgebnisNenner: Integer);
begin
ErgebnisZaehler := Zaehler1 * Nenner2;
ErgebnisNenner := Nenner1 * Zaehler2;
end;
procedure B_multiplizieren(Zaehler1, Zaehler2, Nenner1, Nenner2 : Integer;
var ErgebnisZaehler, ErgebnisNenner: Integer);
begin
ErgebnisZaehler := Zaehler1 * Zaehler2;
ErgebnisNenner := Nenner1 * Nenner2;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Zaehler1Edit.Text := '
1';
Zaehler2Edit.Text := '
1';
Nenner1Edit.Text := '
1';
Nenner2Edit.Text := '
1';
GanzzahlEdit.Text := '
0';
ErgebnisZaehlerEdit.Text := '
0';
ErgebnisNennerEdit.Text := '
0';
OperatorEdit.Text := '
-';
end;
procedure TForm1.RechnenButtonClick(Sender: TObject);
var Zaehler1, Zaehler2, Nenner1, Nenner2, ErgebnisZaehler, ErgebnisNenner, Ganzzahl, ggT, ggTeiler : integer;
begin
// Eingabe - einlesen der Werte
Zaehler1 := StrToInt(Zaehler1Edit.Text);
Zaehler2 := StrToInt(Zaehler2Edit.Text);
Nenner1 := StrToInt(Nenner1Edit.Text);
Nenner2 := StrToInt(Nenner2Edit.Text);
// Prüfung auf gültigen Operator
begin if Zaehler1 = 0
then
ShowMessage('
Error: 0 ist ein ungültiger Wert')
end;
begin if Zaehler2 = 0
then
ShowMessage('
Error: 0 ist ein ungültiger Wert')
end;
begin if Nenner1 = 0
then
ShowMessage('
Error: 0 ist ein ungültiger Wert')
end;
begin if Nenner2 = 0
then
ShowMessage('
Error: 0 ist ein ungültiger Wert')
end;
// Berechnung
if OperatorEdit.Text = '
+'
then B_addieren(Zaehler1, Zaehler2, Nenner1, Nenner2, ErgebnisZaehler, ErgebnisNenner)
else
if OperatorEdit.Text = '
-'
then B_subtrahieren(Zaehler1, Zaehler2, Nenner1, Nenner2, ErgebnisZaehler, ErgebnisNenner)
else
if OperatorEdit.Text = '
/'
then B_dividieren(Zaehler1, Zaehler2, Nenner1, Nenner2, ErgebnisZaehler, ErgebnisNenner)
else
if OperatorEdit.Text = '
*'
then B_multiplizieren(Zaehler1, Zaehler2, Nenner1, Nenner2, ErgebnisZaehler, ErgebnisNenner)
else ShowMessage('
Error: Ungültiges Rechenzeichen');
if ErgebnisZaehler = ErgebnisNenner
then
begin
Ganzzahl := 1;
ErgebnisZaehler := 0;
ErgebnisNenner := 0;
end;
// Hier sollte dann der Bruch gekürzt werden
B_Kuerzen(ErgebnisZaehler, ErgebnisNenner, ggTeiler);
// Berechnung der Ganzzahl des Bruches
Ganzzahl := ErgebnisZaehler
DIV ErgebnisNenner;
ErgebnisZaehler := ErgebnisZaehler
MOD ErgebnisNenner;
// Ungültige Ergebnisse vermeiden
if ErgebnisZaehler = 0
then
ErgebnisNenner := 0;
if ErgebnisNenner = 0
then
ErgebnisZaehler := 0;
// Ausgebe der Werte(Ergebnisse)
ErgebnisNennerEdit.Text := IntToStr(ErgebnisNenner);
ErgebnisZaehlerEdit.Text := IntToStr(ErgebnisZaehler);
GanzzahlEdit.Text := IntToStr(Ganzzahl);
end;
procedure TForm1.EndeButtonClick(Sender: TObject);
begin
Close
end;
end.