Точки внутри эллипса. Для заданных [latex]a[/latex] и [latex]b[/latex] найти все точки с целочисленными координатами, находящиеся внутри эллипса [latex]\frac{x^2}{a^2}+\frac{y^2}{b^2}\leq 1[/latex]. Полезно, используя процедуру GoToXY в Паскале, вывести найденные координаты точек в форме эллипса.
a | b | Результат: |
1 | 1 | (-1,0);(0,-1);(0,0); (0,1);(1,0) |
2 | 1 | (-2,0);(-1,0);(0,-1);(0,0) (0,1);(1,0);(2,0) |
3 | 2 | (-3,0);(-2,-1);(-2,0);(-2,1); (-1,-1);(-1,0)(-1,1);(0,-2); (0,-1);(0,0);(0,1);(0,2); (1,-1);(1,0);(1,1); (2,-1);(2,0);(2,1);(3,0) |
Код программы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#include <iostream> #include <cmath> using namespace std; int main() { double a,b; //Описание переменных для хранения входных данных. scanf("%lf %lf", &a, &b); //Чтение из стандартного потока. for (int x =-a; x <= a; x++) for (int y = -b; y <= b; y++){ if ( (x*x)/(a*a)+(y*y)/(b*b) <= 1 ) printf("(%d,%d)\n", x, y); } return 0; } |
По условию задачи нужно для заданных [latex]a[/latex] и [latex]b[/latex] найти все точки с целочисленными координатами, находящиеся внутри эллипса.
Вводим переменные [latex]a[/latex] и [latex]b[/latex] с типом данных «float», а [latex]x[/latex] и [latex]y[/latex] с типом «int», так как нам нужны точки с целочисленными координатами.
Пусть [latex](x,y)\in Z^2[/latex] ,[latex] a>0[/latex], [latex] b>0[/latex] и [latex]\frac{x^2}{a^2}+\frac{y^2}{b^2}\leq 1[/latex] .
Тогда [latex]\frac{x^2}{a^2}+y\leq 1\rightarrow[/latex] [latex]0\leq \frac{y^2}{b^2}[/latex][latex]\leq 1-\frac{x^2}{a^2}\rightarrow[/latex][latex]0\leq 1-\frac{x^2}{a^2}\Leftrightarrow[/latex][latex]\frac{x^2}{a^2}\leq 1\Leftrightarrow [/latex][latex]x^2\leq a^2 \Leftrightarrow[/latex] [latex]-a\leq x\leq a\Leftrightarrow[/latex]
[latex][-a]\leq x\leq [a][/latex].
Аналогичным образом получаем, что обязано выполняться двойное неравенство [latex][-b]\leq x\leq [b].[/latex]
С геометрической точки зрения, полученные результат означает, что все точки эллипса, имеющие целочисленные координаты, лежат внутри прямоугольника [latex]\left \{ \right.(x,y)\in R^2|[-a]\leq x\leq [a]; [-b]\leq x\leq [b]\left. \right \}[/latex] .
Перебрав все целочисленные точки этого прямоугольника и отобрав те из них, которые удовлетворяют неравенству эллипса, решим задачу.
Для проверки работы программы можно воспользоваться объектом.
Код программы на Java:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import java.util.*; import java.lang.*; import java.io.*; class Ideone { public static void main (String[] args) { Scanner in = new Scanner(System.in); double a, b; a = in.nextDouble(); b = in.nextDouble(); for (int x =(int)-a; x <= a; x++){ for (int y =(int) -b; y <= b; y++){ if ( (x*x)/(a*a)+(y*y)/(b*b) <= 1 ){ System.out.println("("+x+";"+y+")"); } } } } } |
Программа работает правильно. Молодец!
Но есть недочёты в оформлении кода и отчёта.
— поправьте отступы в отчёте и на ideone.
— формулы в тексте должны оформляться как в математических текстах, а не как в программах. Например, дроби, степени, знаки неравенства и умножения . В задачнике формула выглядит так же?
— Все математические упоминания переменных должны оформляться в laTeX. Хоть и всего один символ, а уже формула.
Задача отредактирована.
Отлично! Зачтено
Сделайте отступы.
Исправил код.