Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: maria16 en 27 Noviembre 2016, 06:14 am



Título: Problema con decimales (C)
Publicado por: maria16 en 27 Noviembre 2016, 06:14 am
Hola, el problema es que h, en el momento que se hace menor a 1 (cuando n>10), aunque sea 0.9 lo toma como 0, como si fuera un entero. Alguien podría decirme lo que estoy haciendo mal? por favor

Código:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define xo 5
#define xn 15
#define n 10

double main()
{
    double h, A, xi;
    int i;
    h=(xn-xo)/n;

    printf("El paso h es: %f \n", h);


Título: Re: Problema con decimales (C)
Publicado por: engel lex en 27 Noviembre 2016, 06:32 am
primero tienes un error garrafal... "double main()" main siempre debe ser int y unicamente int, y en general debe retornar 0 que indica "ok" a nivel de sistema...

segundo... los defines en general no son mala practica pero no están lejos, ya que son directivas de preprocesador y no estás declaradas de manera bien controlada

que tipo de variable son en tu codigo Xo, Xn y n... podrías responder eso en base a tu codigo? char, short, int, long, float, doble? sabes si es signed o unsigned?

la función main está incompleta, aunque puede ser una asunto de copiado así que no me meto allí...

tienes 2 caminos

seguir con los defines (que no lo recomiendo para nada) y entonces usar casting (conversión implicita) donde solo cambiarías una linea

Código
  1. h=(xn-xo)/(double)n;

o de la manera que debe ser, usando constantes de manera que están disponibles en tu código tienes controlado su tipo y no son alterables
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int main(){
  6. const double xo = 5;
  7. const double xn = 15;
  8. const double n = 9;
  9.    double h;
  10.    h=(xn-xo)/n;
  11.  
  12.    printf("El paso h es: %f \n", h);
  13.    return 0;
  14. }


Título: Re: Problema con decimales (C)
Publicado por: maria16 en 27 Noviembre 2016, 06:37 am
muchas gracias!! si estaba incompleto porque copié solo la parte del error, y lo del double main () lo puse despues de estarlo modificando por 3 horas jaja


Título: Re: Problema con decimales (C)
Publicado por: engel lex en 27 Noviembre 2016, 06:49 am
el problema era (y para que tengas cuenta esto en el futuro) que los resultados de las operaciones en C/C++ siempre retornan el tipo de variable operado, son inconscientes de quien los recibe...

así que
Código:
float = int/int
dividirá como int (sin decimales) y lo pasará al float

si es una operación entre diferentes tipos siempre se devolverá el mayor de los tipos (esto se llama "promoción de operadores" básicamente agarra el tipo más limitado, lo convierte en el tipo más grande y luego opera)

así que
Código:
float = int/float
o
float = float/int
dividirá como float, es decir con decimales

esto pasa igualmente con números

Código
  1. float a,b1,b2;
  2. a = 3/4; // int/int ya que los numeros enteros internamente son int
  3. b1 = 3.0/4; // float/int
  4. b2 = 3/4.0 // int/float