Annotation of OpenXM_contrib/PHC/Ada/Math_Lib/Polynomials/standard_complex_poly_systems_io.adb, Revision 1.1
1.1 ! maekawa 1: with integer_io,Numbers_io; use integer_io,Numbers_io;
! 2: with Communications_with_User; use Communications_with_User;
! 3: with Symbol_Table,Symbol_Table_io;
! 4: with Standard_Complex_Polynomials; use Standard_Complex_Polynomials;
! 5:
! 6: package body Standard_Complex_Poly_Systems_io is
! 7:
! 8: -- SCANNING THE LINE FOR A NATURAL NUMBER :
! 9:
! 10: function Scan_Line ( file : in file_type ) return natural is
! 11:
! 12: m : natural := 0;
! 13: ch : character;
! 14:
! 15: begin
! 16: while not END_OF_LINE(file) loop
! 17: get(file,ch);
! 18: case ch is
! 19: when '0' => m := 10*m;
! 20: when '1' => m := 10*m + 1;
! 21: when '2' => m := 10*m + 2;
! 22: when '3' => m := 10*m + 3;
! 23: when '4' => m := 10*m + 4;
! 24: when '5' => m := 10*m + 5;
! 25: when '6' => m := 10*m + 6;
! 26: when '7' => m := 10*m + 7;
! 27: when '8' => m := 10*m + 8;
! 28: when '9' => m := 10*m + 9;
! 29: when others => null;
! 30: end case;
! 31: end loop;
! 32: return m;
! 33: end Scan_Line;
! 34:
! 35: -- EXCEPTION HANDLERS :
! 36:
! 37: procedure Write_Symbol_Table is
! 38:
! 39: -- DESCRIPTION :
! 40: -- Writes the current list of symbols on one line on standard output.
! 41:
! 42: begin
! 43: put("Current symbols : ");
! 44: for i in 1..Symbol_Table.Number loop
! 45: Symbol_Table_io.put(Symbol_Table.Get(i)); put(" ");
! 46: end loop;
! 47: new_line;
! 48: end Write_Symbol_Table;
! 49:
! 50: procedure Handler ( k : in natural ) is
! 51: begin
! 52: put(" raised while reading polynomial "); put(k,1);
! 53: put_line(".");
! 54: end Handler;
! 55:
! 56: -- THE INPUT OPERATIONS :
! 57:
! 58: procedure get ( n : in out natural; s : in out Poly_Sys ) is
! 59: begin
! 60: get(Standard_Input,n,s);
! 61: end get;
! 62:
! 63: procedure get ( n,m : in out natural; s : in out Poly_Sys ) is
! 64: begin
! 65: get(Standard_Input,n,m,s);
! 66: end get;
! 67:
! 68: procedure get ( file : in file_type;
! 69: n : in out natural; s : in out Poly_Sys ) is
! 70:
! 71: i : integer := s'first;
! 72:
! 73: begin
! 74: get(file,n);
! 75: while i <= s'first+n-1 loop
! 76: get(file,s(i));
! 77: i := i+1;
! 78: end loop;
! 79: exception
! 80: when ILLEGAL_CHARACTER => put("ILLEGAL_CHARACTER"); Handler(i); raise;
! 81: when ILLEGAL_SYMBOL => put("ILLEGAL_SYMBOL"); Handler(i); raise;
! 82: when ILLEGAL_OPERATION => put("ILLEGAL_OPERATION"); Handler(i); raise;
! 83: when INFINITE_NUMBER => put("INFINITE_NUMBER"); Handler(i); raise;
! 84: when OVERFLOW_OF_UNKNOWNS => put("OVERFLOW_OF_UNKNOWNS"); Handler(i);
! 85: Write_Symbol_Table; raise;
! 86: when BAD_BRACKET => put("BAD_BRACKET"); Handler(i); raise;
! 87: end get;
! 88:
! 89: procedure get ( file : in file_type;
! 90: n,m : in out natural; s : in out Poly_Sys ) is
! 91:
! 92: i : integer := s'first;
! 93:
! 94: begin
! 95: get(file,n);
! 96: m := Scan_Line(file);
! 97: while i <= s'first+n-1 loop
! 98: get(file,s(i));
! 99: i := i+1;
! 100: end loop;
! 101: exception
! 102: when ILLEGAL_CHARACTER => put("ILLEGAL_CHARACTER"); Handler(i); raise;
! 103: when ILLEGAL_SYMBOL => put("ILLEGAL_SYMBOL"); Handler(i); raise;
! 104: when ILLEGAL_OPERATION => put("ILLEGAL_OPERATION"); Handler(i); raise;
! 105: when INFINITE_NUMBER => put("INFINITE_NUMBER"); Handler(i); raise;
! 106: when OVERFLOW_OF_UNKNOWNS => put("OVERFLOW_OF_UNKNOWNS"); Handler(i);
! 107: Write_Symbol_Table; raise;
! 108: when BAD_BRACKET => put("BAD_BRACKET"); Handler(i); raise;
! 109: end get;
! 110:
! 111: procedure get ( s : in out Poly_Sys ) is
! 112: begin
! 113: get(Standard_Input,s);
! 114: end get;
! 115:
! 116: procedure get ( file : in file_type; s : in out Poly_Sys ) is
! 117:
! 118: i : integer := s'first;
! 119:
! 120: begin
! 121: while i <= s'last loop
! 122: get(file,s(i));
! 123: i := i+1;
! 124: end loop;
! 125: exception
! 126: when ILLEGAL_CHARACTER => put("ILLEGAL_CHARACTER"); Handler(i); raise;
! 127: when ILLEGAL_SYMBOL => put("ILLEGAL_SYMBOL"); Handler(i); raise;
! 128: when ILLEGAL_OPERATION => put("ILLEGAL_OPERATION"); Handler(i); raise;
! 129: when INFINITE_NUMBER => put("INFINITE_NUMBER"); Handler(i); raise;
! 130: when OVERFLOW_OF_UNKNOWNS => put("OVERFLOW_OF_UNKNOWNS"); Handler(i);
! 131: Write_Symbol_Table; raise;
! 132: when BAD_BRACKET => put("BAD_BRACKET"); Handler(i); raise;
! 133: end get;
! 134:
! 135: -- MORE USER FRIENDLY INPUT OPERATIONS :
! 136:
! 137: procedure get ( lp : in out Link_to_Poly_Sys ) is
! 138:
! 139: inpt : file_type;
! 140: n,m : natural;
! 141: onfile : character;
! 142:
! 143: begin
! 144: --------------------------------------------
! 145: -- GETTING THE DIMENSION OF THE PROBLEM --
! 146: --------------------------------------------
! 147: loop
! 148: put("Is the system on a file ? (y/n/i=info) ");
! 149: Ask_Alternative(onfile,"yni");
! 150: if onfile = 'i'
! 151: then new_line; Display_Format; new_line;
! 152: end if;
! 153: exit when onfile /= 'i';
! 154: end loop;
! 155: new_line;
! 156: if onfile = 'y'
! 157: then declare
! 158: procedure Read is
! 159: begin
! 160: put_line("Reading the name of the input file.");
! 161: Read_Name_and_Open_File(inpt);
! 162: get(inpt,n);
! 163: end Read;
! 164: begin
! 165: Read;
! 166: exception
! 167: when others => put_line("The data on the file is not correct.");
! 168: put_line("A natural number is expected first.");
! 169: put_line("Supply another file name."); Close(inpt);
! 170: Read;
! 171: end;
! 172: else put("Give the number of polynomials : "); Read_Natural(n);
! 173: end if;
! 174: ---------------------------------------
! 175: -- GETTING THE POLYNOMIAL SYSTEM : --
! 176: ---------------------------------------
! 177: if Symbol_Table.Empty
! 178: then Symbol_Table.Init(n);
! 179: end if;
! 180: lp := new Poly_Sys(1..n);
! 181: declare
! 182: procedure Read is
! 183: begin
! 184: if onfile = 'y'
! 185: then m := Scan_Line(inpt);
! 186: get(inpt,lp.all);
! 187: Close(inpt);
! 188: else put("Give the number of unknowns : "); Read_Natural(m);
! 189: put("Give "); put(n,2);
! 190: if n = 1
! 191: then put_line(" polynomial : ");
! 192: else put_line(" polynomials : ");
! 193: end if;
! 194: get(lp.all);
! 195: skip_line; -- skip end_of_line symbol
! 196: end if;
! 197: exception
! 198: when others => if onfile = 'y' then Close(inpt); end if;
! 199: put_line("Polynomial system read : "); put(lp.all,'*');
! 200: raise;
! 201: end Read;
! 202: begin
! 203: Read;
! 204: exception
! 205: when others =>
! 206: if onfile = 'y'
! 207: then put_line("The polynomials on the file are incorrect."
! 208: & " Try again...");
! 209: else put_line("The polynomials are incorrect. Try again...");
! 210: end if;
! 211: Clear(lp); Symbol_Table.Clear;
! 212: get(lp);
! 213: end;
! 214:
! 215: end get;
! 216:
! 217: procedure get ( file : in file_type; lp : in out Link_to_Poly_Sys ) is
! 218:
! 219: n : natural;
! 220:
! 221: begin
! 222: get(file,n);
! 223: lp := new Poly_Sys(1..n);
! 224: if Symbol_Table.Empty
! 225: then Symbol_Table.Init(n);
! 226: end if;
! 227: get(file,lp.all);
! 228: skip_line(file); -- skip end_of_line symbol
! 229: end get;
! 230:
! 231: -- THE OUTPUT OPERATIONS :
! 232:
! 233: procedure put ( n : in natural; s : in Poly_Sys; pow : in power := '*' ) is
! 234: begin
! 235: put(Standard_Output,n,s,pow);
! 236: end put;
! 237:
! 238: procedure put ( n,m : in natural; s : in Poly_Sys; pow : in power := '*' ) is
! 239: begin
! 240: put(Standard_Output,n,m,s,pow);
! 241: end put;
! 242:
! 243: procedure put ( file : in file_type; n : in natural; s : in Poly_Sys;
! 244: pow : in power := '*' ) is
! 245: begin
! 246: put(file,n,2); new_line(file);
! 247: put(file,s,pow);
! 248: end put;
! 249:
! 250: procedure put ( file : in file_type; n,m : in natural; s : in Poly_Sys;
! 251: pow : in power := '*' ) is
! 252: begin
! 253: put(file,n,2); put(file," "); put(file,m,2); new_line(file);
! 254: put(file,s,pow);
! 255: end put;
! 256:
! 257: procedure put ( s : in Poly_Sys; pow : in power ) is
! 258: begin
! 259: put(Standard_Output,s,pow);
! 260: end put;
! 261:
! 262: procedure put ( file : in file_type; s : in Poly_Sys; pow : in power ) is
! 263: begin
! 264: for i in s'range loop
! 265: put(file,s(i),pow); new_line(file);
! 266: end loop;
! 267: end put;
! 268:
! 269: procedure put ( s : in Poly_Sys ) is
! 270: begin
! 271: put(Standard_Output,s,'*');
! 272: end put;
! 273:
! 274: procedure put ( file : in file_type; s : in Poly_Sys ) is
! 275: begin
! 276: put(file,s,'*');
! 277: end put;
! 278:
! 279: procedure put_line ( s : in Poly_Sys ) is
! 280: begin
! 281: put_line(Standard_Output,s);
! 282: end put_line;
! 283:
! 284: procedure put_line ( file : in file_type; s : in Poly_Sys ) is
! 285: begin
! 286: put_line(file,s,'*');
! 287: end put_line;
! 288:
! 289: procedure put_line ( s : in Poly_Sys; pow : in Power ) is
! 290: begin
! 291: put_line(Standard_Output,s,pow);
! 292: end put_line;
! 293:
! 294: procedure put_line ( file : in file_type; s : in Poly_Sys; pow : in Power ) is
! 295: begin
! 296: put(file,s'length,2); new_line(file);
! 297: for i in s'range loop
! 298: put_line(file,s(i),pow);
! 299: end loop;
! 300: end put_line;
! 301:
! 302: procedure Display_Format is
! 303:
! 304: s : array(1..3) of string(1..65);
! 305:
! 306: begin
! 307: s(1):=" A complex polynomial system is denoted by the dimension";
! 308: s(2):="followed by as many complex multivariate polynomials as the";
! 309: s(3):="dimension. The dimension is a positive natural number. ";
! 310: for i in s'range loop
! 311: put_line(s(i));
! 312: end loop;
! 313: Standard_Complex_Polynomials_io.Display_Format;
! 314: end Display_Format;
! 315:
! 316: end Standard_Complex_Poly_Systems_io;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>