Test Foro de elhacker.net SMF 2.1

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

#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

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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(){
const double xo = 5;
const double xn = 15;
const double n = 9;
   double h;
   h=(xn-xo)/n;

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

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
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
float = int/float
o
float = float/int

dividirá como float, es decir con decimales

esto pasa igualmente con números

float a,b1,b2;
a = 3/4; // int/int ya que los numeros enteros internamente son int
b1 = 3.0/4; // float/int
b2 = 3/4.0 // int/float