Найти точку пересечения прямой и оси абсцисс - 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
.
peres
- это процедура, которая проверяет, пересекаются ли две прямые. Если они пересекаются, то возвращается значениеtrue
, иначе -false
. Также в этой процедуре вычисляются координаты точки пересечения и они выводятся на экран.grafik
- это процедура, которая рисует график прямой на экране. Вначале задаются начальные и конечные координаты для линии, а затем, используя циклы, рисуются множество точек на этой линии. В основной части кода сначала запрашиваются у пользователя коэффициенты для первой прямой (a, b, c). Затем, после проверки на неравенство нулю, запрашиваются коэффициенты для второй прямой (d, e, f). Затем на экране рисуются две прямые с указанными коэффициентами, и вызывается процедураperes
для проверки пересечения этих прямых с осью абсцисс и осью ординат. Если пересечение найдено, то на экране отображается точка пересечения. В конце кода выполняется проверка на пересечение двух прямых. Если они не пересекаются, то выводится сообщение об этом. Если же пересечение найдено, то на экране отображается точка пересечения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д