Вывести все клетки, которые покрывает заданная окружность - Pascal
Формулировка задачи:
На клеточном поле дана окружность, с центром в середине клетки с координатами (xc; yc) и радиусом r. Нужно вывести координаты всех клеток, которые покрывает заданная окружность.
Пример
Ввод:
2 2 2
Вывод:
0 1
0 2
0 3
1 0
1 1
1 3
1 4
2 0
2 4
3 0
3 1
3 3
3 4
4 1
4 2
4 3
Решение задачи: «Вывести все клетки, которые покрывает заданная окружность»
textual
Листинг программы
var x1,y1,x2,y2,x3,y3,x4,y4,a,b,c,x,y:integer; begin repeat writeln('Введите координаты клеток с началом и концом отрезка'); readln(x1,y1,x2,y2); until(x1<>x2)or(y1<>y2);//чтобы точки не совпали //найдем левый и правый концы по Х if x1<x2 then begin x3:=x1; x4:=x2; end else begin x3:=x2; x4:=x1; end; //найдем нижний и верхний концы по Y if y1<y2 then begin y3:=y1; y4:=y2; end else begin y3:=y2; y4:=y1; end; //составим уравнение прямой ay+bx+c=0, вернее определим ее коэффициенты a,b,c a:=y2-y1; b:=x1-x2; c:=x1*(y1-y2)+y1*(x2-x1); for x:=x3 to x4 do for y:=y3 to y4 do //если противоположные вершины по разные стороны от отрезка if((a*(x-0.5)+b*(y+0.5)+c)*(a*(x+0.5)+b*(y-0.5)+c)<=0) or((a*(x-0.5)+b*(y-0.5)+c)*(a*(x+0.5)+b*(y+0.5)+c)<=0) then writeln(x,' ',y); end.
Объяснение кода листинга программы
- Объявление переменных:
x1, y1, x2, y2, x3, y3, x4, y4, a, b, c, x, y
- целочисленные переменные.
- Циклический ввод координат:
- Пользователю предлагается ввести координаты клеток с началом и концом отрезка до тех пор, пока точки не станут различными (это проверяется с помощью условия в repeat until).
- Нахождение границ отрезка:
- Определяются левая (x3) и правая (x4) границы отрезка по оси X с помощью условия, сравнивающего x1 и x2.
- Определяются нижняя (y3) и верхняя (y4) границы отрезка по оси Y с помощью условия, сравнивающего y1 и y2.
- Нахождение уравнения прямой:
- Коэффициенты a, b, c уравнения прямой ay+bx+c=0 определяются на основе введенных координат.
- Циклы для проверки клеток:
- Используются два вложенных цикла для прохождения по всем клеткам от x3 до x4 (по оси X) и от y3 до y4 (по оси Y).
- В каждой клетке проверяется, находится ли она по одну сторону отрезка или по другую при помощи условий и, если это так, выводится ее координата x и y.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д