Programación General => C/C++ => Mensaje iniciado por: barbie657 en Martes 6 de Mayo de 2008, 06:14
Título: Numero Reflejo!!
Publicado por: barbie657 en Martes 6 de Mayo de 2008, 06:14
Hola estoy recien aprendiendo a programar, y en mi clase el profesor nos mando como tarea escribir un programa que entregara el reflejo de un numero, es decir, si ingreso el 12345 el programa debe entregar el numero 54321. escribi el programa y funciona perfecto hasta numeros de tres cifras de ahi en adelante empieza a a poner ceros entre medio y no entiendo porque si alguien pudiese ayudarme se lo agradeceria infinitamente intente buscar en internet la solucion pero eran en general codigos muy complejos y no entendia nada, repito soy principiante.
el codigo es el sgte:
/* Programa que muestra el reflejo de un numero */
#include<stdio.h> #include<conio.h>
void main(){ long int numero,paso,potencia,reflejo,x;
printf("\n Ingrese el numero \n"); scanf("%ld",&numero);
printf("\n El reflejo del numero %ld es: %ld",numero,reflejo); }
Título: Re: Numero Reflejo!!
Publicado por: Riskz en Miércoles 7 de Mayo de 2008, 00:00
Código: Text
paso= x-10*(x/10);
...
x=x/10;
En esas dos lineas ten cuidado porque x/10 puede dar un numero con coma y al ser x y paso variables int el numero se va a recortar prueba haciendolas tipo float o double que llevan coma
No se mucho sobre matematica pero yo el numero reflejo lo haria usando string/array de char en lugar de int, lo veo mucho mas facil y corto si no sabes o no tienes una idea de como empezar te ayudo
Saludos
Título: Re: Numero Reflejo!!
Publicado por: Iganguli en Miércoles 7 de Mayo de 2008, 05:11
Deberias checar esta linea en esta podria estar el error te sugiero que hagas el ejercicio e papel y lo vayas haciendo paso a paso ahi te daras cuenta del error
Código: Text
potencia= potencia*10;
Título: Re: Numero Reflejo!!
Publicado por: Exodus_c217 en Miércoles 7 de Mayo de 2008, 18:26
Lo que debes hacer es multiplicar tu base o sea 10 por el exponente, esto lo puedes hacer con un ciclo for para controlarlo, y luego dividir el numero que deseas invertir por el resultado de la potencia y mandarlo a imprimir en pantalla.
Otra cosa, si el numero va a ser de una x cantidad de números por ejemplo 5, solamente empieza a dividir el numero desde el dígito mas grande al mas pequeño y luego los imprimes en orden inverso.
Código: Text
paso= x-10*(x/10);
En esta linea paso es igual a 0. En la segunda vuelta del ciclo también es 0, lo que sucede es que divides por diez y luego multiplicas por diez y te da el mismo numero, después eso se lo restas a x y queda 0 infinitamente.
Código: Text
reflejo= reflejo*potencia+paso;
Aquí Reflejo es igual a 0. En la segunda vuelta, potencia es 10 pero reflejo sigue siendo cero así que la multiplicación es 0 y como paso es 0, entonces otra vez infinitamente va a ser 0.
Código: Text
potencia= potencia*10;
Aqui potencia es igual a 10. Ahora en la segunda vuelta potencia es igual a 100, lo cual esta bien.
Código: Text
x=x/10;
Aquí x es igual a 1234.5, creo que aquí esta parte del error. Ahora en la segunda vuelta x va a ser igual a 123.45.
Bueno creo que deberías de ponerte con tu calculadora a revisar esos problemillas, eso le ocurre a uno muy seguido cuando esta empezando, no quiero decir que soy un experto jeje pero ya la experiencia. espero que te sirva.
Título: Re: Numero Reflejo!!
Publicado por: Iganguli en Miércoles 7 de Mayo de 2008, 19:47
Código: Text
paso= x-10*(x/10);
en esta linea lo que hace es dividir entre 10 y multiplicar por 10 pero como son enteros no da el mismo resultado ejemplo x = 1234 si divido (1234 / 10) como los dos numeros son enteros entonces me da como resultado 123 el cual es multiplicado por 10 y da 1230 si se lo resto al valor de x me da el 4 el cual es el valor que adquiere paso en el la primera vez que se ejecuta el ciclo entonces no da infinitamente 0
Código: Text
reflejo= reflejo*potencia+paso;
en esta linea reflejo aduqiere el valor de 4 con lo cual tampoco es infinitamente 0
Código: Text
x=x/10;
aqui lo que hace es quitarle las unidades al numero x es como en el paso 1 como se divide entre enteros se elimina el residuo
ahora digo que el detalle esta en
Código: Text
potencia= potencia*10;
por que a la tercera vuelta en reflejo esta 43 peo potencia es 100 entonces 43 * 100 es 4300 y si le sumamos el paso que seria 2 me da 4302 deberia que checar esta linea de codigo
Título: Re: Numero Reflejo!!
Publicado por: AnimaSubtilis en Miércoles 7 de Mayo de 2008, 23:36
No se tal vez pueda ser una forma de hacerlo muy facilista.. :P
pero se me ocurre tranasformar el int a string con la funcion sprintf
y voltear la cadena y luego transformarlo a int....
Solo ideas....
saludos.... :kicking:
Título: Re: Numero Reflejo!!
Publicado por: Exodus_c217 en Viernes 16 de Mayo de 2008, 18:14
Bueno tienes razon, solo es de hacer un arreglo, insertarle los cinco numeros e imprimirlos en orden inversa, puede ser una solucion mas facil al problema.