Problem z liczeniem wartosci <0

0

Witam Mam zrobiony program konwerter jednostek w C++. Po wybraniu interesującej nas jednostki i wpisaniu jej wartosci program przelicza pozostale jednostki z danej kategorii.
np długosc
podajemy interesujaca nas wartosc 1m
program przelicza ja na:
mm
cm
dm
km

Problem pojawia sie gry np liczymy temperature:
wybieramy stopnie K
program zamiast policzyc stopnie C na - liczy jakąs dziwną wartosc.

Czy kto mógłby przejzec moj kod i ewentualnie naprawic to tak aby liczył poprawnie wartosci gdy te wychodzą faktycznie na -

0

.

0

Przeliczanie na Kelviny nie działa Ci poprawnie, bo nie zapoznałeś się z tym, jak ta jednostka ma się do stopni Celsjusza. Cytat za Wiki:

Temperatura 0 K jest równa temperaturze −273,15°C. Ponieważ skala Kelvina oparta jest na skali Celsjusza i różnica temperatury jest w obu przypadkach ta sama, temperaturę w kelwinach otrzymujemy przez dodanie do liczby wyrażonej w stopniach Celsjusza stałej 273,15:

Więc przy tej konwersji nie powinieneś mieć tu żadnego dzielenia, tylko dodawanie.

0

I jeszcze jedna sprawa - jeśli uczysz się C++, to staraj się unikać pisania w stylu C. W większości przypadków zamiast zwykłych tablic lepiej sprawdzi się std::vector. Wtedy zamiast pisać:

pair<string, double> convTemp[] = {{"stopni C ", 1}, {"stopni F", 33.8 }, {"stopni K", 274.15}};
// (...)
for(int i = 0; i < sizeof(convTemp)/sizeof(convTemp[0]); i++){

możesz napisać to znacznie ładniej:

vector<pair<string, double> > convTemp = {{"stopni C ", 1}, {"stopni F", 33.8 }, {"stopni K", 274.15}};
// (...)
for(int i = 0; i < convTemp.size(); i++)

Strzeż się też duplikowania kodu i spróbuj pomyśleć jak pozbyć się tego brzydkiego zestawu else-ifów w mainie. Zauważ, że kojarząc np. tekst "masa" z convMass, zaś string "odległość" z convDistance oraz robią listę wszystkich możliwych "dziedzin" przeliczania tak naprawdę możesz wygenerować to całe menu w sposób bardziej automatyczny.

3

Trzeba się też nauczyć myśleć bardziej abstrakcyjnie.
Przeliczanie tych jednostek można uogólnić, do transformacji liniowej.
Wówczas dodawanie innych jednostek, to tylko kwestia wprowadzenia danych, a nie pisania kodu.
Takie dane można pobrać z poza programu (z pliku sieci itp).

Przykład: https://wandbox.org/permlink/nAzTqnFBjMfnfE1x

0

Drodzy Państwo proszę was. Niech chociaż jeden z szanownych tutaj Panów/Pań poprawi mi ten program. Bardzo was proszę.

0

Ustal stałą na zero absolutne i dodawaj do tej wartości kelwiny. Gotowe. ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1