Честно говоря, когда я нашёл время поискать ошибки, которые могут возникать в программе, мне так хотелось спать, что я нашёл только 2 или 3 из них. Смотрим улучшенный код программы по решению квадратного уравнения:
using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("Введите первый коэффициент"); int a = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Введите второй коэффициент"); int b = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Введите третий коэффициент"); int c = Convert.ToInt32(Console.ReadLine()); if (a == 0) Ошибка 1 { Console.WriteLine("Уравнение не является квадратным:{0}*x+{1}=0", b,c ); if (b == 0) Ошибка 2 { Console.WriteLine("Извините товарищ, но это уже не уравнение!"); } else { double x = 0; x = -c / b; Console.WriteLine("x={0}", x); } } else { double d; d = b * b - 4 * a * c;
if (d < 0) { Console.WriteLine("Дискриминант отрицательный, корней нет");
} if (d == 0) { double x1 = b / (2 * a); Console.WriteLine("Дискриминант = 0, x = {0}", x1);
} if (d > 0) { double x1 = (-b + Math.Sqrt(Convert.ToDouble(d))) / (2 * a); double x2 = (-b - Math.Sqrt(Convert.ToDouble(d))) / (2 * a); Console.WriteLine("Дискриминант = {0}, x1 = {1}, x2 ={2}", d, x1, x2); } } } } }
В первом случае если коэффициент а равен 0, то в данной строчке double x2 = (-b - Math.Sqrt(Convert.ToDouble(d))) / (2 * a); мы делим на 0, что недопустимо. По-этому мы и вставляем код проверки, после которого либо выполняем код дальше, либо решаем уравнение другим, простым методом.
Ошибка 2 возникает если коэффициент а равен 0 и b равен 0. Тогда получается даже не уравнение, что мы и сообщаем пользователю.
Так же есть ошибка, если мы вместо цифр вобьём буквы в переменные a, b и c. Но такую ошибку надо отлавливать с помощью инструкции try-catch, её рассмотрим в следующем уроке.
|