C# :: Aufgabe #232 :: Lösung #4

6 Lösungen Lösungen öffentlich
#232

Teufelskreis einer selbstbezüglichen Aussage

Anfänger - C# von hollst - 17.12.2018 um 18:46 Uhr
Die folgende Aussage sei gegeben als String:

"Dieser Satz hat vierzig Buchstaben sowie einen Punkt."


Die Aussage ist natürlich falsch, denn der Satz hat tatsächlich fünfundvierzig Buchstaben.

Ersetzen wir nun in der Aussage das Wort "vierzig" durch "fünfundvierzig" bleibt die Aussage aber trotzdem falsch,

denn der neue Satz hat zweiundfünfzig Buchstaben. Schöner Teufelskreis, oder?


Schreibe ein Programm mit dem überprüft wird, ob es überhaupt eine (ausgeschriebene) Zahl gibt, die oben zu einer wahren Aussage führt.

Viel Spaß!

#4
vote_ok
von Meinezukunft (60 Punkte) - 25.01.2019 um 13:54 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Satzüberprüfung
{
    class Program
    {
        static void Main(string[] args)
        {
            string zusammen = "Dieser Satz hat neunhundertneunundneunzig Buchstaben sowie einen Punkt.";
            Console.WriteLine(zusammen);
            string zusammen2 = "";
            while (true)
            {
                zusammen2 = zusammen.Replace(" ", String.Empty);
                int länge = (zusammen2.Length) - 1;
                string[] aufgeteilt = new string[8];
                aufgeteilt = zusammen.Split(' ');
                if (länge == Umwandlung.Wortzuzahl(aufgeteilt[3]))
                {
                    Console.WriteLine("Erfolg!");
                    Console.ReadKey();
                    break;
                }
                else
                {
                    aufgeteilt[3] = Umwandlung.Zahlzuwort(länge);
                    zusammen = aufgeteilt[0] + " " + aufgeteilt[1] + " " +
                        aufgeteilt[2] + " " + aufgeteilt[3] + " " +
                        aufgeteilt[4] + " " + aufgeteilt[5] + " " +
                        aufgeteilt[6] + " " + aufgeteilt[7];
                    Console.WriteLine(zusammen);
                }
            }
        }
    }
}

-------------------------------Neue Klasse -----------------------------

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Satzüberprüfung
{
    class Umwandlung
    {
        public static int Wortzuzahl(string a)
        {
            int zahl = 0;
            string temp = "";
            if (a.Contains("hundert"))
            {
                if (a.StartsWith("hundert"))
                {
                    zahl += 100;
                }
                else
                {
                    for (int i = 0; i < 4; i++)
                    {
                        temp += a[i];
                    }
                    zahl += (Wortzuzahl(temp) * 100);
                    while (true)
                    {
                        if (a.StartsWith("hundert"))
                        {
                            a = a.Remove(0, 7);
                            break;
                        }
                        a = a.Remove(0, 1);
                    }
                }

            }
            if (a.EndsWith("dreißig"))
            {
                zahl += 30;
                a = a.TrimEnd('d', 'r', 'e', 'i', 'ß', 'i', 'g');
            }
            /*else*/
            if (a.EndsWith("zig"))
            {
                a = a.TrimEnd('z', 'i', 'g');

                if (a.EndsWith("neun"))
                {
                    zahl += 90;
                    a = a.TrimEnd('n', 'e', 'u', 'n');
                }
                else if (a.EndsWith("acht"))
                {
                    zahl += 80;
                    a = a.TrimEnd('a', 'c', 'h', 't');
                }
                else if (a.EndsWith("sieb"))
                {
                    zahl += 70;
                    a = a.TrimEnd('s', 'i', 'e', 'b');
                }
                else if (a.EndsWith("sech"))
                {
                    zahl += 60;
                    a = a.TrimEnd('s', 'e', 'c', 'h');

                }
                else if (a.EndsWith("fünf"))
                {
                    zahl += 50;
                    a = a.TrimEnd('f', 'ü', 'n', 'f');
                }
                else if (a.EndsWith("vier"))
                {
                    zahl += 40;
                    a = a.TrimEnd('v', 'i', 'e', 'r');
                }
                else if (a.EndsWith("zwan"))
                {
                    zahl += 20;
                    a = a.TrimEnd('z', 'w', 'a', 'n');
                }
            }
            /*else*/
            if (a.EndsWith("zehn"))
            {
                zahl += 10;
            }
            /*else*/
            if (a.StartsWith("ein"))
            {
                zahl += 1;
            }
            /*else*/
            if (a.StartsWith("zwei"))
            {
                zahl += 2;
            }
            /*else*/
            if (a.StartsWith("drei"))
            {
                zahl += 3;
            }
            /*else*/
            if (a.StartsWith("vier"))
            {
                zahl += 4;
            }
            /*else*/
            if (a.StartsWith("fünf"))
            {
                zahl += 5;
            }
            /*else*/
            if (a.StartsWith("sech"))
            {
                zahl += 6;
            }
            /*else*/
            if (a.StartsWith("sieb"))
            {
                zahl += 7;
            }
            /*else*/
            if (a.StartsWith("acht"))
            {
                zahl += 8;
            }
            /*else*/
            if (a.StartsWith("neun"))
            {
                zahl += 9;
            }
            /*else*/
            if (a.StartsWith("elf"))
            {
                zahl = 11;
            }
            /*else*/
            if (a.StartsWith("zwölf"))
            {
                zahl = 12;
            }

            return zahl;
        }

        public static string Zahlzuwort(int a)
        {
            int erste;
            int zweite;
            string erster;
            string zweiter;
            string zahl = "";
            if ((a / 100) > 0)
            {
                erste = a / 100;
                zweite = a % 100;
                erster = Zahlzuwort(erste);
                zweiter = Zahlzuwort(zweite);
                if (erster == "eins")
                {
                    erster = "ein";
                }
                zahl = erster + "hundert" + zweiter;
            }
            else if (a < 13)
            {
                switch (a)
                {
                    case 1:
                        zahl = "eins";
                        break;
                    case 2:
                        zahl = "zwei";
                        break;
                    case 3:
                        zahl = "drei";
                        break;
                    case 4:
                        zahl = "vier";
                        break;
                    case 5:
                        zahl = "fünf";
                        break;
                    case 6:
                        zahl = "sechs";
                        break;
                    case 7:
                        zahl = "sieben";
                        break;
                    case 8:
                        zahl = "acht";
                        break;
                    case 9:
                        zahl = "neun";
                        break;
                    case 10:
                        zahl = "zehn";
                        break;
                    case 11:
                        zahl = "elf";
                        break;
                    case 12:
                        zahl = "zwölf";
                        break;
                }
            }
            else if (a % 10 == 0)
            {
                switch (a)
                {
                    case 20:
                        zahl = "zwanzig";
                        break;
                    case 30:
                        zahl = "dreißig";
                        break;
                    case 40:
                        zahl = "vierzig";
                        break;
                    case 50:
                        zahl = "fünfzig";
                        break;
                    case 60:
                        zahl = "sechzig";
                        break;
                    case 70:
                        zahl = "siebzig";
                        break;
                    case 80:
                        zahl = "achtzig";
                        break;
                    case 90:
                        zahl = "neunzig";
                        break;
                }
            }
            else if (a > 12 && a < 20)
            {
                erste = (a / 10) * 10;
                zweite = a % 10;
                erster = Zahlzuwort(erste);
                zweiter = Zahlzuwort(zweite);
                if (zweiter == "sieben")
                {
                    zweiter = zweiter.TrimEnd('e', 'n');
                }
                if (zweiter == "sechs")
                {
                    zweiter = zweiter.TrimEnd('s');
                }
                zahl = zweiter + erster;
            }
            else
            {
                erste = (a / 10) * 10;
                zweite = a % 10;
                erster = Zahlzuwort(erste);
                zweiter = Zahlzuwort(zweite);
                if (zweiter == "eins")
                {
                    zweiter = zweiter.TrimEnd('s');
                }
                zahl = zweiter + "und" + erster;
            }
            return zahl;
        }
    }
}

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben