Problema con float y double!!!!

Iniciado por EdgarKrieger, 8 Mayo 2014, 19:52 PM

0 Miembros y 1 Visitante están viendo este tema.

EdgarKrieger

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
"Las matemáticas son el lenguaje, el idioma que utilizo Dios para escribir el mundo"
Galileo Galilei

Blaster

#1
Para convertir grados Celsius a Kelvin la formula seria

Código (bash) [Seleccionar]
Kelvin = Celsius + 273.15

Tu codigo con las debidas correcciónes

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

void introducir(float *grados){
   int i;
   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", &grados[i]);
   }
}
void kelvin(float *grados, float * kel){
   int i;
   for( i = 0; i < MAX; i++ ){
       kel[i] = grados[i] + 273.15;
       printf("%f\n", kel[i]);
   }
}
int main(void)
{
   float kel[MAX], grados[MAX];

   introducir(grados);
   printf("Grados Kelvin:\n\n");
   kelvin(grados, kel);

   return 0;
}


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

Saludos

EdgarKrieger

Muchas gracias Blaster me ayudaste bastante gracias y claro voy a investigar como poner el código fuente en etiquetas GeSHi C  ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)
"Las matemáticas son el lenguaje, el idioma que utilizo Dios para escribir el mundo"
Galileo Galilei

MeCraniDOS

Cita de: honguitoSan en  8 Mayo 2014, 21:34 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
"La física es el sistema operativo del Universo"
     -- Steven R Garman

Yoel Alejandro

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:

#include <stdio.h>
#define MAX 30

void kelvin(float *grados ){
    int i, float kel;
    for( i = 0; i < MAX; i++ ){
        kel = grados[i] + 273.15;
        printf("%f\n", kel);
    }
}
}
Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)

leosansan

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 (cpp) [Seleccionar]
void kelvin(float *grados, float * kel){
    int i;
    for( i = 0; i < MAX; i++ )
      printf("%g\n", kel[i] = grados[i] + 273.15);
}


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! ..... !!!!






Blaster

Cita de: leosansan en 22 Mayo 2014, 22:34 PM
¿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

Saludos