[Curso] Introducción a la programación en C (V)

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, m0skit0, LnD, ka69, zacky06

Avatar de Usuario
cripii5
Experto
Experto
Mensajes: 1948
Registrado: 14 Dic 2010, 03:15
Gamertag Xbox Live: cripii5
Steam ID: cripii5
Twitter: cripii5
Ubicación: Uruguay

Re: [Curso] Introducción a la programación en C (V)

Mensaje por cripii5 »

Lo que tengo hecho, es lo siguiente:
Spoiler:

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    //Ingresar variables enteros para las dos edades
    int edad1, edad2, suma, mult;
    float media;
    //Pedir primera edad
    printf ("Introduzca la primera edad: ");
    scanf ("%d", &edad1);
   
    //Pedir segunda edad
    printf ("Introduzca la segunda edad: ");
    scanf ("%d", &edad2);
   
   //Realizar las operaciones
   suma = edad1 + edad2;
   mult = edad1 * edad2;
   media = suma /2;
   
   //Mostrar los distintos resultados
   printf ("La suma de las dos edades es: %d\n", suma);
   printf ("La multiplicacion de las dos edades es: %d\n", mult);
   printf ("La media de las dos edades es: %.2f\n", media);
   printf ("made by cripii5 xD\n");
   
   
 
  system("PAUSE");   
  return 0;
}


Ahora... mi media da un numero entero por mas que la variable media es un float, si divido un entero entre 2, siempre me va a dar un entero, por mas que la variable del resultado este puesta como un float?
Por ejemplo:
Primera edad: 5
Segunda edad: 2
Mi media da 3,00 cuando deberia ser 3,50
Yo

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (V)

Mensaje por m0skit0 »

Te explico:

Código: Seleccionar todo

media = suma /2;

suma es int, por tanto 2 se toma como int también. Por tanto suma/2 es int, la operación se realiza como int. Tomando tu ejemplo, resultado de la operación = 3. Como media es float, se convierte 3 a float, por tanto media = 3.00.

¿Qué puedes hacer para solucionar esto? Dos opciones:

  • Declarar suma como float.

    Código: Seleccionar todo

    float suma;
  • Castear suma a float para que la operación se realice como float:

    Código: Seleccionar todo

    media = (float)suma /2;

    Esto fuerza al compilador a convertir suma a float ANTES de la operación, con lo que la operación se realizará como float.
Imagen

Avatar de Usuario
cripii5
Experto
Experto
Mensajes: 1948
Registrado: 14 Dic 2010, 03:15
Gamertag Xbox Live: cripii5
Steam ID: cripii5
Twitter: cripii5
Ubicación: Uruguay

Re: [Curso] Introducción a la programación en C (V)

Mensaje por cripii5 »

Sep... lo sospeche desde un principio :lol: dejo el ejercicio con la correccion y alguna muy minima modificacion para su mayor entendimiento:
Spoiler:

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    //Ingresar variables enteros para las dos edades y los resultados
    int edad1, edad2, mult;
    float media, suma;
   
    //Pedir primera edad
    printf ("Introduzca la primera edad: ");
    scanf ("%d", &edad1);
   
    //Pedir segunda edad
    printf ("Introduzca la segunda edad: ");
    scanf ("%d", &edad2);
   
   //Realizar las operaciones
   suma = edad1 + edad2;
   mult = edad1 * edad2;
   media = suma /2;
   
   //Mostrar los distintos resultados
   printf ("La suma de las dos edades es: %.0f\n", suma);
   printf ("La multiplicacion de las dos edades es: %d\n", mult);
   printf ("La media de las dos edades es: %.1f\n", media);
   printf ("made by cripii5 xD\n");
   
   
 
  system("PAUSE");   
  return 0;
}


Parte VI alla voy
Yo

Avatar de Usuario
m0skit0
Administrador
Administrador
Mensajes: 5585
Registrado: 03 Sep 2009, 09:35
Ubicación: 0xdeadbeef

Re: [Curso] Introducción a la programación en C (V)

Mensaje por m0skit0 »

:oki:
Imagen

Avatar de Usuario
danmoran
Habitual
Habitual
Mensajes: 164
Registrado: 24 Sep 2010, 03:54
PSN ID: dan_moran
Ubicación: Ecuador

Re: [Curso] Introducción a la programación en C (V)

Mensaje por danmoran »

Aqui esta la tarea pero no la puedo compilar:
Es un calculador de Indice de Masa Corporal.

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
  char nombre;
  float altura_mt, peso_kg, constante;
  int imc;

    printf("Indice de Masa Corporal\n");
    printf("Por favor indique su nombre: \n");
    scanf("%s", &nombre);
    printf("Por favor indique su altura en metros:\n");
    scanf("%f", &altura_mt);
    constante = altura_mt * altura_mt;
    printf("Por favor indique su peso en kilogramos:\n");
    scanf("%f", &peso_kg);
    imc = peso_kg / constante;

    //Muy bajo peso = imc < 15
    //Bajo peso = imc > 16, imc < 19
    //Normal = imc > 20, imc < 24
    //Obesidad I = imc > 25, imc < 29
    //Obesidad II = imc > 30, imc < 34
    //Obesidad III = imc > 35, imc < 39

    printf("Espere un momento...\n");
    sleep(1);
    printf("El indice de masa corporal de %s es %d\n", &nombre, imc);

  if(imc < 15)
  {
    printf("Tienes desnutricion cronica.\n");
  }

  else if(imc > 16 && imc < 19 )
  {
    printf("Tienes desnutricion.\n");
  }

  else if(imc > 20 && imc < 24 )
  {
    printf("Tienes una buena nutricion dentro del rango normal.\n");
  }

  else if(imc > 25 && imc < 29 )
  {
    printf("Tienes Obesidad Grado I\n");
  }

  else if(imc > 30 && imc < 34 )
  {
    printf("Tienes Obesidad Grado II\n");
  }

  else if(imc > 35 && imc < 39 )
  {
    printf("Tienes Obesidad Grado III\n");
  }

  return 0;
}

Creo que ya funciona
Última edición por danmoran el 20 May 2011, 21:03, editado 5 veces en total.
Sí acabas de leer esto, es porque eres un maricon/gay jajajajja

Imagen

Avatar de Usuario
cripii5
Experto
Experto
Mensajes: 1948
Registrado: 14 Dic 2010, 03:15
Gamertag Xbox Live: cripii5
Steam ID: cripii5
Twitter: cripii5
Ubicación: Uruguay

Re: [Curso] Introducción a la programación en C (V)

Mensaje por cripii5 »

Que raro, yo si lo pude compilar... Pero aun asi no corre como deberia.

- Podes poner todos los int en una misma linea... (igual ponerlos en dos lineas no afecta)
- Por otra parte la formula de el indice de masa coporal que usas es incorrecto, la formula es:
Peso (Kilogramos) / Estatura (Metros) al cuadrado, vos la estatura la pedis en centimetros y la multiplicas por 2 cuando deberia ser en metros y multiplicada por si misma, al ser la estatura en metros se necesita una variable del tipo que use decimales...
- No usas else...

A simple vista fue lo que vi erroneo por ahora, no lo mire del todo y recorda que al igual que vos, yo tambien ando aprendiendo :lol: Cuando soluciones lo de compilarlos (que ya te dije q yo si pude :lol:) corrige eso que te dije por ahora, seguro otra falla tendras

Edito: ah y otra cosa muy importante que recien miro :lol:

Código: Seleccionar todo

   if(imc > 35, imc < 39 );
  {
   printf("Tienes Obesidad Grado III");
  }

Esta es tu condicion para decir que la persona tiene un grado de obesidad muy alto, pero fijate bien una cosa en tu if, si imc es mayor que 35, va a mostrar ese mensaje, hasta ahi bien, perfecto, pero si imc es menor que 39 tambien va a mostrar este mensaje, es decir si mi indice de masa corporal es 20 por ejemplo, me va a mostrar que tengo una obesidad grado III :lol:
Última edición por cripii5 el 19 May 2011, 22:23, editado 2 veces en total.
Yo

Avatar de Usuario
~Rdavid~
Experto
Experto
Mensajes: 965
Registrado: 12 Nov 2009, 17:29
Ubicación: Costa Rica

Re: [Curso] Introducción a la programación en C (V)

Mensaje por ~Rdavid~ »

@danielmg no debes poner ";" después de un if.
Imagen

Avatar de Usuario
danmoran
Habitual
Habitual
Mensajes: 164
Registrado: 24 Sep 2010, 03:54
PSN ID: dan_moran
Ubicación: Ecuador

Re: [Curso] Introducción a la programación en C (V)

Mensaje por danmoran »

cripii5 escribió:- Podes poner todos los int en una misma linea... (igual ponerlos en dos lineas no afecta)

Era un float y un int, pero hice un cambio rapido y no me di cuenta.
- Por otra parte la formula de el indice de masa coporal que usas es incorrecto, la formula es:
Peso (Kilogramos) / Estatura (Metros) al cuadrado, vos la estatura la pedis en centimetros y la multiplicas por 2 cuando deberia ser en metros y multiplicada por si misma, al ser la estatura en metros se necesita una variable del tipo que use decimales...

La puse mal perdon, pero la verdadera es esta, altura en metros al cuadrado, osea 1.72*1.72 y tu peso en kilogramos dividido, ejemplo: 65kg/(1.72mt*1.72mt)
- No usas else...

Ya lo voy a implementar espera, es que no sabia que era.
Lo compilare en Ubuntu.
Sí acabas de leer esto, es porque eres un maricon/gay jajajajja

Imagen

Avatar de Usuario
cripii5
Experto
Experto
Mensajes: 1948
Registrado: 14 Dic 2010, 03:15
Gamertag Xbox Live: cripii5
Steam ID: cripii5
Twitter: cripii5
Ubicación: Uruguay

Re: [Curso] Introducción a la programación en C (V)

Mensaje por cripii5 »

Daniel el ejercicio sigue mal :lol: lo ejecutaste?
Yo

Avatar de Usuario
danmoran
Habitual
Habitual
Mensajes: 164
Registrado: 24 Sep 2010, 03:54
PSN ID: dan_moran
Ubicación: Ecuador

Re: [Curso] Introducción a la programación en C (V)

Mensaje por danmoran »

cripii5 escribió:Daniel el ejercicio sigue mal :lol: lo ejecutaste?

Mira por si acaso
No tiene los permisos requeridos para ver los archivos adjuntos a este mensaje.
Sí acabas de leer esto, es porque eres un maricon/gay jajajajja

Imagen

Responder