Ввод данных в консоль - C#
Формулировка задачи:
Здравствуйте. имеется программа, половина кода взял из книжки, т.к. весь код не работает, тут значения сразу определены, я хочу что бы значение вводились через консоль, но ума не хватает сделать. Помогите реализовать это. Программа предназначена для работы с рациональными числами.
Вот то что у меня получилось
оригинальный код(из книжки).txt
книжка.pdf
using System; using System.Collections.Generic; using System.Linq; using System.Text; class Fraction { int sign; // знак дроби (+ или -) int intPart; // целая часть дроби int numerator; // числитель дроби int denominator; // знаменатель дроби // метод преобразования дроби в смешанный вид void GetMixedView() { GetIntPart(); // выделение целой части числа Cancellation(); // сокращение дроби } // метод сокращения дроби void Cancellation() { if (numerator != 0) { int m = denominator, n = numerator, ost = m % n; // вычисление НОД(числителя, знаменателя) // алгоритмом Евклида while (ost != 0) { m = n; n = ost; ost = m % n; } int nod = n; if (nod != 1) { numerator /= nod; denominator /= nod; } } } // метод выделения целой части дроби void GetIntPart() { if (numerator >= denominator) { intPart += (numerator / denominator); numerator %= denominator; } } // конструктор без параметров public Fraction() { intPart = 0; numerator = 0; denominator = 1; sign = 1; } // конструктор c параметрами public Fraction(int n, int d, int i = 0, int s = 1) { intPart = i; numerator = n; denominator = d; sign = s; GetMixedView(); } // деструктор ~Fraction() { Console.WriteLine("Дробь " + this + " уничтожена."); } // метод сложения двух дробей static public Fraction operator +(Fraction ob1, Fraction ob2) { Fraction res = new Fraction(); res.numerator = ob1.sign * (ob1.intPart * ob1.denominator + ob1.numerator) * ob2.denominator + ob2.sign * (ob2.intPart * ob2.denominator + ob2.numerator) * ob1.denominator; res.denominator = ob1.denominator * ob2.denominator; if (res.numerator < 0) { res.numerator *= -1; res.sign = -1; } res.GetMixedView(); return res; } // метод сложения дроби с целым числом static public Fraction operator +(Fraction ob1, int a) { // если к дроби прибавляется число, равное 0, // результат совпадает с операндом-дробью if (a == 0) return new Fraction(ob1.numerator, ob1.denominator, ob1.intPart, ob1.sign); // создание новой дроби ob2 = a Fraction ob2 = new Fraction(0, 1, Math.Abs(a), a / Math.Abs(a)); Fraction res = ob1 + ob2; //сложение двух дробей return res; } // метод сложения целого числа и дроби static public Fraction operator +(int a, Fraction ob1) { // если к дроби прибавляется число, равное 0, // результат совпадает с операндом-дробью if (a == 0) return new Fraction(ob1.numerator, ob1.denominator, ob1.intPart, ob1.sign); // создание новой дроби ob2 = a Fraction ob2 = new Fraction(0, 1, Math.Abs(a), a / Math.Abs(a)); Fraction res = ob1 + ob2; //сложение двух дробей return res; } // метод изменение знака дроби на противоположный // static public Fraction operator - //тут должна быть перегрузка -, но я ее убрал, чтобы код был по меньше // метод умножения двух дробей public static Fraction Parse(string str) { int intPart, numerator, denominator, sign; // разделение строки на подстроки // с помощью разделителя-пробела string [] strs=str.Split(' '); string[] strs1; Fraction res; if (strs.Length == 1) { // в строке не было найдено пробелов // производим разделение строки по символу ‘/’ strs1 = str.Split('/'); if (strs1.Length == 1) { // число задано в виде только целой части // выделяем целую часть intPart = int.Parse(strs1[0]); // в зависимости от значения целой части, // формируем новую дробь if (intPart!=0) res = new Fraction(0, 1, Math.Abs(intPart), intPart / Math.Abs(intPart)); else res = new Fraction(0, 1, Math.Abs(intPart), 1); return res; } else { // число задано в виде только дробной части // выделяем отдельно числитель и знаменатель numerator = int.Parse(strs1[0]); denominator = int.Parse(strs1[1]); sign = 1; // определяем знак числа по знаку числителя if (numerator < 0) { numerator = -numerator; sign = -1; } // формируем новую дробь и приводим ее // к несократимому виду res = new Fraction(numerator, denominator, 0, sign); res.GetMixedView(); return res; } } // дробь задана в смешанном виде // отделяем дробную часть по разделителю ‘/’ strs1 = strs[1].Split('/'); intPart = int.Parse(strs[0]); // определяем знак числа по знаку целой части if (intPart < 0) { intPart = -intPart; sign = -1; } else sign = 1; numerator = int.Parse(strs1[0]); denominator = int.Parse(strs1[1]); // формируем новую дробь и приводим ее // к несократимому виду res = new Fraction(numerator, denominator, intPart, sign); res.GetMixedView(); return res; } // метод получения строкового представления дроби – оператор // преобразования в символьную строку public static implicit operator string(Fraction ob) { string res = ""; // знак числа выводится, только если число отрицательно if (ob.sign < 0) res = res + "-"; // если целая часть не равна 0, выводим ее if (ob.intPart != 0) res = res + ob.intPart; // дробная часть печатается, если числитель не равен 0 if (ob.numerator != 0) res = res + " " + ob.numerator + "/" + ob.denominator; // если и целая часть и дробная часть равны 0, // то число равно 0 if (ob.intPart == 0 && ob.numerator == 0) res = "0"; return res; } } class Program { static void Main(string[] args) { Fraction r1 = new Fraction(2, 5, 0, 1); Fraction r2 = new Fraction(3, 5, 0, 1); Fraction c; int m = -4; c = r1 + m; /*Console.WriteLine("Введите значение с.(числ, знамен, целое, знак."); c = Fraction.Parse(Console.ReadLine()); Console.WriteLine("с =" + c);*/ Console.WriteLine("r1 = " + r1); Console.WriteLine("r1 = "+ m); Console.WriteLine("r1 + r2 = " + c); Console.ReadLine(); } }
Решение задачи: «Ввод данных в консоль»
textual
Листинг программы
Fraction r2 = new Fraction(++i, 5, 0, 1);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д