Tarea 2 de Algoritmos y Estructuras de Datos

Trimestre 2014 Primavera
Entrega: 9 de mayo de 2014 a las 22:00

Un número racional está formado por una pareja (p, q) de números enteros llamados numerador y denominador (normalmente se escribe p/q y se supone que q no es cero). Los números racionales tienen operaciones de suma, resta y multiplicación (además de otras operaciones que no usaremos en esta tarea). Si a = (u, v) y b = (x, z) son dos números racionales, entonces a+b = (u*z+v*x, v*z), a-b = (u*z-v*x, v*z) y a*b = (u*x, v*z).

En C podemos representar un número racional como una estructura así:
typedef struct {
    int p;
    int q;
} racional;
Escribe un programa llamado racionalNN.c (donde NN es tu número de lista) que:
  1. Lea los valores de N números racionales que llamaremos A, B, C, etc.
  2. Lea y efectúe M operaciones entre esos números racionales.
  3. Escriba a la salida estándar los resultados racionales.
La entrada comenzará con los valores de N y M, después aparecerán las N parejas que definen a A, B, C, etc. y finalmente aparecerán las M operaciones que debes hacer. Cada operación estará representada por tres caracteres: el primer operando, el operador y el segundo operando. Los operandos serán las letras mayúsculas de la A a la Z, los operadores serán los caracteres +, - y *. La salida debe contener los M resultados de las operaciones, cada uno en un renglón. Puedes suponer que 1 <= N <= 26 y que 1 <= M <= 1000.

En el primer ejemplo de abajo se definen N = 2 racionales (llamados A y B) y se pide hacer M = 3 operaciones. Los valores leídos son A = (1, 1) y B = (2, -3). Se pide calcular la multiplicación de A por A, la suma de B y A y la resta de B menos A. Observe que los resultados no aparecen simplificados (no se pide que los simplifiques).

Entrada 1
Salida 1
Entrada 2
Salida 2
2 3
1 1
2 -3
A*A
B+A
B-A
1 1
-1 -3
5 -3
3 2
-3 2
2 5
-1 -1
A*B
B*C
-6 10
-2 -5

Nota:
Tu programa no debe imprimir letreros adicionales ni tampoco debe pausarse antes de terminar su ejecución.