Lekcja 32
Przekształcenia typów w języku C++. Awansowanie, rzutowanie
Wprowadzenie
Zagadnienie, które Ci przedstawię w tej lekcji jest bardzo ważne. Tak naprawdę we wszystkich dotychczasowych programach musiałem starać się unikać sytuacji, w których nie następowałyby niezrozumiałe na pierwszy rzut oka przekształcenia.
Na szczęście, od następnej lekcji nie będę musiał już tego robić, bowiem mam nadzieję, że tutaj uda Ci się zrozumieć jak działają przekształcenia typów.
Problem
Przede wszystkim, aby uświadomić Ci jak ważne zagadnienie będziemy omawiać, przedstawiam poniżej program, który zawiera w sobie pułapkę i nie zadziała zgodnie z Twoimi początkowymi oczekiwaniami:
#include <iostream>
using namespace std;
int main()
{
int a=2, b=3, wynik1;
float wynik2;
cout <<"Iloraz liczb wynosi "<< 2/3 <<endl; // (1)
cout <<"Iloraz liczb wynosi "<< a/b <<endl; // (2)
wynik1=a/b; // (3)
cout <<"Iloraz liczb wynosi "<< wynik1 <<endl;
wynik2=a/b; // (4)
cout <<"Iloraz liczb wynosi "<< wynik2 <<endl;
cout <<endl<<"Nacisnij ENTER aby zakonczyc"<<endl;
getchar();
return 0;
}
program nr 32.1
Jak widać, celem naszego programu jest wypisanie ilorazu dwóch liczb, w tym przypadku konkretnie liczb 2 i 3. Niestety okazuje się, że nie jest to takie proste jak mogłoby się wydawać.
W metodzie pierwszej (oznaczonej komentarzem (1)) usiłujemy wypisać iloraz dwóch liczb bez korzystania ze zmiennych - niestety uzyskujemy wynik 0, który jest oczywiście dla nas niepoprawny.
Stwierdzamy - no dobrze, może lepiej skorzystać ze zmiennych (metoda 2), jednak znowu to samo - problem jak był, tak jest nadal.
Nawet jeśli przypisujemy wynik ilorazu do zmiennej typu int (metoda 3), okazuje się, że nic się nie zmieniło. Wynik jest niestety nadal niepoprawny.
W końcu wpadamy na wręcz genialny pomysł - skoro iloraz dwóch liczb całkowitych nie jest liczbą całkowitą, to przypiszemy wynik ilorazu do zmiennej typu zmiennopozycyjnego, w tym przypadku float (mogłoby być oczywiście również double lub long double). Jednak jak widać w metodzie czwartej, po raz kolejny nie uzyskujemy pożądanych efektów.
Jak zatem widzisz - program i zadanie do zrealizowania bardzo proste, bowiem chcemy po prostu wypisać iloraz dwóch liczb. Jak się jednak okazuje, zadanie to jest jak na razie dla nas za trudne.
Po tej lekcji takich problemów mieć już nie będziesz. Właśnie dlatego ta lekcja będzie tak ważna i lepiej skoncentruj się tak bardzo, jak to tylko możliwe.