Estoy tratando de diseñar un algoritmo que ordene palabras dadas alfabéticamente como un diccionario pero parece que no puedo progresar más
En primer lugar, lamento que no sea una pregunta apropiada. Hace poco empecé a aprender a código para que pudiera ser algo obvio que me estoy perdiendo, también lo siento.
Cuando se dan las palabras "seal", "snake", "lion"; la salida es "seal sion lnake". Traté de analizar el algoritmo a mano pero no pude averiguar el problema. Si alguien pudiera ayudarme, lo apreciaría.
#include
int main()
{
int n;
int i;
int j;
int k=0;
int l;
char word[100][100];
char tmp;
printf("Enter the number of words ");
scanf("%d", &n);
for(i=0; iword[j][k])
{
for(l=k; l<100; l++)
{
tmp=word[i][l];
word[i][l]=word[j][l];
word[j][l]=tmp;
}
}
}
}
for(i=0; i
Pregunta hecha hace 3 años, 5 meses, 0 días - Por debugdynamob312
2 Respuestas:
-
No te preocupes, puedo ayudarte a identificar el problema en tu algoritmo de ordenación alfabética.
El problema en tu código se encuentra en el bucle anidado que intenta ordenar las palabras. Te recomendaría hacer algunos cambios en ese bucle para corregir el problema. Aquí tienes una versión revisada de tu código:
c
include include int main() { int n; int i, j, k; char word[100][100]; char tmp[100]; printf("Enter the number of words: "); scanf("%d", &n); for(i = 0; i < n; i++) { printf("Enter a word: "); scanf("%s", word[i]); } // Ordenar las palabras alfabéticamente for(i = 0; i < n; i++) { for(j = i + 1; j < n; j++) { if(strcmp(word[i], word[j]) > 0) { strcpy(tmp, word[i]); strcpy(word[i], word[j]); strcpy(word[j], tmp); } } } printf("Words in alphabetical order:\n"); for(i = 0; i < n; i++) { printf("%s ", word[i]); } return 0; }En este código revisado, he usado la función
strcmp
de la libreríastring.h
para comparar las palabras y así poder ordenarlas alfabéticamente de forma correcta. Además, he cambiado la lógica de ordenación del bucle anidado para que funcione correctamente. Por favor, inténtalo y avísame si necesitas más ayuda.Respondida el Dec 17, 2020 a las 16:59 - por Gpt
Votos positivos: 0 | Votos negativos: 0 -
El problema con el algoritmo es que no está ordenando correctamente las palabras. El error está en el bucle
for
interior donde se comparan los caracteres de las palabrasi
yj
.El bucle
for
interior debería comparar los caracteres en la misma posición para ambas palabras, pero actualmente compara los caracteres en posiciones diferentes. Aquí está el bucle corregido:c for(l=k; l<100; l++) { if(word[i][l] > word[j][l]) { for(m=k; m<100; m++) { tmp=word[i][m]; word[i][m]=word[j][m]; word[j][m]=tmp; } break; } else if(word[i][l] == word[j][l]) { continue; } else { break; } }
Este bucle corregido compara los caracteres en la misma posición para ambas palabras y ordena correctamente las palabras alfabéticamente.
Respondida el Dec 17, 2020 a las 17:05 - por Gemini
Votos positivos: 0 | Votos negativos: 0