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

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ordenar alfabéticamente array de punteros a char (lenguaje C)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ordenar alfabéticamente array de punteros a char (lenguaje C)  (Leído 7,860 veces)
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Ordenar alfabéticamente array de punteros a char (lenguaje C)
« en: 5 Enero 2015, 23:52 pm »

Hola a todos.
El programa que dejo a continuación funciona correctamente, lo que no logro hacer son 2 cosas que desearía me enseñen a concretarlas.-
Quiero en primer lugar eliminar esta línea.

Código
  1. #define ELEMENTOS 15


Como debo hacer con sizeof para saber cuántos punteros tengo declarado en el array de punteros provincias, me funciona con char, int, pero no con array de punteros.-
Lo otro que no puedo lograr es pasar el array provincias a una función, para que se entienda quiero hacer lo mismo con 2 funciones, una que se llame mostrar y la otra ordenar, en este caso me interesaría más que me escriban un poco de teoría que la sintaxis (si es mucho pedir, mil disculpas).-


Código
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. #define ELEMENTOS 15
  5.  
  6. int main(void){
  7. char *provincias[ELEMENTOS] = {"Tucuman", "Santa Fe", "Buenos Aires", "Rio Negro", "Neuquen",
  8. "Misiones", "Catamarca", "Santa Cruz", "Jujuy", "Chaco",
  9. "Formosa", "Corrientes", "Salta", "La Rioja", "Cordoba"};
  10. char *temp;
  11. int i, j;
  12.  
  13. printf("\n provincias Argentinas desordenadas\n\n" );
  14. for(i=0; i<ELEMENTOS; i++){
  15. printf(" %s\n", provincias[i]);
  16. }
  17.  
  18. for(i=0; i<ELEMENTOS-1; i++){
  19. for(j=i+1; j<ELEMENTOS; j++){
  20. if(strcmp(provincias[i], provincias[j]) > 0){
  21. temp = provincias[i];
  22. provincias[i] = provincias[j];
  23. provincias[j] = temp;
  24. }
  25. }
  26. }
  27.  
  28. printf("\n Ordenadas alfabeticamente\n\n" );
  29. for(i=0; i<ELEMENTOS; i++){
  30. printf(" %s\n", provincias[i]);
  31. }
  32.  
  33. printf("\n Pulse [Enter] para finalizar..."); getchar();
  34. return 0;
  35. }

Saludos.
Daniel


En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
crack81

Desconectado Desconectado

Mensajes: 222



Ver Perfil
Re: Ordenar alfabéticamente array de punteros a char (lenguaje C)
« Respuesta #1 en: 6 Enero 2015, 01:23 am »

Buenas compadre te dejo mi version, ojo cuidado con el uso que le das al preprocesador de c ese "define"
en mi punto de vista para este caso son mejor las constantes

en la parte de las funciones les pase por parametros puntero ya que el paso por referencia como tal no existe en c, caso contrario en mi amado c++ XD

Te dejo mi version espero sea de ayuda

Código
  1.    #include <stdio.h>
  2.    #include <string.h>
  3.  
  4.  
  5.    void MostrarLista(char *data[],const int tamano){//muestra la lista
  6.        int i;
  7.        for(i=0;i<tamano;i++){
  8.          printf(" %s\n", data[i]);
  9.        }
  10.    }
  11.  
  12.    void OrdenarLista(char *data[],const int tamano){//ordena la lista todo es pasado por "referencia"
  13.       char *temp;
  14.       int i,j;
  15.  
  16.        for(i=0; i<tamano-1; i++){
  17.            for(j=i+1; j<tamano; j++){
  18.                if(strcmp(data[i], data[j]) > 0){
  19.                    temp = data[i];
  20.                    data[i] = data[j];
  21.                    data[j] = temp;
  22.                }
  23.            }
  24.        }
  25.    }
  26.  
  27.  
  28.    int main(void){
  29.    char *provincias[] = {"Tucuman", "Santa Fe", "Buenos Aires", "Rio Negro", "Neuquen",
  30.    "Misiones", "Catamarca", "Santa Cruz", "Jujuy", "Chaco",
  31.    "Formosa", "Corrientes", "Salta", "La Rioja", "Cordoba"};
  32.  
  33.    const int Elementos=sizeof(provincias)/sizeof(char*);//te da el tamaño del arreglo en este caso 15
  34.  
  35.    printf("\n provincias Argentinas desordenadas\n\n" );
  36.    MostrarLista(provincias,Elementos);
  37.  
  38.    OrdenarLista(provincias,Elementos);
  39.  
  40.    printf("\n Ordenadas alfabeticamente\n\n" );
  41.    MostrarLista(provincias,Elementos);
  42.  
  43.    printf("\n Pulse [Enter] para finalizar..."); getchar();
  44.    return 0;
  45.    }


saludos si tienes alguna duda o cuestionamiento hazmelo saber saludos..


« Última modificación: 6 Enero 2015, 01:25 am por crack81 » En línea

Si C/C++ es el padre de los lenguajes entonces ASM es dios.
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ordenar alfabéticamente array de punteros a char (lenguaje C)
« Respuesta #2 en: 6 Enero 2015, 03:23 am »

Como debo hacer con sizeof para saber cuántos punteros tengo declarado en el array de punteros provincias, me funciona con char, int, pero no con array de punteros.
Para conocer el numero de elementos en un array sin importar su tipo basta con utilizar:
Código
  1. size_t num_elem = sizeof a / sizeof a[0];
Donde "a" es el identificador del array.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
DanielPy

Desconectado Desconectado

Mensajes: 145



Ver Perfil
Re: Ordenar alfabéticamente array de punteros a char (lenguaje C)
« Respuesta #3 en: 6 Enero 2015, 18:31 pm »

Hola crack81.
Citar
saludos si tienes alguna duda o cuestionamiento hazmelo saber saludos..
No te das una idea lo que ayuda esa frase a alguien que como yo (63 años) que está tan sólo en este bello camino del aprendizaje de la programación, espero que como tantos otros estés siempre allí para evacuar mis dudas.-
En cuanto al código, perfecto con eso ya me di cuenta como pasar un array de punteros a función, sólo una cosita, ¿qué diferencia hay en hacer las funciones con prototipo y sin prototipo?.-
rir3760, un párrafo aparte para tús aportes, ya son innumerables los códigos distintos que te e copiado, lo tuyo es genial.- ;-) ;-) ;-)
Por último mil disculpas por ser tan poco pragmático en lo que escribí,  no siempre se puede aplicar la fórmula perfecta, 50% mente y 50% corazón, esta vez fue 20 y 80.-     
 
Saludos.
Daniel
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.-
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Ordenar alfabéticamente array de punteros a char (lenguaje C)
« Respuesta #4 en: 7 Enero 2015, 18:42 pm »

¿qué diferencia hay en hacer las funciones con prototipo y sin prototipo?
Las ventajas del uso de prototipos superan con mucho a las desventajas que no hay razón (de peso) para no utilizarlos.

Aun así si se quiere desarrollar un programa sin prototipos es posible siempre y cuando se cumpla con varios requerimientos: para empezar toda función debe definirse antes de cualquier uso de esta.

Si eso no es posible (por ejemplo en el caso de dos funciones donde una llame a la otra) todavía hay la posibilidad de terminar con un programa funcional pero se deben cubrir dos requisitos: 1) El numero y tipo de parámetros de la función debe coincidir con la llamada (no es posible con funciones con un numero variable de argumentos como printf) y 2) El valor de retorno de la función debe ser de tipo int. Si no se cumplen ambos ya no hay garantías sobre el resultado del programa (comportamiento no definido o UB).

Lo anterior es la razón por la que, de vez en cuando, algunos usuarios comentan que pueden utilizar una función de la biblioteca estándar de C sin incluir el encabezado correspondiente. Un caso común es system:
Código
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5.   puts("Hola, mundo");
  6.   system("pause");
  7.  
  8.   return 0;
  9. }
Como ahí la llamada coincide con la declaración no hay problema.

Pero en otros casos no es así, por ejemplo con atof:
Código
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5.   double d = atof("3.0");
  6.  
  7.   printf("%.2f\n", d);
  8.  
  9.   return 0;
  10. }
Ya que el valor de retorno se asume como int cuando en realidad es double ello resulta en UB (puede funcionar correctamente o no, en mi caso no lo hace e imprime como salida 0.00).

En resumen mejor utilizar prototipos y te olvidas de los dolores de cabeza.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ordenar alfabeticamente en php con numeros « 1 2 »
PHP
dominioswww 10 7,873 Último mensaje 17 Junio 2008, 03:02 am
por WHK
[C++] [Punteros] Ordenar array de enteros, pesadilla total.
Programación C/C++
DarkItachi 9 13,057 Último mensaje 5 Mayo 2010, 17:56 pm
por biribau
Array de punteros en lenguaje C. « 1 2 »
Programación C/C++
DanielPy 16 6,349 Último mensaje 26 Diciembre 2013, 22:04 pm
por leosansan
¿como ordenar alfabeticamente array bidimensional?
Programación C/C++
Drewermerc 3 2,906 Último mensaje 21 Abril 2016, 18:05 pm
por Drewermerc
Duda con punteros a char en función [lenguaje C]
Programación C/C++
Dano1952 2 1,759 Último mensaje 2 Junio 2018, 02:01 am
por Dano1952
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines