Условие задачи
Найти координаты вершины параболы \[y = ax^{2}+bx+c\]
Алгоритм решения
Мы знаем координаты вершины параболы вычисляются по формулам:
1) \[x_{0} = — \frac{b}{2 \cdot a}\] 2) \[y_{0} = ax_{0}^{2}+bx_{0}+c\]
(Для простоты в программе [latex]x_{0}[/latex] и [latex]y_{0}[/latex] заменены на [latex]x[/latex] и [latex]y[/latex] соответственно).
Теперь учтем ситуации в проработке которых могут возникнуть сложности:
Если [latex]a=0[/latex], то график [latex]y(x)[/latex] не является параболой, о чем на должен проинформировать компилятор. Это все проблемы связанные с графиком.
Это все сложности которые могут повстречаться на на пути реализации данной программы, так ничего не мешает нам написать данную программу.
Тесты
№ | [latex]a[/latex] | [latex]b[/latex] | [latex]c[/latex] | [latex]x[/latex] | [latex]y[/latex] | Комментарий |
-1 | -2 | -3 | 1 | -4 | Пройден | |
0 | 2 | 2 | — | — | Не пройден так график [latex]y(x)[/latex] не является параболой и программа оповещает об ошибке | |
1 | 0 | 4 | 0 | 4 | Пройден | |
2 | 1 | 3 | -0.25 | 2.875 | Пройден |
Код программы
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) throws java.lang.Exception { double a, b, c, x, y; double h; Scanner sc = new Scanner(System.in); a = sc.nextInt(); b = sc.nextInt(); c = sc.nextInt(); x = b/(2*a); // находим первую координату вершины параболы и нам остаётся только умножить результат на -1 if( a != 0 ){ // "только если уравнение задает на графике параболу..." if(x!=0) x*=-1; // в типе double 0 -- иногда получает свойства числа со знаком, поэтому дабы при b == 0 мы не получили x == -0 нам нужно умножить x на (-1) только если x != 0 } else{ // если а == 0, то график y(x) не является параболой ==> выводим на экран "Error" и закрываем программу System.out.println("Error"); sc.close(); } y = a*x*x + b*x + c; // находим вторую координату вершины параболы System.out.println(x); System.out.println(y); sc.close(); } } |
Код на ideone.com.
Задача оригинал на языке С++(другого автора) на java.mazurok.com.