
рис.1
Задача. Даны действительные числа [latex]x[/latex] и [latex]y[/latex]. Найти [latex]u[/latex], если
где [latex]D[/latex] — заштрихованная область на (рис.1)
[latex]x[/latex] | [latex]y[/latex] | [latex]u[/latex] | Комментарий |
5 | 3 | 22 | Точка не входит в D |
0.5 | 0.5 | 0 | Точка входит в D |
0 | 0 | 0 | Тoчка лежит на границе D |
Посмотрев на условие задачи нетрудно заметить что сложность может возникнуть только в определении положения точки относительно заштрихованной области. Нам заданы уравнения окружности и параболы, причем заштрихованная область лежит между вершиной параболы и нижней половиной окружности.
Вот те самые вышеупомянутые уравнения:
1)[latex]y=1-{ x }^{ 2 }[/latex]
2)[latex]{ x }^{ 2 }+{ (y-1) }^{ 2 }=1[/latex]
Второе уравнение можно привести к виду:
[latex]y=1\pm\sqrt{1-{x}^{2}} [/latex]
Заметим что указанная формула работает только при: [latex]{ x }\le 1[/latex](Важно не забыть упомянуть об этом в местах в участках кода которых мы будем её использовать).
Исходя из выше наведенного графика: нас интересует нижняя часть окружности, тогда на месте [latex]\pm[/latex] нужно поставить [latex]-[/latex]
Также график показывает нам что координата [latex]y[/latex] заданной нам точки должна быть:
[latex]1-\sqrt { 1-{ x }^{ 2 } }<y<1-{ x }^{ 2 }[/latex]
Нам осталось только написать условие, которое будет выполнять один код если указанная точка входит в заштрихованную область, и совершенно другой если данная точка в него не входит.
Сам код программы: http://ideone.com/SMyaWK
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <cstdlib> #include <iostream> #include <cmath> using namespace std; int main() { double x, y, u; cin >> x >> y; if( x<=1 && x>=-1 && y>=( 1-sqrt( 1-x*x ) ) && y<=(1-x*x) ) { u = x-y; }else{ u = x*y+7; } cout << u << endl; } |
Для отправки комментария необходимо войти на сайт.