Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - tenshi96

#1
Buenas, es un trabajo y se me acaba el tiempo.
tengo 2 problemas...
El programa que llevo hecho me da una lista de las posibles raíces racionales que tendrá el polinomio, lo que quiero añadir ahora es que de esa lista elimine los elementos repetido, no eh logrado hacerlo bien y ya lo batalle bastante.
Me salte ese paso aunque sabia que seria mas tardado, que todas las posibles raíces las pruebe haber cual es, ya que sepa cual es, las guarde en un vector y al final me diga "estas son las raíces"

Les dejo el código que llevo y al final una explicación de como se hace a mano, lápiz y calculadora.
por favor lo menos C++ que puedan usar.

Codigo:
#include<stdio.h>
#include<math.h>
#define MD 99
#define MDU 9999 //MaximaDimensionUltra

int main(){
int i,j,c,e,Comb;
int P[MD],n,Factorizo;
//int MNR;//Maximo Numero de Raices
float DC[MD],DE[MD];//Divisores Constante/Exponente
int NMDc,NMDe,NMComb;//Numero Maximo Divisores constante/exponente NumeroMaximoCombinaciones
double PR[MDU]; //Posibles Raices

printf("Dame el grado del polinomio\n");
scanf("%d",&n);

if(n<0){
printf("No es un polinomio");
}

if(n==0){
printf("No es un polinomio, es una constante");
}

if(n>0){
printf("\nDame el coeficiente de cada X\n");
printf("NOTA: X^0 es la constante\n\n");


for(i=0;i<n+1;i++){
printf("X^%d= ",i);
scanf("%d",&P[i]);
}

printf("\nPolinomio:\n");
for(i=0;i<n+1;i++){
printf("(%d)X^%d",P[i],i);
if(i != n) printf("+");
}


if(P[0]==0){
Factorizo=0;
for(i=0;i<Factorizo+1;i++){
if(P[i]==0){
Factorizo=Factorizo+1;
}
}

printf("\n\nPero podemos factorizar %d X, por lo tanto ya sabemos que tiene %d raices igual a 0\n\n",Factorizo,Factorizo);

for(i=0;i<n+1;i++){
P[i]=P[i+Factorizo];
}

printf("\nNuevo Polinomio:\n");
for(i=0;i<n+1-Factorizo;i++){
printf("(%d)X^%d \n",P[i],i);
}
}

else{
Factorizo=0;
}

if(P[n]==0){
n=n-1;
for(i=n;i>n-1;i--){
if(P[i]==0){
n=n-1;
}
}



printf("\n\nY tambien podemos eliminar algunas X\nNuevo Polinomio:\n");
for(i=0;i<n+1;i++){
printf(" %dX^%d\n",P[i],i);
}
}

printf("\nDivisores de constante\n");
c=0;
NMDc=0;
for(i=1;i<P[0]+1;i++){
if(P[0]%i==0){
DC[c]=i;
c++;
NMDc=NMDc+1;
}
}

printf("\nA %d lo dividen:\n",P[0]);
for(c=0;c<NMDc;c++){
printf("%f\n",DC[c]);
}

printf("\n\nDivisores de exponente\n");
e=0;
NMDe=0;
for(i=1;i<P[n]+1;i++){
if(P[n]%i==0){
DE[e]=i;
e++;
NMDe=NMDe+1;
}
}

printf("\nA %d lo dividen:\n",P[n]);
for(e=0;e<NMDe;e++){
printf("%f\n",DE[e]);
}

Comb=0;
NMComb=0;
for(i=0;i<NMDc;i++){
for(j=0;j<NMDe;j++){
PR[Comb]=DC[i]/DE[j];
Comb++;
NMComb=NMComb+1;
}
}

printf("\nPosibles Raices:\n");
for(i=0;i<NMComb;i++){
printf("%f\n",PR[i]);
}

}
return 0;
}



→Como hacerlo a mano:
primero factorizas lo que sea necesario para que el polinomio tenga una constante, ya que tenga una constante buscas todos los números enteros que dividen ese numero (Nota: la constante debe ser entera), después tomas el coeficiente de la X exponencial mas grande y buscas todos los números enteros que lo dividen.
Tienes 2 listas, divisores de constante y divisores del coeficiente de la X exponencial mas grande.
Comienzas a dividir todas constantes entre todos los divisores de exponencial. tendrás una nueva lista de posibles raíces racionales... pero esto solo son las positivas, copias esa lista pero con signo negativo y ya tienes una nueva lista.

pruebas cada uno de esos números que obtuviste al dividir, positivos y negativos en el polinomio, y si alguno te da 0, Es raiz.

Gracias de antemano