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 - cNoob

#21
Cita de: CalgaryCorpus en 19 Diciembre 2017, 00:21 AM
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
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 (cpp) [Seleccionar]
#include <iostream>
#include "CPolinomio.h"

using namespace std;

int main()
{
   CPolinomio p1(5,7);
   CPolinomio p2(3,6);
   CPolinomio p3;

   p1.asignarTermino(4,5);
   p1.asignarTermino(10,3);
   p2.asignarTermino(4,3);
   p2.asignarTermino(5,5);
   p2.mostrarPolinomio(); cout << " + ";
   p1.mostrarPolinomio(); cout << endl;
   p3 = p1 + p2; cout << endl;
   (p1 + p2).mostrarPolinomio(); cout << endl;
   p2.mostrarPolinomio();
   //p2 = p1 + p1 + p1;
   //p2.mostrarPolinomio();
   //(p1+p1).mostrarPolinomio();

   return 0;
}


CTermino.h
Código (cpp) [Seleccionar]
#ifndef CTERMINO_H
#define CTERMINO_H


class CTermino
//Cada uno de los terminos del polinomio
{
private:
   double coeficiente;
   int exponente;
public:
   CTermino(double = 0, int = 0);
   void asignarCoeficiente (double);
   void asignarExponente (int);
   double obtenerCoeficiente (void) const;
   int obtenerExponente (void) const;
   void mostrar(void) const;
};

#endif // CTERMINO_H


CTermino.cpp
Código (cpp) [Seleccionar]
#include "CTermino.h"
#include <iostream>

CTermino::CTermino(double c, int e) :
coeficiente(c), exponente(e)
{
   if(e < 0){exponente = -e;}
}

void CTermino::asignarCoeficiente (double c) {coeficiente = c;}

void CTermino::asignarExponente (int e)
{
   if(e < 0){exponente = -e;}
   else{exponente = e;}
}

double CTermino::obtenerCoeficiente (void) const {return coeficiente;}

int CTermino::obtenerExponente (void) const {return exponente;}

void CTermino::mostrar(void) const//es muy enrrevesado para mostrar los terminos como se suele hacer en algebra...
{
   if(!(coeficiente >= 0)){std::cout << " ";}
   if(coeficiente > 0) std::cout << " +";
   if(coeficiente != 1 && coeficiente != -1) {std::cout << coeficiente;}
   if(coeficiente == -1 && exponente == 1) std::cout << "-";
   if(exponente > 0)
   {
       if(exponente == 1) std::cout << "x";
       else std::cout << "x^" << exponente;
   }
}


CPolinomio.h
Código (cpp) [Seleccionar]
#ifndef CPOLINOMIO_H
#define CPOLINOMIO_H
#include "CTermino.h"


class CPolinomio
{
private:
   CTermino* termino;
   int grado;
   void crearPolinomio (int);
   void ampliar (int);
public:
   CPolinomio(double = 0,int = 0);
   ~CPolinomio();
   int obtenerGrado (void) const;
   void asignarTermino (double , int);
   void mostrarPolinomio(void) const;
   const CPolinomio operator=(const CPolinomio&);
   const CPolinomio operator+(const CPolinomio&) const;
   const CPolinomio operator*(const CPolinomio&) const;
};

#endif // CPOLINOMIO_H


CPolinomio.cpp
Código (cpp) [Seleccionar]
#include "CPolinomio.h"
#include <iostream>

CPolinomio::CPolinomio(double c, int e)//Constructor que crea la matriz de terminos del tamaño necesario
{
   grado = e; if(e < 0) {grado = -e;}//si el exponente es negativo lo cambia
   crearPolinomio(e);
   termino[e].asignarCoeficiente(c);//asigna el coeficiente al exponente correcto
}

void CPolinomio::crearPolinomio(int g)//crea la matriz de objetos termino del tamaño necesario
{
   delete [] termino; termino = new CTermino [g+1];
   for (int i = 0; i <= g; i++) termino[i].asignarExponente(i);
}

void CPolinomio::ampliar (int g)//amplia la matriz terminos al tamaño pasado por parametro
{
   double coeficientes [grado+1];
   for(int i = 0; i <= grado; i++) coeficientes [i] = termino[i].obtenerCoeficiente();//copia los terminos en una matriz
   crearPolinomio(g);
   for (int i = 0; i <= grado; i++) termino[i].asignarCoeficiente(coeficientes [i]);//copia los terminos de vuelta al nuevo array
   grado = g;
}

CPolinomio::~CPolinomio()
{
   delete [] termino;
}

int CPolinomio::obtenerGrado(void) const {return grado;}

void CPolinomio::asignarTermino(double c, int e)
{
   if(e < 0) return;//SI NO ES VALIDO NO HACE NADA
   if(e > grado)//SI EL EXPONENTE ES MAYOR QUE EL GRADO CREA UN NUEVO POLINOMIO ADECUADO
   {
       ampliar(e);
       termino[e].asignarCoeficiente(c);
   }
   else {
       termino[e].asignarCoeficiente(c);//SI TODO ES NORMAL SIMPLEMENTE LO CAMBIA
   }
}

void CPolinomio::mostrarPolinomio(void) const//funcion que muestra el polinomio
{
   std::cout << "(";
   for(int i = grado; i > 0; i--) {if(termino[i].obtenerCoeficiente() != 0)termino[i].mostrar();}
   if(termino[0].obtenerCoeficiente() != 0) termino[0].mostrar();
   std::cout << ")";
}

const CPolinomio CPolinomio::operator=(const CPolinomio& pol)//operador =
{
   grado = pol.grado;
   ampliar(pol.grado);
   for(int i = 0; i <= pol.grado; i++) termino[i].asignarCoeficiente(pol.termino[i].obtenerCoeficiente());
}

const CPolinomio CPolinomio::operator+(const CPolinomio& pol) const//operador +
{

   if(grado == pol.grado)//si ambos grados son iguales (no hay que ampliar)
   {
       CPolinomio resultado(0, grado);
       for(int i = 0; i <= resultado.grado; i++)
       {
           resultado.termino[i].asignarCoeficiente(pol.termino[i].obtenerCoeficiente() + termino[i].obtenerCoeficiente());
       }
       resultado.mostrarPolinomio();//codigo experimental para saber si el error es al devolver el objeto
       return resultado;
   }
   else {
       if(grado > pol.grado)//si uno de los polinomios tiene mas grado
       {
           CPolinomio resultado(0, grado);
           for(int i = 0; i <= pol.grado; i++)
           {
               resultado.termino[i].asignarCoeficiente(pol.termino[i].obtenerCoeficiente() + termino[i].obtenerCoeficiente());
           }
           for(int i = pol.grado+1; i <= grado; i++) resultado.termino[i].asignarCoeficiente(termino[i].obtenerCoeficiente());
           resultado.mostrarPolinomio();//codigo experimental para saber si el error es al devolver el objeto
           return resultado;
       }
       if(grado < pol.grado)//si el otro polinomio es mayor
       {
           CPolinomio resultado(0, pol.grado);
           for(int i = 0; i <= grado; i++)
           {
               resultado.termino[i].asignarCoeficiente(pol.termino[i].obtenerCoeficiente() + termino[i].obtenerCoeficiente());
           }
           for(int i = grado+1; i <= pol.grado; i++) resultado.termino[i].asignarCoeficiente(pol.termino[i].obtenerCoeficiente());
           resultado.mostrarPolinomio();//codigo experimental para saber si el error es al devolver el objeto
           return resultado;
       }
   }
}

const CPolinomio CPolinomio::operator*(const CPolinomio& pol) const//operador *
{
   int gr = pol.grado*grado;
   CPolinomio resultado(gr);

   for (int i = 0; i <= grado; i++)
   {
       if(termino[i].obtenerExponente() != 0)
       {
           CPolinomio calculos;
           for(int x = 0; x <= pol.grado; x++)
           {
               calculos.asignarTermino(termino[i].obtenerCoeficiente() * pol.termino[x].obtenerCoeficiente(), termino[i].obtenerExponente() + pol.termino[x].obtenerExponente());
           }
           resultado = resultado + calculos;
       }
   }

   return resultado;
}


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
Cita de: ivancea96 en 17 Diciembre 2017, 13:20 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 C/C++ / error: 1d returned exit status
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
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
Hola, he hecho un pequeño programa para acompañar mi pregunta

main.cpp
Código (cpp) [Seleccionar]
#include <iostream>

using namespace std;

int main()
{
    clase miClase(42);
    miClase.mostrar();
    return 0;
}


clase.h
Código (cpp) [Seleccionar]
#ifndef CLASE_H
#define CLASE_H
#include <iostream>

class clase
{
private:
    int numero;
public:
    clase (int n=0);
    void mostrar(void) const;
};

#endif // CLASE_H


clase.cpp
Código (cpp) [Seleccionar]
#include "clase.h"
#include <iostream>

clase::clase (int n) : numero(n){}

void clase::mostrar(void) const
{
    cout << numero << endl;
}


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
Redes / Conexiones de puente
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
Windows / Re: .NetFramework
10 Noviembre 2016, 19:17 PM
Lo se, pero es que la rota de mi framework estoy bastante seguro de que es esa...
#29
Windows / .NetFramework
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
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"?