Комплексное число в консольном приложении: повторный запрос данных при недопустимом вводе - C#
Формулировка задачи:
Знаете, задача на самом деле простая. Но замутнааяяя Понимаете, программу написала, всё работает отлично. Подправила где надо. Загвоздка вся в защите данных от ошибки в классе: т.е. требуется, в случае ввода с клавиатуры чего-либо, помимо числа, и первое число меньше или равное нулю, заново в том месте запустить запрос на ввод. Я так полагаю цикл нужен. Но с каким условием? Использовала try...catch, но кроме отлова ошибок и запуска новой консоли, да и закрытия старой, я так впихнуть и не смогла... Мозги закипели. Ведь вводить нужно действительную и мнимую часть два раза (для двух комплексных чисел). И если первое число задано нормально, а во втором что-то "накосячили", то не заново запускать программу, а то же место повторить и продолжить.
Ни с кем посоветоваться не могу, очень нуждаюсь в вашей помощи...
Ладно, допустим вместо try...catch вставим бесконечный while, но условие - наличие ошибки? Ошибку выловить надо, так? Знаний у меня на это не хватает
На всякий пожарный вот код программы:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; using System.Runtime.InteropServices; namespace ComplexNumber { class ComplexNumber { int p; double f; double a, b; Process process = new Process(); public int P { get{return p;} set { if (value > 0) value = p; else Console.WriteLine("Модуль числа должен быть положительным!"); } } public double F { get { return f; } set { value = f; } } public ComplexNumber(int mod, double arg) { try { P = mod; F = arg; } catch (Exception) { Console.WriteLine("Число введено некорректно!"); Process.Start("ComplexNumber.exe", "ComplexNumber\\bin\\Release"); //Environment.Exit(0); - закрывает консоль } } public ComplexNumber() { try { Console.WriteLine("Введите модуль комплексного числа"); p = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Введите коэфициент аргумента Pi комплексного числа"); f = Convert.ToDouble(Console.ReadLine()); } catch (Exception) { Console.WriteLine("Число введено некорректно!"); Process.Start("ComplexNumber.exe", "ComplexNumber\\bin\\Release"); //Environment.Exit(0); - закрывает консоль } } public void PokazForm () { Console.WriteLine("Показательная форма:"); Console.WriteLine(" "+f+"*Pi"); Console.WriteLine("z="+p+"+e"); } public void TrigForm () { Console.WriteLine("Тригонометрическая форма:"); Console.WriteLine("z="+p+"*(cos("+f+")+i*sin("+f+"))"); } public void AlgForm() { Console.WriteLine("Алгебраическая форма:"); a = p*Math.Cos(f); b = p*Math.Sin(f); Console.WriteLine("z=" + a + "+" + "i*(" + b + ")"); } //перегрузки public static ComplexNumber operator + (ComplexNumber ComNum1, ComplexNumber ComNum2) { ComplexNumber tmp = new ComplexNumber(0, 0); tmp.p = ComNum1.p + ComNum2.p; tmp.f = ComNum1.f + ComNum2.f; return tmp; } public static ComplexNumber operator - (ComplexNumber ComNum1, ComplexNumber ComNum2) { ComplexNumber tmp = new ComplexNumber(0, 0); tmp.p = ComNum1.p - ComNum2.p; tmp.f = ComNum1.f - ComNum2.f; return tmp; } public static ComplexNumber operator / (ComplexNumber ComNum1, ComplexNumber ComNum2) { ComplexNumber tmp = new ComplexNumber(0, 0); tmp.p = ComNum1.p / ComNum2.p; tmp.f = ComNum1.f / ComNum2.f; return tmp; } public static ComplexNumber operator * (ComplexNumber ComNum1, ComplexNumber ComNum2) { ComplexNumber tmp = new ComplexNumber(0, 0); tmp.p = ComNum1.p * ComNum2.p; tmp.f = ComNum1.f * ComNum2.f; return tmp; } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics; namespace ComplexNumber { class Program { static void Main(string[] args) { Console.WriteLine('\t' + "ПЕРВОЕ ЧИСЛО"); ComplexNumber ComNum1 = new ComplexNumber(); ComNum1.PokazForm(); ComNum1.TrigForm(); ComNum1.AlgForm(); Console.WriteLine('\t' + "ВТОРОЕ ЧИСЛО"); ComplexNumber ComNum2 = new ComplexNumber(); ComNum2.PokazForm(); ComNum2.TrigForm(); ComNum2.AlgForm(); ComplexNumber ComNum3 = new ComplexNumber(0, 0); ComNum3 = ComNum1 + ComNum2; Console.WriteLine('\t' + "Сумма:"); ComNum3.PokazForm(); ComplexNumber ComNum4 = new ComplexNumber(0, 0); ComNum4 = ComNum1 - ComNum2; Console.WriteLine('\t' + "Разность:"); ComNum4.PokazForm(); ComplexNumber ComNum5 = new ComplexNumber(0, 0); ComNum5 = ComNum1 / ComNum2; Console.WriteLine('\t' + "Деление:"); ComNum5.PokazForm(); ComplexNumber ComNum6 = new ComplexNumber(0, 0); ComNum6 = ComNum1 * ComNum2; Console.WriteLine('\t' + "Произведение:"); ComNum6.PokazForm(); Console.ReadLine(); } } }
Решение задачи: «Комплексное число в консольном приложении: повторный запрос данных при недопустимом вводе»
textual
Листинг программы
class Program { static void Main(string[] args) { var c = Complex.ReadFromConsole(); } } class Complex { float p; double f; public float P { get { return p; } set { value = p; } } public double F { get { return f; } set { value = f; } } public Complex(float ap, double af) { p = ap; f = af; } public static Complex ReadFromConsole() { String str; float p; do { str = Console.ReadLine(); } while (!float.TryParse(str, out p)); return new Complex(p, 18); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д