Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: EdgarKrieger en 8 Mayo 2014, 19:52 pm



Título: Problema con float y double!!!!
Publicado por: EdgarKrieger en 8 Mayo 2014, 19:52 pm
Hola a todos perdón por molestarlos pero tengo un problema lo que pasa es que estoy haciendo un programa que lea 30 números y los convierta a grados kelvin, lo tengo que hacer por medio de funciones y arreglos, esto es lo que llevo:

#include <stdio.h>
#define MAX 30
void introducir(float *grados)
{
    int i;
    float cel[50];
    printf("Dame 30 valores de grados a convertir en grados celsius:\n");
    for(i=0;i<MAX;i++){
        printf("Numero %d >>>> ",i+1);
        scanf("%f",&cel);
        while(getchar()!='\n');
    }
}
float kelvin(float *grados)
{
    int i;
    float kel[50];
    for(i=0;i<MAX;i++){
        kel = &grados-273.15;
        return kel;
    }
}
int main()
{
    float far[50],kel[50],grados[50];
    introducir(grados);
    printf("Grados Kelvin:\n");
    printf("%f",kelvin(grados));
    return 0;
}

El problema es que cuando compilo me sale el siguiente error: :-X :-X error: invalid operands to binary - (have 'float *' and 'double')| a que se debe ese error y como puedo corregirlo :huh: :huh: :huh: muchas gracias por su ayuda


Título: Re: Problema con float y double!!!!
Publicado por: Blaster en 8 Mayo 2014, 21:02 pm
Para convertir grados Celsius a Kelvin la formula seria

Código
  1. Kelvin = Celsius + 273.15

Tu codigo con las debidas correcciónes

Código
  1. #include <stdio.h>
  2. #define MAX 30
  3.  
  4. void introducir(float *grados){
  5.    int i;
  6.    printf("Dame 30 valores de grados a convertir en grados celsius:\n");
  7.    for( i = 0; i < MAX; i++ ){
  8.        printf("Numero %d >>>> ",i+1);
  9.        scanf(" %f", &grados[i]);
  10.    }
  11. }
  12. void kelvin(float *grados, float * kel){
  13.    int i;
  14.    for( i = 0; i < MAX; i++ ){
  15.        kel[i] = grados[i] + 273.15;
  16.        printf("%f\n", kel[i]);
  17.    }
  18. }
  19. int main(void)
  20. {
  21.    float kel[MAX], grados[MAX];
  22.  
  23.    introducir(grados);
  24.    printf("Grados Kelvin:\n\n");
  25.    kelvin(grados, kel);
  26.  
  27.    return 0;
  28. }
  29.  

Debes publicar tu codigo con las etiquetas GeSHi C de lo contrario algunos caracteres no aparecen

Saludos


Título: Re: Problema con float y double!!!!
Publicado por: EdgarKrieger en 8 Mayo 2014, 21:34 pm
Muchas gracias Blaster me ayudaste bastante gracias y claro voy a investigar como poner el código fuente en etiquetas GeSHi C  ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)


Título: Re: Problema con float y double!!!!
Publicado por: MeCraniDOS en 14 Mayo 2014, 23:41 pm
y claro voy a investigar como poner el código fuente en etiquetas GeSHi C  ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)

Cuando quieras poner un código, donde están las opciones para dar formato al texto (parte superior donde escribes), hay un desplegable a la derecha que pone GeSHi  :rolleyes:

Saludos


Título: Re: Problema con float y double!!!!
Publicado por: Yoel Alejandro en 22 Mayo 2014, 04:02 am
Mmmmm, perfecto pero yo opino que si sólo quiere imprimir los valores en Kelvin no es necesario el segundo argumento en la función kelvin(). Bastaría con:
Código
  1. #include <stdio.h>
  2. #define MAX 30
  3.  
  4. void kelvin(float *grados ){
  5.    int i, float kel;
  6.    for( i = 0; i < MAX; i++ ){
  7.        kel = grados[i] + 273.15;
  8.        printf("%f\n", kel);
  9.    }
  10. }
  11. }


Título: Re: Problema con float y double!!!!
Publicado por: leosansan en 22 Mayo 2014, 22:34 pm
Inesperada la salida que obtengo con el código de Blaster:

Citar

Dame 3 valores de grados a convertir en grados celsius:
Numero 1 >>>> 100
Numero 2 >>>> 200
Numero 3 >>>> 300
Grados Kelvin:

373.149994
473.149994
573.150024


No así con el de yoel_alejandro:

Citar

Dame 3 valores de grados a convertir en grados celsius:
Numero 1 >>>> 100
Numero 2 >>>> 200
Numero 3 >>>> 300
Grados Kelvin:

373.150000
473.150000
573.150000


Análogo al de usar %g en lugar de %f:

Código
  1. void kelvin(float *grados, float * kel){
  2.    int i;
  3.    for( i = 0; i < MAX; i++ )
  4.      printf("%g\n", kel[i] = grados[i] + 273.15);
  5. }

Citar

Dame 3 valores de grados a convertir en grados celsius:
Numero 1 >>>> 100
Numero 2 >>>> 200
Numero 3 >>>> 300
Grados Kelvin:

373.15
473.15
573.15


¿Alguna sugerencia a este comportamiento del %f?.

¡¡¡¡ Saluditos! ..... !!!!


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)





Título: Re: Problema con float y double!!!!
Publicado por: Blaster en 23 Mayo 2014, 01:57 am
¿Alguna sugerencia a este comportamiento del %f?.

En el modo de operar del especificador %f no hay nada estraño, debes tener encuenta que son diferentes y cada uno procesa el valor con diferente precisiónes, obten mas información al respecto en esta pagina

http://support.microsoft.com/kb/43392/es (http://support.microsoft.com/kb/43392/es)

Saludos