Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * Bruch.cs
- * Version: 1.0.100719.0836
- *
- * History:
- * - Formatstring angepasst.
- * - Fehler bei operator /(Bruch a, long b) korrigiert.
- */
- using System;
- using System.Globalization;
- namespace MySocratesNote {
- public struct Bruch : IFormattable {
- public long Zähler { get; private set; }
- public long Nenner { get; private set; }
- public Bruch(long zähler, long nenner) {
- if (nenner == 0)
- throw new ArgumentException("Der Nenner darf nicht 0 sein.", nameof(nenner));
- Zähler = zähler;
- Nenner = nenner;
- }
- public Bruch(long zähler) : this(zähler, 1) { }
- public Bruch Kehrwert => new Bruch(Nenner, Zähler);
- public Bruch Kürzen => this / Ggt(Zähler, Nenner);
- public static Bruch operator *(Bruch a, Bruch b) => new Bruch(a.Zähler * b.Zähler, a.Nenner * b.Nenner);
- public static Bruch operator *(Bruch a, long b) => new Bruch(a.Zähler * b, a.Nenner * b);
- public static Bruch operator /(Bruch a, Bruch b) => a * b.Kehrwert;
- public static Bruch operator /(Bruch a, long b) => a * new Bruch(1, b);
- public static Bruch operator +(Bruch a, Bruch b) {
- if (a.Nenner != b.Nenner) {
- return new Bruch((a.Zähler * b.Nenner) + (b.Zähler * a.Nenner), a.Nenner * b.Nenner);
- } else {
- return new Bruch(a.Zähler + b.Zähler, a.Nenner);
- }
- }
- public static Bruch operator -(Bruch a, Bruch b) {
- if (a.Nenner != b.Nenner) {
- return new Bruch((a.Zähler * b.Nenner) - (b.Zähler * a.Nenner), a.Nenner * b.Nenner);
- } else {
- return new Bruch(a.Zähler - b.Zähler, a.Nenner);
- }
- }
- private long Ggt(long a, long b) {
- if (b == 0)
- return a;
- else
- return Ggt(b, a % b);
- }
- public string ToString(string format, IFormatProvider formatProvider) {
- if (String.IsNullOrEmpty(format))
- format = "G";
- if (formatProvider == null)
- formatProvider = CultureInfo.CurrentCulture;
- switch (format.ToUpperInvariant()) {
- case "G":
- case "B":
- return $"{Zähler.ToString(formatProvider)} / {Nenner.ToString(formatProvider)}";
- case "Z":
- return Zähler.ToString(formatProvider);
- case "N":
- return Nenner.ToString(formatProvider);
- default:
- throw new FormatException($"Das {format} Format wird nicht unterstützt.");
- }
- }
- public string ToString(string format) => this.ToString(format, CultureInfo.CurrentCulture);
- public override string ToString() => this.ToString("G", CultureInfo.CurrentCulture);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement