Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: NOB2014 en 4 Enero 2016, 02:10 AM

Título: [Súper solucionado] Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: NOB2014 en 4 Enero 2016, 02:10 AM
Hola a todos.
Bueno como el enunciado lo dice es lo que quiero hacer, lo que pasa es que la parte fraccionaria no sale limpia como yo deseo, o sea, el programa que expongo a continuación la parte fraccionaria da como resultado 0.345000 y lo que necesito es 345000 a secas sin el cero y el punto, hay alguna manera de lograrlo.-

#include <stdio.h>
#include <windows.h>

int main(void){
   float numero = 12.345;
   int parte_entera;
   double parte_decimal;   
   
   parte_entera = numero/1;
   parte_decimal = numero-parte_entera;
   
   system( "cls" );   
   printf( "\n La parte entera   %d", parte_entera );
   printf( "\n La parte decimal  %f", parte_decimal );
   
   return 0;
}

Desde ya muchas gracia y un abrazo.
Daniel
Título: Re: Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: 0xFer en 4 Enero 2016, 03:24 AM
Multiplicalo por 1000
Título: Re: Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: NOB2014 en 4 Enero 2016, 03:54 AM
Hola 0xFer.
Gracias por ocuparte, lo que vos propones daría 12345 y lo que necesito es:
entero   = 12
fraccion = 345
Ya encontré una manera solo que no descubro cuál es la condición para finalizar el while, no voy a saber si la parte fraccionaria tiene 1,2,3,10 dígitos.-

while( a <= 2){
   parte_decimal  *=10;
   a++;
}

Saludos.
Daniel
Título: Re: Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: engel lex en 4 Enero 2016, 04:23 AM
usa etiquetas GeSHi al publicar código

espero se entienda(y funcione)
Código (cpp) [Seleccionar]
float numero = 12.123;
int entero = numero;
numero -= entero;

while((numero - (int)numero) != 0){
  numero  *=10;
}
Título: Re: Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: MAFUS en 4 Enero 2016, 09:55 AM
Hazlo a mano, sobre un papel y apunta los pasos que vas haciendo.
Después solo tienes que traducirlo a C.
Ten en cuenta varias cosas:
Que ocurre si el numero original es entero
Que ocurre si el tiene infinitos decimales.

Por otra parte, si no es un ejercicio y necesitas esa funcionalidad para un programa mas grande, piensa que ya existe esta función en la librería estándar de C.
Título: Re: Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: kondrag_X1 en 4 Enero 2016, 11:13 AM
y porque no utilizas %n.mf para decir el numero de decimales que quieres?

por ejemplo
printf("%n.mf",numero);

n -> indica la cantidad de números por delante de la coma
m -> la cantidad de números por detrás de la coma.
así tu número 12,123
printf("parte entera   : %4.0f",numero); 12
printf("parte decimal : %0.4f",numero); 123
Título: Re: Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: user-marcos en 4 Enero 2016, 11:51 AM

#include<stdio.h>

int main()
{
  float f = 12.598;
  int entero = (int)f;
  float decimal = f - entero;
}
Título: Re: Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: NOB2014 en 4 Enero 2016, 13:22 PM
Hola.
Tengo consultas para los 4, pero no las voy a poner todas juntas, solo que el código de user-marcos me da correcto como debe ser la parte entera pero la parte fraccionaria da como resultado: 0.598000. Lo que necesito es que dé: 598 sin cero a la izquierda ni el punto o sea un número entero.-

#include <stdio.h>
#include <windows.h>

int main(void){
float f = 12.598;
int entero = (int)f;
float decimal = f - entero;

system( "cls" );
printf("\n parte entera   : %d",entero);
printf("\n parte decimal : %f",decimal);

return 0;
}


engel lex te dejo el código como yo lo interprete, la lógica es la correcta, pero no sé qué pasa el resultado de la parte fraccionaria no es la esperada:12300015.000000, voy a hacer algunas prácticas para intentar que de el resultado que yo necesito.-

#include <stdio.h>
#include <windows.h>

int main(void){
float numero = 12.123;
int entero = numero;
numero -= entero;

while((numero - (int)numero) != 0){
numero  *=10;
}

system( "cls" );
printf("\n parte entera   : %d", entero);
printf("\n parte decimal : %f", numero);

return 0;
}


Por el momento es todo, luego les hago la consulta a los otros 2 foristas.-

Me es imposible utilizar las etiquetas GeSHi, no sé que pasa.-

Saludos.
Daniel
Título: Re: Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: user-marcos en 4 Enero 2016, 13:27 PM
Lo que he puesto antes estaba incompleto.


#include<stdio.h>
#include <math.h>

#define NUMERO_DECIMALES 4
int main()
{
 float f = 12.5985;
 int entero = (int)f;
 float decimal = f - entero;
 int i_decimal = decimal * pow(10,NUMERO_DECIMALES);
 printf("%i",i_decimal); // ->  5985
}
Título: Re: Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: MAFUS en 4 Enero 2016, 17:57 PM
A ver, ¿qué tal así?

#include <stdio.h>
#include <math.h>

unsigned p_fraccionaria(double d) {
    unsigned retvalue;
   
    d = fabs(d);
    d -= (unsigned long)d;
    d *= 1000000; // <-- 6 decimales ya es bastante precision
   
    retvalue = d;
   
    if(retvalue < d)        // <-- por si en la conversion ha habido
        ++retvalue;         // <-- perdida de precision
    else if(retvalue > d)   //
        --retvalue;         //
       
    if(retvalue)                // <-- Si no es 0, intentamos
        while(!(retvalue % 10)) // <-- quitar 0 por la derecha
            retvalue /= 10;     //
   
    return retvalue;
}

int main() {
    double num;
   
    num = 12.34;
    printf("%f : %u\n", num, p_fraccionaria(num));
   
    num = 12.34567890123;
    printf("%f : %u\n", num, p_fraccionaria(num));
   
    num = 12.00;
    printf("%f : %u\n", num, p_fraccionaria(num));
   
    num = 12;
    printf("%f : %u\n", num, p_fraccionaria(num));
   
    num = -12.34;
    printf("%f : %u\n", num, p_fraccionaria(num));
   
    return 0;
}
Título: Re: Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: Noob_boy en 4 Enero 2016, 18:07 PM
yo lo que haría seria hacer el logaritmo en base 10 en entero del numero con sus decimales y así obtendría la parte entera, luego se la restas al numero original y obtienes la parte fraccionaria.

mira yo lo utilice para obtener el reverso de un numero
int reverso(int num){
int reverso=0,exp=log10(num);
while(num>0){
reverso = reverso + (num%10)*pow(10,exp);
exp--;
num=num/10;
}
return reverso;


edito:

He probado ha hacerlo y he visto una manera más simple de hacerlo

#include <stdio.h>

int main(){
float num=44.5;
int entera=num;
float fracionaria=num-entera;
}
   

creo que era eso lo que se buscaba
Título: Re: Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: NOB2014 en 4 Enero 2016, 20:47 PM
Hola, gente.
MAFUS, gracias por ocuparte, el ejemplo de user-marcos funciona a la perfección y es en parte lo que proponías, en cuanto a hacerlo en un papel ya lo hice y lo quiero aplicar al código de engel lex pero todavía no lo logro.
CitarQué ocurre si el número original es entero,
ya lo probé y da como parte fraccionaria:cero(correcto)
CitarQue ocurre si tiene infinitos decimales
me parece que esto se soluciona con: #define NUMERO_DECIMALES 4.-
Por último, decirte que voy a probar el código que posteaste se lo ve interesante.- 
Noob_boy, me gustaría que postearas algún ejemplo de lo que propones, te imaginaras que con 63 años ya no me acuerdo de logaritmo, desde ya muchas gracias.-

Saludos.
Daniel
Título: Re: [Súper solucionado] Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: geeke en 4 Enero 2016, 22:11 PM
Tambien dispones de modf incluida en math.h la cual hace justo lo que buscas:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <math.h>

int main(void)
{
    double num = 32.125, fract, entero;

    fract = modf(num, &entero);
    printf ("Entera: %g\nDecimal: %g\n", entero, fract);

    return 0;
}


Saludos
Título: Re: [Súper solucionado] Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: engel lex en 5 Enero 2016, 01:06 AM
llegué tarde XD pero venia a decir que tal vez mi código falla por cosas de la precisión de la variable flotante
Título: Re: [Súper solucionado] Separar parte decimal y parte fraccionaria en lenguaje C.
Publicado por: NOB2014 en 5 Enero 2016, 18:10 PM
Hola.

#include<stdio.h>

int main( void ){
double numero = 12.09;
int entero = numero, x = 1;
double decimal = numero - entero;

printf("\n %g\n", decimal);

while(x <= 2 ){
decimal  *=10;
x++;
}

printf("\n La parte fraccionaria..:%g\n", decimal);

return 0;
}


Saludos.
Daniel