C# :: Aufgabe #336
3 Lösungen

Periodenlänge von Stammbrüchen
Fortgeschrittener - C#
von JKooP
- 01.11.2020 um 09:50 Uhr
Stammbruch nennt man einen Bruch mit einer 1 im Zähler und einer beliebigen natürlichen Zahl im Nenner.
Schreibe eine Methode/Funktion, mit der man die Periodenlänge eines solchen Bruchs berechnen kann.
Beispiele:
1/4 = 0,25 --> Periodenlänge ist 0, da der Bruch abbricht
1/6 = 0,166666… = 0,16 --> Periodenlänge ist 1, da sich nur die Ziffer 6 wiederholt
1/11 = 0,090909… = 0.09 --> Periodenlänge ist 2, da sich die Ziffern 0 und 9 wiederholen
Viel Spaß
Schreibe eine Methode/Funktion, mit der man die Periodenlänge eines solchen Bruchs berechnen kann.
Beispiele:
1/4 = 0,25 --> Periodenlänge ist 0, da der Bruch abbricht
1/6 = 0,166666… = 0,16 --> Periodenlänge ist 1, da sich nur die Ziffer 6 wiederholt
1/11 = 0,090909… = 0.09 --> Periodenlänge ist 2, da sich die Ziffern 0 und 9 wiederholen
Viel Spaß
Lösungen:

public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void BnStart_Click(object sender, EventArgs e) { int zahlerg = 0; double zahl1 = Convert.ToInt32(TbZahl.Text); double zahl2 = Convert.ToInt32(TbZahl2.Text); double erg = zahl1 / zahl2; string ergebnis = Convert.ToString(erg); int[] check = new int[10]; for (int i = 3; i < ergebnis.Length - 1; i++) { if (ergebnis[i] == 0 + 48 && check[0] != 1) { zahlerg++; check[0]++; } else if (ergebnis[i] == 1 + 48 && check[1] != 1) { zahlerg++; check[1]++; } else if (ergebnis[i] == 2 + 48 && check[2] != 1) { zahlerg++; check[2]++; } else if (ergebnis[i] == 3 + 48 && check[3] != 1) { zahlerg++; check[3]++; } else if (ergebnis[i] == 4 + 48 && check[4] != 1) { zahlerg++; check[4]++; } else if (ergebnis[i] == 5 + 48 && check[5] != 1) { zahlerg++; check[5]++; } else if (ergebnis[i] == 6 + 48 && check[6] != 1) { zahlerg++; check[6]++; } else if (ergebnis[i] == 7 + 48 && check[7] != 1) { zahlerg++; check[7]++; } else if (ergebnis[i] == 8 + 48 && check[8] != 1) { zahlerg++; check[8]++; } else if (ergebnis[i] == 9 + 48 && check[9] != 1) { zahlerg++; check[9]++; } } LbErg.Text = Convert.ToString(zahlerg); } }

public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void BnStart_Click(object sender, EventArgs e) { int zahlerg = 0; double zahl1 = Convert.ToInt32(TbZahl.Text); double zahl2 = Convert.ToInt32(TbZahl2.Text); double erg = zahl1 / zahl2; string ergebnis = Convert.ToString(erg); int[] check = new int[10]; for (int i = 3; i < ergebnis.Length - 1; i++) { if (ergebnis[i] == 0 + 48 && check[0] != 1) { zahlerg++; check[0]++; } else if (ergebnis[i] == 1 + 48 && check[1] != 1) { zahlerg++; check[1]++; } else if (ergebnis[i] == 2 + 48 && check[2] != 1) { zahlerg++; check[2]++; } else if (ergebnis[i] == 3 + 48 && check[3] != 1) { zahlerg++; check[3]++; } else if (ergebnis[i] == 4 + 48 && check[4] != 1) { zahlerg++; check[4]++; } else if (ergebnis[i] == 5 + 48 && check[5] != 1) { zahlerg++; check[5]++; } else if (ergebnis[i] == 6 + 48 && check[6] != 1) { zahlerg++; check[6]++; } else if (ergebnis[i] == 7 + 48 && check[7] != 1) { zahlerg++; check[7]++; } else if (ergebnis[i] == 8 + 48 && check[8] != 1) { zahlerg++; check[8]++; } else if (ergebnis[i] == 9 + 48 && check[9] != 1) { zahlerg++; check[9]++; } } LbErg.Text = Convert.ToString(zahlerg); } }
NET 5.x; C# 9.x
Neuerung in C# 9.x: Top-Level-Anweisung
https://docs.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-9
C#-Code
Neuerung in C# 9.x: Top-Level-Anweisung
https://docs.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-9

using System; using System.Collections.Generic; using System.Linq; Enumerable.Range(1, 100).ToList().ForEach(i => Console.WriteLine($"1/{i} -> {GetLength(1, i)}")); static int GetLength(int a, int b) { var l = new List<int>(); while (true) { while(a < b) l.Add(a *= 10); a = 10 * (a % b); if (a == 0) return 0; if (l.Contains(a)) return l.Count - l.IndexOf(a); l.Add(a); } }