C# :: Aufgabe #30 :: Lösung #6

8 Lösungen Lösungen öffentlich
#30

Zahlen in Römischer Schreibweise

Anfänger - C# von pocki - 29.12.2012 um 19:40 Uhr
Schreibe eine Programm welches eine Ganzzahl einliest und diese anschließend in römischer Schreibweise wieder ausgibt und umgekehrt bei einer eingegebenen Zahl in römischer Schreibweise diese als normale Zahl wieder ausgibt:

Konsolenausgabe:


Geben Sie eine Zahl ein: 1234
entspricht: MCCXXXIV

Geben Sie eine Zahl ein: DXXXVII
entspricht: 537


Die Erkennung der Schreibweise sollte automatisch funktionieren.
#6
vote_ok
von sasanaf (100 Punkte) - 03.02.2016 um 11:53 Uhr
Quellcode ausblenden C#-Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace RömischeZahlenConverter
{
    class Program
    {
        static void Main(string[] args)
        {
            while (true)
            {
                Console.WriteLine("Römische(1) oder Arabische(2) Zahl? Für alle Zahlen (3)");
                string Wert = Console.ReadLine();
                Console.WriteLine("Wie lautet der Wert?");
                switch (Wert)
                {
                    case "1":
                        {
                            Wert = Console.ReadLine();
                            Console.WriteLine("Das Ergebnis lautet: {0}\n", RomToArab.Ausgabe(Wert));
                            Console.ReadLine();
                            Console.Clear();
                            break;
                        }
                    case "2":
                        {
                            Wert = Console.ReadLine();
                            Console.WriteLine("Das Ergebnis lautet: {0}\n", ArabToRom.Ausgabe(Wert));
                            Console.ReadLine();
                            Console.Clear();
                            break;
                        }
                    case "3":
                        {
                            Action.Go(Wert);
                            Console.ReadLine();
                            Console.Clear();
                            break;
                        }
                    default:
                        {
                            Console.Clear();
                            break;
                        }

                }
            }
        }
class RomToArab
    {
        //Berechnungsalgorithmus
        public static int Ausgabe(string GivenValue)
        {
            GivenValue = GivenValue.ToUpper();
            int GivenValueLength = GivenValue.Length;
            if (CheckIfEquals(GivenValue))
            {

                string LetterNow;
                string LetterNext;
                int ergebnis = 0, loop = 0;
                while (loop != GivenValueLength)
                {
                    LetterNow = Convert.ToString(GivenValue[loop]);
                    LetterNext = Convert.ToString(GivenValue[loop]);
                    if (loop + 1 != GivenValueLength)
                    {
                        LetterNext = Convert.ToString(GivenValue[loop + 1]);
                    }
                    if (CheckIfSubstract(LetterNow, LetterNext) && loop + 1 != GivenValueLength)
                    {
                        ergebnis += Substract(GivenValue, GivenValueLength, LetterNow, LetterNext);
                        LetterNow = Convert.ToString(GivenValue[loop]);
                        LetterNext = Convert.ToString(GivenValue[loop + 1]);
                        loop += 2;
                    }
                    else
                    {
                        ergebnis += Addition(GivenValue, GivenValueLength, LetterNow);
                        LetterNow = Convert.ToString(GivenValue[loop]);
                        loop += 1;
                    }
                }
                if (ergebnis >= 4000)
                {
                    Console.WriteLine("Fehler!");
                    ergebnis = 0;
                    Convert.ToBoolean(ergebnis);
                    return ergebnis;
                }

                return ergebnis;
            }
            Console.WriteLine("Fehler!");
            return 0;
        }
        //Überprüfen ob Subtraktion
        public static bool CheckIfSubstract(string LetterNow, string LetterNext)
        {
            return "IV,IX,XL,XC,CD,CM".Contains(LetterNow + LetterNext);
        }
        //Subtraktion
        public static int Substract(string GivenValue, int GivenValueLength, string LetterNow, string LetterNext)
        {
            int ergebnis = 0;
            ergebnis += (RoemZahlenGiver(LetterNext) - (RoemZahlenGiver(LetterNow)));
            return ergebnis;
        }
        //Addition
        public static int Addition(string GivenValue, int GivenValueLength, string LetterNow)
        {
            int ergebnis = 0;
            ergebnis += (RoemZahlenGiver(LetterNow));
            return ergebnis;
        }
        //Überprüfen ob Grundzahl
        public static bool IsGrundzahl(string LetterNow)
        {
            return "IXCM".Contains(LetterNow);
        }
        //Überprüfen ob Nebenzahl
        public static bool IsNebenZahl(string LetterNow)
        {
            return !IsGrundzahl(LetterNow);
        }
        //Zahlen"Tabelle"
        public static int RoemZahlenGiver(string Buchstabe)
        {
            switch (Buchstabe)
            {
                case "I": return 1;
                case "V": return 5;
                case "X": return 10;
                case "L": return 50;
                case "C": return 100;
                case "D": return 500;
                case "M": return 1000;
                default: return 0;
            }
        }

        //Überprüfungsalgorithmus
        public static bool CheckIfEquals(string GivenValue)
        {
            GivenValue = GivenValue.ToUpper();
            int GivenValueLength = GivenValue.Length;
            for (int x = 0; x < GivenValueLength; x++)
            {
                string LetterNow = Convert.ToString(GivenValue[x]);
                if (!CheckIfEqualsLetters(LetterNow))
                    return false;
            }
            if (!CheckIfNotMutliple(GivenValue, GivenValueLength))
            {
                return false;
            }
            return IsNoDouble(GivenValue);
        }
        //Überprüfen ob 4x aufeinanderfolgend
        public static bool CheckIfNotMutliple(string GivenValue, int GivenValueLength)
        {
            if (GivenValueLength >= 4)
            {
                int ValueValue = 0;
                while (ValueValue != GivenValueLength - 3)
                {

                    if (GivenValue[ValueValue] == GivenValue[ValueValue + 1] && GivenValue[ValueValue + 1] == GivenValue[ValueValue + 2] && GivenValue[ValueValue + 2] == GivenValue[ValueValue + 3])
                    {
                        return false;
                    }
                    ValueValue++;
                }
            }
            return true;
        }
        //Überprüfen ob nur römische Zahlenzeichen
        public static bool CheckIfEqualsLetters(string LetterNow)
        {
            {
                if (!char.IsLetter(LetterNow, 0))
                    return false;
            }
            string[] ArrayRoemische = new string[7] { "I", "V", "X", "L", "C", "D", "M" };
            for (int x = 0; x < 7; x++)
            {
                if (LetterNow == ArrayRoemische[x]) //!  = operand error ??
                    return true;
            }
            return false;
        }
        //Überprüfen ob 2 oder mehr zwischenzahlen nebeneinander 
        public static bool IsNoDouble(string GivenValue)
        {
            if (GivenValue.Contains("VV"))
                return false;
            if (GivenValue.Contains("LL"))
                return false;
            if (GivenValue.Contains("DD"))
                return false;
            return true;
        }
    }
    class ArabToRom
    {
        public static string Ausgabe(string Eingabe)
        {
            int Zwischenergebnis = Convert.ToInt32(Eingabe);
            string Buchstaben = "";
            while (Zwischenergebnis != 0)
            {

                Buchstaben += BuchstabeEinzeln(Convert.ToInt32(Zwischenergebnis));
                Zwischenergebnis -= Ausrechnen(Convert.ToInt32(Zwischenergebnis));
            }
            Buchstaben = Umwandlung(Buchstaben);
            return Buchstaben;
        }
        public static string Umwandlung(string s)
        {
            s = s.Replace("CCCC", "CD").Replace("XXXX", "XL").Replace("IIII", "IV");
            s = s.Replace("VIV", "IX").Replace("LXL", "XC").Replace("DCD", "CM");
            return s;
        }
        public static string BuchstabeEinzeln(int Eingabe)
        {
            if ((Eingabe / 1000) >= 1) return "M";
            else if ((Eingabe / 500) >= 1) return "D";
            else if ((Eingabe / 100) >= 1) return "C";
            else if ((Eingabe / 50) >= 1) return "L";
            else if ((Eingabe / 10) >= 1) return "X";
            else if ((Eingabe / 5) >= 1) return "V";
            else if ((Eingabe / 1) >= 1) return "I";
            else return "";
        }
        public static int Ausrechnen(int Eingabe)
        {
            if ((Eingabe / 1000) >= 1) return 1000;
            else if ((Eingabe / 500) >= 1) return 500;
            else if ((Eingabe / 100) >= 1) return 100;
            else if ((Eingabe / 50) >= 1) return 50;
            else if ((Eingabe / 10) >= 1) return 10;
            else if ((Eingabe / 5) >= 1) return 5;
            else if ((Eingabe / 1) >= 1) return 1;
            else return 0;
        }
    }
    class Action
    {
        public static void Go(string Wert)
        {
            Console.Clear();
            int int1 = 0;
            for (int i = 0; i < 4000; i++)
            {
                int1 = Convert.ToInt32(Wert);
                int1++;
                Wert = Convert.ToString(int1);
                Console.WriteLine("{0}".PadRight(5) + "{1}".PadLeft(5), i, ArabToRom.Ausgabe(Wert));
            }
        }
    }
}

Kommentare:

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

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

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.