Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Mi último trabajo de clase. Ayuda!

Estas en el tema de Mi último trabajo de clase. Ayuda! en el foro de C/C++ en Foros del Web. Estoy haciendo administración de sistemas informaticos La profesora de programación nos ha mandado hacer como ejercicio final a los que llevamos bien la materia hacer ...
  #1 (permalink)  
Antiguo 08/06/2009, 02:24
 
Fecha de Ingreso: junio-2006
Mensajes: 84
Antigüedad: 17 años, 10 meses
Puntos: 1
Mi último trabajo de clase. Ayuda!

Estoy haciendo administración de sistemas informaticos
La profesora de programación nos ha mandado hacer como ejercicio final a los que llevamos bien la materia hacer un programa.
El problema es que no lo se terminar...

Utilizando estas librerias y punteros, debo hacer que las cadenas se ordenen...(eso está hecho) y hacer que se ordenen en orden inverso.
Lo malo es que con orden inverso no se refiere a descendente...
sino a que se ordenen por la ultima letra de cada cadena.
Cada cadena puede tener una longitud distinta, y eso ya me supera... tengo una ligera idea pero cuando voy a escribirla me bloqueo.

He estado buscando y no he encontrado nada semejante en ningún otro lenguaje.
Si me podeis ayudar os lo agradeciría mil...

Código LO QUE ME FALTA:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. void ordenar (char **, int);
  6. void inversa (char **, int);
  7. void main ()
  8. {                  
  9. char **cad, fin[4]="fin";
  10. int i=0, n=0, cont=0, op=0;
  11.  
  12. printf ("¿Cuantos nombres quieres almacenar? ");
  13. scanf ("%i",&n);
  14.  
  15. cad=(char **)malloc (n*sizeof (char*));
  16.  
  17. do
  18. {
  19.     i++;
  20.     *(cad+i)=(char *)malloc (n*sizeof (char));
  21.     fflush (stdin);
  22.     gets (*(cad+i));
  23.         cont++;
  24.  
  25.  
  26. }while (i<n && (strcmp((*(cad+i)),fin)!=0));
  27.  
  28. if (*(cad+i)==fin)
  29. {
  30.         cont=cont-1;
  31. }
  32. else
  33. {
  34.     cont++;
  35. }
  36.  
  37. do{
  38. printf ("\n---------MENU---------\n");
  39. printf ("- 1. Ordenar         -\n");
  40. printf ("- 2. Ordenar Inverso -\n");
  41. printf ("- 3. Salir           -\n");
  42. printf ("----------------------\n");
  43. printf ("> Opción: \n");
  44. scanf ("%i", &op);
  45.  
  46. if (op == 1){
  47.     ordenar (cad, cont);
  48.     printf ("\n");
  49.  
  50.     for (i=1;i<cont;i++){
  51.         puts (*(cad+i));
  52.     }
  53. }else if (op == 2){
  54.     inversa (cad, cont);
  55.     printf ("\n");
  56.  
  57.     for (i=1;i<cont;i++){
  58.         puts (*(cad+i));
  59.     }
  60. }
  61.  
  62.  
  63. }while (op!=3);
  64.  
  65.  
  66. }
  67.  
  68. void ordenar (char **cad, int cont)
  69. {
  70.     int i, j,m, l=0;
  71.     char *aux;
  72.  
  73.     for (i=1;i<cont;i++)
  74.     {
  75.         for (j=1;j<cont;j++)
  76.                 {
  77.             l=strcmp ((*(cad+i)), (*(cad+j)));
  78.  
  79.             if (l<0)
  80.             {
  81.                 aux=(*(cad+i));
  82.                 *(cad+i)=*(cad+j);
  83.                 *(cad+j)=aux;
  84.             }
  85.         }
  86.         }
  87.  
  88. }
  89.  
  90. void inversa (char **cad, int cont)
  91. {
  92.     LO QUE ME FALTA
  93.  
  94. }
  #2 (permalink)  
Antiguo 08/06/2009, 09:34
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: Mi último trabajo de clase. Ayuda!

Pues se me ocurre que uses la funcion strlen de string.h para poder saber la longitud de la cadena.
Entonces usando aritmetica de punteros:
puntero a la cadena + la longitud - 1

con eso tendras un puntero a la ultima letra de la palabra.

Y pues procedes al ordenamiento.

Es un poco complicado. La verdad yo mejor invertiria la palabra primero y luego aplicaria el algoritmo ya hecho para ordenarlo y finalmente volveria a invertir la palabra.

Es lo que se me ocurre asi ahorita.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:40.