Найти точку пересечения прямой и оси абсцисс - 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
для проверки пересечения этих прямых с осью абсцисс и осью ординат. Если пересечение найдено, то на экране отображается точка пересечения. В конце кода выполняется проверка на пересечение двух прямых. Если они не пересекаются, то выводится сообщение об этом. Если же пересечение найдено, то на экране отображается точка пересечения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д