• Viernes 8 de Noviembre de 2024, 12:49

Autor Tema:  Punteros  (Leído 1701 veces)

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Punteros
« en: Miércoles 8 de Abril de 2009, 18:32 »
0
Código: C++
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. void ordenar(int n,char cad[50][30]);
  6. void printa (int n,char cad[50][30]);
  7.  
  8. int main()
  9. {
  10.       int n=0;
  11.       char cad[50][30];
  12.      
  13.       puts("Introdueix cadenas(. para terminar):n");
  14.       do
  15.       {
  16.       printf("Cadena %d: ", n+1);
  17.       gets(cad[n]);
  18.       fflush(stdin);
  19.       }while((0!=strcmp(cad[n++],".")) || (n>50));
  20.  
  21.       n--; //elimino la ultima cadena
  22.      
  23.       ordenar(n,cad);
  24.       printa(n,cad);
  25.      
  26. getchar();
  27. getchar();
  28. }
  29. void ordenar(int n,char cad[50][30])
  30. {
  31.      char *temp[30],i,elem;
  32.      
  33.       for(elem=0; elem<n-1; elem++){
  34.              for(i=elem+1; i<n; i++){
  35.                   if(strcmp(cad[elem],cad[i])>0)
  36.                   {
  37.                       *temp=*cad[elem];
  38.                       *cad[elem]=*cad[i];
  39.                       *cad[i]=*temp;
  40.                   }            
  41.              }
  42.       }
  43. }
  44. void printa (int n,char cad[50][30])
  45. {
  46.      int i;
  47.      
  48.       printf("nLes cadenes ordenades alfabeticament son:n");
  49.       for(i=0; i<n; i++){
  50.           printf("nCadena %d: %s", i+1, cad[i]);
  51.       }
  52.  
  53. }
  54.  
  55.  
  56.  

Pq me intercambio la primera letra de las palabras y no la palabra entera ?

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Punteros
« Respuesta #1 en: Miércoles 8 de Abril de 2009, 18:58 »
0
Depuralo ...

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

fachamix

  • Miembro MUY activo
  • ***
  • Mensajes: 173
  • Nacionalidad: ar
    • Ver Perfil
Re: Punteros
« Respuesta #2 en: Miércoles 8 de Abril de 2009, 19:09 »
0
Cita de: "badyalberto"
Código: C++
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. void ordenar(int n,char cad[50][30]);
  6. void printa (int n,char cad[50][30]);
  7.  
  8. int main()
  9. {
  10.       int n=0;
  11.       char cad[50][30];
  12.      
  13.       puts("Introdueix cadenas(. para terminar):n");
  14.       do
  15.       {
  16.       printf("Cadena %d: ", n+1);
  17.       gets(cad[n]);
  18.       fflush(stdin);
  19.       }while((0!=strcmp(cad[n++],".")) || (n>50)); //ESTA CONDICION ESTA MAL CREO
  20.  
  21.       n--; //elimino la ultima cadena
  22.      
  23.       ordenar(n,cad);
  24.       printa(n,cad);
  25.      
  26. getchar();
  27. getchar();
  28. }
  29. void ordenar(int n,char cad[50][30])
  30. {
  31.      char *temp[30],i,elem;
  32.  
  33.      /* depura esta parte del codigo
  34.          seguila paso a paso y fijate el contenido de lo que te marco */
  35.  
  36.       for(elem=0; elem<n-1; elem++){
  37.              for(i=elem+1; i<n; i++){
  38.                   if(strcmp(cad[elem],cad[i])>0) /*evalua el contenido de esta condicion */
  39.                   {
  40.                       *temp=*cad[elem]; /*fijate el contenido*/
  41.                       *cad[elem]=*cad[i]; /*fijate el contenido*/
  42.                       *cad[i]=*temp; /*fijate el contenido*/
  43.                   }            
  44.              }
  45.       }
  46. }
  47. void printa (int n,char cad[50][30])
  48. {
  49.      int i;
  50.      
  51.       printf("nLes cadenes ordenades alfabeticament son:n");
  52.       for(i=0; i<n; i++){
  53.           printf("nCadena %d: %s", i+1, cad[i]);
  54.       }
  55.  
  56. }
  57.  
  58.  
  59.  

Pq me intercambio la primera letra de las palabras y no la palabra entera ?
La muerte vive celosa, de mi amada flor la vida. Dicen que me anda buscando, ojala si un dia me pilla. Me alle MACHAO Y CANTANDO PA QUE SE MUERA DE ENVIDIA

badyalberto

  • Miembro activo
  • **
  • Mensajes: 77
    • Ver Perfil
Re: Punteros
« Respuesta #3 en: Miércoles 8 de Abril de 2009, 19:18 »
0
Código: C++
  1.  
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. void ordenar(int n,char *cad[50]);
  6. void printa (int n,char *cad[50]);
  7.  
  8. int main()
  9. {
  10.       int n=0;
  11.       char taula[50][30];
  12.       char *cad[50];
  13.          
  14.       puts("Introdueix cadenas(. para terminar):n");
  15.       do
  16.       {
  17.       printf("Cadena %d: ", n+1);
  18.       gets(taula[n]);
  19.       fflush(stdin);
  20.       }while((0!=strcmp(taula[n++],".")) || (n>50));
  21.  
  22.       n--; //elimino la ultima cadena
  23.      
  24.       taula[50][30]=*cad[50];
  25.      
  26.       ordenar(n,cad);
  27.       printa(n,cad);
  28.      
  29. getchar();
  30. getchar();
  31. }
  32. void ordenar(int n,char *cad[50])
  33. {
  34.      char temp[30],i,elem;
  35.      
  36.       for(elem=0; elem<n-1; elem++){
  37.              for(i=elem+1; i<n; i++){
  38.                   if(strcmp(cad[elem], cad[i])>0)
  39.                   {
  40.                      
  41.                       *temp=*cad[elem];
  42.                       *cad[elem]=*cad[i];
  43.                       *cad[i]=*temp;
  44.                   }            
  45.              }
  46.       }
  47. }
  48. void printa (int n,char *cad[50])
  49. {
  50.      int i;
  51.      
  52.       printf("nLes cadenes ordenades alfabeticament son:n");
  53.       for(i=0; i<n; i++){
  54.           printf("nCadena %d: %s", i+1, cad[i]);
  55.       }
  56.  
  57. }
  58.  
  59.  

Las cabeceras estan bien ? pq cuando introduzco las palabras y pongo el . se me cierra :S
el strcpy se puede utilizar asi aunk sean punteros ?
cuando hace el cambio se tendria q hacer asi o con el strcpy ?

betopin

  • Miembro activo
  • **
  • Mensajes: 93
  • Nacionalidad: co
    • Ver Perfil
    • http://www.programasenc.blogspot.com
Re: Punteros
« Respuesta #4 en: Miércoles 8 de Abril de 2009, 20:25 »
0
Tu problema esta aca

Código: C
  1. taula[50][30]=*cad[50];
  2.      
  3.       ordenar(n,cad);
  4.       printa(n,cad);
  5.  


En cad, previo a esas lineas no hay nada asi que la asignacion que estas haciendo almacena basura y los punteros que estas manejando en las funciones estan apuntando a arrays inexistentes

Saludos

gonza_fs

  • Nuevo Miembro
  • *
  • Mensajes: 24
    • Ver Perfil
Re: Punteros
« Respuesta #5 en: Sábado 11 de Abril de 2009, 03:35 »
0
Hola, bueno, del ultimo codigo que vi, noto varios errores, Usas taula y cad sin inicializar, incluso cad es un puntero a un array, no solo un array. Si creas una estructura asi te conviene hacerle un new primero: char  *cad=new char[30];
Es mas claro de esta manera. Aparte el amigo que escribio antes que yo tiene razon, llamas a los procedimientos sin nada en las estructuras, o sea, sin inicializar.
Aparte en una linea haces taula[50][30]=*cad[30], lo cual te da basura porque el contenido completo de cad esta "vacio".
Tambien vi algo como gets(taula[n]). Esta parte no se realmente como funciona de esta manera, pero se como si taula fuera un arreglo lo cual no es cierto. Aunque el gets te funcione asi, no es claro y creo eso te esta provocando confusiones entre los parametros. Espero te sirve, saludos.