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