Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Cero++ en 13 Diciembre 2018, 22:39 pm



Título: Problema ejercicio de class - CONSULTA
Publicado por: Cero++ en 13 Diciembre 2018, 22:39 pm
Buenas, acá les dejo el código que hice ya comentado con mis dudas, a ver si me pueden dar un poco de iluminación que no estoy entendiendo  :-\
PD: el método sumar, me pide que lo haga de este modo:
Código
  1. P_resuesta=P1.Sumar(P2)
[/b]

Código
  1. #include <iostream>
  2. #include <cmath>
  3. using namespace std;
  4. class Polinomio{
  5. int coeficiente[20]; int grado;
  6. public:
  7. Polinomio(int _grado=0){
  8. grado=_grado;
  9. for(int i=0;i<grado;i++) {
  10. coeficiente[i]=0;
  11. }
  12. };
  13. int Ver_coeficientes(int _i){
  14. return coeficiente[_i];
  15. }
  16. void Cambiar_coeficiente(int _c, int _pos);
  17. Polinomio Sumar_polinomios(Polinomio p2);
  18. int Evaluar(int _x);
  19.  
  20.  
  21. };
  22. void Polinomio::Cambiar_coeficiente(int _c, int _pos){
  23. coeficiente[_pos]=_c;
  24. }
  25. Polinomio Polinomio:: Sumar_polinomios(Polinomio p2){
  26. for(int i=0;i<grado;i++) {
  27. coeficiente[i]+=p2.Ver_coeficientes(i); //Que deberia retornar?
  28. }
  29. }
  30. int Polinomio::Evaluar(int _x){
  31. int aux=0;
  32. for(int i=0;i<grado--;i++) {
  33. aux+=coeficiente[i]*(pow(_x,(grado-i)));
  34. }
  35. aux+=coeficiente[grado];
  36. return aux;
  37. }
  38. int main(int argc, char *argv[]) {
  39. int size; int coeficiente;
  40. cout<<"Ingrese el grado del Polinomio: "; cin>>size;
  41. Polinomio P(size);
  42. /*Carga del polinomio*/
  43. cout<<"Ingrese los coeficientes, de mayor grado a menor "; cin>>coeficiente;
  44. int i=0;
  45. while(i<size){
  46. P.Cambiar_coeficiente(coeficiente,i);
  47. cout<<"Ingrese los coeficientes, de mayor grado a menor "; cin>>coeficiente;
  48. ++i;
  49. }
  50. /*Veamos la carga inicial*/
  51. for(int i=0;i<size;i++) {
  52. cout<<P.Ver_coeficientes(i)<<"x^"<<size-i; //Por que no veo el termino independiente?
  53. }
  54. cout<<endl;
  55. /*Evaluemos con un valor x el polinomio*/
  56. int x;
  57. cout<<"Ingrese la incognita: "; cin>>x;
  58. cout<<P.Evaluar(x); //Obtengo basura, por que?
  59. cout<<endl;
  60. /*Probemos el metodo sumar Polinomio*/
  61. /* nada*/
  62.  
  63.  


Título: Re: Problema ejercicio de class - CONSULTA
Publicado por: K-YreX en 13 Diciembre 2018, 23:10 pm
Hay varios problemas:
- Cuando indicas grado 3, tienes que meter los coeficientes {0,1,2,3}, es decir, 4 coeficientes.
Código
  1. for(int i = 0; i < 3; i++)
Ese bucle se repite 3 veces, no 4. Te faltaría añadir el igual en la comparación, es decir, "i <= 3".
- Cuando introduces coeficientes, introduces el primero y lo guardas. Pero el <while> va en el siguiente orden: primero cambias coeficiente, después pides coeficiente. Entonces el último que ingreses no se va a guardar.
- En el método de sumar tienes que crear un polinomio nuevo de tamaño igual al mayor de los dos polinomios que sumas. En tu método, modificas el primero y la suma solo se hace hasta el grado más alto del primer polinomio, si el segundo es mayor, se pierden esos coeficientes. Debes retornar el nuevo polinomio que has creado que es donde has ido almacenando la suma.

No he mirado más código. Personalmente creo que es mejor guardarlo al revés. En la posición 0, el coeficiente de grado 0, en la posición 1, el coeficiente de grado 1, etc... Es más fácil de imaginar y si quieres añadir un grado más grande, puedes hacerlo sin mover todos los elementos que ya tienes dentro.
Para mostrar un polinomio añade el signo si el coeficiente es negativo, nada y si es positivo añade un "+". Es muy complicado ver bien el polinomio cuando se muestra, si de momento no quieres gastar tiempo en eso añade al menos un espacio entre monomios. Suerte :-X


Título: Re: Problema ejercicio de class - CONSULTA
Publicado por: Cero++ en 18 Diciembre 2018, 02:06 am
Es muy complicado ver bien el polinomio cuando se muestra, si de momento no quieres gastar tiempo en eso añade al menos un espacio entre monomios. Suerte :-X

Buenas, ya pude arreglar casi todo, los únicos métodos que no funcionan son estos, te paso el código además:

Código
  1. //C)
  2. Polinomio Sumar_polinomio(Polinomio P2){ //Asi es como me decias que tenia que hacerlo?
  3. if(P2.grado<grado){
  4. Polinomio aux(grado);
  5. for(int i=0;i<P2.grado;i++) {
  6. aux.monomio[i]=P2.monomio[i]+monomio[i];
  7. }
  8. for(int i=P2.grado;i<grado;i++) {
  9. aux.monomio[i]=monomio[i];
  10. }
  11. return aux;
  12. }else{
  13. Polinomio aux(P2.grado);
  14. for(int i=0;i<grado;i++) {
  15. aux.monomio[i]=P2.monomio[i]+monomio[i];
  16. }
  17. for(int i=grado;i<P2.grado;i++) {
  18. aux.monomio[i]=monomio[i];
  19. }
  20. return aux;
  21. }
  22.  
  23. }
  24. //D)
  25. int Evaluar_polinomio(int _x){
  26. int contador=0;
  27. for(int i=0;i<=grado;i++) {
  28. contador+=(monomio[i])*(pow(_x,i)); //El resultado que obtengo siempre es 1 menos que el verdadero
  29. }
  30. return contador;
  31. }