コード例 #1
0
// Функция возвращает число прописью с учетом рода единицы измерения
        public static string NumberToString(long value, WordGender gender)
        {
// version 2
// 15.11.02 - updated
// if (value <= 0)
            if (value < 0)
            {
// (end) 15.11.02 - updated
                return("");
            }
// version 2
// 15.11.02 - added
            if (value == 0)
            {
                return(number0);
            }
// (end) 15.11.02 - added
            return(TernaryToString(value, 5) +
                   TernaryToString(value, 4) +
                   TernaryToString(value, 3) +
                   TernaryToString(value, 2) +
                   TernaryToString(value, 1) +
                   TernaryToString(value, gender));
// (end) 15.11.02 - updated
        }
コード例 #2
0
ファイル: SysMoney.cs プロジェクト: ewgeny911/FBA
        ///Функция преобразования 3-значного числа, заданного в виде строки,
        ///с учетом рода (мужской, женский или средний).
        ///Род учитывается для корректного формирования концовки:
        ///"один" (рубль) или "одна" (тысяча)
        private static string TernaryToString(long ternary, WordGender gender)
        {
            string s = "";

            //учитываются только последние 3 разряда, т.е. 0..999
            long t      = ternary % 1000;
            int  digit2 = (int)(t / 100);
            int  digit1 = (int)((t % 100) / 10);
            int  digit0 = (int)(t % 10);

            //сотни
            if (digit2 > 0)
            {
                s = number100_900[digit2 - 1] + " ";
            }
            if (digit1 > 1)
            {
                s += number20_90[digit1 - 2] + " ";
                if (digit0 >= 3)
                {
                    s += number3_9[digit0 - 3] + " ";
                }
                else if (digit0 > 0)
                {
                    //s += number1_2[digit0 - 1, (int) gender] + " ";
                    s += number1_2[(int)gender, digit0 - 1] + " ";
                }
            }
            else if (digit1 == 1)
            {
                s += number10_19[digit0] + " ";
            }
            else
            {
                if (digit0 >= 3)
                {
                    s += number3_9[digit0 - 3] + " ";
                }
                else if (digit0 > 0)
                {
                    //s += number1_2[digit0 - 1, (int) gender] + " ";
                    s += number1_2[(int)gender, digit0 - 1] + " ";
                }
                //!!! Чтобы писАл "нуль" раскоментировать следующие 2 строки :

                /*else
                 *      s += number0 + " ";*/
            }
            return(s.TrimEnd());
        }
コード例 #3
0
ファイル: SysMoney.cs プロジェクト: ewgeny911/FBA
 ///Функция возвращает число прописью с учетом рода единицы измерения
 public static string NumberToString(long value, WordGender gender)
 {
     if (value <= 0)
     {
         return("");
     }
     else
     {
         return(TernaryToString(value, 5) +
                TernaryToString(value, 4) +
                TernaryToString(value, 3) +
                TernaryToString(value, 2) +
                TernaryToString(value, 1) +
                TernaryToString(value, gender));
     }
 }
コード例 #4
0
ファイル: Verb.cs プロジェクト: Optifun/Compilators
 public string GetVerb(WordGender gen, WordTime time)
 {
     return((time == WordTime.Future) ? "с" : "" + WordBase + Finalizes[(int)gen, (int)time]);
 }
コード例 #5
0
ファイル: Word.cs プロジェクト: jacklandrin/GermanWords
 public static string GenderToString(WordGender gender)
 {
     switch (gender)
     {
         case WordGender.Masculine:
             return "der";
         case WordGender.Feminine:
             return "die";
         case WordGender.Neuter:
             return "das";
         case WordGender.MasculineOrNeuter:
             return "der/das";
         case WordGender.None:
             return "";
         default:
             return "";
     }
 }
コード例 #6
0
ファイル: Word.cs プロジェクト: jacklandrin/GermanWords
 public Noun(int wordId, string word, string translation, WordGender gender, string pluralForm, string genitivForm)
     : base(wordId, WordType.Noun, word, translation)
 {
     this.gender = gender;
     this.pluralForm = pluralForm;
     this.genitivForm = genitivForm;
 }
コード例 #7
0
ファイル: Generator.cs プロジェクト: Optifun/Compilators
        /// <summary>
        /// Генерирует предложение
        /// </summary>
        /// <param name="pattern">Структура предложения</param>
        /// <returns>Предложение</returns>
        public static string Generate(string pattern)
        {
            List <Word> Unterminates = GetUnterminates(pattern.Split(" ".ToArray(), StringSplitOptions.RemoveEmptyEntries));
            bool        solved       = false;
            List <Word> Sentence     = Unterminates;

            while (!solved)
            {
                solved = true;
                List <Word> newSentence = new List <Word>();
                newSentence.Add(Dot);
                for (int i = Sentence.Count - 1; i >= 0; i--)
                {
                    if (Sentence[i].Type == WordType.Unterminate)
                    {
                        solved = false;
                        var subwords = SelectPath(Sentence[i] as UnTerminateWord);
                        for (int k = 0; k < subwords.Count; k++)
                        {
                            if (subwords[k].Type == WordType.Terminate)
                            {
                                ((TerminateWord)subwords[k]).SpellPart = ((UnTerminateWord)Sentence[i]).SpellPart;
                            }
                        }

                        newSentence.InsertRange(0, subwords);
                    }
                    else if (Sentence[i] != Dot)
                    {
                        newSentence.Insert(0, Sentence[i]);
                    }
                }

                if (!solved)
                {
                    Sentence = newSentence;
                }
            }

            var           TSentence = Sentence.Select(word => word as TerminateWord).ToList();
            StringBuilder builder   = new StringBuilder();
            WordTime      time      = (WordTime)Randomize(0, 2);

            for (int i = 0; i < TSentence.Count; i++)
            {
                TerminateWord tword   = TSentence[i];
                string        wordStr = "";
                switch (tword.SentencePart)
                {
                case Terminate.Существительное:
                    wordStr = (tword as Noun).GetNoun();
                    break;

                case Terminate.Глагол:
                {
                    var        verb = (tword as Verb);
                    var        noun = TSentence.First(word => word.SentencePart == Terminate.Существительное);
                    WordGender gen  = (noun as Noun).Gender;
                    gen     = (noun.SpellPart == UnTerminate.Перечисление) ? WordGender.They : gen;
                    wordStr = verb.GetVerb(gen, time);
                    break;
                }

                case Terminate.Прилагательное:
                {
                    var        adj  = (tword as Adjective);
                    var        noun = TSentence.First(word => word.SentencePart == Terminate.Существительное);
                    WordGender gen  = (noun as Noun).Gender;
                    gen     = (noun.SpellPart == UnTerminate.Перечисление) ? WordGender.They : gen;
                    wordStr = adj.GetAdjective(gen);
                    break;
                }

                case Terminate.Предлог:
                {
                    wordStr = (tword as Pretext).Name;
                    break;
                }

                case Terminate.Союз:
                {
                    wordStr = (tword as Union).Name;
                    break;
                }

                default:
                    break;
                }
                wordStr = (i > 0) ? wordStr : wordStr.First().ToString().ToUpper() + wordStr.Substring(1);
                wordStr = (tword == Dot || tword == Comma || i == 0) ? wordStr : " " + wordStr;
                builder.Append(wordStr);
            }
            return(builder.ToString());
        }
コード例 #8
0
ファイル: Adjective.cs プロジェクト: Optifun/Compilators
 public string GetAdjective(WordGender gen)
 {
     return(WordBase + Finalizes[(int)gen]);
 }
コード例 #9
0
// Функция преобразования 3-значного числа, заданного в виде строки,
// с учетом рода (мужской, женский или средний).
// Род учитывается для корректного формирования концовки:
// "один" (рубль) или "одна" (тысяча)
// version 2
// 15.11.02 - updated
        private static string TernaryToString(long ternary, WordGender gender)
// private static string TernaryToString(int ternary, WordGender gender)
// (end) 15.11.02 - updated
        {
            var s = "";
// version 2
// 15.11.02 - updated
// учитываются только последние 3 разряда, т.е. 0..999
//long t = ternary % 1000;
//int digit2 = (int) (t / 100);
//int digit1 = (int) ((t % 100) / 10);
//int digit0 = (int) (t % 10);
            var digit2 = ternary / 100;
            var digit1 = (ternary % 100) / 10;
            var digit0 = ternary % 10;

// (end) 15.11.02 - updated
// сотни
            while (digit2 >= 10)
            {
                digit2 %= 10;
            }
            if (digit2 > 0)
            {
                s = number100_900[digit2 - 1] + " ";
            }
            if (digit1 > 1)
            {
                s += number20_90[digit1 - 2] + " ";
                if (digit0 >= 3)
                {
                    s += number3_9[digit0 - 3] + " ";
                }
                else
                {
                    if (digit0 == 1)
                    {
                        s += number1[(int)gender] + " ";
                    }
                    if (digit0 == 2)
                    {
                        s += number2[(int)gender] + " ";
                    }
                }
            }
            else if (digit1 == 1)
            {
                s += number10_19[digit0] + " ";
            }
            else
            {
                if (digit0 >= 3)
                {
                    s += number3_9[digit0 - 3] + " ";
                }
                else if (digit0 > 0)
                {
                    if (digit0 == 1)
                    {
                        s += number1[(int)gender] + " ";
                    }
                    if (digit0 == 2)
                    {
                        s += number2[(int)gender] + " ";
                    }
                }
            }
            return(s.TrimEnd());
        }
コード例 #10
0
ファイル: Noun.cs プロジェクト: Optifun/Compilators
 public Noun(string wordBase, WordGender gen) : base(wordBase, Terminate.Существительное)
 {
     Gender = gen;
 }