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ía string.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 palabras i y j.

    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