Cod sursa(job #130380)

Utilizator TudorutzuMusoiu Tudor Tudorutzu Data 31 ianuarie 2008 22:53:27
Problema Ecuatie Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 2.45 kb
var q1gen,q2gen,maxq,minq,n,a,b,c,k,divi,i,j,x,y:longint;
    f,g:text;
    ok:boolean;
begin
     assign(f,'ecuatie.in'); reset(f);
     assign(g,'ecuatie.out'); rewrite(g);
     readln(f,a,b,c,k);
     q1gen:=trunc((-b+trunc(sqrt(b*b-4*a*c)))/2*a);
     q2gen:=trunc((-b-trunc(sqrt(b*b-4*a*c)))/2*a);
     x:=k div 2+1;
     y:=k mod 2;
     i:=0;
     ok:=true;
     if a<0 then n:=a
            else n:=-a;
     j:=n;
     while (i<x)and(ok) do
     begin
          if j<>0 then
          if n mod j = 0 then
          begin
               inc(i);
               divi:=j;
          end;
          inc(j);
          if j>abs(n) then ok:=false;
     end;
     if ok then
     begin
          if y=1 then
          begin
               write(g,'(');
               if divi=-1 then write(g,'-x')
                          else write(g,divi,'x');
               if divi*q1gen>divi*q2gen then
               begin
                    minq:=divi*q2gen;
                    maxq:=n div divi*q1gen;
               end
                                        else
               begin
                    minq:=divi*q1gen;
                    maxq:=n div divi*q2gen;
               end;
               if minq<0 then write(g,minq,')(')
                         else write(g,'+',minq,')(');
               if n div divi=-1 then write(g,'-x')
                                else write(g,n div divi,'x');
               if maxq<0 then write(g,maxq,')')
                         else write(g,'+',maxq,')');
               writeln(g);
          end;
          if y=0 then
          begin
               write(g,'(');
               if divi=-1 then write(g,'-x')
                          else write(g,divi,'x');
               if divi*q2gen>divi*q1gen then
               begin
                    maxq:=divi*q2gen;
                    minq:=n div divi * q1gen;
               end
               else
               begin
                    maxq:=divi*q1gen;
                    minq:=n div divi * q2gen;
               end;
               if maxq<0 then write(g,maxq,')(')
                         else write(g,'+',maxq,')(');
               if n div divi=-1 then write(g,'-x')
                                else write(g,n div divi,'x');
               if minq<0 then write(g,minq,')')
                         else write(g,'+',minq,')');
               writeln(g);
          end;
     end
     else writeln(g,-1);
     close(g);
end.