Programa de ordenamiento de multiple proposito que utiliza apuntadores a funciones

¿Has encontrado un error? ¿Tienes la solución? Deja tu correción ;-)

Antes de comentar: Gran parte de los ejercicios propuestos no tienen librerías debido a que Wordpress las eliminó al verlas como etiquetas HTML. Si sabes/tienes/conoces las librerías que hacen falta, déjalo en los comentarios. Y lo mas importante: Todos los ejemplos fueron realizados por estudiante con únicamente conocimiento básico del lenguaje, no de programación.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include <stdio.h>
#define TAMANIO 10
 
/* prototipos */
void burbuja( int trabajo[], const int tamanio,              int (*compara)( int a, int b ) );
int ascendente( int a, int b );
int descendente( int a, int b );
 
int main(){
   int orden;   /* 1 para el orden ascendente o 2 para el orden descendente */
   int contador; /* contador */
 
   /* inicializa el arreglo a */   int a[ TAMANIO ] = { 2, 6, 4, 8, 10, 12, 89, 68, 45, 37 };
 
   printf( "Introduzca 1 para ordenar en forma ascendente,n" 
           "Introduzca 2 para ordenar en forma descendente: " );
   scanf( "%d",  &orden ); 
   printf( "nElementos de datos en el orden originaln" );
   
   /* muestra el arreglo original */
   for ( contador = 0; contador < TAMANIO; contador++ ) {      printf( "%5d", a[ contador ] );
   } /* fin de for */
 
   /* clasifica el arreglo en orden ascendente; pasa la función ascendente como un
     argumento para especificar el orden ascendente */   if ( orden == 1 ) {
      burbuja( a, TAMANIO, ascendente );
      printf( "nElementos de datos en orden ascendenten" );
   } /* fin de if */ 
   else { /* pasa la función descendente */      burbuja( a, TAMANIO, descendente );
      printf( "nElementos de datos en orden descendenten" );
   } /* fin de else */
 
   /* muestra el arreglo ordenado */   for ( contador = 0; contador < TAMANIO; contador++ ) {
      printf( "%5d", a[ contador ] );   
   } /* fin de for */
 
   printf( "n" ); 
   return 0; /* indica terminación exitosa */
 
} /* fin de main */
 /* ordenamiento burbuja de múltiple propósito; el parámetro compara es un apuntador a
   la función de comparación que determina el tipo de ordenamiento */
void burbuja( int trabajo[], const int tamanio, int (*compara)( int a, int b ) )
{
   int pasada;  /* contador de pasadas */   int cuenta;  /* contador de comparaciones */
 
   void intercambia( int *ptrElemento1, int *ptrElemento2 ); /* prototipo */
 
   /* ciclo para controlar las pasadas */   for ( pasada = 1; pasada < tamanio; pasada++ ) {
 
      /* ciclo para controlar el número de comparaciones por pasada */
      for ( cuenta = 0; cuenta < tamanio - 1; cuenta++ ) {
          /* si los elementos adyacentes no se encuentran en orden, los intercambia */
         if ( (*compara)( trabajo[ cuenta ], trabajo[ cuenta + 1 ] ) ) {
            intercambia( &trabajo[ cuenta ], &trabajo[ cuenta + 1 ] );
         } /* fin de if */
       } /* fin de for */
 
   } /* fin de for */
 
} /* fin de la función burbuja */ 
/* intercambia los valores en las ubicaciones en memoria a los cuales apunta ptrElemento1 y 
   ptrElemento2 */
void intercambia( int *ptrElemento1, int *ptrElemento2 )
{   int almacena; /* variable de almacenamiento temporal */
 
   almacena = *ptrElemento1;
   *ptrElemento1 = *ptrElemento2;
   *ptrElemento2 = almacena;} /* fin de la función intercambia */
 
/* determina si los elementos están en desorden para el
    ordenamiento ascendente */
int ascendente( int a, int b ){
   return b < a;   /* intercambia si b es menor que a */
 
} /* fin de la función ascendente */
 /* determina si los elementos están en desorden para el
    ordenamiento descendente */
int descendente( int a, int b )
{
   return b > a;   /* intercambia si b es mayor que a */ 
} /* fin de la función descendente */

Punto importante: Si vas a sugerir un segmento de código en algún lenguaje debes hacerlo así:

  • Si es lenguaje C <code lang="c">Código en C</code>
  • Si es lenguaje Pascal <code lang="pascal">Aquí dentro el código de Pascal</code>.

De esta manera el código coloreas el código.

Deja un comentario

Suscribirse a los comentarios.