elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el ttwitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con decimales (C)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con decimales (C)  (Leído 1,754 veces)
maria16

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Problema con decimales (C)
« 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);


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.513



Ver Perfil
Re: Problema con decimales (C)
« Respuesta #1 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. }


« Última modificación: 27 Noviembre 2016, 06:34 am por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
maria16

Desconectado Desconectado

Mensajes: 2


Ver Perfil
Re: Problema con decimales (C)
« Respuesta #2 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
« Última modificación: 27 Noviembre 2016, 06:38 am por maria16 » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.513



Ver Perfil
Re: Problema con decimales (C)
« Respuesta #3 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
« Última modificación: 27 Noviembre 2016, 06:51 am por engel lex » En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema con decimales
Programación Visual Basic
dekland 5 1,818 Último mensaje 3 Marzo 2006, 19:20 pm
por dekland
Problema con decimales (convergencia a un punto)
Java
AndenBomber 0 1,781 Último mensaje 12 Abril 2009, 18:54 pm
por AndenBomber
Problema con numeros decimales:
Programación C/C++
novato991 4 2,187 Último mensaje 13 Diciembre 2013, 19:30 pm
por novato991
Problema con puntos en decimales y miles « 1 2 3 4 5 »
PHP
Alarkon_88 40 7,981 Último mensaje 15 Septiembre 2016, 04:10 am
por Alarkon_88
C no realiza operación aritmetica.
Programación C/C++
matver 3 1,297 Último mensaje 29 Enero 2017, 15:50 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines