[c++] bmi


(Ziomek Zemsty) #1

Witam!

Postanowiłem napisać program wyliczający współczynnik BMI. Najpierw program prosi o podanie wzrostu w stopach i calach. Następnie ten wzrost zamienia na cale, a potem na metry. Kolejnym krokiem jest podanie wagi w funtach i zamiana jej na kilogramy. Wszystkie dane potrzebne do konwersji zapisane są w stałych symbolicznych. Ostatnim krokiem jest wyliczenie BMI, czyli podzielenie wagi w kilogramach przez kwadrat wzrostu w metrach. Oto mój potwornie zagmatwany kod:

#include 

#include 

using namespace std;

double wzrost(double);

double waga(double);

double BMI;

const double cal_metr = 0.0254;

const double funt_kg = 2.2;


int main()

{

	int stopa;

	cout << "Ile mierzysz stop? " << endl;

	cin >> stopa;


	int cal;

	cout << "Ile oprocz stop mierzysz jeszcze cali? " << endl;

	cin >> cal;


	int cale = stopa * 12;

	int wzr = cale + cal;


	int f;

	cout << "Podaj swoja wage w funtach: " << endl;

	cin >> f;


	double BMI;

	cout << "Twoje BMI wynosi: " << BMI << endl;


	cin.sync();

	cin.get();

	return 0;

}

double wzrost(double wzr)

{

	return wzr * cal_metr;

}

double waga(double f)

{

	return f / funt_kg;

}

double BMI

{

	return waga / pow wzrost;

}

Jednak jak to już przeważnie bywa, jest tu błąd:

1>------ Build started: Project: main, Configuration: Debug Win32 ------

1> BMI.cpp

1>c:\documents and settings\przereklamowany\pulpit\c++\main\main\bmi.cpp(43): error C2470: 'BMI' : looks like a function definition, but there is no parameter list; skipping apparent body

========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

Pojawił mi się on po raz pierwszy i nie mam pojęcia, co z nim zrobić. Na 99% jestem pewny, że chodzi coś o zmienne. :expressionless:


(Razi) #2

Że też ostrzeżeń nie dał...

Co do błędu, to pokazuje że jest tu:

double BMI

{

   return waga / pow wzrost;

}

Co miałeś na myśli? Funkcja to to nie jest, bo brak nawiasów(), waga i wzrost skąd ma wziąć? Kompilator GCC wywala:

test.cpp: In function ‘int main()’:

test.cpp:21:8: warning: unused variable ‘wzr’

test.cpp: At global scope:

test.cpp:42:8: error: redefinition of ‘double BMI’

test.cpp:6:8: error: ‘double BMI’ previously declared here

test.cpp:42:8: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x

test.cpp:44:4: error: expected primary-expression before ‘return’

test.cpp:44:4: error: expected ‘}’ before ‘return’

test.cpp:45:1: error: expected declaration before ‘}’ token

Czyli: - nieużyta zmienna wzr z linii 21 - W sekcji globalnej: redefinicja zmiennej double BMI (linia 42) błąd: BMI zadeklarowane wcześniej tu (linia 6) - brak wyrażenia przed return (nieprawidłowa konstrukcja funkcji) Jeszcze to by mógł zgłosić:

double BMI;

   cout << "Twoje BMI wynosi: " << BMI << endl;

Ile w momencie wypisywania wynosi zmienna BMI, skoro linijka wcześniej została zadeklarowana?


(Barry06) #3

Kolego, skoro uczysz się ze "Szkoły Programowania C++" Stephena Praty to racz ją przeczytać, a przynajmniej jej pierwsze 7-8 rozdziałów

Twój błąd bardzo dokładnie wytknął kompilator: "BMI w 43 linijce wygląda jak definicja funkcji, ale nie ma listy parametrów"

Zapewne chciałeś utworzyć funkcję bez parametrów, ale powinna ona wyglądać tak : double BMI();

Pisząc double BMI; tworzysz zmienną typu double zamiast funkcji


(Ziomek Zemsty) #4

No trudno. Staram się robić te ćwiczenia programistyczne na bieżąco, ale chyba na razie sobie odpuszczę. Mam jeszcze tylko takie jedno pytanie. Jak zrobić, żeby tekst wyświetlany był podkreślony/pogrubiony/itp. Mam na myśli oczywiście aplikacje uruchamiane z wiersza poleceń.


(Drobok) #5

attroff z ncurses

Co do tematu, rób ćwiczenia na bieżąco. Bierz pod uwagę, iż zmienną musisz zadeklarować przed pierwszym jej użyciem, tak samo funkcje ;]

Czyli jeśli masz funkcję napisz, to nim chcesz jej użyć musisz ją zadeklarować. A ty deklarujesz zmienną, potem z niej korzystasz a na końcu piszesz zawartość funkcji.

Btw w nazwach zmiennych nie wolno korzystać z spacji:

return waga / pow wzrost;