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


 


Tema destacado: Píldoras formativas en seguridad de la información


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  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 678 veces)
EmmanuelTR9

Desconectado Desconectado

Mensajes: 18


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


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
CoAdmin
***
Desconectado Desconectado

Mensajes: 14.766



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

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: 18


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

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
CoAdmin
***
Desconectado Desconectado

Mensajes: 14.766



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

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: 18


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

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: 86


Mr Edsger Dijsktra (Tribute to)


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

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 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: 18


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

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: 86


Mr Edsger Dijsktra (Tribute to)


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

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)
@?0!,5^34


Desconectado Desconectado

Mensajes: 1.375


WRAAAAAAAAAW!


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

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 por string Manolo » En línea

https://github.com/StringManolo/
Iré subiendo software simple y sencillo creado en javascript/ECMAScript, C++, ADA, HTML, CSS, XML, PHP, Java(Android)... https://mega.nz/#F!6WIXGIiR!q-y[z!E]0[(-t]gpXo&a1m||0BG6PRT3/uv-
Papers varios, tutos, etc. Relacionados con Ingeniería Social, Psicología, Hipnosis, Malware, Herramientas, Criptografía, Aplicaciones, Seguridad...
CalgaryCorpus


Desconectado Desconectado

Mensajes: 313


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

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

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines