Contributor: RODRIGO MOREIRA SILVEIRA

{
  Calculate and make the graphic of an quadratic equation type ax + bx + c


Written By:
  Rodrigo Moreira Silveira - ZU$ - BRASIL

You can Find me at:
  InterNet :
    arlindo@solar.com.br

  Adress :
    SQS 113 Bl "G" Apto 102
    Braslia - DF - BRASIL
    Cep : 70.376-070

}
Program Equation;

uses crt,graph;

var
  x1,x2,a,b,c : Real;
  grDriver,grMode: integer;

Procedure Drawon(xt,yt:real);
Begin
  PutPixel(trunc(320-(10*xt)),trunc(240-(10*yt)),Yellow);
end;


Procedure grafico;
var x0,y0,x,y : real;
begin
  x := -100; { Calculates x from -100 to 100 (*) }
  drawon(c,0);
  repeat
    x := x + 0.01; { Precision }
    y := (a*(x*x)) + (b*x) + (c);
    drawon(x,y);
  until x >= 100 { Calculates "x" from -100 to 100 (*) }
end;

Procedure Calc;
var Delta : Real; Tmp : String[10];
Begin
  SetColor(White);
  if a <> 0 then
  begin
    Delta := (b*b) - (4*a*c);
    if Delta >= 0 then
    begin
      OutTextXY(0,0,'Delta () =');
      Tmp:= '';
      str(delta:1:6,Tmp);
      OutTextXY(100,0,tmp);
      X1 := (-b) + Sqrt(Delta);
      X2 := (-b) - Sqrt(Delta);
      Tmp:= '';
      str(x1:1:6,Tmp);
      OutTextXY(0,10,'x'' =');
      OutTextXY(35,10,tmp);
      Tmp:= '';
      str(x2:1:6,Tmp);
      OutTextXY(0,20,'x'''' =');
      OutTextXY(40,20,tmp);
    end
    else OutTextXY(0,0,'Delta () < 0');
    end
  else
  begin
    if b <> 0 then begin
      X1 := (c / b);
      str(x1:1:6,Tmp);
      OutTextXY(0,0,'x =');
      OutTextXY(25,0,tmp); end
    else OutTextXY(0,0,'Constant Function');
  end;
end;

Procedure DrawCartesian;
var i,y : Word;
Begin
  SetColor(LightGray);
  for i := 1 to 96 do
    Line(0,i*10,640,i*10);
  for i := 1 to 129 do
    Line(i*10,0,i*10,480);
  SetColor(White);
  Line(0,240,640,240);
  Line(320,0,320,480);
  OutTextXY(0,230,'x');
  OutTextXY(310,0,'y');
  OutTextXY(310,230,'o');
end;

begin
  TEXTMODE(co80);
  Writeln('This Prorgam will calculate and make a graphic of an equation ax + bx + c');
  WriteLn;WriteLn;
  Write('Type a Real equivalence to "a" : ');
  readln(a);
  Write('Type a Real equivalence to "b" : ');
  readln(b);
  Write('Type a Real equivalence to "c" : ');
  readln(c);
  grDriver := 9; {VGA}
  grMode := 2; {VGAHi = 650x480}
  initgraph(grDriver,grMode,'..\');
  DrawCartesian;{Draw The Cartesian}
  Calc;{Calculates  and the roots}
  grafico;{Calculates x and make the graphic}
  repeat until keypressed;
  readkey;
  textmode(co80);{Returns to TextMode}
end.