[BACK]Return to grepsols.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / Homotopy

Annotation of OpenXM_contrib/PHC/Ada/Homotopy/grepsols.adb, Revision 1.1.1.1

1.1       maekawa     1: with text_io,integer_io;                 use text_io,integer_io;
                      2: with Communications_with_User;           use Communications_with_User;
                      3: with Standard_Natural_Vectors;           use Standard_Natural_Vectors;
                      4: with Standard_Natural_Vectors_io;        use Standard_Natural_Vectors_io;
                      5: with Symbol_Table;                       use Symbol_Table;
                      6: with Symbol_Table_io;
                      7: with Standard_Complex_Solutions;         use Standard_Complex_Solutions;
                      8: with Standard_Complex_Solutions_io;      use Standard_Complex_Solutions_io;
                      9:
                     10: procedure grepsols is
                     11:
                     12: -- DESCRIPTION :
                     13: --   Reads a solution list from file.
                     14: --   Writes a selection of a solution list to file.
                     15:
                     16:   function Select_Solutions
                     17:               ( sols : Solution_List; nb : Vector ) return Solution_List is
                     18:
                     19:   -- DESCRIPTION :
                     20:   --   Selects the solutions according to the numbers in the vector nb.
                     21:
                     22:   -- REQUIRED : the entries in nb are sorted in increasing order.
                     23:
                     24:     res,res_last,tmp : Solution_List;
                     25:     ind : natural := nb'first;
                     26:
                     27:   begin
                     28:     tmp := sols;
                     29:     for i in 1..Length_Of(sols) loop
                     30:       if i = nb(ind)
                     31:        then Append(res,res_last,Head_Of(tmp).all);
                     32:             ind := ind+1;
                     33:       end if;
                     34:       exit when (ind > nb'last);
                     35:       tmp := Tail_Of(tmp);
                     36:     end loop;
                     37:     return res;
                     38:   end Select_Solutions;
                     39:
                     40:   procedure Initialize_Symbol_Table ( n : in natural ) is
                     41:   begin
                     42:     put("Give "); put(n,1); put_line(" symbols to initialize symbol table :");
                     43:     Symbol_Table.Init(n);
                     44:     for i in 1..n loop
                     45:       declare
                     46:                sb : Symbol;
                     47:       begin
                     48:         Symbol_Table_io.get(sb);
                     49:         Symbol_Table.Add(sb);
                     50:       end;
                     51:     end loop;
                     52:   end Initialize_Symbol_Table;
                     53:
                     54:   function Read_Selection return Vector is
                     55:
                     56:   -- DESCRIPTION :
                     57:   --   Returns a vector of natural numbers.
                     58:
                     59:     n : natural;
                     60:
                     61:   begin
                     62:     put("Give the number of solutions to select : "); get(n);
                     63:     declare
                     64:       v : Vector(1..n);
                     65:     begin
                     66:       put("Give "); put(n,1); put(" natural increasing numbers : ");
                     67:       get(v);
                     68:       return v;
                     69:     end;
                     70:   end Read_Selection;
                     71:
                     72:   procedure Main is
                     73:
                     74:     infile,outfile : file_type;
                     75:     sols : Solution_List;
                     76:
                     77:   begin
                     78:     new_line;
                     79:     put_line("Selecting elements from a list of solutions.");
                     80:     new_line;
                     81:     put_line("Reading the name of the file with the solutions.");
                     82:     Read_Name_and_Open_File(infile);
                     83:     get(infile,sols);
                     84:     Close(infile);
                     85:     new_line;
                     86:     put_line("Reading the name of the output file.");
                     87:     Read_Name_and_Create_File(outfile);
                     88:     new_line;
                     89:     put("There are "); put(Length_Of(sols),1); put_line(" solutions given.");
                     90:     declare
                     91:       sel : constant Vector := Read_Selection;
                     92:          selsols : Solution_List := Select_Solutions(sols,sel);
                     93:     begin
                     94:       Initialize_Symbol_Table(Head_Of(sols).n);
                     95:          put_line("The selected solutions : "); put(selsols);
                     96:       put(outfile,Length_Of(selsols),Head_Of(selsols).n,selsols);
                     97:     end;
                     98:     Close(outfile);
                     99:   end Main;
                    100:
                    101: begin
                    102:   Main;
                    103: end grepsols;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>