elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Temas
Páginas: [1]
1  Programación / Programación C/C++ / Calcular las n raices racionales de un polinomio grado n (dudas particulares) en: 22 Mayo 2016, 03:44 am
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:
Código
  1. #include<stdio.h>
  2. #include<math.h>
  3. #define MD 99
  4. #define MDU 9999 //MaximaDimensionUltra
  5.  
  6. int main(){
  7. int i,j,c,e,Comb;
  8. int P[MD],n,Factorizo;
  9. //int MNR;//Maximo Numero de Raices
  10. float DC[MD],DE[MD];//Divisores Constante/Exponente
  11. int NMDc,NMDe,NMComb;//Numero Maximo Divisores constante/exponente NumeroMaximoCombinaciones
  12. double PR[MDU]; //Posibles Raices
  13.  
  14. printf("Dame el grado del polinomio\n");
  15. scanf("%d",&n);
  16.  
  17. if(n<0){
  18. printf("No es un polinomio");
  19. }
  20.  
  21. if(n==0){
  22. printf("No es un polinomio, es una constante");
  23. }
  24.  
  25. if(n>0){
  26. printf("\nDame el coeficiente de cada X\n");
  27. printf("NOTA: X^0 es la constante\n\n");
  28.  
  29.  
  30. for(i=0;i<n+1;i++){
  31. printf("X^%d= ",i);
  32. scanf("%d",&P[i]);
  33. }
  34.  
  35. printf("\nPolinomio:\n");
  36. for(i=0;i<n+1;i++){
  37. printf("(%d)X^%d",P[i],i);
  38. if(i != n) printf("+");
  39. }
  40.  
  41.  
  42. if(P[0]==0){
  43. Factorizo=0;
  44. for(i=0;i<Factorizo+1;i++){
  45. if(P[i]==0){
  46. Factorizo=Factorizo+1;
  47. }
  48. }
  49.  
  50. printf("\n\nPero podemos factorizar %d X, por lo tanto ya sabemos que tiene %d raices igual a 0\n\n",Factorizo,Factorizo);
  51.  
  52. for(i=0;i<n+1;i++){
  53. P[i]=P[i+Factorizo];
  54. }
  55.  
  56. printf("\nNuevo Polinomio:\n");
  57. for(i=0;i<n+1-Factorizo;i++){
  58. printf("(%d)X^%d \n",P[i],i);
  59. }
  60. }
  61.  
  62. else{
  63. Factorizo=0;
  64. }
  65.  
  66. if(P[n]==0){
  67. n=n-1;
  68. for(i=n;i>n-1;i--){
  69. if(P[i]==0){
  70. n=n-1;
  71. }
  72. }
  73.  
  74.  
  75.  
  76. printf("\n\nY tambien podemos eliminar algunas X\nNuevo Polinomio:\n");
  77. for(i=0;i<n+1;i++){
  78. printf(" %dX^%d\n",P[i],i);
  79. }
  80. }
  81.  
  82. printf("\nDivisores de constante\n");
  83. c=0;
  84. NMDc=0;
  85. for(i=1;i<P[0]+1;i++){
  86. if(P[0]%i==0){
  87. DC[c]=i;
  88. c++;
  89. NMDc=NMDc+1;
  90. }
  91. }
  92.  
  93. printf("\nA %d lo dividen:\n",P[0]);
  94. for(c=0;c<NMDc;c++){
  95. printf("%f\n",DC[c]);
  96. }
  97.  
  98. printf("\n\nDivisores de exponente\n");
  99. e=0;
  100. NMDe=0;
  101. for(i=1;i<P[n]+1;i++){
  102. if(P[n]%i==0){
  103. DE[e]=i;
  104. e++;
  105. NMDe=NMDe+1;
  106. }
  107. }
  108.  
  109. printf("\nA %d lo dividen:\n",P[n]);
  110. for(e=0;e<NMDe;e++){
  111. printf("%f\n",DE[e]);
  112. }
  113.  
  114. Comb=0;
  115. NMComb=0;
  116. for(i=0;i<NMDc;i++){
  117. for(j=0;j<NMDe;j++){
  118. PR[Comb]=DC[i]/DE[j];
  119. Comb++;
  120. NMComb=NMComb+1;
  121. }
  122. }
  123.  
  124. printf("\nPosibles Raices:\n");
  125. for(i=0;i<NMComb;i++){
  126. printf("%f\n",PR[i]);
  127. }
  128.  
  129. }
  130. return 0;
  131. }


→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
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines