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): #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 : 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? |
|
carlosmay |
» 2016-12-10 11:12:40 Funkcje, a słowo kluczowe returnŻ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. |
|
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) ? #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; }
|
|
mateczek |
» 2016-12-10 12:44:23 ja tu poprawek nie widzę !!! dalej funkcje nic nie zwracają !!! Poczytaj jakiś kurs o funkcjach, #include <iostream> double bmiCalc( int waga, int _wzrost ) { double wzrost = _wzrost; wzrost /= 100; 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; }
|
|
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(). |
|
mateczek |
» 2016-12-10 12:51:01 ja tam nie KRZYCZE tylko zwracam uwagę, że zupełnie olałeś pierwszą podpowiedź. |
|
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. |
|
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 ;) |
|
« 1 » 2 |