示例#1
0
        public Drob umnog(Drob drob2)

        {
            Drob drob3 = new Drob();

            drob3.up_str   = this.up_str * drob2.up_str;
            drob3.down_str = this.down_str * drob2.down_str;
            return(drob3);
        }
示例#2
0
        public Drob Plus(Drob drob2)
        {
            Drob drob3 = new Drob();

            drob3.up_str   = this.up_str * drob2.down_str + drob2.up_str * this.down_str;
            drob3.down_str = drob2.down_str * this.down_str;
            drob3.desyatki = drob3.up_str / drob3.down_str;
            if (drob3.up_str == 0)
            {
                drob3.up_str = 0; drob3.down_str = 0;
            }


            return(drob3);
        }
示例#3
0
            /// <summary>
            ///3.	*Описать класс дробей — рациональных чисел, являющихся отношением двух целых чисел. Предусмотреть методы сложения, вычитания, умножения и деления дробей.
            /// Написать программу, демонстрирующую все разработанные элементы класса.
            /// </summary>
            static void dz3(string first_name, string last_name)
            {
                /*double chislitel;
                 * int znamenatel;
                 * bool x;
                 * Console.Clear();
                 * Console.Title = ("задача 3 , числители знаменатели дроби");
                 * Drob drob1 = new Drob();
                 * Console.WriteLine($"Привет, сейчас мы будем складывать, умножать,делить, вычитать ДРОБИ" +
                 *  $"Введи числитель:");
                 * flag = int.TryParse(Console.ReadLine(), out drob1.up_str); // Защита от дурака // try parse то что я искал // out input записывает в input
                 * // drob1.up_str = 1;
                 * drob1.down_str = 1;
                 * Console.WriteLine($"complex1 = {chislitel.up_str}^ " +
                 *  $"| {drob1.down_str}down");*/
                bool flag_drob;

                Console.Clear();
                Console.Title = ("задача 3");
                Drob drob1 = new Drob();

                drob1.up_str = 1;
                Console.WriteLine($"Привет, сейчас мы будем складывать, умножать,делить, вычитать ДРОБИ ");
                Console.WriteLine($"Введи числитель:");
                flag_drob      = int.TryParse(Console.ReadLine(), out drob1.up_str);
                drob1.down_str = 1;
                int input_z = 0;

                // нужна проверка на ввод знаменатель !=0
                Console.WriteLine($"Введи знаменатель:");
                while (true)                                                   // Вечный цикл
                {
                    flag_drob = int.TryParse(Console.ReadLine(), out input_z); // Защита от дурака // try parse то что я искал // out input записывает в input / если аут сработает сообщит тру во флаг

                    while (!flag_drob)                                         // переворачиваем условие если тру то будет фалс
                    {
                        if (input_z != 0)                                      // делаем условие проверка на не равно нулю
                        {
                            drob1.down_str = input_z;                          // если условие выполнено, записываем введенное число в класс drob1.down_str
                        }
                        else                                                   // условие не выполнено, даем введенному значению 0 и не пытаемся trytoparse
                        {
                            input_z = 0;                                       // условие не выполнено, даем введенному значению 0 и не пытаемся trytoparse
                        }
                        Console.WriteLine("");
                        Console.WriteLine("Повторите ввод числа: ");               // Вывод сообщения. если пробел сообщить

                        flag_drob = int.TryParse(Console.ReadLine(), out input_z); // Защита от дурака // try parse то что я искал // out input записывает в input
                        break;
                    }

                    flag_drob = !false; // Избавляемся от бага. // запомни это  // баг когда вводим double
                    // score = score + into; // Прибавляем к сумме чисел новое число прошедшее условие проверки на + и нечет

                    drob1.down_str = input_z;
                    if (input_z != 0)
                    {
                        Console.SetCursorPosition(0, 3);
                        Console.ForegroundColor = ConsoleColor.Blue;
                        Console.WriteLine("ArgumentException(вы устранили конфликт - знаменатель не может быть равен 0) || на 0 делить нельзя"); // Вывод сообщения
                        Console.ForegroundColor = ConsoleColor.White;
                        break;
                    } // Выход из вечного цикла:
                    else if (input_z == 0)
                    {
                        Console.SetCursorPosition(0, 3);
                    }
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("ArgumentException(Знаменатель не может быть равен 0) || введите корректное значение: "); // Вывод сообщения. // Выход из вечного цикла:
                    Console.ForegroundColor = ConsoleColor.White;
                }

                /* Console.WriteLine($"Введи знаменатель:");
                 * flag_drob = int.TryParse(Console.ReadLine(), out drob1.down_str);
                 * /* if (input > 0 && input % 2 == 1) // делаем условие проверка на нечет и положительное
                 *   into = input; // если условие выполнено, записываем введенное число, дальше мы его сложим
                 * else
                 *   into = 0; // условие не выполнено, даем введенному значению 0 и не пытаемся trytoparse
                 * }*/
                Console.WriteLine($"chislitel  =_{drob1.up_str}_ | ");
                Console.WriteLine($"znamenatel = {drob1.down_str}  | ");
                Console.WriteLine($"");
                Console.WriteLine($"сразу сократим дробь = {drob1.up_str}/{drob1.down_str} до ");
                if (drob1.up_str > 0)
                {
                    Console.WriteLine($"сокращенная дробь = {drob1.up_str}/{drob1.down_str} ");
                    int chislitel  = Convert.ToInt32(drob1.up_str);
                    int znamenatel = Convert.ToInt32(drob1.down_str);
                    drob1.up_str   = chislitel / NOD(chislitel, znamenatel);
                    drob1.down_str = znamenatel / NOD(chislitel, znamenatel);
                }
                else if (drob1.up_str == 0)
                {
                    Console.WriteLine($"первое число 0, как изащренно ты ввел 0, надо же было додуматься {drob1.up_str} из {drob1.down_str} = 0");
                }
                Console.WriteLine($"");



                Console.WriteLine($"А сейчас введем вторую дробь ");

                Drob drob2 = new Drob();

                Console.WriteLine($"Привет, сейчас мы будем складывать, умножать,делить, вычитать ДРОБИ ");
                Console.WriteLine($"Введи числитель:");
                flag_drob = int.TryParse(Console.ReadLine(), out drob2.up_str);

                Console.WriteLine($"Введи знаменатель:");

                //проверка на не 0
                while (true)                                                   // Вечный цикл
                {
                    flag_drob = int.TryParse(Console.ReadLine(), out input_z); // Защита от дурака // try parse то что я искал // out input записывает в input

                    while (!flag_drob)
                    {
                        if (input_z != 0)             // делаем условие проверка на нечет и положительное
                        {
                            drob1.down_str = input_z; // если условие выполнено, записываем введенное число, дальше мы его сложим
                        }
                        else
                        {
                            input_z = 0; // условие не выполнено, даем введенному значению 0 и не пытаемся trytoparse
                        }
                        Console.WriteLine("");
                        Console.WriteLine("Повторите ввод числа: ");               // Вывод сообщения.Вывод сообщения. если пробел сообщить

                        flag_drob = int.TryParse(Console.ReadLine(), out input_z); // Защита от дурака // try parse то что я искал // out input записывает в input
                        break;
                    }

                    flag_drob = !false; // Избавляемся от бага. // запомни это  // баг когда вводим double
                    // score = score + into; // Прибавляем к сумме чисел новое число прошедшее условие проверки на + и нечет
                    drob2.down_str = input_z;
                    if (input_z != 0)
                    {
                        Console.SetCursorPosition(0, 11);
                        Console.ForegroundColor = ConsoleColor.Blue;
                        Console.WriteLine("ArgumentException(вы устранили конфликт - знаменатель не может быть равен 0) || на 0 делить нельзя"); // Вывод сообщения
                        Console.ForegroundColor = ConsoleColor.White;
                        break;
                    }// Выход из вечного цикла:
                    else if (input_z == 0)
                    {
                        Console.SetCursorPosition(0, 11);
                    }
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.WriteLine("ArgumentException(Знаменатель не может быть равен 0) || введите корректное значение: "); // Вывод сообщения. // Выход из вечного цикла:
                    Console.ForegroundColor = ConsoleColor.White;
                }
                // конец проверки

                // flag_drob = int.TryParse(Console.ReadLine(), out drob2.down_str);
                Console.WriteLine($"chislitel  =_{drob2.up_str}_ | ");
                Console.WriteLine($"znamenatel = {drob2.down_str}  | ");

                Console.WriteLine($"");
                Console.WriteLine($"сразу сократим дробь = {drob2.up_str}/{drob2.down_str} до ");
                if (drob2.up_str > 0)
                {
                    int chislitel_2  = Convert.ToInt32(drob2.up_str);
                    int znamenatel_2 = Convert.ToInt32(drob2.down_str);
                    drob2.up_str   = chislitel_2 / NOD(chislitel_2, znamenatel_2);
                    drob2.down_str = znamenatel_2 / NOD(chislitel_2, znamenatel_2);
                    Console.WriteLine($"сокращенная дробь = {drob2.up_str}/{drob2.down_str} ");
                }
                else if (drob2.up_str == 0)
                {
                    Console.WriteLine($"второе число 0, как изащренно ты ввел 0, надо же было додуматься {drob2.up_str} из {drob2.down_str} = 0");
                }
                Console.WriteLine($"");

                // начинаем операции они же методы сложения итд

                Drob result_plus = drob1.Plus(drob2); // перезапишем result_plus на уровне класса от значений которые мы передали в класс

                Console.WriteLine($"результат сложения числитель  = {drob1.up_str}  +  {drob2.up_str}  =  {result_plus.up_str}");
                Console.WriteLine($"результат сложения знаменател = {drob1.down_str}     {drob2.down_str}  =  {result_plus.down_str}  ||  {result_plus.up_str}/{result_plus.down_str}  || " +
                                  $" НОД числителя и знаменателя {NOD(result_plus.up_str, result_plus.down_str) } =  {result_plus.up_str / NOD(result_plus.up_str, result_plus.down_str)}/{result_plus.down_str / NOD(result_plus.up_str, result_plus.down_str)}  ");
                Console.WriteLine($"сокращенная дробь = {result_plus.up_str / NOD(result_plus.up_str, result_plus.down_str)}/{result_plus.down_str / NOD(result_plus.up_str, result_plus.down_str)}  ");
                double plus_up   = Convert.ToDouble(result_plus.up_str);
                double plus_down = Convert.ToDouble(result_plus.down_str);

                //Console.WriteLine($"результат сложения дробей в виде десятичной дроби = {result_plus.up_str} / {result_plus.down_str}  =  {result_plus.desyatki:f5}"); // так не считает // с инт округляет до ближайшего целого вниз
                Console.WriteLine($"результат сложения дробей в виде десятичной дроби = {plus_up} / {plus_down}  =  {plus_up / plus_down}");
                Console.WriteLine("НОД от числителя " + result_plus.up_str + " и знаменателя " + result_plus.down_str + " Получается = " + NOD(result_plus.up_str, result_plus.down_str));
                Console.WriteLine($"");

                // начинаем операции вычетания дробей
                ///
                /* тут начинается проблема когда числитель принимает 0 при вычетании*/
                Drob result_minus = drob1.minus(drob2); // создадим result_minus на основе  класса Drob

                Console.WriteLine($"результат вычетания числитель  = {drob1.up_str}  -  {drob2.up_str}  =  {result_minus.up_str}");
                Console.WriteLine($"результат вычетания знаменател = {drob1.down_str}     {drob2.down_str}  =  {result_minus.down_str}  ||  {result_minus.up_str}/{result_minus.down_str} ");
                Console.WriteLine($"сокращенная дробь = {result_minus.up_str / NOD(result_minus.up_str, result_minus.down_str)}/{result_minus.down_str / NOD(result_minus.up_str, result_minus.down_str)}  ");
                double minus_up   = Convert.ToDouble(result_minus.up_str);
                double minus_down = Convert.ToDouble(result_minus.down_str);

                Console.WriteLine($"результат вычетания дробей в виде десятичной дроби = {minus_up} / {minus_down}  =  {result_minus.desyatki} {minus_up / minus_down}");
                Console.WriteLine($"");

                // начинаем операции деления дробей

                Drob result_delen = drob1.del(drob2); // перезапишем resulrs он же result_minus

                Console.WriteLine($"результат деления числитель  = {drob1.up_str}  /  {drob2.up_str}  =  {result_delen.up_str}");
                Console.WriteLine($"результат деления знаменател = {drob1.down_str}     {drob2.down_str}  =  {result_delen.down_str}  ||  {result_delen.up_str}/{result_delen.down_str} ");
                Console.WriteLine($"сокращенная дробь = {result_delen.up_str / NOD(result_delen.up_str, result_delen.down_str)}/{result_delen.down_str / NOD(result_delen.up_str, result_delen.down_str)}  ");

                double delen_up   = Convert.ToDouble(result_delen.up_str);
                double delen_down = Convert.ToDouble(result_delen.down_str);

                Console.WriteLine($"результат деления дробей в виде десятичной дроби = {delen_up} / {delen_down}  =  {delen_up / delen_down}");
                Console.WriteLine($"");


                // начинаем операции умножения дробей

                Drob result_umnogenie = drob1.umnog(drob2);

                Console.WriteLine($"результат умножения числитель  = {drob1.up_str}  *  {drob2.up_str}  =  {result_umnogenie.up_str}");
                Console.WriteLine($"результат умножения знаменател = {drob1.down_str}     {drob2.down_str}  =  {result_umnogenie.down_str}  ||  {result_umnogenie.up_str}/{result_umnogenie.down_str} ");
                Console.WriteLine($"сокращенная дробь = {result_umnogenie.up_str / NOD(result_umnogenie.up_str, result_umnogenie.down_str)}/{result_umnogenie.down_str / NOD(result_umnogenie.up_str, result_umnogenie.down_str)}  ");
                //if (result_umnogenie.up_str > 0 && result_umnogenie.down_str > 0) {
                //    result_umnogenie.down_str = Convert.ToInt32(Math.Sqrt((Math.Pow(result_umnogenie.down_str, 2))));
                //    result_umnogenie.up_str = Convert.ToInt32(Math.Sqrt((Math.Pow(result_umnogenie.up_str, 2))));

                //        }
                double umnogenie_up   = Convert.ToDouble(result_umnogenie.up_str);
                double umnogenie_down = Convert.ToDouble(result_umnogenie.down_str);

                Console.WriteLine($"результат умножения дробей в виде десятичной дроби = {umnogenie_up} / {umnogenie_down}  =  {umnogenie_up / umnogenie_down}");
                Console.WriteLine($"");

                /*
                 * Console.WriteLine("Привет, сегодня мы попробуем вычеслить алгоритм Евклида. НОД - является наибольшим целым числом, которое может разделять два значения без остатка");
                 * Console.ReadKey();
                 * Console.SetCursorPosition(10, 15);
                 * Console.ForegroundColor = ConsoleColor.Blue;
                 * Console.Clear();
                 * Console.Write("Введи первое число:");
                 * int a = Convert.ToInt32(Console.ReadLine());
                 * Console.SetCursorPosition(10, 15);
                 * Console.ForegroundColor = ConsoleColor.Red;
                 * Console.Clear();
                 * Console.Write("Введи второе число:");
                 * int b = Convert.ToInt32(Console.ReadLine());
                 * Console.Clear();
                 * Console.SetCursorPosition(10, 15);
                 * Console.ForegroundColor = ConsoleColor.White;
                 * Console.WriteLine("НОД от первого числа " + a + " и второго числа " + b + " Получается = " + NOD(a, b)); // выводит на экран результат выполнения метода от переменных A и B
                 * Console.ReadKey();
                 */



                //CREDITS
                #region credits
                Console.SetCursorPosition(13, 39);
                Console.ForegroundColor = ConsoleColor.Blue;
                Console.WriteLine("Автор : " + first_name + " " + last_name);
                Console.SetCursorPosition(10, 41);
                Console.ForegroundColor = ConsoleColor.Blue;
                Console.WriteLine("THE FORCE BE WITH U... SEE YA LATER");
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("AND WITH THE FORCE... I WILL REDUCE FRACTURE ");
                Console.ForegroundColor = ConsoleColor.White;
                #endregion

                /*
                 *
                 * Complex_cl result = complex1.umojil(complex2); // перезапишем resulrs он же complex3
                 *
                 * Console.WriteLine($"complex3 = {result.re} + {result.im}i");
                 *
                 * Console.WriteLine($"({complex1.im} + {complex1.re}i) * ({complex2.im} + {complex2.re}i) = complex3 = {result.re} + {result.im}i");
                 * Console.WriteLine($"результат умножения комплексных чисел посредством класса = ({complex1.im} + {complex1.re}i) * ({complex2.im} + {complex2.re}i) = complex3 = {result.re} + {result.im}i");
                 * Console.WriteLine(result.ToString());*/
                Console.ReadKey();
                // в конец запутался но вроде реализовал формулу
            }
示例#4
0
        public Drob minus(Drob drob2)
        {
            //Drob drob3 = new Drob();
            ///* int up1 = this.up_str * drob2.down_str;
            // int up2 = drob2.up_str * this.down_str;
            // double up3 = up1 - up2;
            // drob2.up_str = Convert.ToInt32(up3);*/
            //if  (this.up_str == 0) { drob3.up_str = 0; drob3.down_str = 0; return this; }
            //else if (drob2.up_str == 0) { drob3.up_str = 0; drob3.down_str = 0; return drob2; }

            //else {
            //    drob3.up_str = ((this.up_str * drob2.down_str) - (drob2.up_str * this.down_str));
            //    drob3.down_str = drob2.down_str * this.down_str;
            //    if (drob3.up_str == 0) { drob3.up_str = drob3.up_str + 1; return drob3; }
            //    // решил проблему вычитания, если результат в числители получит 0, он поставит туда 1
            //    return drob3;
            //}

            Drob drob3 = new Drob();

            /* int up1 = this.up_str * drob2.down_str;
             * int up2 = drob2.up_str * this.down_str;
             * double up3 = up1 - up2;
             * drob2.up_str = Convert.ToInt32(up3);*/

            // проверим числители
            if (this.up_str == 0)
            {
                this.down_str  = 0; drob3.up_str = this.up_str + drob2.down_str;
                drob3.down_str = drob2.down_str;
            }

            //  else if (drob2.up_str == 0)
            //  {
            //      drob2.down_str = 0;
            //  drob3.up_str = this.up_str + drob2.down_str;
            //      drob3.down_str = this.down_str;
            //  }


            //  // все другие случаи
            else
            {
                drob3.up_str = ((this.up_str * drob2.down_str) - (drob2.up_str * this.down_str));
            }
            drob3.down_str = drob2.down_str * this.down_str;
            //drob3.desyatki = drob3.up_str / drob3.down_str;


            //  // проверим знаменатели

            //  if (drob3.down_str != 0) drob3.down_str = drob2.down_str * this.down_str;
            //// непомню зачем но вроде если в результате операций мы получим числитель 0 то вернем ему 1.
            //  else if (drob3.up_str == 0) { drob3.up_str = drob3.up_str + 1; }
            if (drob3.up_str == 0)
            {
                drob3.down_str = 0; drob3.up_str = 0;
            }
            else if (drob3.down_str == 0)
            {
                drob3.down_str = drob3.up_str + 1; drob3.desyatki = drob3.up_str / drob3.down_str;
            }

            return(drob3);
        }