long* multConst(long poli[], long gradoPoli, long constante);
void case11();
case 11:
case11();
break;
void case11()
{
struct polinomio primerPolinomio, segundoPolinomio,A,B,B1,B2,C,D, resultadoPolinomio;
int opcion, opcion2;
printf("Elija como ingresara el primer polinomio de la multiplicacion:\n1)ingresando las constantes\n2)con constantes aleatorias:\n");
scanf("%d", &opcion);
printf("Escriba el grado del primer polinomio\n");
scanf("%lu", &primerPolinomio.grado);
switch (opcion)
{
case 1:
primerPolinomio.pol = CrearPolinomio(primerPolinomio.grado);
break;
case 2:
primerPolinomio.pol = CrearPolinomioAleatorio(primerPolinomio.grado);
break;
}
EscribirPolinomio(primerPolinomio.pol, primerPolinomio.grado);
printf("Elija como ingresara el segundo polinomio de la multiplicacion:\n1)ingresando las constantes\n2)con constantes aleatorias:\n");
scanf("%d", &opcion2);
printf("Escriba el grado del segundo polinomio\n");
scanf("%lu", &segundoPolinomio.grado);
switch (opcion2)
{
case 1:
segundoPolinomio.pol = CrearPolinomio(segundoPolinomio.grado);
break;
case 2:
segundoPolinomio.pol = CrearPolinomioAleatorio(segundoPolinomio.grado);
break;
}
EscribirPolinomio(segundoPolinomio.pol, segundoPolinomio.grado);
int i;
A.grado = primerPolinomio.grado + segundoPolinomio.grado;
//(a_n-1 * b_n-1) x^(2n-2)
for (i = 0; i <= primerPolinomio.grado + segundoPolinomio.grado; ++i) // inicializa el polinomio nuevo con el grado correspondiente, con todos su valores en 0.
{
A.pol[i] = 0;
}
EscribirPolinomio(A.pol, A.grado);
A.pol[primerPolinomio.grado + segundoPolinomio.grado] = (primerPolinomio.pol[primerPolinomio.grado] * segundoPolinomio.pol[segundoPolinomio.grado]);
EscribirPolinomio(A.pol, A.grado);
//(a_n-1 * B(X) + b_n-1 * A(x)) x^(n-1)
B1.pol = multConst(primerPolinomio.pol, primerPolinomio.grado, primerPolinomio.pol[primerPolinomio.grado]);
B2.pol = multConst(segundoPolinomio.pol, segundoPolinomio.grado, segundoPolinomio.pol[segundoPolinomio.grado]);
B.pol = sumarPolinomios(primerPolinomio.grado, B1.pol, segundoPolinomio.grado, B2.pol);
B.grado = primerPolinomio.grado + segundoPolinomio.grado;
//(A(X) * B(X)
C.pol = MultiplicarPolinomio(primerPolinomio.pol, primerPolinomio.grado-1, segundoPolinomio.pol, segundoPolinomio.grado-1);
C.grado = primerPolinomio.grado-1 + segundoPolinomio.grado-1;
//Ahora sumamos A+B+C
D.pol = sumarPolinomios(A.grado, A.pol, B.grado, B.pol);
D.grado = primerPolinomio.grado + segundoPolinomio.grado;
resultadoPolinomio.pol = sumarPolinomios(D.grado, D.pol, C.grado, C.pol);
resultadoPolinomio.grado = primerPolinomio.grado + segundoPolinomio.grado;
EscribirPolinomio(resultadoPolinomio.pol, resultadoPolinomio.grado);
}
long* multConst(long poli[], long gradoPoli, long constante)
{
long* poli2;
poli2 = (long*)calloc((gradoPoli), sizeof(long));
int i;
for (i = 0; i <= gradoPoli; ++i)
{
poli2[i] = constante * poli[i];
}
return poli2;
}