Está en la página 1de 13

Universidad Nacional Andrs Bello

Facultad de Ingeniera
Escuela de Informtica
Ingeniera Civil en Informtica

LABORATORIO N1
Estructuras de Datos Lineales: Aritmtica de Polinomios
Algoritmos y Estructuras de Datos

Nombre: Matas Contreras Gonzlez


RUT: 18.811.656-6
Profesor(a): Irene Zuccar Parrini
Ayudantes: Matas Greco Chanda
Daniel Fernndez Gonzlez

TABLA DE CONTENIDOS

1. INTRODUCCIN.

2. TDA POLINOMIOS

2.1 DISEO DE LA ESTRUCTURA


4
2.1.1 ESTRUCTURA
4
2.1.2 TIPOS DE DATOS
5
2.3 ALGORITMOS DE OPERACIONES CONSTRUCTORAS, MODIFICADORAS Y ANALIZADORAS
5
2.2.1 OPERACIONES CONSTRUCTORAS
6
2.2.1 OPERACIONES ANALIZADORAS
7
2.2.1 OPERACIONES MODIFICADORAS - BSICAS
8
2.2.2 OPERACIONES MODIFICADORAS - MATEMTICAS
9
3. CONCLUSIONES.

11

4. MANUAL DE USUARIO

12

5. REFERENCIAS BIBLIOGRFICAS.

13

1. INTRODUCCIN.
El presente informe expone el desarrollo del primer laboratorio realizado en la asignatura
de Algoritmos y Estructuras de Datos. Concretamente consiste en hacer un programa que permita
realizar ciertas operaciones sobre dos polinomios escritos en lenguaje matemtico en un archivo
de texto. El programa construido est escrito en el lenguaje de programacin C (Kernighan &
Ritchie, 1991).
Es importante recordar que si p(x) es un polinomio en la variable x, su expresin
matemtica correspondiente ser:
n

p ( x ) = ai x

i=0

Donde los valores ai son enteros positivos1, e i corresponde al exponente de x.


Considerando que el archivo con los datos de entrada corresponden a archivos de texto
plano, los polinomios ingresados, deben seguir el formato: coeficientexexponente, y luego un
smbolo + para anexar el siguiente trmino del polinomio.
Por ejemplo, si el polinomio ingresado es

5 x +32 x + 9 x

, en el archivo de texto

deber escribirse: 5x8+32x2+9x6.


A travs de este documento se presenta el diseo del TDA propuesto, con el detalle de la
estructura y tipos definidos, las validaciones y las operaciones constructoras, analizadoras y
modificadoras. Dentro de stas ltimas, se exponen los algoritmos concretos y su explicacin,
para las operaciones de suma, resta y multiplicacin entre dos polinomios, y para la derivacin y
evaluacin de un polinomio en un valor especfico.
Se finaliza este documento con las conclusiones al trabajo realizado, el manual de usuario
para el correcto uso del programa construido, y la bibliografa consultada.

1 En el enunciado de este trabajo se establece que los coeficientes de cada polinomio de entrada, sern
enteros positivos.
3

2.

TDA POLINOMIOS

En este apartado se proceder a explicar el diseo del TDA Polinomio, en distintos


mbitos. Como fue implementado, su estructura y las operaciones que se realizan. Para poder
explicarlos de manera ms sencilla se expondrn en lenguaje natural algunas funciones que
fueron necesarias para realizar este trabajo.
2.1DISEO DE LA ESTRUCTURA
La estructura diseada es una lista dinmica simplemente enlazada, que cada nodo que
posee es un trmino del polinomio y a su vez cada nodo tiene dos campos en los cuales estn el
coeficiente y el exponente de cada trmino del polinomio. En cada nodo se tiene primero el
campo coef, que representa el coeficiente nmero del cada trmino del polinomio, tiene tambin
el campo exp que representa el exponente de cada trmino del polinomio; y como es una lista
simplemente enlazada tambin se tiene el puntero siguiente para as poder enlazar con el nodo
que sigue.
En la figura 2.1 se muestra un ejemplo de un polinomio y la grfica de su correspondiente
representacin en la estructura diseada.

Campo coef

0
Campo exp

P ( x )=3 x + 8 x +4

Figura 2.1. Ejemplo de un polinomio (izquierda) y su correspondiente representacin mediante listas dinmicas
simplemente enlazadas (derecha).

Como se muestra en el ejemplo, esa es la representacin grfica de cmo se conforma la


lista con un polinomio, se puede ver cada termino y el respectivo puntero hacia el nodo siguiente.
2.1.1 Estructura
La estructura del programa se basa en rescatar los datos ingresados por el archivo de
texto. Una vez tomado los datos, se crea un nodo para cada trmino del polinomio; con un campo
para el coeficiente numrico y el exponente de cada trmino. Estos nodos creados se insertan en
una nueva lista ordenados de mayor a menor segn su exponente. Cuando la lista ya ha sido
creada se toma cada termino del polinomio para as poder comparar con el polinomio de la otra
lista y poder hacer las respectivas operaciones que se requieran (sumar, restar y derivar).

2.1.2 Tipos de Datos


Los tipos de datos utilizados en un gran parte fueron listas. Primero se necesito la
estructura del nodo la cual fue definida de la siguiente forma:
struct NodoLista{
int bas;
int exp;
struct NodoLista *sig;
};
typedef struct NodoLista tNodo;
typedef tNodo *Lista;

Siendo esta la estructura para poder tener en cada nodo un trmino del polinomio con su
respectiva base y exponente. Con eso cada expresin del polinomio puede ser usado en las distintas

funciones que se requieren.


En cuanto a las funciones, principalmente los datos utilizados son las listas con los
polinomios; estas funciones sern explicadas ms adelante.

2.3

ALGORITMOS

DE

OPERACIONES

CONSTRUCTORAS,

MODIFICADORAS

ANALIZADORAS
Se trabaj con distintas funciones las cuales permiten trabajar con las listas de manera
ms rpida y sencilla. Para cada necesidad se implement una funcin, algunas funciones fueron
sacadas del apunte funciones rescatadas del ejemplo "lista simplemente enlazadas" y
5

modificadas para el uso de este laboratorio. A continuacin se explicaran las funciones


clasificadas segn el tipo, ya sea constructora, analizadora o modificadora.

2.2.1 Operaciones Constructoras


En la figura 2.2 se expone el algoritmo diseado para insertar los nodos a la nueva lista.
Cada nodo creado, tiene su respectiva base y su exponente. Tambin como se ve en la funcin los
nodos creados van de mayor a menor segn el exponente que posean.
Lista Lista_INSERTAR(Lista L, int b, int e)
{
Lista pNodo, aux1, aux2;
pNodo = Lista_CREA_NODO(b,e);
SI (L == NULL)
L = pNodo;
SINO{
SI (e > L->exp)
{
pNodo->sig = L;
L = pNodo;
}
SINO{
aux1 = L;
MIENTRAS(aux1 != NULL)HACER {
SI (aux1->exp > e)
aux1 = aux1->sig;
SINO
break;
}
aux2 = L;
MIENTRAS (aux2->sig != aux1)HACER
aux2 = aux2->sig;
aux2->sig = pNodo;
pNodo->sig = aux1;
aux1 = NULL;
aux2 = NULL;
}
}
pNodo = NULL;
RETORNAR L;

Figura 2.2. Algoritmo utilizado para insertar los nodos a la lista

Tambin como se puede ver en la funcin se hace un llamado a la funcin


Lista_CREA_NODO (b,e), dicha llamada se debe a la que funcin crea nodo se usa para poder
hacer cada nuevo nodo con sus respectivas variables.

2.2.1

Operaciones Analizadoras

En cuanto a lo que se dice operacin analizadora, casi todas las funciones tienen
comparativos para poder trabajar ambos polinomios, es decir, gran parte de las funciones
compara los exponentes de los polinomios para sumar o restar. O bien algunas funciones con las
que se trabajaron, analizan el exponente que posee un trmino determinado del polinomio para
as poder ordenar de mayor a menor. Tambin cuando se requiere derivar se analiza el exponente
porque este es el de mayor importancia en la derivacin.

Cada operacin analizadora que realizan las funciones, va definida por unas cuantas lneas
de cdigo que no son muy extensas. Ms que nada son comparaciones mediante IFs los cuales
pueden ser vistos en las funciones que van ser explicadas ms adelante en el apartado 2.2.1 y
tambin en el apartado 2.2.2

2.2.1 Operaciones Modificadoras - Bsicas


Sin duda esta es la principal funcin modificadora, gracias a esta funcin se puede separar
cada nodo para poder trabajarlo independiente; para as poder aplicar las funciones matemticas
con mayor facilidad.
Lista Lista_CORTA(char A[tmn]){
Lista L1;
int BASE, EXP;
int cont, i;
char *tok;
char Monomios[tmn][tmn];
L1 = Lista_INICIA();
cont=0;
tok = strtok(A, "+");
Mientras (tok != NULL) Hacer
{
strcpy(Monomios[cont], tok);
cont++;
tok = strtok(NULL, "+");
}
Para (i=0;i<cont;i++)
{
tok = strtok(Monomios[i], "x");
SI (tok != NULL)
BASE = atoi(tok);
SI
BASE = 1;
tok = strtok(NULL, "+");
SI (tok != NULL)
EXP = atoi(tok);
Sino
EXP = 1;
L1 = Lista_INSERTAR(L1, BASE, EXP);
}
retornar L1;

Figura 2.3 en la cual se muestra el algoritmo para tokenizar cada nodo.


Esta funcin lo que hace bsicamente, es tomar cada parmetro que esta anterior a un
signo + y tokenizar para as poder trabajar con los nodos de una manera ms rpida a la hora
de programar las dems funciones necesarias.
2.2.2 Operaciones Modificadoras - Matemticas
Esencialmente las funciones matemticas trabajadas en el programa son tres (suma, resta
y derivacin), las cuales fueron implementadas separadas unas de las otras. Siendo as posible
que solo se pueda se pueda hacer una de ellas sin necesidad de usar a la otra.
En la siguiente figura se muestra el algoritmo diseado para poder sumar los trminos de
los polinomios.
8

Lista Lista_SUMA(Lista P1, Lista P2)


{
Lista aux2,aux_suma;
int cont = 0, s1,s2;
aux_suma = Lista_INICIA();
aux2=P2;
MIENTRAS (P1 != NULL)
{
P2 = aux2;
MIENTRAS (P2 != NULL)
{
SI (P1->exp == P2->exp)
{
s2=P1->exp;
s1=P1->bas+P2->bas;
aux_suma=Lista_INSERTAR(aux_suma,s1,s2);
cont=1;
}
P2 = P2->sig;
}
SI (cont == 0)
{
s2=P1->exp;
s1=P1->bas;
aux_suma=Lista_INSERTAR(aux_suma,s1,s2);
}
P1 = P1->sig;
cont = 0;
}
Retornar aux_suma;

Figura 2.4 en la cual se muestra el algoritmo para sumar cada nodo que contenga los
mismos exponentes.
En cuanto al algoritmo de la resta, es similar al de la suma. Solo cambian algunas lneas de
cdigo para poder restar los trminos semejantes de cada polinomio.

Para la derivacin el algoritmo utilizado fue complemente distinto, en el algoritmo se multiplica


el campo de la base por el campo que tiene el exponente y a este ltimo se le resta uno.
En la siguiente figura se muestra el algoritmo de la derivacin:

Lista Lista_DERIVADA(Lista P)
{
Lista aux, aux_der;
aux_der = Lista_INICIA();
MIENTRAS(P != NULL)
{
aux->bas = P->bas * P->exp;
aux->exp= P->exp - 1;
aux_der=Lista_INSERTAR(aux_der, aux->bas, aux->exp);
P = P->sig;
}
retornar aux_der;
}
Figura 2.5 donde se muestra el algoritmo de derivacin.
Por ende en las tres operaciones modificadoras se trabaja con los nodos de forma independiente
unos de otros. En cuanto a suma y resta existe una comparacin entre el polinomio uno y el dos,
para as poder determinar los trminos semejantes entre ambos y poder trabajarlos segn la
funcin lo requiera. No as en la derivacin, donde se trabaja cada polinomio por separado y a su
vez tambin cada nodo separado, derivando cada nodo sin sumar ni estar nada entre ellos.

10

3.

CONCLUSIONES.

A modo de conclusin se puede decir que el hecho de tokenizar cada nodo, hace que el trabajo
sea ms ordenado y ms sencillo a la hora de trabajar en las funciones.
Tambin se puede decir que en cuanto a la hora de programar la funcin derivacin es mucho
ms sencilla en cuanto a las dems. Si bien la idea de tokenizar cada trmino lo hace ms fcil
para trabajar con los trminos, programarla es de mucha mayor dificultad.
Por ltimo el hecho de trabajar con funciones matemticas hace que sea un poco ms fcil de
entender la problemtica, porque se lleva algo conocido a la programacin. Creando as un mayor
entendimiento de las listas enlazadas simples que fue con las cuales se trabaj. A la hora de
trabajar con algo conocido hace que sea ms llevadera la programacin y de una manera ms
fcil, tambin el uso de diagramas o representaciones graficas ayuda mucho a crear una idea
antes de entrar a programar directamente.

11

4.

MANUAL DE USUARIO

El programa es una ejecucin simple, ya que este carece de un men y aplica todas funciones de
inmediato a los polinomios ingresados en el archivo de texto.
Entonces como primer paso esta ingresar trminos al archivo de texto llamado datos.txt de la
siguiente manera:

Una vez ingresado los datos, se puede ejecutar el programa que muestra los siguientes resultados
para el caso de prueba con los datos de la figura anterior.

12

Si bien el programa a la hora de la ejecucin es bastante simple, tambin cuenta con algunos
errores que no pudieron ser manejados correctamente que se detallan a continuacin:
-

5.

Si a la hora de ingresar datos, el usuario ingresa solo letras. El programa


eventualmente se caer.
Si el exponente de un trmino es igual a cero, el programa contara el trmino igual
pero solo tomara la parte de coeficiente.
Como se puede ver en la imagen de la terminal, al final de cada expresin queda un
signo ms.

REFERENCIAS BIBLIOGRFICAS.

Kernighan, B. W., & Ritchie, D. M. (1991). El lenguaje de Programacin C (2da ed.). Mexico:
Prentice Hall Hispanoamericana.

13

También podría gustarte