Линейное программирование (Составление плана использования технологических способов в производстве), страница 4

if a=0 then // esli a=0

y2:=c/b;

x1:=0;

x2:=10;

okrxx:=trunc(x1*dy);

okrx:=trunc(x2*dy);

okryy:=trunc(y2*dy);

with form1.image1.Canvas do begin

if (strok='>=')and(a=0)and (b>0)then   begin

pen.Color:=clblue;

MoveTo(x0+100,y0-okryy);

LineTo(x0+100,y0-okryy-20);

moveTo(x0+100,y0-okryy-20); LineTo(x0+105,y0-okryy-15);

moveTo(x0+100,y0-okryy-20); LineTo(x0+95,y0-okryy-15); end;

if (strok='<=') and(a=0)and (b>0)then   begin

pen.Color:=clblue;

MoveTo(x0+100,y0-okryy);

LineTo(x0+100,y0-okryy+20);

moveTo(x0+100,y0-okryy+20); LineTo(x0+105,y0-okryy+15);

moveTo(x0+100,y0-okryy+20); LineTo(x0+95,y0-okryy+15);

end;

pen.Color:=clblack;

if a=0 then

MoveTo(x0,y0-okryy);

if a=0 then

LineTo(x0+okrx,y0-okryy);

end;

if b=0 then

y1:=c/a;

x1:=0;

x2:=10;

okrx:=trunc(y1*dy);

okry:=trunc(x1*dy);

okryy:=trunc(x2*dy);

with form1.image1.Canvas do begin

pen.Color:=clblue;

if (strok='<=')and(b=0)and (a>0)then   begin

pen.Color:=clblue;

MoveTo(x0+okrx,y0-100);

LineTo(x0+okrx-20,y0-100);

moveTo(x0+okrx-20,y0-100);lineTo(x0+okrx-15,y0-95);

moveTo(x0+okrx-20,y0-100);lineTo(x0+okrx-15,y0-105);

end;

if (strok='>=')and(b=0)and (a>0)then   begin

pen.Color:=clblue;

MoveTo(x0+okrx,y0-100);

LineTo(x0+okrx+20,y0-100);

moveTo(x0+okrx+20,y0-100);lineTo(x0+okrx+15,y0-95);

moveTo(x0+okrx+20,y0-100);lineTo(x0+okrx+15,y0-105);

end;

pen.Color:=clblack;

if b=0 then

MoveTo(x0+okrx,y0-okry);

if b=0 then

LineTo(x0+okrx,y0-okryy);

end;

x1:=10;

x2:=0;

if ((a>0)and(b>0))or((a>0)and(b<0))or((a<0)and(b<0))or((a<0)and(b>0))then

y1:=(c-(a*x1))/b;

if ((a>0)and(b>0))or((a>0)and(b<0))or((a<0)and(b<0))or((a<0)and(b>0))then

y2:=(c-(a*x2))/b;

okrx:=trunc(x1*dx);

okry:=trunc(y1*dy);

okryy:=trunc(y2*dy);

with form1.image1.Canvas do begin

pen.Color:=clblack;

if ((a>0)and(b>0))or((a>0)and(b<0))or((a<0)and(b<0))or((a<0)and(b>0))then

MoveTo(x0,y0-okryy);

if ((a>0)and(b>0))or((a>0)and(b<0))or((a<0)and(b<0))or((a<0)and(b>0))then

LineTo(x0+okrx,y0-okry);

pen.color:=clyellow;

if ((a>0)and(b>0))or((a>0)and(b<0))or((a<0)and(b<0))or((a<0)and(b>0))then

TextOut(x0+20,y0-okryy-20,inttostr(i+1));

strok:=stringgrid1.Cells[3,i];

pen.Color:=clblue;

moveto(x0,y0-okryy);

if (strok='>=')and((a*x2+b*y2-1) >= (c))and (y2>0)and(a>0) then begin

lineto(x0,y0-okryy+20);

moveto(x0,y0-okryy+20);

lineto(x0+5,y0-okryy+15);

moveto(x0,y0-okryy+20);

lineto(x0-5,y0-okryy+15);

end;

if (strok='>=')and((a*x2+b*y2+1) >= (c))and (y2>0)and(a>0)  then begin

lineto(x0,y0-okryy-20);

moveto(x0,y0-okryy-20);

lineto(x0+5,y0-okryy-15);

moveto(x0,y0-okryy-20);

lineto(x0-5,y0-okryy-15);

end;

if (strok='<=')and((a*x2+b*y2+1) <= (c))and (y2>0)and(a>0)  then begin

lineto(x0,y0-okryy-20);

moveto(x0,y0-okryy-20);

lineto(x0+5,y0-okryy-15);

moveto(x0,y0-okryy-20);

lineto(x0-5,y0-okryy-15);

end;

if (strok='<=')and((a*x2+b*y2-1) <= (c))and (y2>0)and(a>0)  then begin

lineto(x0,y0-okryy+20);

moveto(x0,y0-okryy+20);

lineto(x0+5,y0-okryy+15);

moveto(x0,y0-okryy+20);

lineto(x0-5,y0-okryy+15);

end;

if (b<0)and  (strok='>=') and((a*x1+8+b*y1) >= (c))and (a>0)then  begin

lineto(x0,y0-okryy+20);

moveto(x0,y0-okryy+20);

lineto(x0+5,y0-okryy+15);

moveto(x0,y0-okryy+20);

lineto(x0-5,y0-okryy+15);

end;

if (b<0)and  (strok='>=') and((a*x1-8+b*y1) >= (c))and (a>0)then   begin

lineto(x0,y0-okryy-20);

moveto(x0,y0-okryy-20);

lineto(x0+5,y0-okryy-15);

moveto(x0,y0-okryy-20);

lineto(x0-5,y0-okryy-15);

end;