Комплексное число в консольном приложении: повторный запрос данных при недопустимом вводе - 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);
}
}