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

Duda sobre punteros y/o arrays

Estas en el tema de Duda sobre punteros y/o arrays en el foro de C/C++ en Foros del Web. Hola... Miren tengo este código: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original char ConBase ( int cNum , int cBase ) {     char * ...
  #1 (permalink)  
Antiguo 05/07/2009, 13:25
Avatar de FTech  
Fecha de Ingreso: julio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 0
Pregunta Duda sobre punteros y/o arrays

Hola... Miren tengo este código:

Código C++:
Ver original
  1. char ConBase(int cNum,int cBase)
  2. {
  3.     char* mystr;
  4.     int pos=0;
  5.     char sNum[10];
  6.     int dig;
  7.     char cdig;
  8.     while(cNum!=0)
  9.     {
  10.         dig=cNum%cBase;
  11.         cdig=CDig(dig);
  12.         sNum[pos]=cdig;
  13.         cNum=cNum/cBase;
  14.         pos++;
  15.     }
  16.     mystr=sNum;// Aqui tengo bien en claro que lo que estoy asignando es sNum[0]
  17.     return *mystr;
  18. }

Lo que necesito es que mi valor de retorno sea la unión de los elementos de mi array. Ejemplo:

VECTOR[]={1,E,F}
PUNTERO=1EF

Se entiende?

Muchas gracias.
  #2 (permalink)  
Antiguo 05/07/2009, 13:44
Avatar de FTech  
Fecha de Ingreso: julio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Duda sobre punteros y/o arrays

Estuve pensando en concatenar cada elemento en una sola string, y retornar con este string. ¿Qué piensan al respecto?
  #3 (permalink)  
Antiguo 06/07/2009, 02:56
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Duda sobre punteros y/o arrays

Varias cosas, primero que tu funcion devuelve solo un caracter, entiendo que queres devolver una cadena, es decir char *. La mejor manera me parece que es usar una cadena que te pasen como parametro.

[code=cpp]char *ConBase(char *sNum, int cNum, int cBase);[/code]

Para pasar un digito entero a un caracter le sumas el valor en ASCII de 0: '0' que es 48.

[code=cpp]sNum[pos] = dig + '0';[/code]

Lo podes llamar, desde el main por ejemplo, asi:

[code=cpp]char tNum[10];
memset(tNum, 0, sizeof(tNum));
printf("%s\r\n", ConBase(tNum, 125, 10));[/code]

Ahora solo te falta invertir la cadena o generarla al derecho ;)
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #4 (permalink)  
Antiguo 06/07/2009, 07:36
Avatar de FTech  
Fecha de Ingreso: julio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Duda sobre punteros y/o arrays

Muchas gracias EI. Ahora mismo me pondré a trabajar en eso.
  #5 (permalink)  
Antiguo 06/07/2009, 10:01
Avatar de FTech  
Fecha de Ingreso: julio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Duda sobre punteros y/o arrays

Hola, casi termino el programa. Tengo que arreglar la salida, ya que por ejemplo:

225 B)16 = E1, pero mi programa devuelve @E1. Intenté con lo siguiente:

Código c++:
Ver original
  1. return ++mystr;

Pero:

225 B)13 = 144, el programa devuelve 44. Alguna recomendación?

Igualmente con números, al parecer de 3 cifras, el programa no devuelve los valores correctos, en bases mayores a 10.

Código c++:
Ver original
  1. #include <iostream>
  2. #include <cmath>
  3. #include <cstring>
  4.  
  5. int DivReit(int iNum,int iBase);
  6. char* ConBase(int cNum,int cBase);
  7. char CDig(int digtconv);
  8.  
  9.  
  10. int main()
  11. {
  12.     int iNuma,iBaseg;
  13.     std::cout<<"Ingrese numero"<<std::endl;
  14.     std::cin>>iNuma;
  15.     std::cout<<"Ingrese base a convertir"<<std::endl;
  16.     std::cin>>iBaseg;
  17.     if(iBaseg<10){std::cout<<"Numero convertido:"<<DivReit(iNuma,iBaseg)<<std::endl;}
  18.     else{std::cout<<"Numero convertido:"<<ConBase(iNuma,iBaseg)<<std::endl;}
  19.     system("pause");
  20.     return 0;
  21. }
  22.  
  23. int DivReit(int iNum,int iBase)
  24. {
  25.     int k=0;
  26.     int suma=0;
  27.     int dig;
  28.     while(iNum!=0)
  29.     {
  30.         dig=iNum&#37;iBase;
  31.         suma=suma+dig*pow(10,k);
  32.         iNum=iNum/iBase;
  33.         k++;
  34.     }
  35.     return suma;
  36. }
  37.  
  38. char* ConBase(int cNum,int cBase)
  39. {
  40.     char* mystr;
  41.     int pos=0;
  42.     char sNum[10];
  43.     int dig,n;
  44.     char cdig;
  45.     while(cNum!=0)
  46.     {
  47.         dig=cNum%cBase;
  48.         cdig=CDig(dig);//Convierto mi digito
  49.         sNum[pos]=cdig;
  50.         cNum=cNum/cBase;
  51.         pos++;
  52.     }
  53.     n=strlen(sNum);
  54.     for(int i=0;i<n/2;i++)//Invierto mi numero
  55.     {
  56.         char aux;
  57.         aux=sNum[i];
  58.         sNum[i]=sNum[n-i-1];
  59.         sNum[n-i-1]=aux;
  60.     }
  61.     mystr=sNum;
  62.     return mystr;
  63. }
  64.  
  65. char CDig(int digtconv)
  66. {
  67.     char Mychars[]={'0','1','2','3','4','5','7','8','9','A','B','C','D','E','F'};
  68.     if(digtconv>9)
  69.     {
  70.         digtconv=Mychars[digtconv-1];
  71.         return digtconv;
  72.     }
  73.     else
  74.     {
  75.         digtconv=Mychars[digtconv];
  76.         return digtconv;
  77.     }
  78. }
  #6 (permalink)  
Antiguo 06/07/2009, 11:16
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Respuesta: Duda sobre punteros y/o arrays

La cosa era retornar la misma cadena que te pasaran desde el main, retornar ese array que es una variable local y cuyo ambito termina al terminar la funcion no es una buena idea.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 06/07/2009, 18:11
Avatar de FTech  
Fecha de Ingreso: julio-2009
Mensajes: 88
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Duda sobre punteros y/o arrays

He cambiado el valor a sNum, pero me sigue saliendo el caracter extraño ese. :\
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 11:20.