Комплексное число в консольном приложении: повторный запрос данных при недопустимом вводе - C#

Узнай цену своей работы

Формулировка задачи:

Знаете, задача на самом деле простая. Но замутнааяяя Понимаете, программу написала, всё работает отлично. Подправила где надо. Загвоздка вся в защите данных от ошибки в классе: т.е. требуется, в случае ввода с клавиатуры чего-либо, помимо числа, и первое число меньше или равное нулю, заново в том месте запустить запрос на ввод. Я так полагаю цикл нужен. Но с каким условием? Использовала try...catch, но кроме отлова ошибок и запуска новой консоли, да и закрытия старой, я так впихнуть и не смогла... Мозги закипели. Ведь вводить нужно действительную и мнимую часть два раза (для двух комплексных чисел). И если первое число задано нормально, а во втором что-то "накосячили", то не заново запускать программу, а то же место повторить и продолжить. Ни с кем посоветоваться не могу, очень нуждаюсь в вашей помощи...
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;
        }
 
    }
}
Ладно, допустим вместо try...catch вставим бесконечный while, но условие - наличие ошибки? Ошибку выловить надо, так? Знаний у меня на это не хватает На всякий пожарный вот код программы:
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);
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы