Найти точку пересечения прямой и оси абсцисс - 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
Листинг программы
uses graphABC;
var cn:integer;
    xn,xk,m:real;
procedure peres(a1,b1,c1,a2,b2,c2:integer;var f:boolean;var x,y:real);
begin
if a1*b2-a2*b1=0 then f:=false
else
 begin
  f:=true;
  x:=(c2*b1-c1*b2)/(a1*b2-a2*b1);
  y:=(a2*c1-a1*c2)/(a1*b2-a2*b1);
 end;
end; 
procedure grafik(a,b,c:integer;cl:Color);
var x:real;
begin
pen.Color:=cl;
if a=0 then line(0,cn-round(-c*m/b),window.Width,cn-round(-c*m/b))
else if b=0 then line(cn+round(-c*m/a),0,cn+round(-c*m/a),window.Height)
else
 begin
  x:=xn;  
  while x<=xk do
   begin
    if x=xn then moveto(cn+round(x*m),cn-round((-a*x/b-c/b)*m))
    else lineto(cn+round(x*m),cn-round((-a*x/b-c/b)*m));
    x:=x+0.1;
   end; 
 end;
end; 
var a,b,c,d,e,f,i:integer;
    t:boolean;
    x,y:real;
    sx,sy:string;
begin
repeat
writeln('Введите кооффициенты прямой a,b,c, а и b одновременно не равные 0:');
readln(a,b,c);
until (a<>0)or(b<>0);
repeat
writeln('Введите кооффициенты прямой d,e,f, d и e одновременно не равные 0:');
readln(d,e,f);
until (d<>0)or(e<>0);
window.Clear; 
setwindowsize(500,600);
centerwindow;
cn:=250;
m:=220/10;
xn:=-10;
xk:=10;
line(0,cn,500,cn);
line(cn,0,cn,500);
for i:=1 to 10 do
 begin
  line(cn-round(i*m),cn-3,cn-round(i*m),cn+3);
  line(cn+round(i*m),cn-3,cn+round(i*m),cn+3);
  line(cn-3,cn-round(i*m),cn+3,cn-round(i*m));
  line(cn-3,cn+round(i*m),cn+3,cn+round(i*m));
  textout(cn+round(i*m),cn+10,inttostr(i));
  textout(cn-round(i*m),cn+10,inttostr(-i));
  textout(cn-20,cn-round(i*m),inttostr(i));
  textout(cn-20,cn+round(i*m),inttostr(-i));
 end; 
grafik(a,b,c,clRed);
grafik(d,e,f,clBlue);
peres(a,b,c,0,1,0,t,x,y);
if not t then textout(5,500,'Прямая ax+by+c не пересекает ось абцисс')
else 
 begin
  str(x:0:2,sx);
  str(y:0:2,sy);
  brush.Color:=clBlack;
  circle(cn+round(x*m),cn,3);
  brush.Style:=bsClear;
  textout(5,500,'Пряиая ax+by+c пересекет ось абцисс в точке x='+sx+' y='+sy);
 end; 
peres(a,b,c,1,0,0,t,x,y); 
if not t then textout(5,520,'Прямая ax+by+c не пересекает ось ординат')
else 
 begin
  str(x:0:2,sx);
  str(y:0:2,sy);
  brush.Color:=clBlack;
  circle(cn,cn-round(y*m),3);
  brush.Style:=bsClear;
  textout(5,520,'Прямая ax+by+c пересекает ось ординат в точке x='+sx+' y='+sy);
 end; 
peres(d,e,f,0,1,0,t,x,y);
if not t then textout(5,540,'Прямая dx+ey+f не пересекает ось абцисс')
else 
 begin
  str(x:0:2,sx);
  str(y:0:2,sy);
  brush.Color:=clBlack;
  circle(cn+round(x*m),cn,3);
  brush.Style:=bsClear;
  textout(5,540,'Пряиая dx+ey+f пересекет ось абцисс в точке x='+sx+' y='+sy);
 end; 
peres(d,e,f,1,0,0,t,x,y); 
if not t then textout(5,560,'Прямая dx+ey+f не пересекает ось ординат')
else 
 begin
  str(x:0:2,sx);
  str(y:0:2,sy);
  brush.Color:=clBlack;
  circle(cn,cn-round(y*m),3);
  brush.Style:=bsClear;
  textout(5,560,'Прямая dx+ey+f пересекает ось ординат в точке x='+sx+' y='+sy);
 end; 
//при малых углах между прямыми точка пересечения уходит за экран 
peres(a,b,c,d,e,f,t,x,y);
if not t then textout(5,580,'Прямые ax+by+c и dx+ey+f не пересекаются')
else 
 begin
  str(x:0:2,sx);
  str(y:0:2,sy);
  brush.Color:=clBlack;
  circle(cn+round(x*m),cn-round(y*m),3);
  brush.Style:=bsClear;
  textout(5,580,'Прямые ax+by+c и dx+ey+f пересекаются в точке x='+sx+' y='+sy);
 end; 
 
end.

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

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

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

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


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

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

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