Задача.
Пусть D — заштрихованная часть плоскости и пусть u определяется по x и y следующим образом :
[latex]u=\begin{cases} \sqrt{|x^{2}-1|} & \text{ if } (x, y)\epsilon D \\ x+y & \end{cases}[/latex]Даны действительные числа x и y. Определить u.
Тесты.
Ввод | Вывод | |
x | y | u |
0 | 0 | 1 |
0 | 0.5 | 1 |
-0.3 | 0.6 | 0.953939 |
0.3 | 0.6 | 0.953939 |
-0.2 | -0.1 | -0.3 |
0.8 | 0.6 | 1.4 |
0.5 | -0.5 | 0 |
1 2 3 4 5 6 7 8 9 10 11 |
#include <iostream> #include <cmath> using namespace std; int main() { double x,y; cin>>x>>y; cout<< (((x*x+y*y<=1)&&(y>=fabs(x))) ? sqrt(abs(x*x-1)):x+y) <<endl; return 0; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) { Scanner in = new Scanner(System.in); double x = in.nextDouble(),y = in.nextDouble(); System.out.println(((x * x + y * y <= 1) && (y >= Math.abs(x))) ? Math.sqrt(Math.abs(x * x - 1)) : x + y); } } |
Решение.
Через переменные x, y обозначим координаты точки.
Мы имеем 3 графика функций:
- [latex]y=-x[/latex]
- [latex]y=x[/latex]
- [latex]x^{2}+y^{2}=1[/latex]
Проверяем находится ли точка в заштрихованной области. Точка обязательно должна находиться над или на оси x.
Если точка принадлежит данной области то для расчёта u используем формулу:
[latex]\sqrt{|x^{2}-1|}[/latex]В противном случае формулу:
[latex]u=x+y[/latex]
Замените, пожалуйста, картинку в условии на формулу latex.
Зачем такие сложности?
Необходимо просто в одном условии записать, что y больше модуля x и сумма квадратов меньше единицы. Это можно сделать даже тернарным оператором внутри print.
А зачем Вы проверяете, что y>0? Ведь ось 0x никак фигуру не ограничивает. В итоге получилось громоздкое тернарное выражение. А вот прямая y=-x область таки ограничивает — а Вы нигде это не учитываете. Учтите это в программе (например, воспользовавшись подсказкой Игоря Евгеньевича » y больше модуля x » и добавьте соответствующий тест, например -0.4 0.2
Программа работает неверно. Конкретно: в точке -0.5 0.1 ответ не тот.
Зачтено на 4 из 5.
Используется и fabs(), и abs() без пояснения разницы и аргументации выбора.