Autor
|
Tema: Ordenar matriz alfabeticamente (Leído 11,128 veces)
|
programacion_c
Desconectado
Mensajes: 12
|
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
Mensajes: 195
|
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
Mensajes: 12
|
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
Mensajes: 373
|
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
Mensajes: 12
|
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
Mensajes: 373
|
Lei mejor el comentario de soork y me equivoque en algo, no tenes que usar M [j]= ' '; en todo el programa sino solo en:
for(i=0;i<Maxanzahl;i++){ for(j=0;j<Maxstrl;j++){ M[i][j]= ' '; } }
Tambien la impresion esta mal, solo basta con un for, y el formato del printf debe ser %s no %cTe dejo el codigo funcionando: #include <stdio.h> #include <string.h> #define Maxstrl 50 #define Maxanzahl 100 int main(){ char x[Maxstrl]; // x no debe ser una matriz sino un array unidimensional 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[i][j]= ' '; } } while(fgets(str ,Maxstrl ,stdin )!=NULL ){ k++; } } for(j=0;j<k-1;j++){ for(m=0;m<k-j-1;m++){ if(strcmp(M [m ],M [m +1])>0){ // faltaba las llaves del if } } } // esto tenias q hacer para la impresion for(i=0;i<k;i++){ } return 0; }
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
Mensajes: 12
|
Muchas gracias, me ha servido de mucho
|
|
|
En línea
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ordenar alfabeticamente en php con numeros
« 1 2 »
PHP
|
dominioswww
|
10
|
8,268
|
17 Junio 2008, 03:02 am
por WHK
|
|
|
Como ordenar alfabéticamente palabras en C++
Programación C/C++
|
loko5755
|
4
|
22,424
|
5 Mayo 2014, 12:04 pm
por eferion
|
|
|
Ordenar alfabeticamente Nombres (Struct)
Programación C/C++
|
Ja_90
|
6
|
9,973
|
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
|
8,155
|
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
|
2,599
|
9 Julio 2018, 00:36 am
por DanteS00
|
|