Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/12/2012, 23:05
reethok
 
Fecha de Ingreso: abril-2011
Mensajes: 224
Antigüedad: 13 años
Puntos: 8
Pregunta Problema con programa de ordenamiento (usando apuntadores a funciones)

Pues... el problema no debería suceder según yo :|... al ejecutarlo sólo me pide que introduzca 1 o 2, cuando lo hago y aprieto enter... me imprime "Elementos de datos en el orden original" y de ahí... NO PASA NADA!, así se queda...

¿Hay algún error? ¿O qué está sucediendo ._.?

Código C++:
Ver original
  1. // Ordenamiento multipropósito que usa apuntadores a funciones.
  2.  
  3. #include <iostream>
  4. using std::cout;
  5. using std::cin;
  6. using std::endl;
  7.  
  8. #include <iomanip>
  9. using std::setw;
  10.  
  11. void ordenamientoSeleccion(int[], const int, bool (*)(int, int));
  12. void intercambiar(int * const, int * const);
  13. bool ascendente(int, int);
  14. bool descendente(int, int);
  15.  
  16. int main()
  17. {
  18.   const int tamanioArreglo = 10;
  19.   int orden; // 1 = ascendente, 2 = descendente
  20.   int contador; // subíndice del arreglo
  21.   int a[tamanioArreglo] = {2, 6, 4, 8, 10, 12, 89, 68, 45, 37};
  22.  
  23.   cout << "Escriba 1 para orden ascendente,\n"
  24.     << "Escriba 2 para orden descendente: ";
  25.  
  26.   cin >> orden;
  27.  
  28.   cout << "\nElementos de datos en el orden original\n";
  29.  
  30.   for(contador = 0; contador < tamanioArreglo; contador++)
  31.     cout << setw(4) << a[contador];
  32.  
  33.   if(orden == 1)
  34.   {
  35.     ordenamientoSeleccion(a, tamanioArreglo, ascendente);
  36.     cout << "\nElementos de datos en orden ascendente\n";
  37.   }else
  38.   {
  39.     ordenamientoSeleccion(a, tamanioArreglo, descendente);
  40.     cout << "\nElementos de datos en orden descendente\n";
  41.   }
  42.  
  43.   for(contador = 0; contador < tamanioArreglo; contador++)
  44.     cout << setw(4) << a[contador];
  45.  
  46.   cout << endl;
  47.   return 0;
  48. }
  49.  
  50. void ordenamientoSeleccion(int trabajo[], const int tamanio, bool(*compara)(int, int))
  51. {
  52.   int menorOMayor;
  53.  
  54.   for(int i = 0; i < tamanio - 1; i++)
  55.   {
  56.     menorOMayor = i;
  57.    
  58.     for(int indice = i + 1; indice < tamanio; i++)
  59.       if(!(*compara)(trabajo[menorOMayor], trabajo[indice]))
  60.     menorOMayor = indice;
  61.      
  62.     intercambiar(&trabajo[menorOMayor], &trabajo[i]);
  63.   }
  64. }
  65.  
  66. void intercambiar(int * const elemento1Ptr, int * const elemento2Ptr)
  67. {
  68.   int contenido = *elemento1Ptr;
  69.   *elemento1Ptr = *elemento2Ptr;
  70.   *elemento2Ptr = contenido;
  71. }
  72.  
  73. bool ascendente(int a, int b)
  74. {
  75.   return a < b;
  76. }
  77.  
  78. bool descendente(int a, int b)
  79. {
  80.   return a > b;
  81. }

Última edición por reethok; 14/12/2012 a las 23:10