Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

pytanie odnośnie przykładu o funkcjach inline Symfonia c++ standard Jerzego Grębosza

Ostatnio zmodyfikowano 2016-08-10 19:55
Autor Wiadomość
latajacaryba
Temat założony przez niniejszego użytkownika
pytanie odnośnie przykładu o funkcjach inline Symfonia c++ standard Jerzego Grębosza
» 2016-08-10 01:10:16
Witam.
Czytam książkę Jerzego Grębosza "Symfonia C++ Standard". Jest tam pewien przykład
C/C++
int zao( double liczba )
{
    return( liczba + 0.5 );
}
Wszystko jasne, funkcja, podajemy liczbę z przecinkiem, do tego dodaje się 0,5 a wynik zwracamy jako int. Przykład z książki:
6.8+0.5=7,3 (funkcja int więc obcinamy .3) -> 7
6.2+0.5=6.7  -> 6
Wszystko jasne. Teraz autor pokazał, że albo posługujemy się funkcją i podał taki kod:
C/C++
I = zao( m ) + zao( n * 16.7 ); // dop. ja. rozumiem, że n*16.7 to wyrażenie i jest jednym argumentem?
albo:
[ cpp ]
I =( int )( m + 0.5 ) +( int )(( n * 16.7 ) + 0.5 )
i tu jest moje pytanie. Co ma oznaczać to int w nawiasie? Czy int oznacza wyrażenie m+0.5 ?

PS. Nie miałem pojęcia jak inaczej nazwać temat.
PPS. Temat założyłem, żeby się upewnić w moich założeniach, wole napisać niż źle zapamiętać.

Z góry dziękuję za odpowiedzi.
P-150699
Piastlis
» 2016-08-10 03:28:39
To (int) zamienia ci liczbę rzeczywistą na int.
P-150700
karambaHZP
» 2016-08-10 05:39:44
W C++ stosuj
static_cast < typ >( argument )
P-150702
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-08-10 17:15:38
Piastlis
nie rozumiem, int to typ danych który przechowuje liczby rzeczywiste
Ale co do kodu to napisałem program na jego podstawie
C/C++
#include <iostream>
using namespace std;
int main()
{
    int I;
    double m = 6.4, n = 2.6;
    //linijka z ksiazki ponizej
    I =( int )( m + 0.5 ) +( int )(( n * 16.7 ) + 0.5 );
    //koniec linijki z ksiazki
    cout << I;
}
Program oblicza "I" i wypisuje je na ekran.
Wynik wynosił 49
Ale kiedy usunąłem drugie int w nawiasie:
I =( int )( m + 0.5 ) + /*tu było (int)*/(( n * 16.7 ) + 0.5 );
wynik wyszedł 50
Kiedy usuniemy pierwsze int w nawiasie to nic się nie zmienia i wynik nadal wynosi 49. tylko po usunięciu
drugiego int w nawiasie zmienia wynik na 50.
Help...
P-150710
Piastlis
» 2016-08-10 18:50:18
Wszystko po kolei...Liczby komp zapisuje na różne sposoby.Pierwszy to taki jaki znasz z kalkulatora... jakaś liczba...kropka i druga która jest ułamkiem.Potem literka i liczba która określa rząd wielkości.Taki typ to tzw typ rzeczywisty( float,double,long double).Drugi typ to typ wyliczeniowy.Tutaj nie ma ułamków ,istnieją tylko liczby całkowite (char,int,long,long long).C i C++ pozwalają na mieszanie  tych typów w wyrażeniach .To o co się pytasz to tzw "rzutowanie"...Inaczej mówiąc "przetłumaczenie" lub "zinterpretowanie" zmiennej jednego typu na inny....Jak zaczynasz uczyć się programowania to daj sobie spokój z tym tematem.Wrócisz do niego gdy będzie ci do czegoś takie działanie niezbędne..
P-150715
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-08-10 19:05:03
Czy masz na myśli rzutowanie operatorami static_cast itd? Bo jeśli tak, to przecież ich składnia to
m = static_cast < int >( y )
a nie (int)?
P-150716
latajacaryba
Temat założony przez niniejszego użytkownika
» 2016-08-10 19:13:00
ohh... to rzutowanie według tych starych sposobów?
(nazwa_innego_typu)wyrażenie
Czy o to chodzi?

Na marginesie nie wiem dlaczego autor użył tego skoro uważał to za "nie zalecane"
P-150717
Piastlis
» 2016-08-10 19:27:08
"Rzutowanie" to szersze pojęcie.Możesz np. potraktować liczbę rzeczywistą jakby była tablicą char,int lub long.Co do składni..(int) jest częścią C.C++ pozwala na tworzenie własnych operatorów rzutowania.Tak logicznie to (int)(y) i  static_cast<int>(y) to dokładnie to samo.  
P-150718
« 1 » 2
  Strona 1 z 2 Następna strona