[BACK]Return to random_product_system_io.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Root_Counts / Product

File: [local] / OpenXM_contrib / PHC / Ada / Root_Counts / Product / random_product_system_io.adb (download)

Revision 1.1.1.1 (vendor branch), Sun Oct 29 17:45:29 2000 UTC (23 years, 7 months ago) by maekawa
Branch: PHC, MAIN
CVS Tags: v2, maekawa-ipv6, RELEASE_1_2_3, RELEASE_1_2_2_KNOPPIX_b, RELEASE_1_2_2_KNOPPIX, RELEASE_1_2_2, RELEASE_1_2_1, HEAD
Changes since 1.1: +0 -0 lines

Import the second public release of PHCpack.

OKed by Jan Verschelde.

with integer_io;
with Standard_Floating_Numbers;          use Standard_Floating_Numbers;
with Standard_Floating_Numbers_io;       use Standard_Floating_Numbers_io;
with Standard_Complex_Numbers;           use Standard_Complex_Numbers;
with Standard_Complex_Vectors;           use Standard_Complex_Vectors;
with Standard_Natural_Vectors;
with Symbol_Table,Symbol_Table_io;
with Standard_Complex_Polynomials;       use Standard_Complex_Polynomials;
with Standard_Complex_Polynomials_io;    use Standard_Complex_Polynomials_io;
with Standard_Complex_Poly_Systems;      use Standard_Complex_Poly_Systems;
with Standard_Complex_Poly_Systems_io;   use Standard_Complex_Poly_Systems_io;
with Random_Product_System;

package body Random_Product_System_io is

  procedure get ( n : out natural ) is
  begin
    Random_Product_System_io.get(Standard_Input,n);
  end get;

  procedure get ( file : in file_type; n : out natural ) is

    nn : natural;

  begin
    integer_io.get(file,nn); n := nn;
    Random_Product_System.Init(nn);
    declare
      h : Vector(0..nn);
      pp : Poly;
      d : degrees := new Standard_Natural_Vectors.Vector'(1..nn => 0);
      stop : boolean;
    begin
      get(file,nn,pp); Clear(pp);
      for i in 1..nn loop
        stop := false;
        while not stop loop
          get(file,nn,pp);
          stop := (pp = Null_Poly);
          exit when stop;
          h(0) := Coeff(pp,d);
          for j in 1..nn loop
            d(j) := 1;
            h(j) := Coeff(pp,d);
            d(j) := 0;
          end loop;
          Random_Product_System.Add_Hyperplane(i,h);
        end loop;
      end loop;
    end;
  end get;

  procedure put ( n,fore,after,exp : in natural ) is
  begin
    Random_Product_System_io.put(Standard_Output,n,fore,after,exp);
  end put;

  procedure put ( file : in file_type; n,fore,after,exp : in natural ) is

    h : Vector(0..n);

    procedure Write_Number ( file : in file_type; x : in Complex_Number ) is
    begin
      if IMAG_PART(x) + 1.0 = 1.0
       then put(file,REAL_PART(x),fore,after,exp);
       else put(file,'(');
            put(file,REAL_PART(x),fore,after,exp);
            put(file,'+');
            put(file,IMAG_PART(x),fore,after,exp);
            put(file,')');
      end if;
    end Write_Number;

  begin
    for i in 1..n loop
      put(file,"The hyperplanes for the "); integer_io.put(file,i,1); 
      put_line(file,"th equation :");
      for j in 1..Random_Product_System.Number_Of_Hyperplanes(i) loop
        h := Random_Product_System.Get_Hyperplane(i,j);
        put(file,' ');
        for k in 1..n loop
  	  Write_Number(file,h(k));
	  put(file,'*');
	  Symbol_Table_io.put(file,Symbol_Table.Get(k));
	  put(file," + ");
        end loop;
        Write_Number(file,h(0));
        new_line(file);
      end loop;
    end loop;
  end put;

end Random_Product_System_io;