[c++] bmi

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:

Ż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?

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

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ń.

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;