Читайте также:
|
|
Разработать программу нахождения корней уравнения следующего вида: Ах2 + Вх + С = О. Коэффициенты уравнения задаются пользователем и отображаются на экране. Процесс решения запускается нажатием кнопки. Решение отображается на экране и содержит:
• вывод о количестве действительных корней или сообщение об их отсутствии;
• значения корней (показывать только найденные значения).
Вариантов решения данной задачи может быть много - в зависимости от умений и фантазии программиста. Но в любом случае надо учитывать простой факт: надо так организовать интерфейс пользователя, чтобы ему было максимально удобно и комфортно работать.
Попробуем разобраться с условием задачи. По форме записи - это квадратное уравнение. Однако, оно будет квадратным только в том случае, когда A не равно нулю. В противном случае оно превращается в обычное линейное: Вх + С = 0.
Алгоритмы решения квадратного и линейного уравнения различны. Так как в условии задачи ничего не сказано о возможных значениях коэффициентов, то значение A = 0 нужно считать допустимым. Значит, необходимо предусмотреть алгоритмы решения для двух видов уравнений. Для линейного уравнения имеем следующий алгоритм:
1. Для квадратного уравнения - чуточку сложнее:
Сначала вычисляется дискриминант по формуле: D = B2-4xC.
2. Далее возможны три случая:
• если D < 0, то действительных корней нет;
• если D = 0, то уравнение имеет два одинаковых корня, но принято говорить, что корень единственный, и вычисляется он по формуле:
• если D > 0, то уравнение имеет два различных корня, которые вычисляются по формулам:
С формулами разобрались. Теперь попробуем представить себе, как будет выглядеть окно программы. Для этого создадим проект с именем Задача4_ЛР8.
Создадим заголовок в виде объекта Label с текстом «Решение уравнения». Отобразим также само уравнение в виде Ах2 + Вх + С = О, (рис. 18). Разумеется, как текст это не пойдёт. Единственный объект, который нам здесь поможет - это объект pictureBox (картинка). Порядок действий примерно таков. Скопируем формулу в буфер обмена, откроем Paint, вставим из буфера обмена, сохраним это как файл. Перенесем с ToolBox компонент pictureBox на окно, а затем, используя свойство Image объекта pictureBoxl, визуально добавим файл с картинкой в объект.
Рис. 18. Окно задачи № 4
Для ввода коэффициентов используем компоненты Textbox. Договоримся, что это будут:
textBoxl - поле ввода A; textBox2 - поле B; textBox3 - поле C. Для вывода решения используем компоненты Label. Так же условимся, что это будут:
• labelll - значение дискриминанта;
• label5 - сообщение о количестве корней или их отсутствии;
• label8 - первый корень (или единственный корень);
• label9 - второй корень.
Будет в окне и единственная кнопка с текстом «Найти корни». Все остальные поясняющие надписи оформим через компонент Label. В общем, примерный вид (с учётом пожеланий выше) будет таким (см. рис. 18). Запустите программу. Убедитесь, что исходные данные набираются без проблем. Осталось «оживить» кнопку. Открываем обработчик события «нажатие на кнопку». Объявляем три вещественных переменных для коэффициентов: double a, b, c;
И ещё три: для дискриминанта и двух корней: double d, xl, x2;
Вычисляем значения коэффициентов по значениям в объектах Textbox.
a = Convert.ToDouble(textBoxl.Text);
b = Convert.ToDouble(textBox2.Text);
c = Convert.ToDouble(textBox3.Text).
Выясняем, какое у нас уравнение - ведь всё зависит от значения a.
if (a == 0) { }
else { }
В случае if у нас линейное уравнение, иначе - квадратное.
Решаем линейное уравнение. Мы можем воспользоваться формулой при условии, если знаменатель не равен нулю. Если же он ноль, то решения нет. Итак.
if (b==0)
{label5.Text = "решения нет"; label8.Text= "";}
else
{ x1 = (-c) /b; label8.Text=string.Format("{0,10:##.##}",x1);
label5.Text = "один корень";
}
Проверьте, как это работает. Не забудьте, что а = 0. И b тоже может быть нулём.
Решаем квадратное уравнение. Вычисляем дискриминант: d = b * b - 4 * a * c;
Рассматриваем первый случай:
if (d < 0)
{ label11.Text = "меньше нуля"; label5.Text = "корней нет";}
Проверьте, как это работает. Рассматриваем второй случай:
if (d == 0)
{label11.Text = "0"; label5.Text = "один корень";
x1 = (-b)/(2 * a); label8.Text = string.Format("{0,10:##.##}", x1);
}
Проверьте, как это работает.
Задание для самостоятельного выполнения
Самостоятельно реализуйте алгоритм для третьего случая.
Теперь займёмся исправлением ошибок и нелепостей. Очевидно, что всё работает нормально, если коэффициенты набраны корректно. А если какой-то не набран или вместо цифры - буква?
Задания для самостоятельного выполнения
А. Обеспечьте корректную работу программы в случае неправильного набора исходных данных.
Указания 1. Не надо проверять на корректность каждое значение. Обеспечьте контроль всех сразу, и если будет исключение, то
дайте об этом сообщение на экран «проверьте исходные данные» с последующим завершением метода-обработчика.
2. Для завершения метода используйте оператор return;
Б. Проверьте работу программы сразу по нескольким вариантам. Убедитесь, что при выполнении по вариантам 1 и 2, а также при решении линейного уравнения на экране остаются ненужные значения и тексты. Уберите ненужную информацию с экрана в каждом варианте, но не забудьте её восстановить для другого варианта.
Дата добавления: 2015-08-09; просмотров: 164 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Задание для самостоятельного выполнения | | | ЧАСТЬ 2. Выделение функций |