Autor Tema: Ordenar alfabéticamente array de punteros a char [C] sizeof con arrays  (Leído 28484 veces)

Pino1952

  • Sin experiencia
  • *
  • Mensajes: 21
    • Ver Perfil
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: [Seleccionar]
#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 pero 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: [Seleccionar]
#include <stdio.h>
#include <string.h>

#define ELEMENTOS 15

int main(void){
char *provincias[ELEMENTOS] = {"Tucuman", "Santa Fe", "Buenos Aires", "Rio Negro", "Neuquen",
"Misiones", "Catamarca", "Santa Cruz", "Jujuy", "Chaco",
"Formosa", "Corrientes", "Salta", "La Rioja", "Cordoba"};
char *temp;
int i, j;

printf("\n provincias Argentinas desordenadas\n\n" );
for(i=0; i<ELEMENTOS; i++){
printf(" %s\n", provincias[i]);
}

for(i=0; i<ELEMENTOS-1; i++){
for(j=i+1; j<ELEMENTOS; j++){
if(strcmp(provincias[i], provincias[j]) > 0){
temp = provincias[i];
provincias[i] = provincias[j];
provincias[j] = temp;
}
}
}

printf("\n Ordenadas alfabeticamente\n\n" );
for(i=0; i<ELEMENTOS; i++){
printf(" %s\n", provincias[i]);
}

printf("\n Pulse [Enter] para finalizar..."); getchar();
return 0;
}

//http://platea.pntic.mec.es/vgonzale/cyr_0204/cyr_01/control/lengua_C/cadenas.htm#strcmp

Saludos.
Daniel
 
« Última modificación: 06 de Enero 2015, 15:01 por Alex Rodríguez »
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.-

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:Ordenar alfabéticamente array de punteros a char [C]
« Respuesta #1 en: 06 de Enero 2015, 15:01 »
Hola, para usar sizeof para determinar el tamaño del array tienes que usar una construcción un poco especial: sizeof provincias/sizeof *provincias

Esto viene a significar "el tamaño total del array dividido entre el tamaño de un elemento del array nos devuelve el número de elementos en el array"


El programa quedaría así:

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

#include <stdio.h>
#include <string.h>

int main(void) {

    char *provincias[] = {"Tucuman", "Santa Fe", "Buenos Aires", "Rio Negro", "Neuquen",
                          "Misiones", "Catamarca", "Santa Cruz", "Jujuy", "Chaco",
                          "Formosa", "Corrientes", "Salta", "La Rioja", "Cordoba"
                         };
    char *temp;
    int i, j;

    int numeroProvincias = sizeof provincias/sizeof *provincias;

    printf("\n provincias Argentinas desordenadas\n\n" );

    printf("\n tenemos %d provincias \n\n", sizeof provincias/sizeof *provincias );


    for(i=0; i<numeroProvincias; i++) {
        printf(" %s\n", provincias[i]);
    }


    for(i=0; i<numeroProvincias-1; i++) {
        for(j=i+1; j<numeroProvincias; j++) {
            if(strcmp(provincias[i], provincias[j]) > 0) {
                temp = provincias[i];
                provincias[i] = provincias[j];
                provincias[j] = temp;
            }
        }
    }

    printf("\n Ordenadas alfabeticamente\n\n" );
    for(i=0; i<numeroProvincias; i++) {
        printf(" %s\n", provincias[i]);
    }

    printf("\n Pulse [Enter] para finalizar...");
    getchar();
    return 0;
}

Saludos

Pino1952

  • Sin experiencia
  • *
  • Mensajes: 21
    • Ver Perfil
Hola Alex Rodriguez.
Muchas gracias por ocuparte, una verdadera lástima por no interpretar completo mi pedido, además de saber la cantidad de punteros en el array de punteros solicitaba que me enseñaran a hacerlo con funciones y no todo dentro de la función principal, digo una lástima porque todo aquel que llegue con la esperanza de aprender como yo a pasar un array de puntero a función en este post, se va a encontrar que no está contemplado en tu código, en mi caso ya lo aprendí pero no puedo colgarlo porque me lo enseñaron en otro foro.-

Saludos.
Daniel
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.-

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
¿Y por qué no puedes colgarlo?

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Código: [Seleccionar]
        #include <stdio.h>
       #include <string.h>
     
     
       void MostrarLista(char *data[],const int tamano){
           int i;
           for(i=0;i<tamano;i++){
             printf(" %s\n", data[i]);
           }
       }
     
       void OrdenarLista(char *data[],const int tamano){
          char *temp;
          int i,j;
     
           for(i=0; i<tamano-1; i++){
               for(j=i+1; j<tamano; j++){
                   if(strcmp(data[i], data[j]) > 0){
                       temp = data[i];
                       data[i] = data[j];
                       data[j] = temp;
                   }
               }
           }
       }
     
     
       int main(void){
       char *provincias[] = {"Tucuman", "Santa Fe", "Buenos Aires", "Rio Negro", "Neuquen",
       "Misiones", "Catamarca", "Santa Cruz", "Jujuy", "Chaco",
       "Formosa", "Corrientes", "Salta", "La Rioja", "Cordoba"};
     
       const int Elementos=sizeof(provincias)/sizeof(char*);
     
       printf("\n provincias Argentinas desordenadas\n\n" );
       MostrarLista(provincias,Elementos);
     
       OrdenarLista(provincias,Elementos);
     
       printf("\n Ordenadas alfabeticamente\n\n" );
       MostrarLista(provincias,Elementos);
     
       printf("\n Pulse [Enter] para finalizar..."); getchar();
       return 0;
       }

Pino1952

  • Sin experiencia
  • *
  • Mensajes: 21
    • Ver Perfil
Hola a todos.
Citar
¿Y por qué no puedes colgarlo?
A mí me enseñaron que en la vida hay palabras muy importante y una de ellas se llama ética, en realidad si el código lo hubiese elaborado yo con teorías y pequeños trozos del moderador de turno, seria medianamente coherente pasarlo tal cual a otro foro, pero en este caso me lo postearon completo.-
Mastermind, debo suponer que no te agrado demasiado el desarrollo de este post, en todos los casos (estuve leyendo unos cuantos) saludas al comienzo y al despedirte y no es este el caso, por lo tanto debo suponer que en tu mente estoy causando una especie de antipatía y he decidido no efectuar más post en este foro, espero de corazón a ambos que les valla muy pero muy bien con el foro y en general en la vida.-
Agradezco el tiempo que han dedicado a mis temas y un gran abrazo a Príncipe_Azul que seguramente nos seguiremos comunicándonos vía MP.-         

Saludos.
Daniel
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.-

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
No ha sido mi intención molestarte, lo siento si lo he hecho

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".