#include <stdio.h>
#include <stdlib.h>
#include "racional.h"

/*
* =================================================
*    Filename:  .c
* Description:
*     Created:  dd/mm/18 hh:mm
* =================================================
*/

int main()
{
	Racional *N1, *N2, *N3, *N4, *N5, *N6, *N7, *N8;
	Racional *S1, *S2, *S3, *X, *P1, *P2, *Y, *Z;
	int nu, de;

	N1 = generate(); N2 = generate(); // Cria 2 nros racionais
	N3 = generate(); N4 = generate(); // Cria 2 nros racionais
	N5 = generate(); N6 = generate(); // Cria 2 nros racionais
	N7 = generate(); N8 = generate(); // Cria 2 nros racionais

	if (N1 == NULL || N2 == NULL) {
		printf ("Nao foi possivel criar os nros racionais.\n");
		return -1;
	}

	if (set_value(N1, 3, 5) == 0)
	{ // Atribui o numerador e o denominador a N1
		printf("\nFalha ao preencher o 1o racional.\n");
		return -1;
	}

	if (set_value(N2, 2, 3) == 0)
	{ // Atribui o numerador e o denominador a N2
		printf ("\nFalha ao preencher o 2o racional.\n");
		return -1;
	}

	if (set_value(N3, 1, 3) == 0)
	{ // Atribui o numerador e o denominador a N2
		printf ("\nFalha ao preencher o 3o racional.\n");
		return -1;
	}

	if (set_value(N4, 7, 4) == 0)
	{ // Atribui o numerador e o denominador a N2
		printf ("\nFalha ao preencher o 4o racional.\n");
		return -1;
	}

	if (set_value(N5, 1, 2) == 0)
	{ // Atribui o numerador e o denominador a N2
		printf ("\nFalha ao preencher o 5o racional.\n");
		return -1;
	}

	if (set_value(N6, 0, 3) == 0)
	{ // Atribui o numerador e o denominador a N2
		printf ("\nFalha ao preencher o 6o racional.\n");
		return -1;
	}

	if (set_value(N7, 5, 6) == 0)
	{ // Atribui o numerador e o denominador a N2
		printf ("\nFalha ao preencher o 7o racional.\n");
		return -1;
	}

	if (set_value(N8, 7, 1) == 0)
	{ // Atribui o numerador e o denominador a N2
		printf ("\nFalha ao preencher o 8o racional.\n");
		return -1;
	}

	N3 = sum(N1,N2); // Soma 2 nros racionais
	if (N3 == NULL)
	{
		printf ("\nFalha ao somar os 2 nros racionais.\n");
		return -1;
	}

	if (get_value(N3, &nu, &de) == 0)
	{ // Obtem o numerador e o denominador de N3
		printf ("\nFalha ao recuperar o numerador e denominador resultante.\n");
		return -1;
	}

	S1 = sum(N1,N2);
	S2 = sum(N3, N4);
	X = sum(S1, S2);
	
	P1 = prod(N4,N5);
	P2 = prod(N6,N7);
	Y = sum(P1, P2);

	S3 = sum(N1,N8);
	Z = prod(N7,S3);

	simplifica(X);
	printf("X = ");
	print_value(X);
	putchar('\n');

	simplifica(Y);
	printf("Y = ");
	print_value(Y);
	putchar('\n');

	simplifica(Z);
	printf("Z = ");
	print_value(Z);
	putchar('\n');

	delete1(&N1); delete1(&N2); delete1(&N3); // Libera a memoria alocada para os nros
	delete1(&N4); delete1(&N5); delete1(&N6); // Libera a memoria alocada para os nros
	delete1(&N7); delete1(&N8);
	return 0;
}
