Advertisement
MBrendecke

Bruch

Jul 9th, 2019
162
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.63 KB | None | 0 0
  1. /*
  2.  * Bruch.cs
  3.  * Version: 1.0.100719.0836
  4.  *
  5.  * History:
  6.  * - Formatstring angepasst.
  7.  * - Fehler bei operator /(Bruch a, long b) korrigiert.
  8. */
  9.  
  10. using System;
  11. using System.Globalization;
  12.  
  13. namespace MySocratesNote {
  14.   public struct Bruch : IFormattable {
  15.     public long Zähler { get; private set; }
  16.     public long Nenner { get; private set; }
  17.  
  18.     public Bruch(long zähler, long nenner) {
  19.       if (nenner == 0)
  20.         throw new ArgumentException("Der Nenner darf nicht 0 sein.", nameof(nenner));
  21.  
  22.       Zähler = zähler;
  23.       Nenner = nenner;
  24.     }
  25.  
  26.     public Bruch(long zähler) : this(zähler, 1) { }
  27.  
  28.     public Bruch Kehrwert => new Bruch(Nenner, Zähler);
  29.  
  30.     public Bruch Kürzen => this / Ggt(Zähler, Nenner);
  31.  
  32.     public static Bruch operator *(Bruch a, Bruch b) => new Bruch(a.Zähler * b.Zähler, a.Nenner * b.Nenner);
  33.  
  34.     public static Bruch operator *(Bruch a, long b) => new Bruch(a.Zähler * b, a.Nenner * b);
  35.  
  36.     public static Bruch operator /(Bruch a, Bruch b) => a * b.Kehrwert;
  37.  
  38.     public static Bruch operator /(Bruch a, long b) => a * new Bruch(1, b);
  39.  
  40.     public static Bruch operator +(Bruch a, Bruch b) {
  41.       if (a.Nenner != b.Nenner) {        
  42.         return new Bruch((a.Zähler * b.Nenner) + (b.Zähler * a.Nenner), a.Nenner * b.Nenner);
  43.       } else {
  44.         return new Bruch(a.Zähler + b.Zähler, a.Nenner);
  45.       }
  46.     }
  47.  
  48.     public static Bruch operator -(Bruch a, Bruch b) {
  49.       if (a.Nenner != b.Nenner) {
  50.         return new Bruch((a.Zähler * b.Nenner) - (b.Zähler * a.Nenner), a.Nenner * b.Nenner);
  51.       } else {
  52.         return new Bruch(a.Zähler - b.Zähler, a.Nenner);
  53.       }
  54.     }
  55.  
  56.     private long Ggt(long a, long b) {
  57.       if (b == 0)
  58.         return a;
  59.       else
  60.         return Ggt(b, a % b);
  61.     }
  62.  
  63.     public string ToString(string format, IFormatProvider formatProvider) {
  64.       if (String.IsNullOrEmpty(format))
  65.         format = "G";
  66.  
  67.       if (formatProvider == null)
  68.         formatProvider = CultureInfo.CurrentCulture;
  69.  
  70.       switch (format.ToUpperInvariant()) {
  71.         case "G":
  72.         case "B":
  73.           return $"{Zähler.ToString(formatProvider)} / {Nenner.ToString(formatProvider)}";
  74.         case "Z":
  75.           return Zähler.ToString(formatProvider);
  76.         case "N":
  77.           return Nenner.ToString(formatProvider);
  78.         default:
  79.           throw new FormatException($"Das {format} Format wird nicht unterstützt.");
  80.       }
  81.     }
  82.  
  83.     public string ToString(string format) => this.ToString(format, CultureInfo.CurrentCulture);
  84.  
  85.     public override string ToString() => this.ToString("G", CultureInfo.CurrentCulture);
  86.   }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement