Ĺadny brzuch
Mam do napisania program, ktory bedzie przeliczal stopnie Celcjusza na Farenhaity:
#include <iostream> #include <conio.h> int main() { int cel; int fer; std::cout << "Podaj temperature Celcjusza: "; std::cin >> cel; fer = ((9/5) * (cel)) + 32; std::cout << cel << " stopni Celcjusza to: " << fer << " stopni Farenhaita"; getch(); }
wzor na obliczenie Farenhaitow to : 32 + 9/5 (czyli dziewiec piatych) * Temp.Celcjusza. I jak podam np 25 to powinno wyjsc 77 a mi wychodzi 57;/.Co musi byc zle z tym kawalkiem kodu:
fer = ((9/5) * (cel)) + 32;
Nigdy sie z takim czyms nie spotkalem ale wystarczy napisac takiego cos 9.0/5.0 reszta wzoru i calosc wychodzi dobrze:) hmm ale zastanawia mnie czemu nie moze byc samo 9 a musi byc 9.0
Użytkownik godzio89 edytował ten post 26 kwiecień 2007, 16:23
Bo 9/5=1, a 9.0/5.0=1.8 :)
Mógłbyś też zapisać to tak:
fer = (9 * cel / 5) + 32;
i pewnie też było by dobrze... //ed: i w dodatku bez float'a!
Chodzi o to, że domyślnie stałe (czyli np 9) są całkowitoliczbowe (bez przecinka) i taki jest też wynik, natomiast 9.0 jest "ułamkiem" więc wynik też jest ułamkiem :) ...
Użytkownik Radek edytował ten post 27 kwiecień 2007, 07:58
ponieważ samo 9 kompilator utożsamia z typem int dzielenie dwuch liczb typu int jest całkowito liczbowe czyli ułamek jest "odcinany" ...
żeby sie tego pozbyc musisz napisac .0 lub f lub rzutowac liczbe na typ zmienno przecinkowy
Problem nie tkwi w liczbie 9 lecz w deklaracji zmiennej fer. W takim przypadku zawsze obliczenia będą prowadzone na liczbach całkowitych.
wlasnie nigdy nie wiem kiedy uzyc int,float,double...
wlasnie nigdy nie wiem kiedy uzyc int,float,double...
int to liczby calkowite, float to zmiennoprzecinkowe (ulamki itd.). i stan24 nie ma racji, bo przy napisaniu tak jak podali poprzednicy 5.0 obliczenia wykonaja sie na liczbach zmiennoprzecinkowych, po czym nastapi zaokraglenie do czesci calkowitej (czyli tak jak pewnie chcesz). dokladnie jest to opisane tutaj http://ithelpdesk.pl...rzutowanie.html
Użytkownik Deadeye edytował ten post 26 kwiecień 2007, 21:11
istonie sry
Apropo przeliczania znam lepszą metodę :D
Cel na Fah --> Do temp cel dodaj 40, wynik pomnórz przez 1,8 i od tego wyniku odejmij 40
Fah na Cel --> Do temp fah dodaj 40, wynik podziel przez 1,8 i od tego wyniku odejmij 40
Zawsze działa i łatwiej liczyć ;)
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
#include <iostream> #include <conio.h> int main() { int cel; int fer; std::cout << "Podaj temperature Celcjusza: "; std::cin >> cel; fer = ((9/5) * (cel)) + 32; std::cout << cel << " stopni Celcjusza to: " << fer << " stopni Farenhaita"; getch(); }
wzor na obliczenie Farenhaitow to : 32 + 9/5 (czyli dziewiec piatych) * Temp.Celcjusza. I jak podam np 25 to powinno wyjsc 77 a mi wychodzi 57;/.Co musi byc zle z tym kawalkiem kodu:
fer = ((9/5) * (cel)) + 32;
Nigdy sie z takim czyms nie spotkalem ale wystarczy napisac takiego cos 9.0/5.0 reszta wzoru i calosc wychodzi dobrze:) hmm ale zastanawia mnie czemu nie moze byc samo 9 a musi byc 9.0
Użytkownik godzio89 edytował ten post 26 kwiecień 2007, 16:23
Bo 9/5=1, a 9.0/5.0=1.8 :)
Mógłbyś też zapisać to tak:
fer = (9 * cel / 5) + 32;
i pewnie też było by dobrze... //ed: i w dodatku bez float'a!
Chodzi o to, że domyślnie stałe (czyli np 9) są całkowitoliczbowe (bez przecinka) i taki jest też wynik, natomiast 9.0 jest "ułamkiem" więc wynik też jest ułamkiem :) ...
Użytkownik Radek edytował ten post 27 kwiecień 2007, 07:58
ponieważ samo 9 kompilator utożsamia z typem int dzielenie dwuch liczb typu int jest całkowito liczbowe czyli ułamek jest "odcinany" ...
żeby sie tego pozbyc musisz napisac .0 lub f lub rzutowac liczbe na typ zmienno przecinkowy
Problem nie tkwi w liczbie 9 lecz w deklaracji zmiennej fer. W takim przypadku zawsze obliczenia będą prowadzone na liczbach całkowitych.
wlasnie nigdy nie wiem kiedy uzyc int,float,double...
wlasnie nigdy nie wiem kiedy uzyc int,float,double...
int to liczby calkowite, float to zmiennoprzecinkowe (ulamki itd.). i stan24 nie ma racji, bo przy napisaniu tak jak podali poprzednicy 5.0 obliczenia wykonaja sie na liczbach zmiennoprzecinkowych, po czym nastapi zaokraglenie do czesci calkowitej (czyli tak jak pewnie chcesz). dokladnie jest to opisane tutaj http://ithelpdesk.pl...rzutowanie.html
Użytkownik Deadeye edytował ten post 26 kwiecień 2007, 21:11
istonie sry
Apropo przeliczania znam lepszą metodę :D
Cel na Fah --> Do temp cel dodaj 40, wynik pomnórz przez 1,8 i od tego wyniku odejmij 40
Fah na Cel --> Do temp fah dodaj 40, wynik podziel przez 1,8 i od tego wyniku odejmij 40
Zawsze działa i łatwiej liczyć ;)