Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: marchiali en 23 Julio 2014, 22:17 pm



Título: Ayuda con Algoritmo C++
Publicado por: marchiali en 23 Julio 2014, 22:17 pm
Hola a todos. soy estudiante de informatica y nuevo en esto de programar, y estoy necesitando ayuda con la resolucion de un ejercicio.

el ej. es el siguiente: utilice la definicion typedef struct{char ape_nom[40]; int edad; float altura,peso}paciente; para diseñar una funcion llamada masacorp55 que obtenga los datos del paciente mayor a 55 años de mayor valor de masa corporal. la funcion debe recibir entre sus parametros un arreglo con los datos de N pacientes. masa corporal= peso/altura^2. escriba un prog. cliente. que ingrese los datos de n pacientes y muestre los dtos de la persona de mayor masa corporal.

hasta ahora este es el algoritmo que pude programar:
Código
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. typedef struct{ char ape_nom[40];
  6. int edad; float altura, peso;} paciente;
  7.  
  8. paciente masacorp55(paciente x[], int n){
  9. float masa; float maxmas=1;
  10. for (int i=0; i<n; i++){
  11. if (x[i].edad>55){
  12. masa=x[i].peso/(x[i].altura*x[i].altura);
  13. if(masa>maxmas){
  14. maxmas=masa;
  15. x[i]=maxmas;
  16. }
  17. }
  18. }
  19. return x[i];
  20. }
  21.  
  22. int main(int argc, char *argv[]) {
  23. paciente A[1000]; int n;
  24. cout<<"ingrese num. de pacientes";
  25. cin>>n; int i;
  26. for (int i=0; i<n; i++){
  27. cout<<"nombre del paciente";
  28. cin.getline (A[i].ape_nom,40);
  29. cout<<"edad";
  30. cin>>A[i].edad;
  31. cout<<"altura";
  32. cin>>A[i].altura;
  33. cout<<"peso";
  34. cin>>A[i].peso;
  35. }
  36.  
  37. masacorp55(A[i],n);
  38. cout<<masacorp55;
  39.  
  40. return 0;
  41. }

pero me tira un error. no puedo asignar a A, maxmas ya que uno es un struct y el otro tipo float.  Que sugerencias y correcciones pueden aportarme?. gracias por su tiempo


Título: Re: Ayuda con Algoritmo C++
Publicado por: avesudra en 24 Julio 2014, 00:08 am
Hola, como dices no puedes asignar directamente un float a una estructura, pero es que no entiendo la lógica de tu programa, porque lo que debes devolver es la persona que tiene mayor masa corporal, entonces lo que tienes que hacer es que mientras vas calculando:

- Si la persona i tiene una masa corporal x
- Si la persona i+1 tiene una masa corporal y mayor que x , entonces la masa corporal máxima para esas dos personas es y. Y el índice de la estructura es i+1. Por tanto:

Código
  1. paciente masacorp55(paciente x[], int n)
  2. {
  3.    float masa;
  4.    float maxmas=1;
  5.    int indicePacienteMaxMasa = 0;
  6.    for (int i=0; i<n; i++)
  7.    {
  8.        if (x[i].edad>55)
  9.        {
  10.            masa=x[i].peso/(x[i].altura*x[i].altura);
  11.            if(masa>maxmas)
  12.            {
  13.                maxmas=masa;
  14.                indicePacienteMaxMasa = i; //Para ver quien es de la estructura y retornar ese
  15.            }
  16.        }
  17.    }
  18.    return x[indicePacienteMaxMasa];
  19. }
Aun así hay errores en tu código, como que no puedes poner un cout con una estructura. Y que no puedes devolver un puntero a la estructura paciente en esa función(por lo de return x) si has definido que se retornaría una estructura paciente.

Saludos.


Título: Re: Ayuda con Algoritmo C++
Publicado por: Blaster en 24 Julio 2014, 00:35 am
Aun así hay errores en tu código, como que no puedes poner un cout con una estructura.

Para acceder a los miembros de la estructura devuelta por la función, puede hacerlo de esta forma:

Código
  1. cout << masacorp55(A, n).ape_nom << endl;

Edito:

Para imprimir todos los datos del paciente con mayor masa corporal:

Código
  1. paciente datos =  masacorp55(A, n);
  2.  
  3.    cout << datos.ape_nom << endl;
  4.    cout << datos.edad << endl;
  5.    cout << datos.altura << endl;
  6.    cout << datos.peso << endl;

Saludos


Título: Re: Ayuda con Algoritmo C++
Publicado por: marchiali en 24 Julio 2014, 00:57 am
muuchas gracias por la ayuda me solucionaron las dudas.