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

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


  Mostrar Mensajes
Páginas: 1 2 [3] 4 5 6
21  Programación / Programación C/C++ / Re: Problema al sobrecargar el operador + en: 19 Diciembre 2017, 14:44 pm
De esta manera, en el main, cuando p3 es construido, sabes exactamente lo que se esta construyendo y no descansas en comportamientos automáticos provistos por el compilador.
En el constructor de la clase polinomio automáticamente se asigna el valor 0 al coeficiente de cada termino y su valor correspondiente al exponente (a no ser que se pase un coeficiente a un termino en los parámetros a la hora de crear el polinomio) por lo que esos "valores basura" que supongo que vienen de espacios de memoria no asignados no deberían de estar ahí
22  Programación / Programación C/C++ / Problema al sobrecargar el operador + en: 18 Diciembre 2017, 20:07 pm
Ya se por que sucede el error que se muestra en este post, pero ahora el problema es otro (se dice en mi respuesta al mismo) no hace falta leer el código del programa para saber cual es mi duda. Por favor leed mi respuesta en el hilo para poder ayudarme, gracias.

Hola, he creado el siguiente programa para manejar y operar polinomios, consta de una clase llamada termino (c*x^e) y una clase llamada polinomio que es básicamente un array de términos y sus correspondientes operaciones, así como un método para mostrar el polinomio por pantalla. El codigo es algo largo pero el problema está principalmente en el método operator+, el cual si pido que muestre por pantalla el resultado (antes del return) el polinomio es correcto, pero una vez que lo devuelve y lo asigna a otro objeto polinomio y hago que este ultimo se muestre por pantalla es incorrecto (espero haberme hecho entender). Aquí os dejo el codigo:

main.cpp
Código
  1. #include <iostream>
  2. #include "CPolinomio.h"
  3.  
  4. using namespace std;
  5.  
  6. int main()
  7. {
  8.    CPolinomio p1(5,7);
  9.    CPolinomio p2(3,6);
  10.    CPolinomio p3;
  11.  
  12.    p1.asignarTermino(4,5);
  13.    p1.asignarTermino(10,3);
  14.    p2.asignarTermino(4,3);
  15.    p2.asignarTermino(5,5);
  16.    p2.mostrarPolinomio(); cout << " + ";
  17.    p1.mostrarPolinomio(); cout << endl;
  18.    p3 = p1 + p2; cout << endl;
  19.    (p1 + p2).mostrarPolinomio(); cout << endl;
  20.    p2.mostrarPolinomio();
  21.    //p2 = p1 + p1 + p1;
  22.    //p2.mostrarPolinomio();
  23.    //(p1+p1).mostrarPolinomio();
  24.  
  25.    return 0;
  26. }
  27.  

CTermino.h
Código
  1. #ifndef CTERMINO_H
  2. #define CTERMINO_H
  3.  
  4.  
  5. class CTermino
  6. //Cada uno de los terminos del polinomio
  7. {
  8. private:
  9.    double coeficiente;
  10.    int exponente;
  11. public:
  12.    CTermino(double = 0, int = 0);
  13.    void asignarCoeficiente (double);
  14.    void asignarExponente (int);
  15.    double obtenerCoeficiente (void) const;
  16.    int obtenerExponente (void) const;
  17.    void mostrar(void) const;
  18. };
  19.  
  20. #endif // CTERMINO_H
  21.  

CTermino.cpp
Código
  1. #include "CTermino.h"
  2. #include <iostream>
  3.  
  4. CTermino::CTermino(double c, int e) :
  5. coeficiente(c), exponente(e)
  6. {
  7.    if(e < 0){exponente = -e;}
  8. }
  9.  
  10. void CTermino::asignarCoeficiente (double c) {coeficiente = c;}
  11.  
  12. void CTermino::asignarExponente (int e)
  13. {
  14.    if(e < 0){exponente = -e;}
  15.    else{exponente = e;}
  16. }
  17.  
  18. double CTermino::obtenerCoeficiente (void) const {return coeficiente;}
  19.  
  20. int CTermino::obtenerExponente (void) const {return exponente;}
  21.  
  22. void CTermino::mostrar(void) const//es muy enrrevesado para mostrar los terminos como se suele hacer en algebra...
  23. {
  24.    if(!(coeficiente >= 0)){std::cout << " ";}
  25.    if(coeficiente > 0) std::cout << " +";
  26.    if(coeficiente != 1 && coeficiente != -1) {std::cout << coeficiente;}
  27.    if(coeficiente == -1 && exponente == 1) std::cout << "-";
  28.    if(exponente > 0)
  29.    {
  30.        if(exponente == 1) std::cout << "x";
  31.        else std::cout << "x^" << exponente;
  32.    }
  33. }

CPolinomio.h
Código
  1. #ifndef CPOLINOMIO_H
  2. #define CPOLINOMIO_H
  3. #include "CTermino.h"
  4.  
  5.  
  6. class CPolinomio
  7. {
  8. private:
  9.    CTermino* termino;
  10.    int grado;
  11.    void crearPolinomio (int);
  12.    void ampliar (int);
  13. public:
  14.    CPolinomio(double = 0,int = 0);
  15.    ~CPolinomio();
  16.    int obtenerGrado (void) const;
  17.    void asignarTermino (double , int);
  18.    void mostrarPolinomio(void) const;
  19.    const CPolinomio operator=(const CPolinomio&);
  20.    const CPolinomio operator+(const CPolinomio&) const;
  21.    const CPolinomio operator*(const CPolinomio&) const;
  22. };
  23.  
  24. #endif // CPOLINOMIO_H
  25.  

CPolinomio.cpp
Código
  1. #include "CPolinomio.h"
  2. #include <iostream>
  3.  
  4. CPolinomio::CPolinomio(double c, int e)//Constructor que crea la matriz de terminos del tamaño necesario
  5. {
  6.    grado = e; if(e < 0) {grado = -e;}//si el exponente es negativo lo cambia
  7.    crearPolinomio(e);
  8.    termino[e].asignarCoeficiente(c);//asigna el coeficiente al exponente correcto
  9. }
  10.  
  11. void CPolinomio::crearPolinomio(int g)//crea la matriz de objetos termino del tamaño necesario
  12. {
  13.    delete [] termino; termino = new CTermino [g+1];
  14.    for (int i = 0; i <= g; i++) termino[i].asignarExponente(i);
  15. }
  16.  
  17. void CPolinomio::ampliar (int g)//amplia la matriz terminos al tamaño pasado por parametro
  18. {
  19.    double coeficientes [grado+1];
  20.    for(int i = 0; i <= grado; i++) coeficientes [i] = termino[i].obtenerCoeficiente();//copia los terminos en una matriz
  21.    crearPolinomio(g);
  22.    for (int i = 0; i <= grado; i++) termino[i].asignarCoeficiente(coeficientes [i]);//copia los terminos de vuelta al nuevo array
  23.    grado = g;
  24. }
  25.  
  26. CPolinomio::~CPolinomio()
  27. {
  28.    delete [] termino;
  29. }
  30.  
  31. int CPolinomio::obtenerGrado(void) const {return grado;}
  32.  
  33. void CPolinomio::asignarTermino(double c, int e)
  34. {
  35.    if(e < 0) return;//SI NO ES VALIDO NO HACE NADA
  36.    if(e > grado)//SI EL EXPONENTE ES MAYOR QUE EL GRADO CREA UN NUEVO POLINOMIO ADECUADO
  37.    {
  38.        ampliar(e);
  39.        termino[e].asignarCoeficiente(c);
  40.    }
  41.    else {
  42.        termino[e].asignarCoeficiente(c);//SI TODO ES NORMAL SIMPLEMENTE LO CAMBIA
  43.    }
  44. }
  45.  
  46. void CPolinomio::mostrarPolinomio(void) const//funcion que muestra el polinomio
  47. {
  48.    std::cout << "(";
  49.    for(int i = grado; i > 0; i--) {if(termino[i].obtenerCoeficiente() != 0)termino[i].mostrar();}
  50.    if(termino[0].obtenerCoeficiente() != 0) termino[0].mostrar();
  51.    std::cout << ")";
  52. }
  53.  
  54. const CPolinomio CPolinomio::operator=(const CPolinomio& pol)//operador =
  55. {
  56.    grado = pol.grado;
  57.    ampliar(pol.grado);
  58.    for(int i = 0; i <= pol.grado; i++) termino[i].asignarCoeficiente(pol.termino[i].obtenerCoeficiente());
  59. }
  60.  
  61. const CPolinomio CPolinomio::operator+(const CPolinomio& pol) const//operador +
  62. {
  63.  
  64.    if(grado == pol.grado)//si ambos grados son iguales (no hay que ampliar)
  65.    {
  66.        CPolinomio resultado(0, grado);
  67.        for(int i = 0; i <= resultado.grado; i++)
  68.        {
  69.            resultado.termino[i].asignarCoeficiente(pol.termino[i].obtenerCoeficiente() + termino[i].obtenerCoeficiente());
  70.        }
  71.        resultado.mostrarPolinomio();//codigo experimental para saber si el error es al devolver el objeto
  72.        return resultado;
  73.    }
  74.    else {
  75.        if(grado > pol.grado)//si uno de los polinomios tiene mas grado
  76.        {
  77.            CPolinomio resultado(0, grado);
  78.            for(int i = 0; i <= pol.grado; i++)
  79.            {
  80.                resultado.termino[i].asignarCoeficiente(pol.termino[i].obtenerCoeficiente() + termino[i].obtenerCoeficiente());
  81.            }
  82.            for(int i = pol.grado+1; i <= grado; i++) resultado.termino[i].asignarCoeficiente(termino[i].obtenerCoeficiente());
  83.            resultado.mostrarPolinomio();//codigo experimental para saber si el error es al devolver el objeto
  84.            return resultado;
  85.        }
  86.        if(grado < pol.grado)//si el otro polinomio es mayor
  87.        {
  88.            CPolinomio resultado(0, pol.grado);
  89.            for(int i = 0; i <= grado; i++)
  90.            {
  91.                resultado.termino[i].asignarCoeficiente(pol.termino[i].obtenerCoeficiente() + termino[i].obtenerCoeficiente());
  92.            }
  93.            for(int i = grado+1; i <= pol.grado; i++) resultado.termino[i].asignarCoeficiente(pol.termino[i].obtenerCoeficiente());
  94.            resultado.mostrarPolinomio();//codigo experimental para saber si el error es al devolver el objeto
  95.            return resultado;
  96.        }
  97.    }
  98. }
  99.  
  100. const CPolinomio CPolinomio::operator*(const CPolinomio& pol) const//operador *
  101. {
  102.    int gr = pol.grado*grado;
  103.    CPolinomio resultado(gr);
  104.  
  105.    for (int i = 0; i <= grado; i++)
  106.    {
  107.        if(termino[i].obtenerExponente() != 0)
  108.        {
  109.            CPolinomio calculos;
  110.            for(int x = 0; x <= pol.grado; x++)
  111.            {
  112.                calculos.asignarTermino(termino[i].obtenerCoeficiente() * pol.termino[x].obtenerCoeficiente(), termino[i].obtenerExponente() + pol.termino[x].obtenerExponente());
  113.            }
  114.            resultado = resultado + calculos;
  115.        }
  116.    }
  117.  
  118.    return resultado;
  119. }

Cuando lo ejecuto se muestra lo siguiente:

( +3x^6 +5x^5 +4x^3) + ( +5x^7 +4x^5 +10x^3)
( +5x^7 +3x^6 +9x^5 +14x^3)
( +5x^7 +3x^6 +9x^5 +14x^3)( +5x^1981370576 +9.88131e-324)
( +3x^6 +5x^5 +4x^3)
Process returned 0 (0x0)   execution time : 0.111 s
Press any key to continue.


Espero que alguien sepa que puede ser, sospecho que estoy retornando el objeto resultado de operator+ mal...
23  Programación / Programación C/C++ / Re: error: 1d returned exit status en: 18 Diciembre 2017, 15:29 pm
De todos modos, ¿el error es solo ese?

Si, solamente me da ese error .-.

Pero de todas formas he reinstalado CodeBlocks, así que ese problema ya esta solucionado, gracias por la ayuda.
24  Programación / Programación C/C++ / error: 1d returned exit status en: 17 Diciembre 2017, 12:20 pm
Codeblocks me ha mostrado el mensaje de error "error: 1d returned exit status" cuando traté de compilar mi proyecto (sin indicar ninguna línea del código ni nada) y no se que hacer... si alguien sabe a que se puede deber apreciaría la ayuda, gracias.

Pd: no pongo el código del programa por que en algún foro que he ojeado indicaban que el error no se debía al código en si, pero si alguien quiere verlo puedo subirlo como respuesta.
25  Programación / Programación C/C++ / Re: Donde incluir librerías en clases en: 17 Diciembre 2017, 09:55 am
Pues parece bastante evidente ahora que lo decís, no se como pnsé en eso xD
Dos pequeñas dudas, si en el fichero header no uso ninguna librería, puedo añadirlas solo en el fichero .cpp donde tengo los métodos? Este programa no era el que me estaba dando el error como tal, era otro en el que también incluía la librería <fstream> y el ifstream me daba el mismo error, es por eso también entonces?
26  Programación / Programación C/C++ / Donde incluir librerías en clases en: 15 Diciembre 2017, 16:33 pm
Hola, he hecho un pequeño programa para acompañar mi pregunta

main.cpp
Código
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.    clase miClase(42);
  8.    miClase.mostrar();
  9.    return 0;
  10. }
  11.  

clase.h
Código
  1. #ifndef CLASE_H
  2. #define CLASE_H
  3. #include <iostream>
  4.  
  5. class clase
  6. {
  7. private:
  8.    int numero;
  9. public:
  10.    clase (int n=0);
  11.    void mostrar(void) const;
  12. };
  13.  
  14. #endif // CLASE_H

clase.cpp
Código
  1. #include "clase.h"
  2. #include <iostream>
  3.  
  4. clase::clase (int n) : numero(n){}
  5.  
  6. void clase::mostrar(void) const
  7. {
  8.    cout << numero << endl;
  9. }
  10.  

pues bien, cuando compilo este proyecto codeblocks me dice que el "cout" de la linea 8 de clase.cpp "was not declared in this scope", y lo mismo para el endl. Supongo que he incluido iostream de forma equivocada, si alguien me puede decir como incluir las librerias de forma correcta...
Gracias   :-*
27  Comunicaciones / Redes / Conexiones de puente en: 13 Septiembre 2017, 12:54 pm
Hola

Tengo un problema al crear una conexion de puente entre mi Pc y mi PS3 (con el fin de darle conexion a internet a esta mediante un cable de Ethernet), y es que cuando entro en Panel de Control>Redes e Internet>Conexiones de Red y selecciono mi red wifi y el icono del cable Etheret, clic derecho y conexiones de puente, me sale el siguiente mensaje:
"Para crear un puente de red debe seleccionar por lo menos dos o mas conexiones a Internet de alta velocudad o LAN que no esten siendo usadas por Conexion compartida a Internet"
Y por ello no puedo crear el puente...
Alguien sabe que puede estar pasando? Gracias de antemano
28  Sistemas Operativos / Windows / Re: .NetFramework en: 10 Noviembre 2016, 19:17 pm
Lo se, pero es que la rota de mi framework estoy bastante seguro de que es esa...
29  Sistemas Operativos / Windows / .NetFramework en: 10 Noviembre 2016, 17:27 pm
Hola.
Tengo un problema, y es que cada vez que abro un juego (Prepar3D) el .NetFramework me da un error que dice:

Establezca la clave
HKLM\Software\Microsoft\.NETFramework\InstallRoot del registro
para que apunte a
la ubicación de instalación de .NET Framework

No se que hacer para solucionarlo; he abierto el regedit y he ido a la ruta que me indica y en el fichero InstallRoot está la ruta:

C:\Windows\Microsoft.NET\Framework64\

Si alguien puede ayudarme...
Gracias!
30  Programación / Programación C/C++ / Re: Inciar otro programa. en: 1 Julio 2016, 15:29 pm
Segun he entendido tienes que ingresar la dirección donde esta el programa, pero tengo algunas dudas al respecto...
1-Como hago para ejecutar un programa como la calculadora o el paint que no se donde estan instalados?
2-No puedo ejecutar un programa sin introducir la dirección donde se encuentra?
3-Se puede introducir datos en el programa que se ha abierto desde mi programa "principal"?
Páginas: 1 2 [3] 4 5 6
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines