4 CRT, DOS; { Declaracion de funciones predefinidas
\r
5 para crear la interfaz grafica }
\r
8 VERSION = '0.9.8b (POLI_9)'; { version del programa }
\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
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
26 {########################################################}
\r
28 procedure muestraVector(var v: Vector; s: String);
\r
29 { procedimiento que imprime el polinomio v en pantalla con un titulo s }
\r
31 {########################################################}
\r
33 function exponente(exp: integer): String;
\r
36 s: String; { variable temporal }
\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
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
50 {########################################################}
\r
54 i: integer; { indice para usar en el ciclo for }
\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 (i = 0) and (v[i] = 0) then { si el primer exponente que encuentra es 0 y el coeficiente es 0, entonces }
\r
62 begin { muestra el resultado como 0 y sale del procedimiento }
\r
63 write('0'); { imprime que el resultado es cero }
\r
64 writeln; { separacion de una linea }
\r
65 writeln; { separacion de una linea }
\r
66 exit; { sale de este procedimiento }
\r
68 if (abs(v[i]) <> 1) or (i = 0) { si el modulo del coeficiente es distinto de 1 o si el exp. es 0 }
\r
69 then if abs(v[i]) - trunc(abs(v[i])) = 0 then write(trunc(v[i]):1, ' ') { imprime si es un numero entero }
\r
70 else write(v[i]:1:2, ' ') { imprime si es un numero real }
\r
71 else if v[i] = -1 then write('-'); { si es -1 entonces solo escribe el signo del termino }
\r
72 write(exponente(i));
\r
73 for i := i - 1 downto 0 do { recorre el vector de atras para adelante }
\r
74 if v[i] <> 0 then { si el coeficiente no es nulo, termina el for dejando a i en ese indice }
\r
76 if v[i] < 0 { si el coeficiente en negativo }
\r
77 then write(' - ') { le agrega el signo - }
\r
78 else write(' + '); { si no, le agrega el signo + }
\r
79 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
80 if abs(v[i]) - trunc(abs(v[i])) = 0 then write(trunc(abs(v[i])):1, ' ') { imprime si es un entero }
\r
81 else write(abs(v[i]):1:2, ' '); { imprime si es un real }
\r
82 write(exponente(i));
\r
84 writeln; { separacion de una linea }
\r
85 writeln; { separacion de una linea }
\r
86 end; { muestraVector }
\r
88 {########################################################}
\r
90 procedure inicializaVector(var v: Vector);
\r
91 { procedimiento que inicializa un vector de tama¤o tam }
\r
93 var i: integer; { indice para usar en el ciclo for }
\r
95 begin { inicializaVector }
\r
96 for i := 0 to TAM_MAX - 1 do { recorre el vector }
\r
97 v[i] := 0; { inicializa la variable actual en 0 }
\r
98 end; { inicializaVector }
\r
100 {########################################################}
\r
102 function ObtenerNombreArchivo: String;
\r
103 { funcion que obtiene un nombre de archivo valido (es decir, el nombre
\r
104 de un archivo que exista) }
\r
106 {########################################################}
\r
108 function fileExists(FileName: String): Boolean;
\r
109 { funcion extraida de la ayuda del Turbo Pascal 7
\r
110 indica si el archivo existe }
\r
117 Assign(F, FileName);
\r
118 FileMode := 0; { Set file access to read only }
\r
122 FileExists := (IOResult = 0) and (FileName <> '');
\r
123 end; { FileExists }
\r
125 {########################################################}
\r
127 { Continuacion de la funcion ObtenerNombreArchivo }
\r
129 DEFAUL_FILE_NAME = 'datos.txt'; { nombre del archivo por defecto }
\r
132 tmp: String; { cadena para almacenar el resultado temporal }
\r
134 begin { ObtenerNombreArchivo }
\r
135 { mensaje para entrada del nombre de archivo }
\r
136 writeln('Ingrese el nombre del archivo con los datos (ENTER = ', DEFAUL_FILE_NAME, '):');
\r
137 readln(tmp); { entrada del nombre de archivo }
\r
138 if tmp = '' then tmp := DEFAUL_FILE_NAME; { se fija si no se ingreso nada y reasigana el nombre }
\r
139 while not fileExists(tmp) do { repite el proceso hasta que el archivo exista }
\r
141 write('El archivo ', tmp, ' no existe. Ingrese un nombre correcto');
\r
142 if tmp = DEFAUL_FILE_NAME { si es el nombre de archivo predeterminado }
\r
143 then { entonces, elije un mensaje apropiado }
\r
146 begin { si no es el predeterminado, muestra otro mensaje }
\r
148 write('(ENTER = ', DEFAUL_FILE_NAME, '): ');
\r
150 readln(tmp); { vuelve a leer el nombre del archivo para ser verificado }
\r
151 if tmp = '' then tmp := DEFAUL_FILE_NAME; { asigna como nombre de archivo al predeterminado
\r
152 si no se escribio nada }
\r
153 end; { fin del loop de verificacion }
\r
154 ObtenerNombreArchivo := tmp; { asigna el nombre correcto al valor de salida de la funcion }
\r
155 end; { ObtenerNombreArchivo }
\r
157 {########################################################}
\r
159 function trans(c: char; e: Estado): Estado;
\r
160 { establece el estado en el que se encuentra la lectura }
\r
161 { c es el caracter que se leyo, e es el estado actual de la lectura }
\r
164 case e of { acciona segun es estado actual de la lectura }
\r
165 INICIO: { estado de inicio de la lectura }
\r
166 case c of { acciona segun el caracter leido }
\r
167 '-', '0'..'9': trans := COEF; { si es un numero (o negativo), empieza a leer el coeficiente }
\r
168 SPACE, TAB, CR, LF: trans := COEF_BUSCA; { si es un caracter tipo "espacio", busca el prox. coef. }
\r
169 else trans := ERROR; { si es otro, da ERROR }
\r
171 COEF_BUSCA: { estado de busqueda del primer ceoficiente del polinomio }
\r
172 case c of { acciona segun el caracter leido }
\r
173 '-', '0'..'9': trans := COEF; { si es un numero (o negativo), empieza a leer el coeficiente }
\r
174 SPACE, TAB, CR, LF: trans := COEF_BUSCA; { si es un caracter tupo "espacio", sigue buscando }
\r
175 ENDF: trans := FIN; { si es el caracter de fin de archivo, pasa al estado de tarea finalizada }
\r
176 else trans := ERROR; { si es otro, da ERROR }
\r
178 COEF: { estado de lectura del coeficiente del termino del polinomio (sin punto decimal) }
\r
179 case c of { acciona segun el caracter leido }
\r
180 '0'..'9': trans := COEF; { si es un numero sigue con el mismo estado }
\r
181 '.': trans := COEF_PUNTO; { si es punto cambia al estado COEF_PUNTO }
\r
182 SPACE, TAB: trans := COEF_FIN; { si es un espacio o un tabulador, finaliza la lectura del coeficiente }
\r
183 else trans := ERROR; { si es otra cosa, pasa a estado de error }
\r
185 COEF_PUNTO: { estado de lectura del coeficiente del termino del polinomio (con punto decimal) }
\r
186 case c of { acciona segun el caracter leido }
\r
187 '0'..'9': trans := COEF_PUNTO; { si es un numero sigue con el mismo estado }
\r
188 SPACE, TAB: trans := COEF_FIN; { si es un espacio o un tabulador, finaliza la lectura del coeficiente }
\r
189 else trans := ERROR; { si es otra cosa, pasa a estado de error }
\r
191 COEF_FIN: { estado de fin de la lectura del coeficiente del termino del polinomio }
\r
192 case c of { acciona segun el caracter leido }
\r
193 '0'..'9': trans := EXP; { si el caracter es un numero establece el estado en EXP (exponente) }
\r
194 SPACE, TAB: trans := EXP_BUSCA; { si es un espacio o tabulador, pasa a buscar el proximo exponente }
\r
195 else trans := ERROR; { si no es ninguno de los anteriores, el estado pasa a ERROR }
\r
197 EXP_BUSCA: { estado de busqueda del proximo exponente }
\r
198 case c of { acciona segun el caracter leido }
\r
199 '0'..'9': trans := EXP; { si el caracter es un numero, empieza a leer el exponente }
\r
200 SPACE, TAB: trans := EXP_BUSCA; { si es un espacio o tabulador, sigue buscando }
\r
201 else trans := ERROR; { si no es ninguno de los anteriores, el estado pasa a ERROR }
\r
203 EXP: { estado de lectura del exponente del termino actual del polinomio }
\r
204 case c of { acciona segun el caracter leido }
\r
205 '0'..'9': trans := EXP; { si es un digito, sigue en el mismo estado }
\r
206 CR: trans := EXP_FIN; { si es un ratorno de carro, finaliza el exponente
\r
207 (quiere decir que hubo un <ENTER>) }
\r
208 ENDF: trans := FIN; { si es el final del archivo, se indica que termino su tarea }
\r
209 else trans := ERROR; { si es otra cosa, devuelve ERROR }
\r
211 EXP_FIN: { estado de fin de la lectura del exponente del termino actual del polinomio }
\r
212 if c = LF then trans := EXP_FIN_BUSCA { debe ser un caracter de nueva linea (para completar el <ENTER>) }
\r
213 else trans := ERROR; { si no lo es, devuelve ERROR }
\r
214 EXP_FIN_BUSCA: { estado de fin de lectura de la nueva linea (luego de finalizar el exponente
\r
215 ahora decide si termino el polinomio o si sigue leyendo el proximo coeficiente }
\r
216 case c of { acciona segun el caracter leido }
\r
217 '-', '0'..'9': trans := COEF; { si es un digito (o negativo), pasa a leer en proximo coeficiente }
\r
218 CR: trans := POLI_FIN; { si es un ratorno de carro o nueva linea, finaliza el polinomio }
\r
219 else trans := ERROR; { si es otra cosa, devuelve ERROR }
\r
221 POLI_FIN: { estado de finalizacion del polinomio actual }
\r
222 if c = LF then trans := COEF_BUSCA { debe ser un caracter de nueva linea (para completar el <ENTER>),
\r
223 entonces pasa a buscar el primer coeficiente del nuevo polinomio }
\r
224 else trans := ERROR; { si no lo es, devuelve ERROR }
\r
225 FIN: { estado que adquiere cuando se finalizo la tarea }
\r
226 trans := FIN; { se queda en este estado avisando que termino su tarea }
\r
227 else { otro estado, no deberia ocurrir, salvo que se le pase a la funcion un estado de ERROR }
\r
228 trans := ERROR; { si es otro, da ERROR }
\r
232 {########################################################}
\r
234 function cargarVectores(var v1, v2: Vector): boolean;
\r
235 { Funcion que abre el archivo de texto con los datos, lo carga en el vector procesandolo debidamente a medida
\r
236 que lo lee y, al finalizar, cierra el archivo de texto.
\r
237 v1 es el primer vector a cargar
\r
238 v2 es el segundo vector a cargar
\r
239 devuelve true si la lectura fue hecha con exito, false si hubo un error }
\r
242 f: Text; { archivo de texto con los datos }
\r
243 c: char; { caracter que se extrae del archivo de texto }
\r
244 nombreArchivo: String; { nombre del archivo de datos }
\r
245 est: Estado; { Indicador del estado actual de la lectura }
\r
246 seguir: boolean; { indicador para saber si debe seguir con el proceso }
\r
247 i, { indice del vector del polinomio para ser inicializado }
\r
248 iExp, { valor temporal para almacenar al exponente }
\r
249 code, { almacena el resultado de la funcion val (no se usa porque los
\r
250 datos ya estan validados }
\r
251 poliN: integer; { numero del polinomio que se esta leyendo }
\r
252 rCoef: real; { valor temporal para almacenar al coeficiente }
\r
253 exponente, { string que representa al exponente leido }
\r
254 coeficiente: String; { string que representa al coeficiente leido }
\r
256 begin { cargarVectores }
\r
257 rCoef := 0.0; { inicializacion de variable }
\r
258 iExp := 0; { inicializacion de variable }
\r
259 coeficiente := ''; { inicializacion de variable }
\r
260 exponente := ''; { inicializacion de variable }
\r
261 est := INICIO; { empieza con el estado de INICIO }
\r
262 poliN := 1; { establece que se procesara el primer polinomio }
\r
263 inicializaVector(v1); { inicializacion del vector 1 (primer polinomio) }
\r
264 inicializaVector(v2); { inicializacion del vector 2 (segundo polinomio) }
\r
265 nombreArchivo := ObtenerNombreArchivo; { obtiene el nombre del archivo }
\r
266 assign(f, nombreArchivo); { asigna la variable al nombre del archivo }
\r
267 reset(f); { abre el archivo para leerlo desde el principio }
\r
268 seguir := true; { inicializa seguir e true para comenzar el bucle }
\r
269 while seguir do begin { continua mientras seguir sea true }
\r
270 read(f, c); { lee un caracter del archivo de texto }
\r
271 est := trans(c, est); { establece el nuevo estado de lectura }
\r
272 case est of { toma una desicion dependiendo del estado en que se encuentre }
\r
273 INICIO: ; { No hace nada, nunca toma este valor. Solo incica que empezo el proceso }
\r
274 COEF_BUSCA: ; { No hace nada, solo espera hasta que hayan datos significativos }
\r
275 COEF, COEF_PUNTO: { Si esta leyendo el coeficiente ... }
\r
276 coeficiente := coeficiente + c; { concatena el caracter a la representacion
\r
277 de texto del coeficiente }
\r
278 COEF_FIN: ; { Si termino de leer el coeficiente, no hace nada, la asignacion
\r
279 se realiza cuando termina de leer el exponente (es necesario
\r
280 para establecer el indice del vector }
\r
281 EXP_BUSCA: ; { No hace nada, solo espera hasta que hayan datos significativos }
\r
282 EXP: { Si esta leyendo el exponente ... }
\r
283 exponente := exponente + c; { concatena el caracter a la representacion
\r
284 de texto del exponente }
\r
285 EXP_FIN: { Si termino de leer el exponente, hace las asignaciones correspondientes }
\r
286 begin { convirtiendo las cadenas de texto en real e integer, segun el caso }
\r
287 val(coeficiente, rCoef, code); { convierte el coeficiente en real }
\r
288 val(exponente, iExp, code); { convierte el exponente en integer }
\r
289 if iExp < TAM { si el exponente es menor que el tama¤o maximo permitido ... }
\r
290 then if poliN = 1 then v1[iExp] := rCoef { asigna el valor correspondiente }
\r
291 else v2[iExp] := rCoef { al polinomio correspondiente }
\r
292 else est := ERROR; { si no es menor, pone el estado en ERROR }
\r
293 coeficiente := ''; { una vez asignados, vacia los valores del coeficiente y el }
\r
294 exponente := ''; { exponente para poder realizar las lecturas de los proximos }
\r
296 EXP_FIN_BUSCA: ; { No hace nada, solo espera hasta que hayan datos significativos }
\r
297 POLI_FIN: { Si termino la lectura de un polinomio ... }
\r
298 if poliN = 1 then poliN := 2 { si se leyo el 1er polinomio, se indica que se leera el 2do }
\r
299 else est := FIN; { si no (ya se leyo el segundo), pone el estado en FIN }
\r
300 FIN: { Si se finalizaron las tareas ... }
\r
302 { este codigo es el mismo que el de EXP_FIN, se repite aca solo por si el final del
\r
303 archivo esta pegado al fin del ultimo exponente, en cuyo caso no pasa por el estado
\r
304 de EXP_FIN (y, por ende, no se pueden hacer las asignaciones correspondientes }
\r
305 val(coeficiente, rCoef, code); { convierte el coeficiente en real }
\r
306 val(exponente, iExp, code); { convierte el exponente en integer }
\r
307 if iExp < TAM { si el exponente es menor que el tama¤o maximo permitido ... }
\r
308 then if poliN = 1 then v1[iExp] := rCoef { asigna el valor correspondiente }
\r
309 else v2[iExp] := rCoef { al polinomio correspondiente }
\r
310 else est := ERROR; { si no es menor, pone el estado en ERROR }
\r
311 coeficiente := ''; { una vez asignados, vacia los valores del coeficiente y el }
\r
312 exponente := ''; { exponente para poder realizar las lecturas de los proximos }
\r
313 { fin del codigo identico a EXP_FIN }
\r
314 if poliN = 2 then cargarVectores := true { si se leyeron los 2 polinomios, devuelve true }
\r
315 else cargarVectores := false; { si no se leyeron los dos, devuelve false }
\r
316 seguir := false; { poner seguir en false para que se termine el bucle }
\r
318 ERROR: { Si hubo un error ... }
\r
320 cargarVectores := false; { Se devuelve false (hubo un ERROR, no se leyeron bien los vectores) }
\r
321 seguir := false; { seguir se pone en false para que termine el bucle }
\r
325 close(f); { se cierra el archivo de lectura de datos }
\r
326 end; { cargarVectores }
\r
328 {########################################################}
\r
330 procedure suma(v1, v2: Vector; var vr: Vector);
\r
331 { procedimiento que suma dos polinomios.
\r
332 v1: vector que contiene el primer polinomio a sumar
\r
333 v2: vector que contiene el segundo polinomio a sumar
\r
334 vr: vector donde se almacenara el resultado de la suma }
\r
337 i: integer; { indice para usar en el ciclo for }
\r
340 inicializaVector(vr); { inicializa al vector resultado en 0 para evitar que quede "basura" }
\r
341 for i := 0 to TAM - 1 do { recorre el vector (de tama¤o maximo TAM) }
\r
342 vr[i] := v1[i] + v2[i]; { suma los coeficientes de los terminos con igual exponente }
\r
345 {########################################################}
\r
347 procedure resta(v1, v2: Vector; var vr: Vector);
\r
348 { procedimiento que resta dos polinomios.
\r
349 v1: vector que contiene el primer polinomio
\r
350 v2: vector que contiene el polinomio para restarle al primero
\r
351 vr: vector donde se almacenara el resultado de la resta }
\r
354 i: integer; { indice para usar en el ciclo for }
\r
357 inicializaVector(vr); { inicializa al vector resultado en 0 para evitar que quede "basura" }
\r
358 for i := 0 to TAM - 1 do { recorre el vector (de tama¤o maximo TAM) }
\r
359 vr[i] := v1[i] - v2[i]; { resta los coeficientes de los terminos con igual exponente }
\r
362 {########################################################}
\r
364 procedure producto(v1, v2: Vector; var vr: Vector);
\r
365 { procedimiento que multiplica dos polinomios.
\r
366 v1: vector que contiene el primer polinomio a multiplicar
\r
367 v2: vector que contiene el segundo polinomio a multiplicar
\r
368 vr: vector donde se almacenara el resultado de la multiplicacion }
\r
371 i, j: integer; { indices para usar en los ciclos for }
\r
374 inicializaVector(vr); { inicializa al vector resultado en 0 para evitar que quede "basura" }
\r
375 for i := 0 to TAM - 1 do { recorre el 1er vector (de tama¤o maximo TAM) }
\r
376 for j := 0 to TAM - 1 do { recorre el 2do vector (de tama¤o maximo TAM) }
\r
377 vr[i+j] := vr[i+j] + (v1[i] * v2[j]);
\r
378 { multiplica los coeficientes de los terminos y lo almacena en la posicion del exponente }
\r
379 { igual a la suma de los exponentes de v1 y v2, sumando el valor previo de dicha posicion }
\r
382 {########################################################}
\r
384 function division(v1, v2: Vector; var vr, vResto: Vector): boolean;
\r
385 { procedimiento que divide dos polinomios.
\r
386 v1: vector que contiene el polinomio denominador
\r
387 v2: vector que contiene el polinomio divisor
\r
388 vr: vector donde se almacenara el resultado de la division
\r
389 vResto: vector donde se almacenara el resto de la division
\r
390 devuelve true si el segundo polinomio no es 0 y se efectua la division y
\r
391 devuelve false si segundo polinomio es 0 y no se puede efectuar la division }
\r
394 i, j: integer; { indices para usar en los ciclos for }
\r
395 vRTmp, { vector auxuliares para almacenar el termino actual del resultado }
\r
396 vTmp: Vector; { vector auxuliares para almacenar el polinomio que es la multiplicacion del
\r
397 termino actual del resultado por el divisor }
\r
400 inicializaVector(vr); { inicializa al vector resultado en 0 para evitar que quede "basura" }
\r
401 inicializaVector(vResto); { inicializa al vector resultado en 0 para evitar que quede "basura" }
\r
402 inicializaVector(vTmp); { inicializa al vector resultado en 0 para evitar que quede "basura" }
\r
403 inicializaVector(vRTmp); { inicializa al vector resultado en 0 para evitar que quede "basura" }
\r
404 for i := TAM - 1 downto 0 do { recorre el 1er vector (de tama¤o maximo TAM) de atras para adelante }
\r
405 if v1[i] <> 0 then break;
\r
406 { busca empezando por el indice (exponete) mas alto el primer coeficiente no nulo }
\r
407 { si lo encuentra sale del for dejando al valor de i como el de dicho inidice }
\r
408 for j := TAM - 1 downto 0 do { recorre el 2do vector (de tama¤o maximo TAM) de atras para adelante }
\r
409 if v2[j] <> 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 j como el de dicho inidice }
\r
412 if (j = 0) and (v2[j] = 0) { si el no se encontro ningun coeficiente no nulo, entonces }
\r
413 then { el polinomio 2 es nulo y no se puede efectuar la division }
\r
414 begin { se devuelve false y se quedan los vectores resultado en 0 }
\r
415 division := false; { devuelve false }
\r
416 exit; { sale del procedimiento }
\r
418 while i >= j do { si el primer exponente es mayor o igual que el segundo empieza a dividir }
\r
420 vr[i-j] := v1[i] / v2[j]; { almacena el resultado de la division entre los coeficientes en
\r
421 la posicion de la resta de ambos }
\r
422 vRTmp[i-j] := vr[i-j]; { almacena ese resultado en un polinomio temporal cuyo unico termio
\r
423 no nulo es el del exponente i-j, para luego multiplicarlo }
\r
424 producto(vRTmp, v2, vTmp);{ multiplica este polinomio por el segundo almacenado el resultado
\r
425 en otro temporal, para luego hacer la resta }
\r
426 resta(v1, vTmp, v1); { resta al primer polinomio, v1, (en su estado actual, no el original)
\r
427 el temporal vTmp y lo almacena en v1, para poder volver a operarlo de
\r
429 vRTmp[i-j] := 0; { resetea el termino del temporal vRTmp que se asigno para los calculos }
\r
430 for i := i downto 0 do { recorre el vector v1 (de tama¤o maximo TAM) de atras para adelante }
\r
431 if v1[i] <> 0 then break;
\r
432 { busca empezando por el indice (exponete) i el primer coeficiente no nulo
\r
433 si lo encuentra sale del for dejando al valor de i como el de dicho inidice }
\r
435 vResto := v1; { asigna el vector v1 (que ya no se procesara mas al resto }
\r
436 division := true; { devuelve true indicando que se finalizo con exito }
\r
439 {########################################################}
\r
441 { Continuacion del programa principal }
\r
444 i: integer; { variable auxiliar }
\r
445 v1, v2, vResult, vResto: Vector; { vectores para hacer las operaciones }
\r
446 continua: boolean; { valor para obtener los resultados de algunas funciones }
\r
448 begin { Comienzo del programa principal }
\r
449 continua := cargarVectores(v1, v2);
\r
452 muestraVector(v1, 'Polinomio 1 = ');
\r
453 muestraVector(v2, 'Polinomio 2 = ');
\r
454 suma(v1, v2, vResult);
\r
455 muestraVector(vResult, 'Polinomio 1 + Polinomio 2 = ');
\r
456 resta(v1, v2, vResult);
\r
457 muestraVector(vResult, 'Polinomio 1 - Polinomio 2 = ');
\r
458 producto(v1, v2, vResult);
\r
459 muestraVector(vResult, 'Polinomio 1 * Polinomio 2 = ');
\r
460 continua := division(v1, v2, vResult, vResto);
\r
464 muestraVector(vResult, 'Polinomio 1 / Polinomio 2 = ');
\r
465 muestraVector(vResto, 'Resto = ');
\r
467 else writeln('El segundo polinomio es nulo, por lo tanto no se puede efectuar la division');
\r
471 writeln('ERROR: No se pudieron cargar los datos. Revise que el formato del archivo');
\r
472 writeln(' sea correcto y que no este siendo usado por otro programa.');
\r