Найти недочеты в программе, которая определяет вид треугольника - C#
Формулировка задачи:
"Составить программу, которая определяла бы вид треугольника
(равносторонний, равнобедренный, разносторонний, прямоугольный, тупоугольный, остроугольный), если по данным трём отрезкам его можно построить."
При вводе в данную программу, скажем
2
2
1
Должно выполняться условие (Данный треугольник является равнобедренным и остроугольным), но пишет (Данный треугольник является равнобедренным и тупоугольным).
При вводе
2
1
2
Программа вообще не работает
Также при вводе таких чисел как
2
3
4
Программа тоже отказывается работать
Т.е с двумя условиями она работает некорректно
Укажите на ошибки пожалуйста! Уже мозги сломал. Может быть я где-то попутал | с || и & с && ?
Алсо, посоветуйте какие нибудь стоящие книги на тему "программирование с# с нуля"
/*1. Составить программу, которая определяла бы вид треугольника
(равносторонний, равнобедренный, разносторонний, прямоугольный, тупоугольный, остроугольный), если по данным трём отрезкам его можно построить.*/
Console.WriteLine("Введите стороны любого треугольника, чтобы определить его свойства");
// Вводим первую сторону треугольника
Console.WriteLine("Первая сторона равна:");
string s = Console.ReadLine();
int a = Convert.ToInt32(s);
// Вводим вторую сторону треугольника
Console.WriteLine("Вторая сторона равна:");
string d = Console.ReadLine();
int b = Convert.ToInt32(d);
//Вводим третью сторону треугольника
Console.WriteLine("Третья сторона равна:");
string f = Console.ReadLine();
int c = Convert.ToInt32(f);
//Вычисляем углы треугольника
double q = Math.Acos((b * b) + (c * c) - (a * a)) / (2 * b * c);
double w = Math.Acos((a * a) + (c * c) - (b * b)) / (2 * a * c);
double e = (180 - (q + w));
//------------------------------------------------------------------------------------------------------------
if ((a + b <= c) | (a + c <= b) | (b + c < a))
Console.WriteLine("Треугольник не существует");
//------------------------------------------------------------------------------------------------------------
else
if (a == b & a == c & c == b)
Console.WriteLine("Данный треугольник является равносторонним");
else
//------------------------------------------------------------------------------------------------------------
if ((a == b | a == c | b == c) & (q > 90 | w > 90 | e > 90))
Console.WriteLine("Данный треугольник является равнобедренным и тупоугольным");
else
//------------------------------------------------------------------------------------------------------------
if ((a == b | a == c | b == c) | (q < 90 & w < 90 & e < 90))
Console.WriteLine("Данный треугольник является равнобедренным и остроугольным");
else
//------------------------------------------------------------------------------------------------------------
if ((a * a) + (b * b) == (c * c) | (a * a) + (c * c) == (b * b) | (c * c) + (b * b) == (a * a))
Console.WriteLine("Данный треугольник является прямоугольным");
else
//------------------------------------------------------------------------------------------------------------
if ((a != b & a != c & b != c) & (q < 90) | w < 90 | e < 90))
Console.WriteLine("Данный треугольник является разносторонним и остроугольным");
else
//------------------------------------------------------------------------------------------------------------
if ((a != b & a != c & b != c) & (q > 90 | w > 90 | e > 90))
Console.WriteLine("Данный треугольник является разносторонним и тупоугольным");
else Console.WriteLine();
//------------------------------------------------------------------------------------------------------------
Console.ReadKey();Решение задачи: «Найти недочеты в программе, которая определяет вид треугольника»
textual
Листинг программы
using System;
namespace CyberforumApp
{
class Program
{
static void Main()
{
Console.WriteLine("Введите стороны любого треугольника, чтобы определить его свойства");
// Вводим первую сторону треугольника
Console.WriteLine("Первая сторона равна:");
int a = Convert.ToInt32(Console.ReadLine());
// Вводим вторую сторону треугольника
Console.WriteLine("Вторая сторона равна:");
int b = Convert.ToInt32(Console.ReadLine());
//Вводим третью сторону треугольника
Console.WriteLine("Третья сторона равна:");
int c = Convert.ToInt32(Console.ReadLine());
int alpha = b * b + c * c - a * a; // Величина пропорциональная косинусу угла, противолежащего стороне a.
int betha = a * a + c * c - b * b;
int gamma = a * a + b * b - c * c;
if (a + b <= c || a + c <= b || b + c <= a) Console.WriteLine("Треугольник не существует");
else
{
if (a == b && a == c && c == b) Console.WriteLine("Треугольник равносторонний(всегда остроугольный)");
else if (a == b || a == c || b == c)
{
Console.Write("Треугольник равнобедренный");
if (alpha == 0 || betha == 0 || gamma == 0) Console.WriteLine("(прямоугольный)");
else if (alpha < 0 || betha < 0 || gamma < 0) Console.WriteLine("(тупоугольный)");
else Console.WriteLine("(остроугольный)");
}
else
{
Console.Write("Треугольник разносторонний");
if (alpha == 0 || betha == 0 || gamma == 0) Console.WriteLine("(прямоугольный)");
else if (alpha < 0 || betha < 0 || gamma < 0) Console.WriteLine("(тупоугольный)");
else Console.WriteLine("(остроугольный)");
}
}
}
}
}