Генерация исключения в своем классе при невозможности построить треугольник - C#
Формулировка задачи:
Задача:"Описать класс, представляющий треугольник. Предусмотреть методы для создания объектов, перемещения на плоскости, изменения размеров и вращения на заданный угол. Описать свойства для получения состояния объекта. При невозможности построения треугольника выбрасывается исключение."
Код:
Проблема: Нужно сгенерировать исключение которое будет обрабатывать ввод сторон которые будут лежать в одной точке или на одной линии. Я знаю что его нужно генерировать при помощи оператора throw, но не очень понимаю алгоритм его использования.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace LABA3
{
class Treug
{
double AB, BC, AC;
public double ab //св-во для обекта AB
{
get { return AB; }
set { AB = value; }
}
public double bc //св-во для обекта BC
{
get { return BC; }
set { BC = value; }
}
public double ac //св-во для обекта AC
{
get { return AC; }
set { AC = value; }
}
//конструктор класса Treug который инициализирует объекты
public Treug(double x1, double x2, double y1, double y2, double z1, double z2)
{
ab = Math.Sqrt(Math.Pow((y1 - x1), 2) + Math.Pow((y2 - x2), 2));
bc = Math.Sqrt(Math.Pow((y1 - z1), 2) + Math.Pow((y2 - z2), 2));
ac = Math.Sqrt(Math.Pow((z1 - x1), 2) + Math.Pow((z2 - x2), 2));
}
//метод получения поля ab
public double Vab()
{
return ab;
}
//метод получения поля bc
public double Vbc()
{
return bc;
}
//метод получения поля ac
public double Vac()
{
return ac;
}
//метод определения типа треугольника
public void Tip()
{
if ((ab == bc) && (ab == ac)) Console.WriteLine("Треугольник равносторонний");
else
{
if (((ab == bc) && (ab != ac)) || ((ab == ac) && (ab != bc)) || ((ac == bc) && (ac != ab)) || ((bc == ac) && (bc != ab))) Console.WriteLine("Треугольник равнобедренный");
else
{
if (((ab != bc) && (ab != ac)) || ((bc != ac) && (bc != ab)) || ((ac != bc) && (ac != ab))) Console.WriteLine("Треугольник разносторонний");
}
}
}
//метод перемещения треугольника на плоскости
public void Perem(double h, double x1, double x2, double y1, double y2, double z1, double z2)
{
x1 += h;
x2 += h;
y1 += h;
y2 += h;
z1 += h;
z2 += h;
Console.WriteLine("Координаты треугольника после перемещения на h={0}", h);
Console.WriteLine("A({0};{1});", x1, x2);
Console.WriteLine("B({0};{1});", y1, y2);
Console.WriteLine("C({0};{1});", z1, z2);
}
}
class Program
{
public static void Main(string[] args)
{
//задание треугольника
double h, x1, x2, y1, y2, z1, z2;
string buf;
try
{
Console.WriteLine("Введите координаты точки А");
Console.Write("Введите координату х:");
buf = Console.ReadLine();
x1 = Convert.ToDouble(buf);
Console.Write("Введите координату y:");
buf = Console.ReadLine();
x2 = Convert.ToDouble(buf);
Console.WriteLine("==Координаты точки А({0};{1})==", x1, x2);
Console.WriteLine();
Console.WriteLine("Введите координаты точки B");
Console.Write("Введите координату х:");
buf = Console.ReadLine();
y1 = Convert.ToDouble(buf);
Console.Write("Введите координату y:");
buf = Console.ReadLine();
y2 = Convert.ToDouble(buf);
Console.WriteLine("==Координаты точки B({0};{1})==", y1, y2);
Console.WriteLine();
Console.WriteLine("Введите координаты точки C");
Console.Write("Введите координату х:");
buf = Console.ReadLine();
z1 = Convert.ToDouble(buf);
Console.Write("Введите координату y:");
buf = Console.ReadLine();
z2 = Convert.ToDouble(buf);
Console.WriteLine("==Координаты точки C({0};{1})==", z1, z2);
Console.WriteLine();
//вычисление длинн сторон треугольника
Treug n = new Treug(x1, x2, y1, y2, z1, z2); //вызов конструктора
Console.WriteLine("Сторона AB={0:#,##}", n.Vab()); //вызов метода получения поля ab
Console.WriteLine("Сторона BC={0:#.##}", n.Vbc()); // вызов метода получения поля bc
Console.WriteLine("Сторона AC={0:#.##}", n.Vac()); // вызов метода получения поля ac
//определение типа треугольника
Console.Write("Тип треугольника ABC:"); n.Tip();//вызов метода определения типа
Console.WriteLine();
//перемещение треугольника
Console.Write("Введите на сколько переместить треугольник");
buf = Console.ReadLine();
h = Convert.ToDouble(buf);
Console.WriteLine();
Console.WriteLine("Координаты вершин треугольника до перемещения: ");
Console.WriteLine("A({0};{1});", x1, x2);
Console.WriteLine("B({0};{1});", y1, y2);
Console.WriteLine("C({0};{1});", z1, z2);
n.Perem(h, x1, x2, y1, y2, z1, z2);//вызов метода для перемещения треугольника
//изменение размера треугольника
Console.WriteLine("Введите на сколько изменить размер треугольник ");
}
catch (FormatException)
{
Console.WriteLine("Не верный формат ввода.Нужно вводить числа");
Console.ReadLine();
}
}
}
}Решение задачи: «Генерация исключения в своем классе при невозможности построить треугольник»
textual
Листинг программы
public new Type GetType()
{
const double epsilon = 1E-10;
double ab = AB, bc = BC, ac = AC;
if ((Math.Abs(ab - bc) < epsilon) && (Math.Abs(ab - ac) < epsilon))
return Type.Equilateral;
double hypot, k1, k2;
if (ab > bc)
{
hypot = ab;
k1 = bc;
}
else
{
hypot = bc;
k1 = ab;
}
if (ac > hypot)
{
k2 = hypot;
hypot = ac;
}
else
k2 = ac;
if (Math.Abs(k2 - k1) < epsilon)
return Type.Isosceles;
if (Math.Abs(hypot * hypot - (k1 * k1 + k2 * k2)) < epsilon)
return Type.Right;
return Type.Other;
}