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); }
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); }
/// <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(); // в конец запутался но вроде реализовал формулу }
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); }