]> git.llucax.com Git - z.facultad/75.40/2do-cuat/polinomios.git/blob - poli_8.pas
Se expanden keywords del svn.
[z.facultad/75.40/2do-cuat/polinomios.git] / poli_8.pas
1 program Polinomios;\r
2 \r
3 uses\r
4     CRT, DOS; { Declaracion de funciones predefinidas\r
5                 para crear la interfaz grafica }\r
6 \r
7 const\r
8      VERSION = '0.9.0a (POLI_8)'; { version del programa }\r
9 \r
10      TAM_MAX = 100; { Tama¤o maximo del vector que almacena\r
11                       la multiplicacion de polinomios }\r
12      TAM = TAM_MAX div 2; { Tama¤o maximo (virtual) del vector que contiene\r
13                             los vector con los que se va a operar }\r
14      CR = chr(13); { caracter de retorno del carro }\r
15      LF = chr(10); { caracter de nueva linea }\r
16      ENDF = chr(26); { caracter de fin del archivo }\r
17      TAB = chr(9); { caracter de tabulacion }\r
18      SPACE = chr(32); { caracter de espacio }\r
19 \r
20 type\r
21     { Tipo de dato para identificar el estado de la entrada de datos }\r
22     Estado = (INICIO, COEF_BUSCA, COEF, COEF_PUNTO, COEF_FIN, EXP_BUSCA, EXP, EXP_FIN, EXP_FIN_BUSCA, POLI_FIN, FIN, ERROR);\r
23     Vector = array [0..TAM_MAX-1] of real; { vector para almacenar los polinomios }\r
24 \r
25 \r
26   {########################################################}\r
27 \r
28   procedure muestraVector(var v: Vector; s: String);\r
29   { procedimiento que imprime el polinomio v en pantalla con un titulo s }\r
30 \r
31      {########################################################}\r
32 \r
33      function exponente(exp: integer): String;\r
34 \r
35      var\r
36         s: String; { variable temporal }\r
37 \r
38      begin { exponente }\r
39           case exp of\r
40                0: exponente := ''; { si el exponente es nulo, mustra solo el coeficiente }\r
41                1: exponente := 'X'; { si el exponente es 1, mustra el coeficiente y X }\r
42                2: exponente := 'Xý'; { si el exponente es 2, mustra el coeficiente y Xý }\r
43                else begin\r
44                          str(exp, s); { convierte al exponente en string }\r
45                          exponente := 'X^' + s; { si el exponente es mayor que 1, mustra el coeficiente y X^exp }\r
46                end; { else }\r
47           end; { case }\r
48      end; { exponente }\r
49 \r
50      {########################################################}\r
51 \r
52 \r
53   var\r
54      i: integer; { indice para usar en el ciclo for }\r
55 \r
56   begin { muestraVector }\r
57      writeln;    { separacion de una linea }\r
58      write(s); { mustra el mensaje }\r
59      for i := TAM_MAX - 1 downto 0 do { recorre el vector de atras para adelante }\r
60             if v[i] <> 0 then break;  { si el coeficiente no es nulo, termina el for dejando a i en ese indice }\r
61      if (abs(v[i]) <> 1) or (i = 0)   { si el modulo del coeficiente es distinto de 1 o si el exp. es 0 }\r
62         then if abs(v[i]) - trunc(abs(v[i])) = 0 then write(trunc(v[i]):1, ' ') { imprime si es un numero entero }\r
63                                                  else write(v[i]:1:2, ' ')      { imprime si es un numero real }\r
64         else if v[i] = -1 then write('-'); { si es -1 entonces solo escribe el signo del termino }\r
65      write(exponente(i));\r
66      for i := i - 1 downto 0 do { recorre el vector de atras para adelante }\r
67          if v[i] <> 0 then  { si el coeficiente no es nulo, termina el for dejando a i en ese indice }\r
68               begin\r
69                    if v[i] < 0 { si el coeficiente en negativo }\r
70                       then write(' - ')  { le agrega el signo - }\r
71                       else write(' + '); { si no, le agrega el signo + }\r
72                    if (abs(v[i]) <> 1) or (i = 0) then { si el modulo del coeficiente es distinto de 1 o si el exp. es 0 }\r
73                       if abs(v[i]) - trunc(abs(v[i])) = 0 then write(trunc(abs(v[i])):1, ' ') { imprime si es un entero }\r
74                                                           else write(abs(v[i]):1:2, ' ');     { imprime si es un real }\r
75                    write(exponente(i));\r
76               end; { if }\r
77      writeln;    { separacion de una linea }\r
78      writeln;    { separacion de una linea }\r
79   end; { muestraVector }\r
80 \r
81   {########################################################}\r
82 \r
83   procedure inicializaVector(var v: Vector);\r
84   { procedimiento que inicializa un vector de tama¤o tam }\r
85 \r
86   var i: integer; { indice para usar en el ciclo for }\r
87 \r
88   begin { inicializaVector }\r
89        for i := 0 to TAM_MAX - 1 do { recorre el vector }\r
90            v[i] := 0;               { inicializa la variable actual en 0 }\r
91   end; { inicializaVector }\r
92 \r
93   {########################################################}\r
94 \r
95   function ObtenerNombreArchivo: String;\r
96   { funcion que obtiene un nombre de archivo valido (es decir, el nombre\r
97     de un archivo que exista) }\r
98 \r
99     {########################################################}\r
100 \r
101     function fileExists(FileName: String): Boolean;\r
102     { funcion extraida de la ayuda del Turbo Pascal 7\r
103       indica si el archivo existe }\r
104 \r
105       var\r
106          F: file;\r
107 \r
108       begin\r
109            {$I-}\r
110            Assign(F, FileName);\r
111            FileMode := 0;  { Set file access to read only }\r
112            Reset(F);\r
113            Close(F);\r
114            {$I+}\r
115            FileExists := (IOResult = 0) and (FileName <> '');\r
116       end;  { FileExists }\r
117 \r
118     {########################################################}\r
119 \r
120     { Continuacion de la funcion ObtenerNombreArchivo }\r
121     const\r
122          DEFAUL_FILE_NAME = 'datos.txt'; { nombre del archivo por defecto }\r
123 \r
124     var\r
125        tmp: String; { cadena para almacenar el resultado temporal }\r
126 \r
127     begin { ObtenerNombreArchivo }\r
128          { mensaje para entrada del nombre de archivo }\r
129          writeln('Ingrese el nombre del archivo con los datos (ENTER = ', DEFAUL_FILE_NAME, '):');\r
130          readln(tmp); { entrada del nombre de archivo }\r
131          if tmp = '' then tmp := DEFAUL_FILE_NAME; { se fija si no se ingreso nada y reasigana el nombre }\r
132          while not fileExists(tmp) do { repite el proceso hasta que el archivo exista }\r
133            begin\r
134                 write('El archivo ', tmp, ' no existe. Ingrese un nombre correcto');\r
135                 if tmp = DEFAUL_FILE_NAME { si es el nombre de archivo predeterminado }\r
136                    then                   { entonces, elije un mensaje apropiado }\r
137                        write(': ')\r
138                    else\r
139                      begin                { si no es el predeterminado, muestra otro mensaje }\r
140                           writeln('.');\r
141                           write('(ENTER = ', DEFAUL_FILE_NAME, '): ');\r
142                      end;\r
143                 readln(tmp); { vuelve a leer el nombre del archivo para ser verificado }\r
144                 if tmp = '' then tmp := DEFAUL_FILE_NAME; { asigna como nombre de archivo al predeterminado\r
145                                                             si no se escribio nada }\r
146            end; { fin del loop de verificacion }\r
147          ObtenerNombreArchivo := tmp; { asigna el nombre correcto al valor de salida de la funcion }\r
148     end; { ObtenerNombreArchivo }\r
149 \r
150     {########################################################}\r
151 \r
152     function trans(c: char; e: Estado): Estado;\r
153     { establece el estado en el que se encuentra la lectura }\r
154     { c es el caracter que se leyo, e es el estado actual de la lectura }\r
155 \r
156     begin { trans }\r
157          case e of { acciona segun es estado actual de la lectura }\r
158               INICIO: { estado de inicio de la lectura }\r
159                      case c of { acciona segun el caracter leido }\r
160                          '-', '0'..'9': trans := COEF; { si es un numero (o negativo), empieza a leer el coeficiente }\r
161                          SPACE, TAB, CR, LF: trans := COEF_BUSCA; { si es un caracter tipo "espacio", busca el prox. coef. }\r
162                          else trans := ERROR; { si es otro, da ERROR }\r
163                      end;\r
164               COEF_BUSCA: { estado de busqueda del primer ceoficiente del polinomio }\r
165                      case c of { acciona segun el caracter leido }\r
166                          '-', '0'..'9': trans := COEF; { si es un numero (o negativo), empieza a leer el coeficiente }\r
167                          SPACE, TAB, CR, LF: trans := COEF_BUSCA; { si es un caracter tupo "espacio", sigue buscando }\r
168                          ENDF: trans := FIN; { si es el caracter de fin de archivo, pasa al estado de tarea finalizada }\r
169                          else trans := ERROR; { si es otro, da ERROR }\r
170                      end;\r
171               COEF: { estado de lectura del coeficiente del termino del polinomio (sin punto decimal) }\r
172                    case c of { acciona segun el caracter leido }\r
173                         '0'..'9': trans := COEF; { si es un numero sigue con el mismo estado }\r
174                         '.': trans := COEF_PUNTO; { si es punto cambia al estado COEF_PUNTO }\r
175                         SPACE, TAB: trans := COEF_FIN; { si es un espacio o un tabulador, finaliza la lectura del coeficiente }\r
176                         else trans := ERROR; { si es otra cosa, pasa a estado de error }\r
177                    end;\r
178               COEF_PUNTO: { estado de lectura del coeficiente del termino del polinomio (con punto decimal) }\r
179                    case c of { acciona segun el caracter leido }\r
180                         '0'..'9': trans := COEF_PUNTO; { si es un numero sigue con el mismo estado }\r
181                         SPACE, TAB: trans := COEF_FIN; { si es un espacio o un tabulador, finaliza la lectura del coeficiente }\r
182                         else trans := ERROR; { si es otra cosa, pasa a estado de error }\r
183                    end;\r
184               COEF_FIN: { estado de fin de la lectura del coeficiente del termino del polinomio }\r
185                        case c of { acciona segun el caracter leido }\r
186                            '0'..'9': trans := EXP; { si el caracter es un numero establece el estado en EXP (exponente) }\r
187                            SPACE, TAB: trans := EXP_BUSCA; { si es un espacio o tabulador, pasa a buscar el proximo exponente }\r
188                            else trans := ERROR; { si no es ninguno de los anteriores, el estado pasa a ERROR }\r
189                        end;\r
190               EXP_BUSCA: { estado de busqueda del proximo exponente }\r
191                        case c of { acciona segun el caracter leido }\r
192                            '0'..'9': trans := EXP; { si el caracter es un numero, empieza a leer el exponente }\r
193                            SPACE, TAB: trans := EXP_BUSCA; { si es un espacio o tabulador, sigue buscando }\r
194                            else trans := ERROR; { si no es ninguno de los anteriores, el estado pasa a ERROR }\r
195                        end;\r
196               EXP: { estado de lectura del exponente del termino actual del polinomio }\r
197                   case c of { acciona segun el caracter leido }\r
198                        '0'..'9': trans := EXP; { si es un digito, sigue en el mismo estado }\r
199                        CR: trans := EXP_FIN; { si es un ratorno de carro, finaliza el exponente\r
200                                                (quiere decir que hubo un <ENTER>) }\r
201                        ENDF: trans := FIN; { si es el final del archivo, se indica que termino su tarea }\r
202                        else trans := ERROR; { si es otra cosa, devuelve ERROR }\r
203                   end;\r
204               EXP_FIN: { estado de fin de la lectura del exponente del termino actual del polinomio }\r
205                       if c = LF then trans := EXP_FIN_BUSCA { debe ser un caracter de nueva linea (para completar el <ENTER>) }\r
206                                 else trans := ERROR; { si no lo es, devuelve ERROR }\r
207               EXP_FIN_BUSCA: { estado de fin de lectura de la nueva linea (luego de finalizar el exponente\r
208                                ahora decide si termino el polinomio o si sigue leyendo el proximo coeficiente }\r
209                       case c of { acciona segun el caracter leido }\r
210                            '-', '0'..'9': trans := COEF; { si es un digito (o negativo), pasa a leer en proximo coeficiente }\r
211                            CR: trans := POLI_FIN; { si es un ratorno de carro o nueva linea, finaliza el polinomio }\r
212                            else trans := ERROR; { si es otra cosa, devuelve ERROR }\r
213                       end;\r
214               POLI_FIN: { estado de finalizacion del polinomio actual }\r
215                       if c = LF then trans := COEF_BUSCA { debe ser un caracter de nueva linea (para completar el <ENTER>),\r
216                                                            entonces pasa a buscar el primer coeficiente del nuevo polinomio }\r
217                                 else trans := ERROR; { si no lo es, devuelve ERROR }\r
218               FIN: { estado que adquiere cuando se finalizo la tarea }\r
219                   trans := FIN; { se queda en este estado avisando que termino su tarea }\r
220               else { otro estado, no deberia ocurrir, salvo que se le pase a la funcion un estado de ERROR }\r
221                   trans := ERROR; { si es otro, da ERROR }\r
222          end; { case }\r
223     end; { trans }\r
224 \r
225     {########################################################}\r
226 \r
227     function cargarVectores(var v1, v2: Vector): boolean;\r
228     { Funcion que abre el archivo de texto con los datos, lo carga en el vector procesandolo debidamente a medida\r
229       que lo lee y, al finalizar, cierra el archivo de texto.\r
230       v1 es el primer vector a cargar\r
231       v2 es el segundo vector a cargar\r
232       devuelve true si la lectura fue hecha con exito, false si hubo un error }\r
233 \r
234     var\r
235        f: Text; { archivo de texto con los datos }\r
236        c: char; { caracter que se extrae del archivo de texto }\r
237        nombreArchivo: String; { nombre del archivo de datos }\r
238        est: Estado; { Indicador del estado actual de la lectura }\r
239        seguir: boolean; { indicador para saber si debe seguir con el proceso }\r
240        i, { indice del vector del polinomio para ser inicializado }\r
241        iExp, { valor temporal para almacenar al exponente }\r
242        code, { almacena el resultado de la funcion val (no se usa porque los\r
243                datos ya estan validados }\r
244        poliN: integer; { numero del polinomio que se esta leyendo }\r
245        rCoef: real; { valor temporal para almacenar al coeficiente }\r
246        exponente, { string que representa al exponente leido }\r
247        coeficiente: String; { string que representa al coeficiente leido }\r
248 \r
249     begin { cargarVectores }\r
250          rCoef := 0.0; { inicializacion de variable }\r
251          iExp := 0;    { inicializacion de variable }\r
252          coeficiente := ''; { inicializacion de variable }\r
253          exponente := '';   { inicializacion de variable }\r
254          est := INICIO; { empieza con el estado de INICIO }\r
255          poliN := 1; { establece que se procesara el primer polinomio }\r
256          inicializaVector(v1); { inicializacion del vector 1 (primer polinomio) }\r
257          inicializaVector(v2); { inicializacion del vector 2 (segundo polinomio) }\r
258          nombreArchivo := ObtenerNombreArchivo; { obtiene el nombre del archivo }\r
259          assign(f, nombreArchivo); { asigna la variable al nombre del archivo }\r
260          reset(f); { abre el archivo para leerlo desde el principio }\r
261          seguir := true; { inicializa seguir e true para comenzar el bucle }\r
262          while seguir do begin { continua mientras seguir sea true }\r
263            read(f, c); { lee un caracter del archivo de texto }\r
264            est := trans(c, est); { establece el nuevo estado de lectura }\r
265            case est of { toma una desicion dependiendo del estado en que se encuentre }\r
266                 INICIO: ; { No hace nada, nunca toma este valor. Solo incica que empezo el proceso }\r
267                 COEF_BUSCA: ; { No hace nada, solo espera hasta que hayan datos significativos }\r
268                 COEF, COEF_PUNTO: { Si esta leyendo el coeficiente ... }\r
269                    coeficiente := coeficiente + c; { concatena el caracter a la representacion\r
270                                                      de texto del coeficiente }\r
271                 COEF_FIN: ; { Si termino de leer el coeficiente, no hace nada, la asignacion\r
272                               se realiza cuando termina de leer el exponente (es necesario\r
273                               para establecer el indice del vector }\r
274                 EXP_BUSCA: ; { No hace nada, solo espera hasta que hayan datos significativos }\r
275                 EXP: { Si esta leyendo el exponente ... }\r
276                    exponente := exponente + c; { concatena el caracter a la representacion\r
277                                                  de texto del exponente }\r
278                 EXP_FIN: { Si termino de leer el exponente, hace las asignaciones correspondientes }\r
279                         begin { convirtiendo las cadenas de texto en real e integer, segun el caso }\r
280                              val(coeficiente, rCoef, code); { convierte el coeficiente en real }\r
281                              val(exponente, iExp, code); { convierte el exponente en integer }\r
282                              if iExp < TAM { si el exponente es menor que el tama¤o maximo permitido ... }\r
283                                 then if poliN = 1 then v1[iExp] := rCoef { asigna el valor correspondiente }\r
284                                                   else v2[iExp] := rCoef { al polinomio correspondiente }\r
285                                 else est := ERROR; { si no es menor, pone el estado en ERROR }\r
286                              coeficiente := ''; { una vez asignados, vacia los valores del coeficiente y el }\r
287                              exponente := '';   { exponente para poder realizar las lecturas de los proximos }\r
288                         end;\r
289                 EXP_FIN_BUSCA: ; { No hace nada, solo espera hasta que hayan datos significativos }\r
290                 POLI_FIN: { Si termino la lectura de un polinomio ... }\r
291                          if poliN = 1 then poliN := 2  { si se leyo el 1er polinomio, se indica que se leera el 2do }\r
292                                       else est := FIN; { si no (ya se leyo el segundo), pone el estado en FIN }\r
293                 FIN: { Si se finalizaron las tareas ... }\r
294                     begin\r
295                          { este codigo es el mismo que el de EXP_FIN, se repite aca solo por si el final del\r
296                            archivo esta pegado al fin del ultimo exponente, en cuyo caso no pasa por el estado\r
297                            de EXP_FIN (y, por ende, no se pueden hacer las asignaciones correspondientes }\r
298                          val(coeficiente, rCoef, code); { convierte el coeficiente en real }\r
299                          val(exponente, iExp, code); { convierte el exponente en integer }\r
300                          if iExp < TAM { si el exponente es menor que el tama¤o maximo permitido ... }\r
301                             then if poliN = 1 then v1[iExp] := rCoef { asigna el valor correspondiente }\r
302                                               else v2[iExp] := rCoef { al polinomio correspondiente }\r
303                             else est := ERROR; { si no es menor, pone el estado en ERROR }\r
304                          coeficiente := ''; { una vez asignados, vacia los valores del coeficiente y el }\r
305                          exponente := '';   { exponente para poder realizar las lecturas de los proximos }\r
306                          { fin del codigo identico a EXP_FIN }\r
307                          if poliN = 2 then cargarVectores := true { si se leyeron los 2 polinomios, devuelve true }\r
308                                       else cargarVectores := false; { si no se leyeron los dos, devuelve false }\r
309                          seguir := false; { poner seguir en false para que se termine el bucle }\r
310                     end;\r
311                 ERROR:  { Si hubo un error ... }\r
312                    begin\r
313                         cargarVectores := false; { Se devuelve false (hubo un ERROR, no se leyeron bien los vectores) }\r
314                         seguir := false; { seguir se pone en false para que termine el bucle }\r
315                    end;\r
316            end; { case }\r
317          end; { while }\r
318          close(f); { se cierra el archivo de lectura de datos }\r
319     end; { cargarVectores }\r
320 \r
321     {########################################################}\r
322 \r
323     procedure suma(v1, v2: Vector; var vr: Vector);\r
324     { procedimiento que suma dos polinomios.\r
325       v1: vector que contiene el primer polinomio a sumar\r
326       v2: vector que contiene el segundo polinomio a sumar\r
327       vr: vector donde se almacenara el resultado de la suma }\r
328 \r
329     var\r
330        i: integer; { indice para usar en el ciclo for }\r
331 \r
332     begin { suma }\r
333          inicializaVector(vr);        { inicializa al vector resultado en 0 para evitar que quede "basura" }\r
334          for i := 0 to TAM - 1 do     { recorre el vector (de tama¤o maximo TAM) }\r
335              vr[i] := v1[i] + v2[i];  { suma los coeficientes de los terminos con igual exponente }\r
336     end; { suma }\r
337 \r
338     {########################################################}\r
339 \r
340     procedure resta(v1, v2: Vector; var vr: Vector);\r
341     { procedimiento que resta dos polinomios.\r
342       v1: vector que contiene el primer polinomio\r
343       v2: vector que contiene el polinomio para restarle al primero\r
344       vr: vector donde se almacenara el resultado de la resta }\r
345 \r
346     var\r
347        i: integer; { indice para usar en el ciclo for }\r
348 \r
349     begin { resta }\r
350          inicializaVector(vr);        { inicializa al vector resultado en 0 para evitar que quede "basura" }\r
351          for i := 0 to TAM - 1 do     { recorre el vector (de tama¤o maximo TAM) }\r
352              vr[i] := v1[i] - v2[i];  { resta los coeficientes de los terminos con igual exponente }\r
353     end; { resta }\r
354 \r
355     {########################################################}\r
356 \r
357     procedure producto(v1, v2: Vector; var vr: Vector);\r
358     { procedimiento que multiplica dos polinomios.\r
359       v1: vector que contiene el primer polinomio a multiplicar\r
360       v2: vector que contiene el segundo polinomio a multiplicar\r
361       vr: vector donde se almacenara el resultado de la multiplicacion }\r
362 \r
363     var\r
364        i, j: integer; { indices para usar en los ciclos for }\r
365 \r
366     begin { producto }\r
367          inicializaVector(vr);        { inicializa al vector resultado en 0 para evitar que quede "basura" }\r
368          for i := 0 to TAM - 1 do     { recorre el 1er vector (de tama¤o maximo TAM) }\r
369              for j := 0 to TAM - 1 do { recorre el 2do vector (de tama¤o maximo TAM) }\r
370                  vr[i+j] := vr[i+j] + (v1[i] * v2[j]);\r
371                  { multiplica los coeficientes de los terminos y lo almacena en la posicion del exponente }\r
372                  { igual a la suma de los exponentes de v1 y v2, sumando el valor previo de dicha posicion }\r
373     end; { producto }\r
374 \r
375     {########################################################}\r
376 \r
377     procedure division(v1, v2: Vector; var vr, vResto: Vector);\r
378     { procedimiento que divide dos polinomios.\r
379       v1: vector que contiene el polinomio denominador\r
380       v2: vector que contiene el polinomio divisor\r
381       vr: vector donde se almacenara el resultado de la division\r
382       vResto: vector donde se almacenara el resto de la division }\r
383     var\r
384        i, j: integer; { indices para usar en los ciclos for }\r
385        vRTmp,         { vector auxuliares para almacenar el termino actual del resultado }\r
386        vTmp: Vector;  { vector auxuliares para almacenar el polinomio que es la multiplicacion del\r
387                         termino actual del resultado por el divisor }\r
388 \r
389     begin { division }\r
390          inicializaVector(vr);     { inicializa al vector resultado en 0 para evitar que quede "basura" }\r
391          inicializaVector(vResto); { inicializa al vector resultado en 0 para evitar que quede "basura" }\r
392          inicializaVector(vTmp);   { inicializa al vector resultado en 0 para evitar que quede "basura" }\r
393          inicializaVector(vRTmp);  { inicializa al vector resultado en 0 para evitar que quede "basura" }\r
394          for i := TAM - 1 downto 0 do  { recorre el 1er vector (de tama¤o maximo TAM) de atras para adelante }\r
395              if v1[i] <> 0 then break;\r
396              { busca empezando por el indice (exponete) mas alto el primer coeficiente no nulo }\r
397              { si lo encuentra sale del for dejando al valor de i como el de dicho inidice }\r
398          for j := TAM - 1 downto 0 do  { recorre el 2do vector (de tama¤o maximo TAM) de atras para adelante }\r
399              if v2[j] <> 0 then break;\r
400              { busca empezando por el indice (exponete) mas alto el primer coeficiente no nulo }\r
401              { si lo encuentra sale del for dejando al valor de j como el de dicho inidice }\r
402          while i >= j do\r
403            begin\r
404                 vr[i-j] := v1[i] / v2[j];\r
405                 vRTmp[i-j] := vr[i-j];\r
406                 producto(vRTmp, v2, vTmp);\r
407                 resta(v1, vTmp, v1);\r
408                 vRTmp[i-j] := 0;\r
409                 for i := i downto 0 do\r
410                     if v1[i] <> 0 then break;\r
411                     { busca empezando por el indice (exponete) mas alto el primer coeficiente no nulo }\r
412                     { si lo encuentra sale del for dejando al valor de i como el de dicho inidice }\r
413            end; { while }\r
414          vResto := v1;\r
415     end; { division }\r
416 \r
417     {########################################################}\r
418 \r
419 { Continuacion del programa principal }\r
420 \r
421 var\r
422    i: integer; { variable auxiliar }\r
423    v1, v2, vResult, vResto: Vector;\r
424    resultado: boolean;\r
425 \r
426 begin { Comienzo del programa principal }\r
427      resultado := cargarVectores(v1, v2);\r
428      if resultado then\r
429         begin\r
430           muestraVector(v1, 'Polinomio 1 = ');\r
431           muestraVector(v2, 'Polinomio 2 = ');\r
432           suma(v1, v2, vResult);\r
433           muestraVector(vResult, 'Polinomio 1 + Polinomio 2 = ');\r
434           resta(v1, v2, vResult);\r
435           muestraVector(vResult, 'Polinomio 1 - Polinomio 2 = ');\r
436           producto(v1, v2, vResult);\r
437           muestraVector(vResult, 'Polinomio 1 * Polinomio 2 = ');\r
438         end\r
439      else\r
440         begin\r
441           writeln('ERROR: No se pudieron cargar los datos. Revise que el formato del archivo');\r
442           writeln('       sea correcto y que no este siendo usado por otro programa.');\r
443         end;\r
444 end.