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);
}
}
