Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ помогите!Задачка с координатами

Автор: Серый 15.04.2003 1:36

Помогите все кто сможет !особенно прошу админов саита! Задали курсовую задачку(это в десятом то классе >:() ну  в общем слушаите
Пусть дан круг радиусом r, с  диаметром в точке C ,с декартовыми координатами x© и y©  и дан квадрат со стороной a; верхний левый угол квадрата в точке x(P) и y(P), а его стороны параллельны осям координат. Написать программу вычисляющую кол-во точек с координатами типа integer находящихся внутри фигуры образованной пересечением круга и квадрата.
С клавы вводится радиус r; сторона квадрата a; точка C(x©;y©) и точка P(x(P);y(P)); при ограничениях
r(0..30); x©>50; y©<100; a[0..50]; x(P)>0; y(P)<100;
Помогите заранее ОГРОМНОЕ СПАСИБО!!!!!!!!!!! ;D :D

Автор: reill 15.04.2003 8:40

А что такое х(С) и х(Р) - как координаты точки могут зависить от самой точки ???
Читай инструкцию лучше ;D
Напиши дословно задание.
з.ы. если это оно и было - сочувствую, если тебе что-то и напишат то это будет такого же плана ;D

Автор: Серый 15.04.2003 16:26

нет по ходу это просто переменные типа у точки С (x;y) и у P(x;y) :-/ просто чтобы не путать x  c  x и y  c  y
а текст подлинный все как есть - бред, конечно ну это уже к нашим любимым учителям ;)

Автор: reill 16.04.2003 8:03

Воходит типа того:
Дан круг радиусом R , с  диаметром(может центром???) в точке C(х,у)   и дан квадрат со стороной a; верхний левый угол квадрата в точке Р(х,у), а его стороны параллельны осям координат(что вполне логично, это же квадрат!). Написать программу, вычисляющую кол-во точек, с координатами типа integer, находящихся внутри фигуры, образованной пересечением круга и квадрата.
С клавиатуры вводится радиус r; сторона квадрата a; точка C(x;y) и точка P(x,у); при ограничениях
0<r<30);
C(x,y):
x>50;
y<100;
0<a<50];
P(x,y):
x>0;
y<100;

Автор: Серый 16.04.2003 19:34

Да выходит так !!!! с центром в С.  Я это нарисовал,но нарисовать то несложно...может нужно наити площадь этого пересечения а через площадь уже как-то кол-во точек...единственное что пересечение получается всегда разное то один угол квадрата то другой получается в этом пересечении , блин закончу школу информатичку убью!!!!!!!!!

Автор: trminator 17.04.2003 18:32

Код
program tochki;
var cx, cy, px, py, r, a : integer;
   i, j, N              : integer;
   x, y                 : integer;
begin N:=0;
 Write('Square (x, y, a): '); ReadLn(px, py, a);
 Write('Round  (x, y, r): '); ReadLn(cx, cy, r);
 for i:=px to px+a do       {Тестируем все точки квадрата}
     for j:=py to py-a do
       if sqr(i-cx)+sqr(j-cy)<=sqr(r) {(x-a)^2+(y-B)^2=r^2 - ур-е окружности}
          then inc(N);
 WriteLn(N)
end.

===================
Что-то вроде этого...

Автор: Серый 17.04.2003 21:33

Пасибо !!!!!! вроде бы идет выводит какие-то цифры хотя это ли оно или нет  :) :-/ Ну да ладно ! единственное что это за уравнение окружности  что за  a  и  b ? Но все равно СПАСИБО!!!!!!!!!

Автор: reill 18.04.2003 15:42

Я тут тоже заканчиваю твою задачку.... ЖДи скоро скину свой вариант, прада он побольше)))

Автор: Vano 18.04.2003 21:27

Пасибо!!!!!!!!   только там должно быть (py+a)  так как  отсчет x y  в Pascal'е идет с левого верхнего угла то есть   y   к низу увеличивается

Автор: trminator 18.04.2003 21:42

Уравнение окружности привел "просто так" чтобы показать что я там проверяю, а и b там - координаты центра, в программе они - соответственно сх и су. А систему координат я брал не Паскалевскую, а "школьную", хотя тут кому как нравится smile.gif

Единственное - на больших значениях будет долго считать (рх может быть хоть миллион, если по условию), может, твоя курсовая в том и заключается чтобы сделать не такой тупой алгоритм? ;D

Автор: reill 20.04.2003 13:28

Вот мой вариант...

Код
program s;
uses crt,GRAPH;
var
x1,y1,x2,y2,d,m,i,j: integer;
r: 1..30;
a: 1..50;
k: longint;
g: string;
t: text;
function prov: boolean;
begin
if (x1<x2-r) and (x2-r <x1+a) and (y1< y2-1) and (y2-r<y1+a) then prov:=true
else prov:=false;
end;
begin
clrscr;
d:=0;
assign(t,'koordinaty.txt');
reset(t);
readln(t,r,a);
readln(t,x1,y1,x2,y2);
initgraph(d,m,'D:maditpbgi');
setcolor(14);
rectangle(x1,y1,x1+a,y1+a);
setfillstyle(1,14);
floodfill(x1+1,y1+1,14);
setcolor(5);
circle(x2,y2,r);
setfillstyle(1,5);
floodfill(x2,y2,5);
{if prov then
begin
outtextxy(10,300,'Koordinaty vvedeny pravilno!');}
for i:=y1 to y1+a do
for j:=x1 to x1+a do if getpixel(i,j)=5 then inc(k);
{end
else outtextxy(10,300,'Error ispravte koordinaty!!!');}
str(k,g);
outtextxy(30,320,g);
readln;
closegraph;
end.

С вариантои trminator некоторые ответы не сходятся по тестируй сам..
я данные через фаил вводил так просто удобней при отладки было, я думаю ты разберешся где исправить...

Автор: trminator 20.04.2003 21:02

Цитата
С вариантои trminator некоторые ответы не сходятся по тестируй сам..

хмм... reill, а ты границу учитываешь или нет? я - да, если ты не учитываешь то у нас ВСЕ будет различаться...

А вообще интересная прога, нарисовать все это да и посмотреть, сколько там точек. А для школьной курсовой (по своему опыту знаю) как раз побольше красивой графики нужно - в 10 классе получил 2 место только благодаря красивой презентации в PowerPoint, которая крутилась во время моего рассказа, сама курсовая была... слабовата, не курсовая, а так - реферат (тема - НЛП) , даже проги никакой не было. А в 11классе была классная прога - "Оптимизация выработки электроэнергии на <Мой-Город> ТЭЦ", но никаких красот - ввод того, что имеем и вывод того, как сделать, на Паскале, черный экран с белыми буковками. Естественно, им не понравилось (понимали бы что... )

Так что забабахай это на Дельфях, чтобы с 3D-графикой  :) и PowerPoint'ом  ;D и вперед - защищать  ;D ;D