C# :: Aufgabe #336

3 Lösungen Lösungen öffentlich

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ß

Lösungen:

vote_ok
von Parrotfly (110 Punkte) - 12.11.2020 um 15:01 Uhr
Quellcode ausblenden C#-Code
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);
        }
    }


vote_ok
von Parrotfly (110 Punkte) - 13.11.2020 um 08:37 Uhr
Quellcode ausblenden C#-Code
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);
        }
    }
vote_ok
von JKooP (5930 Punkte) - 15.11.2020 um 13:38 Uhr
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
Quellcode ausblenden C#-Code
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);
    }
}