Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Body Mass Index w funkcjach

Ostatnio zmodyfikowano 2016-12-10 16:22
Autor Wiadomość
wokub
Temat założony przez niniejszego użytkownika
Body Mass Index w funkcjach
» 2016-12-10 02:23:05
Witam. Mam jedno zadanie i napotkałem się już z tyloma problemami, że muszę spytać, czy wgl idę w dobrym kierunku. W skrócie, mam stworzyć program liczący BMI, z tym, że muszę stworzyć funkcje o danych parametrach:

readHeight() pobiera wzrost w int, readMass() pobiera masę w int, BMI() liczy BMI i zwraca jako float oraz BMIPrint który wypisze dany komentarz dot. BMI.
Jest jeszcze dopisek, że program ma uruchomić się po wywołaniu kodu BMIprint(BMI(readHeight(),readMass())).
Oto mój kod (póki co):
C/C++
#include <iostream>
#include <stdio.h>

void readHeight( int wzrost )
{
    return wzrost;
}
void readWeight( int waga )
{
    return waga;
}

void BMI( int waga, int wzrost )
{
    return waga / wzrost * wzrost;
}

void BMIPrint( float BMI )
{
    return BMI;
    if( BMI < 18 )
         return std::cout << " Masz niedowagę " << std::endl;
   
    if( BMI > 18 && BMI < 25 )
         return std::cout << " Waga prawidłowa " << std::endl;
   
    if( BMI > 25 )
         return std::cout << " Masz nadwagę " << std::endl;
   
}

int main()
{
    int wzrost;
    int waga;
    float BMI;
   
    std::cout << " Podaj wzrost: " << std::endl;
    std::cin >> wzrost;
    std::cout << " Podałeś liczbę : " << wzrost << std::endl;
   
    std::cout << " Podaj wagę: " << std::endl;
    std::cin >> waga;
    std::cout << " Podałeś liczbę : " << waga << std::endl;
   
    BMI = BMI( waga, wzrost )
    std::cout << " BMI : " << std::endl;
   
   
   
    std::cin.get();
    return 0;
}

Czy jest tak tragicznie jak mi się zdaje? O ile program napisałbym w 3 minuty, o tyle pisanie funkcji to nowość, a od niedawna są one ,,obowiązkowe".
Wgl. jest możliwość napisania czegoś w stylu :

C/C++
void readHeight()
{
    std::cout << " Podaj wzrost " << std::endl;
    std::cin >> wzrost;
    return wzrost;
}

czy te cout i cin musi być poza funkcją w int mainie?
P-154715
carlosmay
» 2016-12-10 11:12:40
» Kurs C++ » Poziom 2Funkcje, a słowo kluczowe return lekcja
Żeby zwrócić wartość z funkcji, należy zmienić typ zwracanych wartości z funkcji z
void
 na żądany.

edit:
return waga / wzrost * wzrost;
Tutaj musisz użyć castowania na
float
, ponieważ podzielenie dwóch liczb całkowitych da wynik całkowity.
P-154721
wokub
Temat założony przez niniejszego użytkownika
» 2016-12-10 11:48:37
Czyli po kilku poprawkach, czego mi tutaj brakuje w funkcjach (pomijając fakt, że castowanie na float raczej mi nie wyszło) ?

C/C++
#include <iostream>
#include <stdio.h>

void readHeight( int wzrost )
{
    std::cout << "Podaj wzrost" << std::endl;
    cin >> wzrost;
}
void readMass( int waga )
{
    std::cout << "Podaj wage" << std::endl;
    cin >> waga;
}
void BMI( int waga, int wzrost )
{
    std::cout << "Twoje BMI to:" << std::endl;
    return float( waga ) /( wzrost * wzrost );
}
void BMIPrint( float BMI )
{
    if( BMI < 18 )
    {
        std::cout << "Masz niedowagę." << std::endl;
        return;
    }
    if( BMI > 18 && BMI < 25 )
    {
        std::cout << "Waga prawidłowa." << std::endl;
        return;
    } while( BMI > 25 );
   
    std::cout << "Masz nadwagę." << std::endl;
}
P-154722
mateczek
» 2016-12-10 12:44:23
ja tu poprawek nie widzę !!!
dalej funkcje nic nie zwracają !!! Poczytaj jakiś kurs o funkcjach,
C/C++
#include <iostream>
double bmiCalc( int waga, int _wzrost )
{
    double wzrost = _wzrost;
    wzrost /= 100; // w metrach
    return double( waga ) /( wzrost * wzrost );
}
void BMIPrint( double BMI )
{
   
    std::cout << "Twoje BMI to: " << BMI << std::endl;
    if( BMI < 18 )
    {
        std::cout << "Masz niedowagę." << std::endl;
        return;
    }
    if( BMI > 18 && BMI < 25 )
    {
        std::cout << "Waga prawidłowa." << std::endl;
        return;
    }
    std::cout << "Masz nadwagę." << std::endl;
}

int main()
{
    int wzrost;
    int waga;
    double BMI;
   
    std::cout << " Podaj wzrost: " << std::endl;
    std::cin >> wzrost;
    std::cout << " Podałeś liczbę : " << wzrost << std::endl;
   
    std::cout << " Podaj wagę: " << std::endl;
    std::cin >> waga;
    std::cout << " Podałeś liczbę : " << waga << std::endl;
   
    BMI = bmiCalc( waga, wzrost );
    BMIPrint( BMI );
   
   
    std::cin.get();
    return 0;
}
P-154724
wokub
Temat założony przez niniejszego użytkownika
» 2016-12-10 12:48:00
Wiem, że te funkcje póki co idą mi dosyć opornie, ale nie musisz krzyczeć :D Czy będzie jakiś problem, jak zamiast double, użyję w tym zadaniu float? Niestety jest to wymagane. No i dodatkowo te std::cin musi być w funkcji readHeight(),readMass().
P-154725
mateczek
» 2016-12-10 12:51:01
ja tam nie KRZYCZE tylko zwracam uwagę, że zupełnie olałeś pierwszą podpowiedź.
P-154726
wokub
Temat założony przez niniejszego użytkownika
» 2016-12-10 12:52:57
Wystarczy porównać mój kod w pierwszym poście i ten po ,,poprawkach". Co jak co, ale ja tam widzę różnicę. Dodatkowo umieściłem tylko funkcje do wglądu, nie cały kod.
P-154727
mateczek
» 2016-12-10 12:57:48
spoko. W każdym bądź razie funkcje dalej nic nie zwracają.
Żeby zwrócić wartość z funkcji, należy zmienić typ zwracanych wartości z funkcji z void
 na żądany.

A poza tym: funkcja miała tą samą nazwę co zmienna, Do tego wzór na bmi wymaga wzrostu w metrach, Dodałeś jakieś pętlę "while" tylko nie wiem w jakim celu(ogólnie to zawiesza program ). A info o wyliczonym BMI dodałeś zanim jescze je policzyłeś. Więc mówiąc, że nie widzę zmian. Miałem na myśli zmiany rozwiązujące problemy a nie te dokładające kolejne ;)
P-154728
« 1 » 2
  Strona 1 z 2 Następna strona