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

 

 


Tema destacado:


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Ordenar matriz alfabeticamente
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ordenar matriz alfabeticamente  (Leído 9,569 veces)
programacion_c

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Ordenar matriz alfabeticamente
« en: 23 Abril 2012, 23:06 pm »

Hola, soy nuevo por aqui y queria hacerles una consulta.

Mi problema es el siguiente : Necesito copiar una cadena de caracteres dada por teclado en un array bidimensional.
Despues ordenar el array alfabeticamente y mostrarla por pantalla. El codigo es el siguiente:

#include <stdio.h>
#include <string.h>
#define Maxstrl 50
#define Maxanzahl 100

int main(){
  
  char x[Maxstrl];
  char str[Maxstrl];
  char M[Maxanzahl][Maxstrl];
  int i,j,min,m,k=0;
  
  for(i=0;i<Maxanzahl;i++){
       for(j=0;j<Maxstrl;j++){
       M[j]= ' ';
       }

}
  
  while(fgets(str,Maxstrl,stdin)!=NULL){
    if(str[strlen(str)-1]=='\n'){
      str[strlen(str)-1]='\0';
      strcpy(M[k],str);
      k++;
    }
 }
  for(j=0;j<strlen(str);j++){
       if(strcmp(M[j],M[j+1])>0){
      strcpy(x,M[j]);
      strcpy(M[j+1],M[j]);
      strcpy(M[j+1],x);
    }
  for(i=0;i<strlen(str);i++){
    for(j=0;j<Maxstrl;j++){
      printf("%c\t",M[j]);
    }
    printf("\n");
  }
  return 0;
  
}

Muchas gracias por anticipado

EI: juntando mensajes.

No consigo ordenar bien el array bidimensional y mostrarlo por pantalla. Agradeceria alguna ayuda


« Última modificación: 24 Abril 2012, 17:09 pm por Eternal Idol » En línea

s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Ordenar matriz alfabeticamente
« Respuesta #1 en: 24 Abril 2012, 01:21 am »

Al usar una matriz bidimensional quiere decir que para guardar u obtener un dato ocupas indicarle la posicion y a como veo en el primer for solo colocas uno que enrealidad deberia ser

M[i ][j] = ' ';

Bueno ese es el error que veo en todo donde usas M, ya que pues solo le indicas una posicion mas no la segunda.


« Última modificación: 24 Abril 2012, 02:42 am por s00rk » En línea

programacion_c

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Ordenar matriz alfabeticamente
« Respuesta #2 en: 24 Abril 2012, 02:21 am »

Cuando he copiado y pegado el codigo, no se como, pero en mi codigo original pone M[j], sin embargo, aqui  no lo pone... Pero ese no es el error, el error lo tiene cuando hago la comparacion, que no la hago bien, pero yo aun no le he visto el fallo...
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Ordenar matriz alfabeticamente
« Respuesta #3 en: 24 Abril 2012, 04:54 am »

Hola! si bien hacer M[j]= ' '; no es el error logico del programa es un error de compilacion. Debe ser como dijo s00rk: M[i ][j] = ' ';

Tenes varios errores en el programa, uno de ellos esta en la condicion de los dos for: j<strlen(str)
Estas utilizando una condicion que no tiene nada que ver con lo que queres hacer. Tanto para ordenar como para imprimir deberias usar:
j<k
ya que k es el contador de tu programa que indica cuantas lineas ingresaste por consola

El algoritmo de ordenamiento esta mal; una pista deberias utilizar dos for

Tambien la impresion esta mal, solo basta con un for, y el formato del printf debe ser %s no %c

Arregla esas cosas si podes sino segui preguntando, Saludos
En línea

Ahorrate una pregunta, lee el man
programacion_c

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Ordenar matriz alfabeticamente
« Respuesta #4 en: 24 Abril 2012, 05:19 am »

Hola, de nuevo, gracias por tu respuesta.

He corregido algunas cosas y me da un warning :
warning: passing argument 1 of ‘strcmp’ makes pointer from integer without a cast [enabled by default]
/usr/include/string.h:143:12: note: expected ‘const char *’ but argument is of type ‘char’

Este es el nuevo codigo :

#include <stdio.h>
#include <string.h>
#define Maxstrl 50
#define Maxanzahl 100

int main(){
  
  char x[Maxanzahl][Maxstrl];
  char str[Maxstrl];
  char M[Maxanzahl][Maxstrl];
  int i,j,min,m,k=0;
  
  for(i=0;i<Maxanzahl;i++){
       for(j=0;j<Maxstrl;j++){
       M[j]= ' ';
       }

}
  
  while(fgets(str,Maxstrl,stdin)!=NULL){
    if(str[strlen(str)-1]=='\n'){
      str[strlen(str)-1]='\0';
      strcpy(M[k],str);
      k++;
    }
  }
  
 /* for(i=0;i<strlen(str);i++){
    for(j=0;j<Maxstrl;j++){
      printf("%c\t",M[j]);
    }
    printf("\n");
  }*/
  for(j=0;j<k;j++){
    for(m=j+1;m<Maxstrl;m++){
       if(strcmp(M[j][m],M[j][m+1])>0)
      strcpy(x,M[j][m]);
      strcpy(M[j][m],M[j][m+1]);
      strcpy(M[j][m+1],x);
    }
  
  
  
  for(i=0;i<k;i++){
    for(j=0;j<Maxstrl;j++){
      printf("%c\t",M[j]);
    }
    printf("\n");
  }
   return 0;
  
}

Lo que me pide el programa es que imprima la matriz en forma de matriz ordenada alfabteticamente,
La copia de la cadena en la matriz se hace bien no?
La comparacion es la que da el fallo creo

Gracias

EI: juntando mensajes.

Lo he corregido de nuevo, pero sigo dando error

#include <stdio.h>
#include <string.h>
#define Maxstrl 50
#define Maxanzahl 100

int main(){
 
  char x[Maxanzahl][Maxstrl];
  char str[Maxstrl];
  char M[Maxanzahl][Maxstrl];
  int i,j,min,m,k=0;
 
  for(i=0;i<Maxanzahl;i++){
       for(j=0;j<Maxstrl;j++){
       M[j]= ' ';
       }

}
 
  while(fgets(str,Maxstrl,stdin)!=NULL){
    if(str[strlen(str)-1]=='\n'){
      str[strlen(str)-1]='\0';
      strcpy(M[k],str);
      k++;
    }
  }
 
  for(j=0;j<k;j++){
    for(m=0;m<Maxstrl;m++){
       if(strcmp(M[j][m],M[j][m+1])>0)
      strcpy(x,M[j][m]);
      strcpy(M[j][m],M[j][m+1]);
      strcpy(M[j][m+1],x);
    }
 
 
 
  for(i=0;i<k;i++){
    for(j=0;j<Maxstrl;j++){
      printf("%c\t",M[j]);
    }
    printf("\n");
  }
  return 0;
 
}
« Última modificación: 24 Abril 2012, 17:10 pm por Eternal Idol » En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Ordenar matriz alfabeticamente
« Respuesta #5 en: 24 Abril 2012, 05:53 am »

Lei mejor el comentario de soork y me equivoque en algo, no tenes que usar M[j]= ' '; en todo el programa sino solo en:
Código
  1. for(i=0;i<Maxanzahl;i++){
  2.       for(j=0;j<Maxstrl;j++){
  3.         M[i][j]= ' ';
  4.       }
  5. }

Tambien la impresion esta mal, solo basta con un for, y el formato del printf debe ser %s no %c

Te dejo el codigo funcionando:
Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define Maxstrl 50
  4. #define Maxanzahl 100
  5.  
  6. int main(){
  7.  
  8.  char x[Maxstrl]; // x no debe ser una matriz sino un array unidimensional
  9.  char str[Maxstrl];
  10.  char M[Maxanzahl][Maxstrl];
  11.  int i,j,min,m,k=0;
  12.  
  13.  for(i=0;i<Maxanzahl;i++){
  14.       for(j=0;j<Maxstrl;j++){
  15.       M[i][j]= ' ';
  16.       }
  17.  
  18. }
  19.  
  20.  while(fgets(str,Maxstrl,stdin)!=NULL){
  21.    if(str[strlen(str)-1]=='\n'){
  22.      str[strlen(str)-1]='\0';
  23.      strcpy(M[k],str);
  24.      k++;
  25.    }
  26.  }
  27.  
  28.  for(j=0;j<k-1;j++){
  29.    for(m=0;m<k-j-1;m++){
  30.       if(strcmp(M[m],M[m+1])>0){ // faltaba las llaves del if
  31.      strcpy(x,M[m]);
  32.      strcpy(M[m],M[m+1]);
  33.      strcpy(M[m+1],x);
  34.      }
  35.    }
  36. }
  37.  
  38. // esto tenias q hacer para la impresion
  39.  for(i=0;i<k;i++){
  40.      printf("%s\n",M[i]);
  41.    }
  42.  
  43.  return 0;
  44.  
  45. }

Para entender mejor lo que hice en el ordenamiento busca algo como: "metodo de la burbuja en C" en ingles creo q es "booble-sort"

Saludos
En línea

Ahorrate una pregunta, lee el man
programacion_c

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Ordenar matriz alfabeticamente
« Respuesta #6 en: 24 Abril 2012, 17:02 pm »

Muchas gracias, me ha servido de mucho
En línea

david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Re: Ordenar matriz alfabeticamente
« Respuesta #7 en: 25 Abril 2012, 00:19 am »

si te sirve..
http://foro.elhacker.net/programacion_cc/ejemplo_de_ordenamientos_basicos-t358139.0.html



En línea

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 6,684 Último mensaje 17 Junio 2008, 03:02 am
por WHK
Como ordenar alfabéticamente palabras en C++
Programación C/C++
loko5755 4 19,463 Último mensaje 5 Mayo 2014, 12:04 pm
por eferion
Ordenar alfabeticamente Nombres (Struct)
Programación C/C++
Ja_90 6 7,599 Último mensaje 22 Octubre 2014, 19:10 pm
por Ja_90
Ordenar alfabéticamente array de punteros a char (lenguaje C)
Programación C/C++
DanielPy 4 6,297 Último mensaje 7 Enero 2015, 18:42 pm
por rir3760
Ordenar alfabéticamente una varios string sin hacer un vector o un matriz
Programación C/C++
DanteS00 4 1,409 Último mensaje 9 Julio 2018, 00:36 am
por DanteS00
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines