duda

Iniciado por javieer, 8 Marzo 2018, 11:48 AM

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

javieer

Hola,

estoy iniciandome en programación, mi duda es la siguiente: modificando un ejercicio en C para intentar que me calcule el IMC pero no se porque me da error, adjunto la imagen

gracias a todos!

http://s2.subirimagenes.com/privadas/previo/thump_2433259duda.jpg

nonokario

Muy chiquita la imagen. No llego a leer nada!

srWhiteSkull

#2


Me imagino que has definido una estructura y has asignado una operación dentro a un miembro de dicha estructura. Eso no se hace así. Si quieres asignar una operación debes hacerla fuera de la estructura tomando el miembro que te interese, en este caso IMC. Ejemplo:

struct MiEstructura ms;

ms.IMS=5.1;

MAFUS

A ver:
Dentro de una estructura no se puede poner código. Ahí intentas que IMC sea calculado por una operación matemática pero eso debes hacerlo en otro sitio.
Y aunque fuera C++, que sí permite código éste debe encapsulado en un método, no se puede escribir directamente.
Siendo coherentes con el código deberías eliminar todo lo referente al IMC de la estructura ya que si dejas allí la variable en cualquier momento se podría cambiar falseando el dato.

Haz una función que reciba la estructura, calcule la IMC a partir de sus datos y lo devuelva.

De todas formas veo algo raro con las funciones PrintPatient#(tPatient p#);
¿Las funciones hacen cosas diferentes? ya que tPatient, tPatient2 y tPatient3 son el mismo tipo de dato ¿porqué hay 3? Una cosa es el tipo de dato y la otra las variables.
Si las funciones PrintPatient# son todas iguales te basta que exista solo una y le vayas pasando las diferentes variables de los pacientes. Algo así:


tPatient p1, p2, p3;

// Cargas los datos de p1, p2 y p3

PrintPatient(p1);
PrintPatient(p2);
PrintPatient(p3);

javieer

gracias a los dos por contestar!! ahora tengo algo asi pero me da error, perdonad pero soy noob :huh: :

srWhiteSkull

No hombre, estás muy verde, mira este ejemplo e intenta asimilarlo :

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

// En este ambito se hacen las declaraciones GLOBALES
typedef struct ms {
    float IMC;
} loquesea;
/*
*
*/
int main(int argc, char** argv) { // Ambito funcion (aqui se ponen las operaciones)
    struct ms m; // declaramos nuestra estructura m de tipo ms LOCALMENTE
    m.IMC=1.0;
   
    printf("%f",m.IMC);
    system("PAUSE");
    return (EXIT_SUCCESS);
}


Lo ideal es que busques una guía de C para continuar,
https://es.wikibooks.org/wiki/Programaci%C3%B3n_en_C/Estructuras_y_Uniones

MAFUS

Como te decía, la estructura no debe guardar el IMC, lo debes sacar de forma que no se pueda modificar, y eso es con una función.

Algo así:

float get_IMC(tPatient p) {
    return weight/(height*height);
}


Cada vez que en el código debas obtener el IMC de alguien usas la función.

¿Por qué? Imagínate que IMC se guarda en la estructura y la calculas:
p.IMC = p.wheight/(height*height);

Ahora tienes en p.IMC el índice de masa corporal, pero eso no evita que en cualquier otro punto del programa se haga
p.IMC = 25;

A partir de este momento el IMC será 25 porqué sí y no el resultado del cálculo.

javieer

gracias!, creo que algo aunque sea muy poco voy pillando.. jeje ahora estoy intentando hacer la media del peso de tres pacientes, mi idea es declarar una cariable tipo entero y almacenar weight.p1, weight.p2 y weight.p3 no se como hacelo lo que tengo en la cabeza es:

float totalweight = (weight.p1+weight.p2+weight.p3)/3 pero al hacerlo siempre me dice que no estan declaradas las variables, perdonad por las gilipolleces que digo pero es que acabo de empezar  :xD

MAFUS

Es al revés p1.wheight. Primero va la variable de tipo estructura (que es quien engloba) y después su variable interna.

javieer

gracias me habia equivocado al escribirlo, ahora ya he conseguido que me funcione el programa ahora tengo un switch case que me indica que un paciente es fumador o no lo es, o si es hombre o mujer pero tengo que mostrar las pacientes que sean mujer y fumadoras como hago para unir esas dos variables?