|
|
|
|
using System;
|
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
namespace Übungen_LF6_WinFormanwendung
|
|
|
|
|
{
|
|
|
|
|
class Bruchzahl : IComparable
|
|
|
|
|
{
|
|
|
|
|
public int nenner {
|
|
|
|
|
get
|
|
|
|
|
{
|
|
|
|
|
return this.nenner;
|
|
|
|
|
}
|
|
|
|
|
set
|
|
|
|
|
{
|
|
|
|
|
if (value == 0)
|
|
|
|
|
throw new DivideByZeroException();
|
|
|
|
|
else
|
|
|
|
|
this.nenner = value;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
public int zaehler { get; set; }
|
|
|
|
|
|
|
|
|
|
public Bruchzahl()
|
|
|
|
|
{
|
|
|
|
|
nenner = 1;
|
|
|
|
|
zaehler = 1;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Bruchzahl(int z, int n)
|
|
|
|
|
{
|
|
|
|
|
nenner = n;
|
|
|
|
|
zaehler = z;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public double dezWert()
|
|
|
|
|
{
|
|
|
|
|
double z = zaehler;
|
|
|
|
|
double n = nenner;
|
|
|
|
|
|
|
|
|
|
return z / n;
|
|
|
|
|
}
|
|
|
|
|
/*
|
|
|
|
|
public void add(Bruchzahl b)
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
*/
|
|
|
|
|
public void gibZaehlerNenner(out int z, out int n)
|
|
|
|
|
{
|
|
|
|
|
z = zaehler;
|
|
|
|
|
n = nenner;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public override string ToString()
|
|
|
|
|
{
|
|
|
|
|
return zaehler +" / " + nenner;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Bruchzahl kuerzen()
|
|
|
|
|
{
|
|
|
|
|
int ggtNenner = ggT(zaehler, nenner);
|
|
|
|
|
Bruchzahl ergebnis = new Bruchzahl();
|
|
|
|
|
ergebnis.zaehler /= ggtNenner;
|
|
|
|
|
ergebnis.nenner /= ggtNenner;
|
|
|
|
|
|
|
|
|
|
return ergebnis;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int ggT(int z, int n)
|
|
|
|
|
{
|
|
|
|
|
if (z == 0 || n == 0)
|
|
|
|
|
throw new DivideByZeroException();
|
|
|
|
|
int rest = 0;
|
|
|
|
|
|
|
|
|
|
while (n > 0)
|
|
|
|
|
{
|
|
|
|
|
rest = z % n;
|
|
|
|
|
z = n;
|
|
|
|
|
n = rest;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return z;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public int CompareTo(object obj)
|
|
|
|
|
{
|
|
|
|
|
Bruchzahl objBruch = (Bruchzahl)obj;
|
|
|
|
|
|
|
|
|
|
if (objBruch == null)
|
|
|
|
|
return 1;
|
|
|
|
|
double objDouble = objBruch.dezWert();
|
|
|
|
|
double thisDouble = this.dezWert();
|
|
|
|
|
|
|
|
|
|
return thisDouble.CompareTo(objDouble);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Bruchzahl operator +(Bruchzahl bruch1, Bruchzahl bruch2)
|
|
|
|
|
{
|
|
|
|
|
Bruchzahl ergebnis = new Bruchzahl();
|
|
|
|
|
ergebnis.zaehler = bruch1.zaehler * bruch2.zaehler + bruch2.zaehler * bruch1.nenner;
|
|
|
|
|
ergebnis.nenner = bruch1.nenner * bruch2.nenner;
|
|
|
|
|
return ergebnis;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Bruchzahl operator -(Bruchzahl bruch1, Bruchzahl bruch2)
|
|
|
|
|
{
|
|
|
|
|
Bruchzahl ergebnis = new Bruchzahl();
|
|
|
|
|
ergebnis.zaehler = bruch1.zaehler * bruch2.zaehler - bruch2.zaehler * bruch1.nenner;
|
|
|
|
|
ergebnis.nenner = bruch1.nenner * bruch2.nenner;
|
|
|
|
|
return ergebnis;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Bruchzahl operator *(Bruchzahl bruch1, Bruchzahl bruch2)
|
|
|
|
|
{
|
|
|
|
|
Bruchzahl ergebnis = new Bruchzahl();
|
|
|
|
|
ergebnis.zaehler = bruch1.zaehler * bruch2.zaehler ;
|
|
|
|
|
ergebnis.nenner = bruch1.nenner * bruch2.nenner;
|
|
|
|
|
return ergebnis;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static Bruchzahl operator /(Bruchzahl bruch1, Bruchzahl bruch2)
|
|
|
|
|
{
|
|
|
|
|
if (bruch2.zaehler == 0)
|
|
|
|
|
throw new DivideByZeroException();
|
|
|
|
|
Bruchzahl ergebnis = new Bruchzahl();
|
|
|
|
|
ergebnis.zaehler = bruch1.zaehler * bruch2.nenner ;
|
|
|
|
|
ergebnis.nenner = bruch1.nenner * bruch2.zaehler;
|
|
|
|
|
return ergebnis;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|