Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: jaguirred en 26 Febrero 2017, 20:15 pm



Título: Invertir numero de coma flotante
Publicado por: jaguirred en 26 Febrero 2017, 20:15 pm
 :huh: :huh: :huh: :huh: :huh: :huh: :huh: :huh: :huh: :huh: :huh: :huh: :huh: :huh:
Realizar un programa que permita invertir la parte entera y la parte decimal de un número dado del tipo de punto flotante, el programa aceptará cantidades con o sin punto flotante.
Necesito ayuda en la parte del punto flotante, el programa para enteros ya lo tengo pero la parte flotante es donde tengo problema


· Los títulos deben ser descriptivos
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex


Título: Re: Ayuda!
Publicado por: engel lex en 26 Febrero 2017, 20:20 pm
Citar
invertir la parte entera y la parte decimal de un número dado del tipo de punto flotante

explicate con más detalle, da un ejemplo

que problema tienes? que llevas? que intentaste? que no sabes?


Título: Re: Invertir numero de coma flotante
Publicado por: jaguirred en 26 Febrero 2017, 20:58 pm
En el ejercicio da el siguiente ejemplo:
Ejemplo 1, datos de entrada, números enteros:
34789765
Datos de salida, ejemplo 1:
56798743

Ejemplo 2, datos de entrada, números con punto flotante:
189674.678
Datos de salida, ejemplo 2:
476981.876

Yo llevo el siguiente código solo para enteros:
Código:
//Programa que invierte el orden de los numeros.
#include <stdio.h>

int x,y,z;
int a;

main()
{

printf("Dame un número: ");
scanf("%i",&x);

   while (x>0)
   {
      a=a+1; //Cuenta los ciclos
      printf("Ciclos: %i\n",a);
      printf("1. x: %i\n",x);
      z=x%10; //Divide a x entre 10 para guardar el modulo en z
      printf("2. z: %i\n",z);
      printf("3. x: %i\n",x);
      x=x/10; //Divide x entre 10 que será lo que ocuparemos para la siguiente repeticion del ciclo
      printf("4. x: %i\n",x);
      printf("5. z: %i\n",z);
      printf("6. y: %i\n",y);
      y=y*10+z; //Va guardando el número en y para después imprimirlo
      printf("7. y: %i\n",y);
   }

printf("El resultado es : %i",y);

}
 
***Los printf que están dentro solo son para corroborar el proceso


Título: Re: Invertir numero de coma flotante
Publicado por: engel lex en 26 Febrero 2017, 21:07 pm
cuidado con usar variables no incializadas, como int a y int y, asumes que será 0, cuando eso no siempre será verdad y depende de las opciones del compilador

para hacer la parte entera de un numero de coma flotante lo mejor sería que pases la parte entera y decimal a 2 numeros tipo entero separados, hagas el proceso que ya tienes y los unas nuevamente
es decir

124.12
lo separas en 124 y en 12, enviartes ambos, quedando 421 y 21 y los unes para tener 421,21

crees que puedes hacerlo sin ayuda?


Título: Re: Invertir numero de coma flotante
Publicado por: jaguirred en 26 Febrero 2017, 21:42 pm
No creo, tengo una idea: hacer lo mismo con división y modulo, la división guardarlo en una varible y modulo en otro; pero de ahí tengo dudas:
-¿Cómo meter que el programa sepa que si es con punto decimal haga un proceso diferente?

-¿Qué tipo de variable puedo poner para que haga el proceso indiscriminadamente ?

-Al meter un numero de tipo flotante o doble me da un error en la parte del modulo y me dice que se tiene un valor doble y un entero, ¿Cómo puedo solucionar esto?

Se me ocurrió ahorita que antes de que inicie el ciclo haga la división no sé, entre 1, la parte entera se guarda en una variable y que se haga el modulo del mismo numero, obviamente si no tiene modulo esto lo va omitir o algo asi cierto?


Título: Re: Invertir numero de coma flotante
Publicado por: engel lex en 26 Febrero 2017, 22:01 pm
Citar
¿Cómo meter que el programa sepa que si es con punto decimal haga un proceso diferente?

esto es dar muchas vueltas al asunto, es complicado para tu fin... ojo que puede ser delicado el manejos de numeros de coma flotante debido ala perdida de precisión

Citar
¿Qué tipo de variable puedo poner para que haga el proceso indiscriminadamente ?

mi recomendacion siempre trata el input como float y procesa como int

Citar
Al meter un numero de tipo flotante o doble me da un error en la parte del modulo y me dice que se tiene un valor doble y un entero, ¿Cómo puedo solucionar esto?

el modulo solo se puede relizar entre enteros




tu otra opción es hacerlo como char y ahí no hay perdida, ahí es bastnte simple el proceso