Orden de letras de manera alfabetica en C

Iniciado por EmmanuelTR9, 8 Octubre 2019, 05:28 AM

0 Miembros y 2 Visitantes están viendo este tema.

Serapis

Más sencillo aún:


int k, num
buleano escape
array de chars arrayChar(0 a 25)  // consideramos solo 26 letras o también la 'ñ'?

Bucle
num = ((pedir caracter al usuario) - 65).ToInt  // ó 97 si partes desde 'a' hasta 'z', etc... debes adaptarlo a lo que te pidan.

si ((num => 0)  y (num <=25)) 
    Si arrayChar(num) = ""
        arrayChar(num) = (num + 65).ToChar
        k +=1
        si k=26
            escape = TRUE
        fin si
    //Osi num = ???   //cierto carácter podría actuar como escape...(recuerda que restamos 65 al valor, para posicionarlo en su lugar en el array)
    //    escape = true   
    fin si
fin si
Repetir Mientras (escape = FALSE)  // una condición de salida basado en???

// volcar la salida:
bucle para k desde 0 hasta 25
    Si arrayChar(k) <> ""
       imprimir arrayChar(k)
    fin si
siguiente

 

@XSStringManolo

Cita de: NEBIRE en  9 Octubre 2019, 23:44 PM
Más sencillo aún:


int k, num
buleano escape
array de chars arrayChar(0 a 25)  // consideramos solo 26 letras o también la 'ñ'?

Bucle
num = ((pedir caracter al usuario) - 65).ToInt  // ó 97 si partes desde 'a' hasta 'z', etc... debes adaptarlo a lo que te pidan.

si ((num => 0)  y (num <=25)) 
    Si arrayChar(num) = ""
        arrayChar(num) = (num + 65).ToChar
        k +=1
        si k=26
            escape = TRUE
        fin si
    //Osi num = ???   //cierto carácter podría actuar como escape...(recuerda que restamos 65 al valor, para posicionarlo en su lugar en el array)
    //    escape = true   
    fin si
fin si
Repetir Mientras (escape = FALSE)  // una condición de salida basado en???

// volcar la salida:
bucle para k desde 0 hasta 25
    Si arrayChar(k) <> ""
       imprimir arrayChar(k)
    fin si
siguiente

 
Si pones "ana" te guarda "an" en vez de "aan" no?



dijsktra

#12
Cita de: NEBIRE en  9 Octubre 2019, 23:44 PM
Más sencillo aún:


Pero qué.... :-X :-X :-X


  • CalgaryCorpus ya ha comentado que no es necesario operar con enteros.
  • El programa solo acaba si la palabra tiene las 25 letras al menos una vez cada una! (Asumiendo que k=1 al principio, cosa que no se expresa)
  • Si acaba, el programa da siempre la misma solución ABCDEFG..Z

Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)

Serapis

Cita de: string Manolo en 10 Octubre 2019, 07:31 AM
Si pones "ana" te guarda "an" en vez de "aan" no?

En efecto... entiendo que quiere guardar las letras sin repetición.
El interesado, no explicita el caso concreto, tampoco creo haber leído en otros mensajes (suyos) que exponga más claramente la cuestión o donde amplíe detalles.

Cita de: dijsktra
     CalgaryCorpus ya ha comentado que no es necesario operar con enteros.
En efecto, no son necesarios... pero cuando explicas a un principiante, la solución más óptima rara vez resulta ser la más útil para él, un pequeño rodeo que pueda seguir, suele serle más útil para entender.

En el mismo sentido, por ejemplo engel-lex le sugiere Bubblesort, a todas luces ineficiente, pero que puede entender perfectamente, por el mismo motivo, no procede indicarle Quicksort (por ejemplo).


Cita de: dijsktra
    El programa solo acaba si la palabra tiene las 25 letras al menos una vez cada una! (Asumiendo que k=1 al principio, cosa que no se expresa)
    Si acaba, el programa da siempre la misma solución ABCDEFG..Z
El interesado no especifica en parte alguna cual es la condición de escape, luego no hay certeza ninguna al respecto... cada cual ha asumido, lo que le ha parecido más razonable.

Yo por ejemplo, asumí en una primera impresión (como lo más razonable) que el usuario introduce una palabra (o frase), y el bucle debiera tomar las letras únicas que contiene dicha introducción y mostrarlas alfabéticamente ordenadas ...
...pero luego viendo que en el código que expone en el bucle introduce la petición con cada ciclo, entonces cambio para asumir que la entrada es carácter a carácter (aunque sea principiante, sería de esperar que como mínimo sepa discernir que si se piden caracteres, solicitar uno en cada ciclo, o si se pide operar con una palabra, solicitarla una sola vez)....
Luego, entiendo ahí que el bucle acaba o bien cuando se completa (cuando se introducen todas las letras y el array queda lleno (de ahí: si k=26;  escape = TRUE), cosa bastante rara, porque uno puede ponerse tonto pulsando letras y no recordar cual queda por introducir y tirarse media hora introduciendo caracteres salvo que al final decida ser exhaustivo e introducirlas todas ordenadas, pero posibilidad que hay que cubrir), o bien que el bucle acaba con alguna indicación especial (por ejemplo al pulsar determinada tecla, o incluso terminar tras la introducción de solo 26-27 caracteres, sean cuales sean).... 
       
Pero vamos, me parece válido cualquier solución que dé salida al bucle bajo otras condiciones. Toda vez que el interesado, no lo especifica, que cada cual resuelva dicha ambigüedad de alguna manera, resulta razonable.