Найти точку пересечения прямой и оси абсцисс - PascalABC.NET

Узнай цену своей работы

Формулировка задачи:

программа которая на входе получает шесть чисел a, b, c, d, e, f, а выводит: если точки нет, то программа говорит, что такой точки не существует 1. точку пересечения прямой ax + by + c = 0 и оси абсцисс 2. точку пересечения прямой ax+ by + c = 0 и оси ординат 3. точку пересечения прямой dx + ey + f = 0 и оси абсцисс 4. точку пересечения прямой dx + ey + f = 0 и оси ординат 5. точку пересечения прямой ax + by + c = 0 и прямой dx + ey + f = 0
БОЛЬШОЕ ВСЕМ СПАСИБО УЖЕ СДЕЛАЛ САМ!

Решение задачи: «Найти точку пересечения прямой и оси абсцисс»

textual
Листинг программы
  1. uses graphABC;
  2. var cn:integer;
  3.     xn,xk,m:real;
  4. procedure peres(a1,b1,c1,a2,b2,c2:integer;var f:boolean;var x,y:real);
  5. begin
  6. if a1*b2-a2*b1=0 then f:=false
  7. else
  8.  begin
  9.   f:=true;
  10.   x:=(c2*b1-c1*b2)/(a1*b2-a2*b1);
  11.   y:=(a2*c1-a1*c2)/(a1*b2-a2*b1);
  12.  end;
  13. end;
  14. procedure grafik(a,b,c:integer;cl:Color);
  15. var x:real;
  16. begin
  17. pen.Color:=cl;
  18. if a=0 then line(0,cn-round(-c*m/b),window.Width,cn-round(-c*m/b))
  19. else if b=0 then line(cn+round(-c*m/a),0,cn+round(-c*m/a),window.Height)
  20. else
  21.  begin
  22.   x:=xn;  
  23.   while x<=xk do
  24.    begin
  25.     if x=xn then moveto(cn+round(x*m),cn-round((-a*x/b-c/b)*m))
  26.     else lineto(cn+round(x*m),cn-round((-a*x/b-c/b)*m));
  27.     x:=x+0.1;
  28.    end;
  29.  end;
  30. end;
  31. var a,b,c,d,e,f,i:integer;
  32.     t:boolean;
  33.     x,y:real;
  34.     sx,sy:string;
  35. begin
  36. repeat
  37. writeln('Введите кооффициенты прямой a,b,c, а и b одновременно не равные 0:');
  38. readln(a,b,c);
  39. until (a<>0)or(b<>0);
  40. repeat
  41. writeln('Введите кооффициенты прямой d,e,f, d и e одновременно не равные 0:');
  42. readln(d,e,f);
  43. until (d<>0)or(e<>0);
  44. window.Clear;
  45. setwindowsize(500,600);
  46. centerwindow;
  47. cn:=250;
  48. m:=220/10;
  49. xn:=-10;
  50. xk:=10;
  51. line(0,cn,500,cn);
  52. line(cn,0,cn,500);
  53. for i:=1 to 10 do
  54.  begin
  55.   line(cn-round(i*m),cn-3,cn-round(i*m),cn+3);
  56.   line(cn+round(i*m),cn-3,cn+round(i*m),cn+3);
  57.   line(cn-3,cn-round(i*m),cn+3,cn-round(i*m));
  58.   line(cn-3,cn+round(i*m),cn+3,cn+round(i*m));
  59.   textout(cn+round(i*m),cn+10,inttostr(i));
  60.   textout(cn-round(i*m),cn+10,inttostr(-i));
  61.   textout(cn-20,cn-round(i*m),inttostr(i));
  62.   textout(cn-20,cn+round(i*m),inttostr(-i));
  63.  end;
  64. grafik(a,b,c,clRed);
  65. grafik(d,e,f,clBlue);
  66. peres(a,b,c,0,1,0,t,x,y);
  67. if not t then textout(5,500,'Прямая ax+by+c не пересекает ось абцисс')
  68. else
  69.  begin
  70.   str(x:0:2,sx);
  71.   str(y:0:2,sy);
  72.   brush.Color:=clBlack;
  73.   circle(cn+round(x*m),cn,3);
  74.   brush.Style:=bsClear;
  75.   textout(5,500,'Пряиая ax+by+c пересекет ось абцисс в точке x='+sx+' y='+sy);
  76.  end;
  77. peres(a,b,c,1,0,0,t,x,y);
  78. if not t then textout(5,520,'Прямая ax+by+c не пересекает ось ординат')
  79. else
  80.  begin
  81.   str(x:0:2,sx);
  82.   str(y:0:2,sy);
  83.   brush.Color:=clBlack;
  84.   circle(cn,cn-round(y*m),3);
  85.   brush.Style:=bsClear;
  86.   textout(5,520,'Прямая ax+by+c пересекает ось ординат в точке x='+sx+' y='+sy);
  87.  end;
  88. peres(d,e,f,0,1,0,t,x,y);
  89. if not t then textout(5,540,'Прямая dx+ey+f не пересекает ось абцисс')
  90. else
  91.  begin
  92.   str(x:0:2,sx);
  93.   str(y:0:2,sy);
  94.   brush.Color:=clBlack;
  95.   circle(cn+round(x*m),cn,3);
  96.   brush.Style:=bsClear;
  97.   textout(5,540,'Пряиая dx+ey+f пересекет ось абцисс в точке x='+sx+' y='+sy);
  98.  end;
  99. peres(d,e,f,1,0,0,t,x,y);
  100. if not t then textout(5,560,'Прямая dx+ey+f не пересекает ось ординат')
  101. else
  102.  begin
  103.   str(x:0:2,sx);
  104.   str(y:0:2,sy);
  105.   brush.Color:=clBlack;
  106.   circle(cn,cn-round(y*m),3);
  107.   brush.Style:=bsClear;
  108.   textout(5,560,'Прямая dx+ey+f пересекает ось ординат в точке x='+sx+' y='+sy);
  109.  end;
  110. //при малых углах между прямыми точка пересечения уходит за экран
  111. peres(a,b,c,d,e,f,t,x,y);
  112. if not t then textout(5,580,'Прямые ax+by+c и dx+ey+f не пересекаются')
  113. else
  114.  begin
  115.   str(x:0:2,sx);
  116.   str(y:0:2,sy);
  117.   brush.Color:=clBlack;
  118.   circle(cn+round(x*m),cn-round(y*m),3);
  119.   brush.Style:=bsClear;
  120.   textout(5,580,'Прямые ax+by+c и dx+ey+f пересекаются в точке x='+sx+' y='+sy);
  121.  end;
  122.  
  123. end.

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

В этом коде используются две процедуры: peres и grafik.

  1. peres - это процедура, которая проверяет, пересекаются ли две прямые. Если они пересекаются, то возвращается значение true, иначе - false. Также в этой процедуре вычисляются координаты точки пересечения и они выводятся на экран.
  2. grafik - это процедура, которая рисует график прямой на экране. Вначале задаются начальные и конечные координаты для линии, а затем, используя циклы, рисуются множество точек на этой линии. В основной части кода сначала запрашиваются у пользователя коэффициенты для первой прямой (a, b, c). Затем, после проверки на неравенство нулю, запрашиваются коэффициенты для второй прямой (d, e, f). Затем на экране рисуются две прямые с указанными коэффициентами, и вызывается процедура peres для проверки пересечения этих прямых с осью абсцисс и осью ординат. Если пересечение найдено, то на экране отображается точка пересечения. В конце кода выполняется проверка на пересечение двух прямых. Если они не пересекаются, то выводится сообщение об этом. Если же пересечение найдено, то на экране отображается точка пересечения.

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


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

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

9   голосов , оценка 3.778 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы