Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2011, 16:35   #1
анна2709
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 19
Восклицание Окружность и прямая

нужна помощь
программа которая рисует окружность и прямую( начало и конец прямой вводиться с клавиатуры и центр окружности с радиусом тоже) после того как исполнилась программа и нарисовалась прямая и окружность должно вывестись сообщение есть общие точки: да или нет
помогите пожалуйста!!!!!!!!!!!!!!!!!!!!!!!
анна2709 вне форума Ответить с цитированием
Старый 26.11.2011, 03:05   #2
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Ань, хоть что-то ты сделала? или мысли какие-то есть?
Показывай, мы поможем доделать.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 27.11.2011, 14:25   #3
анна2709
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 19
По умолчанию

вот помогите найти ошибку
есть общие точки а говорит что нету
uses crt,graph;
type point=record
x,y:longint;
end;
const e=0.01;
var a,b,toint;
gd,gm,r:integer;
x,y,k,c,p,d:real;
s:string;
begin
repeat
writeln('‚ўҐ¤ЁвҐ Є®®а¤Ё**вл ЇҐаў®© в®зЄЁ:');
readln(a.x,a.y);
until(a.x>=10)and(a.x<=400)and(a.y> =10)and(a.y<=400);
repeat
writeln('‚ўҐ¤ЁвҐ Є®®а¤Ё**вл ўв®а®© в®зЄЁ:');
readln(b.x,b.y);
until(a.x>=10)and(b.x<=400)and(b.y> =10)and(b.y<=400)
and((a.x<>b.x)or(a.y<>b.y));
repeat
writeln('‚ўҐ¤ЁвҐ а*¤Ёгб ®Єаг¦*®бвЁ:');
readln(r);
until r in [10..150];
repeat
writeln('‚ўҐ¤ЁвҐ Є®®а¤Ё**вл жҐ*ва* ®Єаг¦*®бвЁ ®в ',r+10,' ¤® ',630-r,':');
readln(t.x,t.y);
until(t.x>=r+10)and(t.x<=630-r);
gd:=0;
initgraph(gd,gm,'');
gd:=detect;
line(a.x,a.y,b.x,b.y);
setcolor(12);
circle(t.x,t.y,r);
p:=abs(a.x*(b.y-t.y)+b.x*(t.y-a.y)+t.x*(b.y-a.y));
d:=p/sqrt(sqr(b.x-a.x)+sqr(b.y-a.y));
{if abs(d-r)<e then s:='Odna obshaya tochka'
else if d>r+e then s:='Obshih tochek net'
else if d<r-e then s:='Dve obshie tochki'; }
if d>r+e then s:='Obshih tochek net'
else if abs(d-r)<e then s:='Odna obshaya tochka'
else s:='Yest obshie tochki';
outtextXY(250,20,s);
readln
end.
анна2709 вне форума Ответить с цитированием
Старый 28.11.2011, 11:25   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Аня, я твою прогу отформатировал и исправил кодировку. Надеюсь, ты оценишь и сама будешь так делать )). А также заключать в теги code (кнопка #).
Код:
uses crt,graph;
type
  point=record
    x,y:longint;
  end;

const
  e=0.01;

var
  a,b,t: point;
  gd,gm,r: integer;
  x,y,k,c,p,d: real;
  s: string;

begin
  repeat
    writeln('Введите координаты первой точки:');
    readln(a.x,a.y);
  until(a.x>=10)and(a.x<=400)and(a.y>=10)and(a.y<=400);
  repeat
    writeln('Введите координаты второй точки:');
    readln(b.x,b.y);
  until (b.x>=10) and (b.x<=400) and (b.y>=10) and (b.y<=400) and ((a.x<>b.x)or(a.y<>b.y));  // тут была ошибочка
  repeat
    writeln('Введите радиус окружности:');
    readln(r);     // а почему радиус целый?
  until r in [10..150];
  repeat
    writeln('Введите координаты центра окружности от ',r+10,' до ',630-r,':');
    readln(t.x,t.y);
  until(t.x>=r+10)and(t.x<=630-r);
  gd:=0;
  gd:=detect;   // это строка должна быть перед InitGraph
  initgraph(gd,gm,'');
  line(a.x,a.y,b.x,b.y);
  setcolor(12);
  circle(t.x,t.y,r);
  p:=abs(a.x*(b.y-t.y)+b.x*(t.y-a.y)+t.x*(b.y-a.y));
  d:=p/sqrt(sqr(b.x-a.x)+sqr(b.y-a.y));
  {if abs(d-r)<e then s:='Odna obshaya tochka'
  else if d>r+e then s:='Obshih tochek net'
  else if d<r-e then s:='Dve obshie tochki'; }
  if d>r+e then s:='Obshih tochek net'
  else if abs(d-r)<e then s:='Odna obshaya tochka'
  else s:='Yest obshie tochki';
  outtextXY(250,20,s);
  readln
end.
Но я так и не смог понять, какой алгоритм ты используешь для нахождения количества точек. Можешь объяснить? Тогда, может, поможем.
Но я бы, думаю, стал делать иначе. Рассмотрел бы несколько случаев (одна точка внутри окр., две, ни одной) и тупо бы все сделал в лоб. А твой алгоритм, как гриться, одно из двух: либо супергениальный (хоть и с ошибкой где-то), либо совсем неверный..
Пояснишь?
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 28.11.2011, 16:00   #5
анна2709
Пользователь
 
Регистрация: 03.04.2011
Сообщений: 19
По умолчанию

он не верный
учитель всю обругал
как по другому делать не представляю, какую другую программу написать
анна2709 вне форума Ответить с цитированием
Старый 28.11.2011, 18:56   #6
Orakul89
Пользователь
 
Регистрация: 12.11.2009
Сообщений: 20
По умолчанию

Код:
p:=abs(a.x*(b.y-t.y)+b.x*(t.y-a.y)+t.x*(b.y-a.y));
замени на:
Код:
p:=abs(t.x*(a.y-b.y)+t.y*(b.x-a.x)+(a.x*b.y-b.x*a.y));
Так как формула растояния от точки до прямой выглядит примерно так, но у тебя отрезок...

Последний раз редактировалось Orakul89; 28.11.2011 в 19:30.
Orakul89 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Квадрат и прямая xXSilentXx Общие вопросы C/C++ 14 26.07.2011 19:24
Прямая и Окружность Ukeeler Помощь студентам 5 02.11.2010 17:50
Прямая VirusOfLove Помощь студентам 8 05.12.2009 09:37
Прямая линия serres Общие вопросы Delphi 1 04.11.2007 18:33
Прямая в пространстве Neuros1s Общие вопросы Delphi 12 29.06.2007 00:06