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

Ayuda¡¡¡con programas

Estas en el tema de Ayuda¡¡¡con programas en el foro de C/C++ en Foros del Web. Si me pueden ayudar con un programa que convierte cadenas de caaracteres a entero pero sin usar funciones como stcopy, strcmp, strcat. sin usar atoi() ...
  #1 (permalink)  
Antiguo 20/09/2010, 21:23
 
Fecha de Ingreso: septiembre-2010
Mensajes: 4
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Ayuda¡¡¡con programas

Si me pueden ayudar con un programa que convierte cadenas de caaracteres a entero pero sin usar funciones como stcopy, strcmp, strcat.


sin usar atoi()

Se los agradeceria mucho

Última edición por slash_x; 20/09/2010 a las 21:35
  #2 (permalink)  
Antiguo 20/09/2010, 22:18
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Ayuda¡¡¡con programas

no es complicado, como cada caracter representa un numero a cada caracter le restas el '0' y ahi tenes el valor del digito. Ejemplo

'5' - '0' = 5
'2' - '0' = 2

Luego aplicas simple matematica. Ejemplo

2345 = 2 x 1000 + 3 * 100 + 4 * 10 + 5

Osea que de forma generica tenes multiplicar cada numero por un multiplo de 10. Pero como hacemos esto rapido en una pasada. Pues nos valemos de la propiedad distributiva del producto con respecto de la suma.

2345 = 2 x 1000 + 3 * 100 + 4 * 10 + 5 = (2 * 100+ 3 * 10 + 4) * 10 + 5

Fijate, si suponemos que en la variable numero, tenemos hasta un digito menos, simplemente hay que multiplicarlo por diez y sumar el nuevo numero...Concluyendo:

Código C++:
Ver original
  1. numero = 0;
  2. for(i=0;i< cadena[i] != '\0'    ,i ++) {
  3.     digito=cadena[i] - '0';
  4.     numero = numero * 10 + digito;
  5. }

Espero que te sirva, y que se entienda mi pequeña explicacion matematica!!
  #3 (permalink)  
Antiguo 20/09/2010, 22:50
 
Fecha de Ingreso: septiembre-2010
Mensajes: 4
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Respuesta: Ayuda¡¡¡con programas

Cita:
Iniciado por sam90 Ver Mensaje
no es complicado, como cada caracter representa un numero a cada caracter le restas el '0' y ahi tenes el valor del digito. Ejemplo

'5' - '0' = 5
'2' - '0' = 2

Luego aplicas simple matematica. Ejemplo

2345 = 2 x 1000 + 3 * 100 + 4 * 10 + 5

Osea que de forma generica tenes multiplicar cada numero por un multiplo de 10. Pero como hacemos esto rapido en una pasada. Pues nos valemos de la propiedad distributiva del producto con respecto de la suma.

2345 = 2 x 1000 + 3 * 100 + 4 * 10 + 5 = (2 * 100+ 3 * 10 + 4) * 10 + 5

Fijate, si suponemos que en la variable numero, tenemos hasta un digito menos, simplemente hay que multiplicarlo por diez y sumar el nuevo numero...Concluyendo:

Código C++:
Ver original
  1. numero = 0;
  2. for(i=0;i< cadena[i] != '\0'    ,i ++) {
  3.     digito=cadena[i] - '0';
  4.     numero = numero * 10 + digito;
  5. }

Espero que te sirva, y que se entienda mi pequeña explicacion matematica!!
Gracias por ayudar pero estoy aun muy atorado, si pudiesen explicarme un poco masdetallado
  #4 (permalink)  
Antiguo 20/09/2010, 22:56
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Ayuda¡¡¡con programas

Perdon, antes puse mal un pedaso del for:

Código C++:
Ver original
  1. numero = 0;
  2. for(i=0;cadena[i] != '\0'    ,i ++) {
  3.     digito=cadena[i] - '0';
  4.     numero = numero * 10 + digito;
  5. }

No es muy dificl. Primero seteamos a 0 la variable numero. Luego en el for (un ciclo) vamos a recorrer la cadena caracter a caracter.
Lo que esta entre las llaves se realiza por cada ciclo del for.

Ahi lo que hacemos es calcular el digito que corresponde a ese caracter. Le restamos el valor que representa el cero para obtener el valor del digito.

Luego a nuestro numero lo multiplicamos pro 10 y le sumamos este digito.

Etiquetas: programa
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 23:40.