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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ayuda con estos 3 Programas
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda con estos 3 Programas  (Leído 2,991 veces)
Gerik

Desconectado Desconectado

Mensajes: 24


Ver Perfil
Ayuda con estos 3 Programas
« en: 9 Mayo 2010, 23:13 pm »

Código
  1. / PROG0613.CPP - Suma de polinomios dependientes de dos variables
  2. //
  3. #include <iostream.h>                                                                    
  4. #include "cpolinom.h" // clases CTermino y CPolinomio
  5.  
  6. CTermino *IntroducirTermino( void );
  7.  
  8. void main() // función principal
  9. {
  10.  CPolinomio PolinomioA, PolinomioB, PolinomioR;
  11.  CTermino *ptx; // puntero a un término
  12.  
  13.  cout << "Términos del polinomio A\n"
  14.       << "(para finalizar introduzca 0 para el\n"
  15.       << "coeficiente y para los exponentes):\n\n";
  16.  ptx = IntroducirTermino();
  17.  while ( ptx )
  18.  {
  19.    PolinomioA.AsignarTermino( ptx );
  20.    ptx = IntroducirTermino();
  21.  }
  22.  
  23.  cout << "Términos del polinomio B\n"
  24.       << "(para finalizar introduzca 0 para el\n"
  25.       << "coeficiente y para los exponentes):\n\n";
  26.  ptx = IntroducirTermino();
  27.  while ( ptx )
  28.  {
  29.    PolinomioB.AsignarTermino( ptx );
  30.    ptx = IntroducirTermino();
  31.  }
  32.  
  33.  PolinomioR = PolinomioA + PolinomioB;
  34.  
  35.  cout << "\nPolinomio A: "; cout << PolinomioA;
  36.  cout << "\nPolinomio B: "; cout << PolinomioB;
  37.  cout << "\nPolinomio R: "; cout << PolinomioR
  38.       << " = " << PolinomioR(1, 1);
  39.  cout << endl;
  40.  
  41.  double v = PolinomioR; // valor del polinomio para x = 1 e y = 1
  42.  cout << "Para x = 1 " << " el valor del polinomio es: "
  43.       << v << endl;
  44. }
  45.  
  46. CTermino *IntroducirTermino()
  47. {
  48.  CTermino *ptx = NULL;
  49.  float coef;
  50.  int expx, expy;                    
  51.  cout << "Introduce coeficiente:    "; cin >> coef;
  52.  cout << "Introduce exponente en X: "; cin >> expx;
  53.  cout << "Introduce exponente en Y: "; cin >> expy;
  54.  cout << endl;
  55.  if ( !coef && !expx && !expy ) return NULL;
  56.  
  57.  ptx = new CTermino( coef, expx, expy );
  58.  return ptx;
  59. }
  60.  

EI: juntando mensajes.

Código
  1. // CPOLINOM.H - Declaración de las clases CTermino y CPolinomio
  2. //
  3. #if  !defined( _CPolinom_H_ )
  4. #define _CPolinom_H_
  5.  
  6. #include <stdlib.h>
  7. /////////////////////////////////////////////////////////////////
  8. // Clase para manipular un término de un polinomio cualquiera.
  9. class CTermino
  10. {
  11. protected:
  12.    float Coeficiente; // coeficiente
  13.    int ExponenteDeX;  // exponente de x
  14.    int ExponenteDeY;  // exponente de y
  15.  
  16. public:
  17.    CTermino( float coef = 0.0, int expx = 1, int expy = 1 ) :
  18.      Coeficiente(coef), ExponenteDeX(expx), ExponenteDeY(expy) {}
  19.    float ObtenerCoeficiente() { return Coeficiente; }
  20.    int ObtenerExponenteDeX() const { return ExponenteDeX; }
  21.    int ObtenerExponenteDeY() const { return ExponenteDeY; }
  22.    void VisualizarTermino() const;
  23. };                        
  24. //////////////////////////////////////////////////////////////////
  25.  
  26. //////////////////////////////////////////////////////////////////
  27. // Clase para manipular ecuaciones algebraicas o polinómicas
  28. // dependientes de dos variables.
  29. class CPolinomio
  30. {
  31.  friend ostream &operator<<( ostream &, const CPolinomio & );
  32.  private:
  33.    int NroTerminosMax;   // número máximo de términos
  34.    int NroTerminosAct;   // número de términos que hay actualmente
  35.    CTermino **ppTermino; // array de punteros
  36.  
  37.    void copiar( CTermino *&p, CTermino *&q );
  38.  
  39.  public:
  40.    CPolinomio(); // constructor
  41.    CPolinomio(const CPolinomio &); // constructor copia
  42.    ~CPolinomio(); // destructor
  43.  
  44.    CPolinomio operator=(const CPolinomio &); // operador =
  45.    int ObtenerNroTerminosAct() { return NroTerminosAct; }
  46.    void AsignarTermino( CTermino *pterm );
  47.    CPolinomio operator+( CPolinomio & ); // operador +
  48.    double operator()( double x = 1, double y = 1 ); // operador ()
  49.    operator double(); // operador de conversión
  50.    void ErrorMem( void )
  51.    {
  52.      cerr << "Insuficiente memoria\n";
  53.      exit( -1 );
  54.    }
  55. };
  56. //////////////////////////////////////////////////////////////////
  57.  
  58. #endif // _CPolinom_H_

EI: juntando mensajes.

Código
  1. // CPOLINOM.CPP - Implementación de las clases CTermino
  2. //                y CPolinomio
  3. //
  4. #include <iostream.h>                                                                    
  5. #include <math.h>          
  6. #include <string.h>
  7. #include <stdlib.h>
  8. #include "cpolinom.h" // clases CTermino y CPolinomio
  9.  
  10. /////////////////////////////////////////////////////////////////
  11. // Visualizar un término
  12. void CTermino::VisualizarTermino() const
  13. {
  14.  cout << ((Coeficiente < 0) ? " - " : " + ")
  15.       << fabs(Coeficiente);
  16.  if ( ExponenteDeX ) cout << "x^" << ExponenteDeX;
  17.  if ( ExponenteDeY ) cout << "y^" << ExponenteDeY;
  18. }
  19. /////////////////////////////////////////////////////////////////
  20.  
  21. /////////////////////////////////////////////////////////////////
  22. // Constructor
  23. CPolinomio::CPolinomio()
  24. {
  25.  NroTerminosMax = 10;
  26.  NroTerminosAct = 0;
  27.  // Reservamos inicialmente espacio para NroTerminosMax términos
  28.  ppTermino = new CTermino *[ NroTerminosMax ];
  29.  if ( ppTermino == NULL ) ErrorMem();
  30.  for ( int i = 0; i < NroTerminosMax; i++ )
  31.    ppTermino[i] = NULL;
  32. }
  33.  
  34. // Destructor
  35. CPolinomio::~CPolinomio()
  36. {
  37.  // Liberar la memoria ocupada por el polinomio
  38.  for ( int i = 0; i < NroTerminosAct; i++ )
  39.    delete ppTermino[i];
  40.  delete [] ppTermino;
  41. }
  42.  
  43. // Copiar un termino del polinomio en otro
  44. void CPolinomio::copiar( CTermino *&p, CTermino *&q )
  45. {
  46.  p = (CTermino *) new CTermino( q->ObtenerCoeficiente(),
  47.                                 q->ObtenerExponenteDeX(),
  48.                                 q->ObtenerExponenteDeY());
  49.  if ( p == NULL ) ErrorMem();
  50. }
  51.  
  52. // Constructor copia
  53. CPolinomio::CPolinomio(const CPolinomio &pol)
  54. {
  55.  NroTerminosMax = pol.NroTerminosMax;
  56.  NroTerminosAct = pol.NroTerminosAct;
  57.  ppTermino = new CTermino *[ NroTerminosMax ];
  58.  if ( ppTermino == NULL ) ErrorMem();
  59.  for ( int i = 0; i < NroTerminosMax; i++ )
  60.    ppTermino[i] = NULL;
  61.  for ( i = 0; i < NroTerminosAct; i++ )
  62.    copiar( ppTermino[i], pol.ppTermino[i] );
  63. }
  64.  
  65. // Operador de asignación
  66. CPolinomio CPolinomio::operator=(const CPolinomio &pol)
  67. {
  68.  // Liberar la memoria del polinomio destino. Este orden es
  69.  // fundamental porque el origen puede tener diferente número de
  70.  // términos.
  71.  for ( int i = 0; i < NroTerminosAct; i++ )
  72.    delete ppTermino[i];
  73.  delete [] ppTermino;
  74.  // Copiar el origen en el nuevo destino
  75.  NroTerminosMax = pol.NroTerminosMax;
  76.  NroTerminosAct = pol.NroTerminosAct;
  77.  ppTermino = new CTermino *[ NroTerminosMax ];
  78.  if ( ppTermino == NULL ) ErrorMem();
  79.  for ( i = 0; i < NroTerminosMax; i++ )
  80.    ppTermino[i] = NULL;
  81.  for ( i = 0; i < NroTerminosAct; i++ )
  82.    copiar( ppTermino[i], pol.ppTermino[i] );
  83.  return *this;
  84. }
  85.  
  86. // Asigna un término al polinomio colocándolo en orden ascendente
  87. // de los exponentes de x y de y (expx*100+expy). Si no hay espacio
  88. // para el nuevo término se incrementa el tamaño del polinomio en
  89. // dos términos.
  90. void CPolinomio::AsignarTermino( CTermino *pterm )
  91. {
  92.  if ( pterm->ObtenerCoeficiente() == 0 )
  93.  {
  94.    delete pterm; // liberar la memoria del término no insertado
  95.    return;
  96.  }
  97.  if ( abs(pterm->ObtenerExponenteDeX()) > 99 ||
  98.       abs(pterm->ObtenerExponenteDeY()) > 99 )
  99.  {
  100.    cerr << "-99 <= exp <= 99" << endl;
  101.    delete pterm; // liberar la memoria del término no insertado
  102.    return;
  103.  }
  104.  
  105.  if ( NroTerminosAct == NroTerminosMax )
  106.  {
  107.    // Incrementar el array en 2 elementos
  108.    CTermino **ppTemp = new CTermino *[ NroTerminosMax + 2 ];
  109.    if ( ppTemp == NULL ) ErrorMem();
  110.    for ( int i = 0; i < NroTerminosMax + 2; i++ )
  111.      ppTemp[i] = NULL;
  112.    for ( i = 0; i < NroTerminosAct; i++ )
  113.      ppTemp[i] = ppTermino[i];
  114.    delete [] ppTermino;
  115.    ppTermino = ppTemp;
  116.    NroTerminosMax += 2;
  117.  }
  118.  
  119.  // Insertar un nuevo término en orden ascendente de los exps.
  120.  int i = NroTerminosAct - 1;
  121.  int expXT = pterm->ObtenerExponenteDeX();
  122.  int expYT = pterm->ObtenerExponenteDeY();
  123.  while ( i >= 0 && (expXT * 100 + expYT <
  124.                     ppTermino[i]->ObtenerExponenteDeX() * 100 +
  125.                     ppTermino[i]->ObtenerExponenteDeY()) )
  126.  {
  127.    ppTermino[i+1] = ppTermino[i];
  128.    i--;
  129.  }
  130.  ppTermino[i+1] = pterm;
  131.  NroTerminosAct++;
  132. }
  133.  
  134. // Sumar dos polinomios. Sobrecarga del operador +.
  135. CPolinomio CPolinomio::operator+(  CPolinomio &polB )
  136. {
  137.  int ipa = 0, ipb = 0;
  138.  int na = NroTerminosAct, nb = polB.NroTerminosAct;
  139.  float coefA, coefB;
  140.  int expXA, expYA, expXB, expYB;
  141.  CPolinomio polR;
  142.  
  143.  // Sumar polA con polB
  144.  while ( ipa < na && ipb < nb )
  145.  {
  146.    coefA = ppTermino[ipa]->ObtenerCoeficiente();
  147.    expXA = ppTermino[ipa]->ObtenerExponenteDeX();
  148.    expYA = ppTermino[ipa]->ObtenerExponenteDeY();
  149.    coefB = polB.ppTermino[ipb]->ObtenerCoeficiente();
  150.    expXB = polB.ppTermino[ipb]->ObtenerExponenteDeX();
  151.    expYB = polB.ppTermino[ipb]->ObtenerExponenteDeY();
  152.    if ( expXA == expXB && expYA == expYB )
  153.    {
  154.      polR.AsignarTermino(
  155.                   new CTermino(coefA + coefB, expXA, expYA) );
  156.      ipa++, ipb++;
  157.    }
  158.    else if ( expXA * 100 + expYA < expXB * 100 + expYB )
  159.    {
  160.      polR.AsignarTermino( new CTermino(coefA, expXA, expYA) );
  161.      ipa++;
  162.    }
  163.    else
  164.    {
  165.      polR.AsignarTermino( new CTermino(coefB, expXB, expYB) );
  166.      ipb++;
  167.    }
  168.  }
  169.  
  170.  // Términos restantes en el polA
  171.  while ( ipa < na )
  172.  {
  173.    coefA = ppTermino[ipa]->ObtenerCoeficiente();
  174.    expXA = ppTermino[ipa]->ObtenerExponenteDeX();
  175.    expYA = ppTermino[ipa]->ObtenerExponenteDeY();
  176.    polR.AsignarTermino( new CTermino(coefA, expXA, expYA) );
  177.    ipa++;
  178.  }
  179.  // Términos restantes en el polB
  180.  while ( ipb < nb )
  181.  {
  182.    coefB = polB.ppTermino[ipb]->ObtenerCoeficiente();
  183.    expXB = polB.ppTermino[ipb]->ObtenerExponenteDeX();
  184.    expYB = polB.ppTermino[ipb]->ObtenerExponenteDeY();
  185.    polR.AsignarTermino( new CTermino(coefB, expXB, expYB) );
  186.    ipb++;
  187.  }
  188.  return polR;
  189. }
  190.  
  191. // Visualizar los términos de un polinomio.
  192. // Operador de inserción.
  193. ostream &operator<<( ostream &os, const CPolinomio &polX )
  194. {
  195.  int i = polX.NroTerminosAct;
  196.  
  197.  while ( i-- )
  198.    if ( polX.ppTermino[i]->ObtenerCoeficiente() )
  199.      polX.ppTermino[i]->VisualizarTermino();
  200.  return os;
  201. }
  202.  
  203. // Operador llamada a función
  204. double CPolinomio::operator()( double x, double y )
  205. {
  206.  double v = 0;
  207.  for ( int i = 0; i < NroTerminosAct; i++ )
  208.    v += ppTermino[i]->ObtenerCoeficiente() *
  209.         pow(x, ppTermino[i]->ObtenerExponenteDeX()) *
  210.         pow(y, ppTermino[i]->ObtenerExponenteDeY());
  211.  return v;
  212. }
  213.  
  214. // Operador de conversión de CPolinomio a double
  215. CPolinomio::operator double()
  216. {
  217.  return (*this)();
  218. }

Supuestamente Los 3 Programas Generan Uno Solo alguien me podria explicar maso que estan haciendo cada uno


« Última modificación: 10 Mayo 2010, 11:03 am por Eternal Idol » En línea

h0oke


Desconectado Desconectado

Mensajes: 2.059


Coder ~


Ver Perfil WWW
Re: Ayuda con estos 3 Programas
« Respuesta #1 en: 9 Mayo 2010, 23:41 pm »

Sólo son 2 programas, y un archivo de cabecera...

¿Qué hacen? Lee los comentarios... está bien documentado... Otra opción es que los compiles y lo veas step by step...


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.969


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Ayuda con estos 3 Programas
« Respuesta #2 en: 10 Mayo 2010, 11:03 am »

Es un solo programa, intenta compilarlo.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
me podrian revisar estos programas « 1 2 »
Programación C/C++
eduardo17445 19 6,970 Último mensaje 7 Mayo 2013, 22:35 pm
por cypascal
ayuda con estos detectores de proteccion
Ingeniería Inversa
mastery78 5 2,996 Último mensaje 3 Agosto 2013, 03:19 am
por apuromafo CLS
Ayuda con estos programas ?
Dudas Generales
javiert123 2 2,498 Último mensaje 15 Diciembre 2013, 08:00 am
por Randomize
¿Existe la versión portable de estos programas?
Software
Ori-chan 3 1,726 Último mensaje 1 Diciembre 2014, 17:31 pm
por MinusFour
¿son importantes estos programas de inicio?
Windows
luis_74 4 24,562 Último mensaje 20 Marzo 2015, 14:56 pm
por luis_74
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines