CODIGO FUENTE:
// ----------------------------------------------------------------------------
// Codigo fuente compatible con cualquier compilador de C++
// estandard con la norma AT&T 3.0
//
// Autor: Francisco González Parrón
// Versión: Definitiva.
// ----------------------------------------------------------------------------
#include <iostream.h>
#include <iomanip.h>
#include <conio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
const int MAX = 100; // Nº máximo de elementos
template < class TipoNum > class Orden
{
private:
TipoNum anNum[ 100 ]; // Datos
void InterCambia( TipoNum &, TipoNum & ); // Intercambiador
public:
Orden(); // Constructor
~Orden(); // Destructor
void InitialSet(); // Opciones de visualización
void VerArray(); // Visualización
void OrdenaNumeros(); // Ordenación
};
//---------------------------------------------------------------------------
// Declaración de los métodos
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
// Inicialización de los Arrays
//----------------------------------------------------------------------------
template < class TipoNum > Orden< TipoNum >::Orden()
{
int nI;
for( nI = 0; nI < MAX; nI++ )
anNum[ nI ] = TipoNum( ( rand() % 100 ) + 1.0 ); // De 1 a 100
}
//----------------------------------------------------------------------------
// Destructor
//----------------------------------------------------------------------------
template < class TipoNum > Orden< TipoNum >::~Orden()
{
// No es necesario código
}
//----------------------------------------------------------------------------
// Modo de visualización.
// Debería estar definida en una clase derivada de Orden<float>,
// ya que a los enteros no los afecta este tipo de visualización,
// pero no se ha hecho así para no complicar la visión general
// del programa
//----------------------------------------------------------------------------
template < class TipoNum > void Orden< TipoNum >::InitialSet()
{
cout << setprecision(2) << setiosflags(ios::fixed) < setiosflags(ios::showpoint);
}
//----------------------------------------------------------------------------
// Muestra los resultados
//----------------------------------------------------------------------------
template < class TipoNum > void Orden< TipoNum >::VerArray()
{
int nI;
cout << "Indice" << "\t" << "Valor \n";
cout << "------" << "\t" << "----- \n";
for( nI = 0; nI < MAX; nI++ )
cout << nI << "\t" << anNum[ nI ] << "\n";
cout << "\n\n";
}
//----------------------------------------------------------------------------
// Intercambio de datos
//----------------------------------------------------------------------------
template < class TipoNum > void Orden< TipoNum >::InterCambia( TipoNum & nI, TipoNum & nJ )
{
TipoNum nAux;
nAux = nI;
nI = nJ;
nJ = nAux;
}
//----------------------------------------------------------------------------
// Ordenación de los arrays
//----------------------------------------------------------------------------
template < class TipoNum > void Orden< TipoNum >::OrdenaNumeros()
{
int nI, nJ;
int lInterCambio; // pseudo booleano
nI = 0;
lInterCambio = TRUE;
while( lInterCambio )
{
lInterCambio = FALSE;
for( nJ = 0; nJ < MAX - ( nI + 1 ); nJ++ )
if( anNum[ nJ ] > anNum[ nJ + 1 ] ) // Si.. realizamos el intercambio
{
InterCambia( anNum[ nJ ], anNum[ nJ + 1 ] );
lInterCambio = TRUE;
}
nI++;
}
}
//----------------------------------------------------------------------------
// Programa principal
//----------------------------------------------------------------------------
void main( void )
{
Orden< int > IntArray; // Llamada al "Contenedor" para enteros
Orden< float > FloatArray; // Llamada al "Contenedor" para reales
FloatArray.InitialSet();
IntArray.VerArray(); // Se muestran los datos sin ordenar
FloatArray.VerArray();
IntArray.OrdenaNumeros();
FloatArray.OrdenaNumeros();
IntArray.VerArray(); // Se muestran los datos ya ordenados
FloatArray.VerArray();
} // Fin del programa de demostración
//----------------------------------------------------------------------------