[C++] Długość geograficzna

Witam!

Napisałem program proszący o podanie długości geograficznej w stopniach, minutach i sekundach, a następnie zamieniający te wartości na wartość dziesiętną, np.: 37 stopni, 51 minut, 19 sekund = 37.8553 stopni.

Wszystko jest ok, błędów nie wywala, tylko wynik pokazuje 0. Co mam zmienić, żeby zadziałało?

#include 

int sekundy;

double DlugoscGeograficzna;

const int minuty = sekundy * 60;

const int stopnie = minuty * 60;

int main()

{

	using namespace std;

	cout << "Podaj dlugosc w stopniach, minutach i sekundach.\n";

	int st(stopnie);

	cout << "Najpierw podaj stopnie: \n";

	cin >> st;

	int min(minuty);

	cout << "Nastepnie minuty: \n";

	cin >> min;

	int sek(sekundy);

	cout << "I jeszcze sekundy: \n";

	cin >> sek;

	double dlgeo(DlugoscGeograficzna);

	cout << st << " stopni, " << min << " minut i " << sek << " sekund = " << dlgeo << " stopni";

	cin.sync();

	cin.get();

	return 0;

}

double dlgeo()

{

	return stopnie + minuty + sekundy;

}

Błędny jest już ten fragment

int sekundy;

double DlugoscGeograficzna;

const int minuty = sekundy * 60;

const int stopnie = minuty * 60;

Do zmiennych minuty i stopnie przypisujesz wartość zależną od niezainicjalizowanej zmiennej sekundy. Ponadto nie wywołujesz w ogóle funkcji, którą napisałeś.

no ok, czyli co mam zmienić? Jak wstawię na początku int minuty; i int stopnie; to wystarczy?

Musisz im przypisać jakąś wartość.

int st(stopnie);

Jaki cel to miało? To jest bardziej predeklaracja funkcji, nie stosuje się raczej takiej konstrukcji przy inicjalizacji zmiennej “prostej”.

Poza tym do const powinieneś dawać stałe liczby, a nie je dopiero obliczać, w dodatku ze zmiennych, które nie są const.

W ogóle program jest skonstruowany dziwnie.

A nie działa ponieważ:

int sekundy;

Zmienne inicjowane globalnie mają na starcie wartość 0. Więc: program startuje i sekundy=0.

const int minuty = sekundy * 60;

const int stopnie = minuty * 60;

minuty=0*60=0; stopnie=0*60=0; Szczegół, że to stałe const, więc nie powinny być tak liczone.

double DlugoscGeograficzna;

Patrzy przykład pierwszy, DlugoscGeograficzna jest równa zero, bo zainicjowałeś ją globalnie.

int st(stopnie);

   int min(minuty);

   int sek(sekundy);

   double dlgeo(DlugoscGeograficzna);

Tego typu zapis pierwszy raz widzę w tak trywialnym programie, ale rozumiem, że tworzysz tu zmienne st,sek,min i dlgeo, którym nadajesz wartość tych zmiennych/stałych z nawiasów. Czyli 0. Zwłaszcza

dlgeo=0

Potem je kolejno wczytujesz operatorem cin - niech będzie. Na koniec wyświetlasz co pobrałeś i potem wyświetlasz

cout << dlgeo

Stworzyłeś zmienną chwilę wcześniej, nadałeś jej wartość 0 i wyświetliłeś. Wszystko działa, ale nie tak jak chciałeś, bo zrobiłeś to źle. Z jakiego podręcznika się uczysz? Jaki by niebył musisz dokładnie przeczytać lekcję o funkcjach i deklarowaniu/definiowaniu/inicjowaniu zmiennych. Na koniec

double dlgeo()

{

   return stopnie + minuty + sekundy;

}

Całkowicie nie masz pojęcia do czego służą funkcje i jak ich używać. Nawet gdybyś tę funkcję poprawnie wywołał (wcześniej musiałbyć jej deklarację umieścić przed main() ), to zwróciła by ci 0+0+0, czyli zero. Poprawna funkcja, najbardziej trywialna, mogłaby wyglądać tak:

double zamiana_na_stopnie(double arg_stopnie, double arg_minuty, double arg_sekundy)

{

double wynik_tymczasowy_sekundy=(arg_stopnie*60*60)+(arg_minuty*60)+(arg_sekundy);

double wynik_ostateczny_stopnie=wynik_tymczasowy_sekundy/(60.0*60.0);

return wynik_ostateczny_stopnie

}

Dla wywołania zamiana_na_stopnie(37, 51,19) zwraca śliczne 37.8553.

Ok, spróbuję jeszcze raz. Rozdział o funkcjach czytam już chyba trzeci raz i dalej go nie kapuję. Pomęczę się i może coś wymyślę.