Вывести все клетки, которые покрывает заданная окружность - 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.

Объяснение кода листинга программы

  1. Объявление переменных:
    • x1, y1, x2, y2, x3, y3, x4, y4, a, b, c, x, y - целочисленные переменные.
  2. Циклический ввод координат:
    • Пользователю предлагается ввести координаты клеток с началом и концом отрезка до тех пор, пока точки не станут различными (это проверяется с помощью условия в repeat until).
  3. Нахождение границ отрезка:
    • Определяются левая (x3) и правая (x4) границы отрезка по оси X с помощью условия, сравнивающего x1 и x2.
    • Определяются нижняя (y3) и верхняя (y4) границы отрезка по оси Y с помощью условия, сравнивающего y1 и y2.
  4. Нахождение уравнения прямой:
    • Коэффициенты a, b, c уравнения прямой ay+bx+c=0 определяются на основе введенных координат.
  5. Циклы для проверки клеток:
    • Используются два вложенных цикла для прохождения по всем клеткам от x3 до x4 (по оси X) и от y3 до y4 (по оси Y).
    • В каждой клетке проверяется, находится ли она по одну сторону отрезка или по другую при помощи условий и, если это так, выводится ее координата x и y.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.857 из 5
Похожие ответы