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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Orden de letras de manera alfabetica en C
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Orden de letras de manera alfabetica en C  (Leído 10,219 veces)
EmmanuelTR9

Desconectado Desconectado

Mensajes: 31


Ver Perfil
Orden de letras de manera alfabetica en C
« en: 8 Octubre 2019, 05:28 am »


Hola ante todo he estado intentando lograr ordenar las letras con su orden respectivo pero no logro hacerlo, y publico aca si me podrian ayudar. Al ingresar una letra la debe de empezar a acomodar pero no se muy bien como hacer ello.

Código:
#include <stdio.h>
#include <conio.h>

int fin=27;
char Caracter;
char Abecedario[27];
main(void){
do {
printf("Solicitar Caracter: ");
scanf("%d,", &Caracter);


} while(fin != 27);
printf("\nGracias ");
getch();
}


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Orden de letras de manera alfabetica en C
« Respuesta #1 en: 8 Octubre 2019, 05:39 am »

si son char, en el scanf no capturas con %d capturas con %c

te recomiendo buscar el algoritmo de ordenamiento de burbuja, es el mas simple de los algoritmos de organizacion


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
EmmanuelTR9

Desconectado Desconectado

Mensajes: 31


Ver Perfil
Re: Orden de letras de manera alfabetica en C
« Respuesta #2 en: 8 Octubre 2019, 06:13 am »

si son char, en el scanf no capturas con %d capturas con %c

te recomiendo buscar el algoritmo de ordenamiento de burbuja, es el mas simple de los algoritmos de organizacion

Si he intentado con ese metodo pero no logro poderlo adaptar ya que tengo que usar do while
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Orden de letras de manera alfabetica en C
« Respuesta #3 en: 8 Octubre 2019, 06:30 am »

un for es un do while compacto

en resumen

Código
  1. // el for comun
  2. for(int i = 0; i < 10; i++){
  3.  
  4.  // hacer cosas
  5.  
  6. }
  7.  
  8. // un do while de funcionamiento similar
  9.  
  10. int i = 0;
  11. do{
  12.  
  13.  // hacer cosas
  14.  
  15.  i++;
  16. }while(i < 10)
  17.  
  18.  
  19.  

con este conocimiento puedes adaptar los codigos comunes, intentalo, muestra que lograste y si tines dudas, realizalas

aqui sobre el ordenamiento de burbuja en detalle
https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Algoritmos_y_Estructuras_de_Datos
En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
EmmanuelTR9

Desconectado Desconectado

Mensajes: 31


Ver Perfil
Re: Orden de letras de manera alfabetica en C
« Respuesta #4 en: 8 Octubre 2019, 16:09 pm »

un for es un do while compacto

en resumen

Código
  1. // el for comun
  2. for(int i = 0; i < 10; i++){
  3.  
  4.  // hacer cosas
  5.  
  6. }
  7.  
  8. // un do while de funcionamiento similar
  9.  
  10. int i = 0;
  11. do{
  12.  
  13.  // hacer cosas
  14.  
  15.  i++;
  16. }while(i < 10)
  17.  
  18.  
  19.  

con este conocimiento puedes adaptar los codigos comunes, intentalo, muestra que lograste y si tines dudas, realizalas

aqui sobre el ordenamiento de burbuja en detalle
https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Algoritmos_y_Estructuras_de_Datos


Ya intente pero no logro ingresar de manera manual cada una de la letra

Código:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main(void)
    {
      int fin;
      char ch, entrada[27], salida[27];
      int no[26] = {0}, n, c, t, x;
     
      printf("Escribe las palabras a ordenar\n");
      scanf("%s", entrada);
     
      n = strlen(entrada);
      for (c = 0; c < n; c++)
      {
        ch = entrada[c] - 'a';
        no[ch]++;
      }
      t = 0;
      for (ch = 'a'; ch <= 'z'; ch++)
      {
        x = ch - 'a';
        for (c = 0; c < no[x]; c++)
        {
          salida[t] = ch;
          t++;
        }
      }
      salida[t] = '\0';
      printf("%s\n", salida);
      return 0;
    }
En línea

dijsktra

Desconectado Desconectado

Mensajes: 110


Mr Edsger Dijsktra (Tribute to)


Ver Perfil
Re: Orden de letras de manera alfabetica en C
« Respuesta #5 en: 8 Octubre 2019, 18:41 pm »

si son char, en el scanf no capturas con %d capturas con %c

te recomiendo buscar el algoritmo de ordenamiento de burbuja, es el mas simple de los algoritmos de organizacion

A ver, según entiendo yo, si dice "según se lee la letra se acomoda", no se trata de ordenar, sino de insertar en un vector ordenado una letra. Pero el mayor problema, veo yo, tiene que ver con el hecho de capturar caracteres de la entrada estandard. Eso es otro problema, porque la entrada buferada exige que le des al intro, y a la vez el intro es un caracter (que a t'i no te vale para tu proposito).


Propuesta:

Código
  1. /*
  2.  P : N>0 and sorted(A,0,N-1) and V=A
  3.  Q : perm(V,A) and sorted(V,0,N)
  4.  
  5.  
  6.  I : perm(V,A) and sorted(V,0,n) and sorted(V,n, N)
  7. and (0<n<N-1 - > V[n-1]<V[n+1]) and 0 <= n <= N-1
  8.  
  9.  !B : n==0 || V[n]>=V[n-1]
  10.  
  11.   B : n > 0 && V[n]<V[n-1]
  12.  
  13. |- I and !B -> Q
  14.  
  15. Quote:
  16.  
  17.   C(n) = n >= 0
  18.  
  19. |- I -> C(n) >= 0
  20.  
  21. Invariant snapshot:
  22. -------------------
  23.  
  24. 0                 n           N
  25. +-----+-----+-----+-----+-----+
  26. |  0  |  1  |  3  |  2  |  4  |
  27. +-----+-----+-----+-----+-----+
  28.  
  29. Init:
  30. -----
  31.  n = N- 1
  32.  
  33. |- P -> I[n/N-1]
  34.  
  35. Step:
  36. ----
  37.   n= n- 1
  38.  
  39. |- I and B and n=T -> (n<T)[n/n-1]
  40.  
  41. Restore:
  42. --------
  43.  
  44.   V[n],V[n-1]=V[n-1],V[n]
  45.  
  46. Pseudocode:
  47. -----------
  48.  
  49.    n=N-1
  50.    while n>0 and V[n]<V[n-1] do
  51.      V[n],V[n-1]=V[n-1],V[n]
  52.      n=n-1
  53.    done
  54.  
  55. */
  56.  
  57. void *insertChar(char V[], int N)
  58. {
  59.  for(int n=N-1 ; (n && V[n]<V[n-1]);n--)
  60.    {
  61.      const int An=V[n];  /* To do swapping */
  62.      V[n]=V[n-1];
  63.      V[n-1]=An;
  64.    }
  65.  return V;
  66. }
  67.  
  68.  
  69.  
  70. #include <stdio.h>
  71. #include <string.h>
  72.  
  73.  
  74. #define MAX 100000
  75. int main(int argc, char* args[])
  76. {
  77.  int N;
  78.  char V[MAX];
  79.  memset(V,0, MAX);
  80.  
  81.  for(N=0 ; (scanf("%c",&c)==1) && c!='\n' ; )
  82.    {
  83.      V[N++]=c;
  84.      printf("%d %c %s\n",strlen(V),c,insertChar(V,N));
  85.    }
  86.  return 0;
  87. }

Ejemplp:

Código:
gcc char.cc -o char && ./char
enunlugardelamancha
1 e e
2 n en
3 u enu
4 n ennu
5 l elnnu
6 u elnnuu
7 g eglnnuu
8 a aeglnnuu
9 r aeglnnruu
10 d adeglnnruu
11 e adeeglnnruu
12 l adeegllnnruu
13 a aadeegllnnruu
14 m aadeegllmnnruu
15 a aaadeegllmnnruu
16 n aaadeegllmnnnruu
17 c aaacdeegllmnnnruu
18 h aaacdeeghllmnnnruu
19 a aaaacdeeghllmnnnruu
« Última modificación: 11 Octubre 2019, 09:05 am por dijsktra » En línea

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

Desconectado Desconectado

Mensajes: 31


Ver Perfil
Re: Orden de letras de manera alfabetica en C
« Respuesta #6 en: 9 Octubre 2019, 04:00 am »

A ver, según entiendo yo, si dice "según se lee la letra se acomoda", no se trata de ordenar, sino de insertar en un vector ordenado una letra. Pero el mayor problema, veo yo, tiene que ver con el hecho de capturar caracteres de la entrada estandard. Eso es otro problema, porque la entrada buferada exige que le des al intro, y a la vez el intro es un caracter (que a t'i no te vale para tu proposito).


Propuesta:

Código
  1. /*
  2.  P : N>0 and sorted(A,0,N-1) and V=A
  3.  Q : perm(V,A) and sorted(V,0,N)
  4.  
  5.  
  6.  I : perm(V,A) and sorted(V,0,n) and sorted(V,n, N)
  7. and (0<n<N-1 - > V[n-1]<V[n+1]) and 0 <= n <= N-1
  8.  
  9.  !B : n==0 || V[n]>=V[n-1]
  10.  
  11.   B : n > 0 && V[n]<V[n-1]
  12.  
  13. |- I and !B -> Q
  14.  
  15. Quote:
  16.  
  17.   C(n) = n >= 0
  18.  
  19. |- I -> C(n) >= 0
  20.  
  21. Invariant snapshot:
  22. -------------------
  23.  
  24. 0                 n           N
  25. +-----+-----+-----+-----+-----+
  26. |  0  |  1  |  3  |  2  |  4  |
  27. +-----+-----+-----+-----+-----+
  28.  
  29. Init:
  30. -----
  31.  n = N- 1
  32.  
  33. |- P -> I[n/N-1]
  34.  
  35. Step:
  36. ----
  37.   n= n- 1
  38.  
  39. |- I and B and n=T -> (n<T)[n/n-1]
  40.  
  41. Restore:
  42. --------
  43.  
  44.   V[n],V[n-1]=V[n-1],V[n]
  45.  
  46. Pseudocode:
  47. -----------
  48.  
  49.    n=N-1
  50.    while n>0 and V[n]<V[n-1] do
  51.      V[n],V[n-1]=V[n-1],V[n]
  52.      n=n-1
  53.    done
  54.  
  55. */
  56.  
  57. void *insertChar(char V[], int N)
  58. {
  59.  for(int n=N-1 ; (n && V[n]<V[n-1]);n--)
  60.    {
  61.      const int An=V[n];  /* To do swapping */
  62.      V[n]=V[n-1];
  63.      V[n-1]=An;
  64.    }
  65.  return V;
  66. }
  67.  
  68.  
  69.  
  70. #include <stdio.h>
  71. #include <string.h>
  72.  
  73.  
  74. #define MAX 100000
  75. int main(int argc, char* args[])
  76. {
  77.  int N;
  78.  char V[MAX];
  79.  memset(V,0, MAX);
  80.  for(N=0 ; (scanf("%c",&V[N++])==1) ; )
  81.    {
  82.      if (V[N-1]=='\n') break; // Hack. I don't know how to
  83.       // avoid '\n'  as character.
  84.      const char c=V[N-1];
  85.      insertChar(V,N);
  86.      printf("%d %c %s\n",strlen(V),c,V);
  87.    }
  88.  return 0;
  89. }

Ejemplp:

Código:
gcc char.cc -o char && ./char
asdfdgfhj1234
1 a a
2 s as
3 d ads
4 f adfs
5 d addfs
6 g addfgs
7 f addffgs
8 h addffghs
9 j addffghjs
10 1 1addffghjs
11 2 12addffghjs
12 3 123addffghjs
13 4 1234addffghjs

Intente realizar como el mencionado pero no pude me puedes orientar un poco mas porfavor
En línea

dijsktra

Desconectado Desconectado

Mensajes: 110


Mr Edsger Dijsktra (Tribute to)


Ver Perfil
Re: Orden de letras de manera alfabetica en C
« Respuesta #7 en: 9 Octubre 2019, 11:20 am »

Intente realizar como el mencionado pero no pude me puedes orientar un poco mas porfavor
Copia el programa, estúdialo y dale curso en tu computador...
Te sale ? Que parte te confunde?
Sobre todo, distingue lo esencial (el algoritmo) de lo accesorio (la entrada/salida de datos).
En línea

Si la depuración es el proceso de eliminar fallos en el software, entonces programar debe ser el proceso de ponerlos dentro. (Edsger Dijsktra)
@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: Orden de letras de manera alfabetica en C
« Respuesta #8 en: 9 Octubre 2019, 13:20 pm »

Los char no dejan de ser números internamente. La letra A es el número 65, la B el 66...


Para ordenar yo buscaría si coincide el resultado con el esperado:

  
Código
  1. int diccionario[100];
  2.   for(int i = 65 ; i <= 90; ++i)
  3.   {
  4.   diccionario[i-65] = i;
  5.   }/* El resultado sería algo como:
  6. diccionario[0] = 65;
  7. diccionario[1] = 66;
  8. ...
  9. diccionario[25] = 90;
  10. */
  11.  
  12.   for(int i = 97 ; i <= 122; ++i)
  13.   {
  14.   diccionario[i-71] = i;
  15.   }/* El resultado sería algo como:
  16. diccionario[0] = 65; Equivale a 'A'
  17. diccionario[1] = 66; Equivale a 'B'
  18. diccionario[25] = 90; Equivale a 'Z'
  19. diccionario[26] = 97; Equivale a 'a'
  20. diccionario[27] = 98;
  21. ...
  22. diccionario[50]= 122; equivale a 'z'
  23.  
  24. Imprime los contenidos del array y los ajustas.*/
  25.  
  26.  
  27.   if (caracter1 == diccionario[i])
  28.   {
  29.   resultado[x] = caracter1;
  30.   }
  31.  
Por si no queda claro, esto es lo mismo ue hacer:
HOLA

Código
  1. Está la A (int 65) en [0]? No.
  2. {
  3. No hacer nada.
  4. }
  5.  
  6. Está la A (int 65) en [1]? No.
  7. {
  8. No hacer nada.
  9. }
  10.  
  11. Está la A (int 65) en [2]? No.
  12. {
  13. No hacer nada.
  14. }
  15.  
  16. Está la A (int 65) en [3]? Si.
  17. {
  18. ArrayResultado[0] = palabra[3];
  19. }
  20.  
  21. Está la a (int 92) en [0]? No.
  22. {
  23. No hacer nada.
  24. }
  25.  
  26. Está la a (int 92) en [1]? No.
  27. {
  28. No hacer nada.
  29. }
  30.  
  31. Está la a (int 92) en [2]? No.
  32. {
  33. No hacer nada.
  34. }
  35.  
  36. Está la a (int 92) en [3]? No
  37. {
  38. No hacer nada.
  39. }
  40.  
  41. ...
  42.  

Básicamente vas mirando por orden alfabético cada letra del diccionario si está o no en todas las letras de la palabra.
Si encuentras la letra, esta se añade a un array resultado, que será el que contenga las letras ordenadas.

Tanto la lógica como la implementación es sencilla.


https://elcodigoascii.com.ar/
https://www.tutorialspoint.com/cprogramming/c_type_casting.htm
« Última modificación: 9 Octubre 2019, 13:26 pm por string Manolo » En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

CalgaryCorpus


Desconectado Desconectado

Mensajes: 323


Ver Perfil WWW
Re: Orden de letras de manera alfabetica en C
« Respuesta #9 en: 9 Octubre 2019, 15:47 pm »

Es innecesario poner los codigos ASCII, o saberselos o tener una tabla.
Siempre que se quiere tener el codigo de la letra 'a' se puede usar 'a'

Código
  1. for( int i = 65; i <= 90; i++ )
puede reemplazarse por
Código
  1. for( int i = 'a'; i <= 'z'; i++ )

los caracteres literales son SIEMPRE vistos como la representacion numerica de ellos, asi que tambien seria posible expresiones como  'z'-'a' si es que se necesita saber la distancia entre el ultimo caracter a utilizar y el primero (eventualmente hay que sumarle 1 a esto, si se hace necesario).

Lo mismo con las mayusculas.
En línea

Aqui mi perfil en LinkedIn, invitame un cafe aqui
Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
acomodar las letras en orden
Programación C/C++
jesusxdxd 4 5,104 Último mensaje 4 Junio 2012, 09:43 am
por BlackZeroX
Ordenar letras de una palabra en orden alfabetico
Programación C/C++
vivinice 1 10,009 Último mensaje 20 Junio 2016, 17:16 pm
por AlbertoBSD
Orden en que asigna Windows las letras de unidades a las particiones « 1 2 »
Windows
cixert 14 5,721 Último mensaje 5 Noviembre 2018, 18:20 pm
por cixert
ordenar por orden alfabetica archivo txt en C
Programación C/C++
luch21 0 4,368 Último mensaje 13 Noviembre 2018, 00:16 am
por luch21
Este es el motivo por el que las letras del teclado tienen ese orden
Noticias
El_Andaluz 0 1,395 Último mensaje 18 Mayo 2020, 03:53 am
por El_Andaluz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines