• Viernes 8 de Noviembre de 2024, 02:39

Autor Tema:  Numero Reflejo!!  (Leído 2407 veces)

barbie657

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Numero Reflejo!!
« en: Martes 6 de Mayo de 2008, 06:14 »
0
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);

x=numero;
paso=0;
reflejo=0;
potencia=1;

while (x>9){
 paso= x-10*(x/10);
 reflejo= reflejo*potencia+paso;
 potencia= potencia*10;
 x=x/10;
}
reflejo=reflejo*10+x;

printf("\n El reflejo del numero %ld es: %ld",numero,reflejo);
}

Riskz

  • Miembro activo
  • **
  • Mensajes: 39
    • Ver Perfil
Re: Numero Reflejo!!
« Respuesta #1 en: Miércoles 7 de Mayo de 2008, 00:00 »
0
Código: Text
  1. paso= x-10*(x/10);
  2. ...
  3. x=x/10;
  4.  
  5.  

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

Iganguli

  • Miembro activo
  • **
  • Mensajes: 51
  • Nacionalidad: mx
    • Ver Perfil
Re: Numero Reflejo!!
« Respuesta #2 en: Miércoles 7 de Mayo de 2008, 05:11 »
0
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
  1. potencia= potencia*10;
  2.  
  3.  

Exodus_c217

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Numero Reflejo!!
« Respuesta #3 en: Miércoles 7 de Mayo de 2008, 18:26 »
0
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
  1.   paso= x-10*(x/10);
  2.  

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
  1.  reflejo= reflejo*potencia+paso;
  2.  
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
  1.  potencia= potencia*10;
  2.  
Aqui potencia es igual a 10. Ahora en la segunda vuelta potencia es igual a 100, lo cual esta bien.

Código: Text
  1.  x=x/10;
  2.  
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.

Iganguli

  • Miembro activo
  • **
  • Mensajes: 51
  • Nacionalidad: mx
    • Ver Perfil
Re: Numero Reflejo!!
« Respuesta #4 en: Miércoles 7 de Mayo de 2008, 19:47 »
0
Código: Text
  1. paso= x-10*(x/10);
  2.  

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
  1. reflejo= reflejo*potencia+paso;
  2.  

en esta linea reflejo aduqiere el valor de 4 con lo cual tampoco es infinitamente 0

Código: Text
  1. x=x/10;
  2.  

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
  1. potencia= potencia*10;
  2.  
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

AnimaSubtilis

  • Miembro MUY activo
  • ***
  • Mensajes: 172
  • Nacionalidad: co
    • Ver Perfil
Re: Numero Reflejo!!
« Respuesta #5 en: Miércoles 7 de Mayo de 2008, 23:36 »
0
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:
A menudo unas pocas horas de «prueba y ensayo» podrán ahorrarte minutos de leer manuales.
[size=150]
Dios nos Otorgo el uno y el cero....y con eso creamos un universo....[/size]

[size=109]↑°°°°ÄNÍMÄ §ÛBTÍLͧ°°°°↓[/size]


Exodus_c217

  • Nuevo Miembro
  • *
  • Mensajes: 8
    • Ver Perfil
Re: Numero Reflejo!!
« Respuesta #6 en: Viernes 16 de Mayo de 2008, 18:14 »
0
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.