[ Pobierz całość w formacie PDF ]

przechowywać tylko 232 (18 446 744 073 709 551 616) możliwych wartości? Taka liczba ma
mnóstwo zer, ale nie jest ich 308.
No właśnie! W rzeczywistości typ double może reprezentować około 18 trylionów liczb. To
bardzo dużo  tak dużo, że aż musiałem sprawdzić, jak nazywa się liczba z 18 zerami. Nadal
nie jest to jednak 308 zer. Liczby zmiennoprzecinkowe pozwalają na dokładne przedstawienie
tylko niektórych wartości, które są objęte ich zakresem, przez użycie formatu podobnego do
notacji naukowej.
W notacji naukowej liczby są zapisywane w postaci x x 10y. Składnik x przechowuje zazwyczaj
kilka pierwszych cyfr liczby, natomiast y  nazywany wykładnikiem  to potęga, do której
należy podnieść liczbę. Na przykład odległość Ziemi od Słońca można zapisać jako 1,496 x 108
kilometrów (około 150 milionów kilometrów).
3
Poważnym zaniedbaniem z mojej strony byłoby pominięcie informacji, że tabela ASCII jest raczej mała 
zawiera tylko 256 pozycji. Oznacza to, że nie nadaje się ona do pracy z takimi językami jak chiński albo japoń-
ski, które dysponują więcej niż 256 znakami. Obejście tego problemu wiąże się z wprowadzeniem koncepcji
Unicode, która to tematyka wykracza poza zakres niniejszej książki. Więcej informacji na ten temat znaj-
dziesz na stronie http://www.cprogramming.com/tutorial/unicode.html.
56
Kup książkę Poleć książkę
Sprawdz się
Dzięki umieszczeniu dużych wartości w wykładniku taki sposób zapisu pozwala komputerowi
na przechowywanie naprawdę dużych liczb. Część niewykładnicza nie może jednak zawierać
300 cyfr, tylko mniej więcej 15. W związku z tym, kiedy pracujesz z liczbami zmiennoprze-
cinkowymi, masz do dyspozycji tylko 15 cyfr znaczących. Jeśli masz do czynienia z względnie
małymi wartościami, wówczas różnica między liczbą przechowywaną przez komputer a fak-
tyczną liczbą będzie bardzo niewielka. Jeżeli jednak pracujesz z dużymi wartościami, to błąd
bezwzględny także będzie spory, nawet jeśli błąd względny będzie mały. Na przykład przy
dwóch liczbach znaczących mógłbym napisać, że Ziemia znajduje się w odległości 1,5 x 108
kilometrów od Słońca. Względnie jest to całkiem dobra wartość (błąd jest mniejszy niż 0,1%),
ale w mierze bezwzględnej jest to ponad 70 tysięcy kilometrów  prawie dwa razy tyle, ile
wynosi obwód Ziemi! Błąd taki ma miejsce oczywiście wtedy, gdy zakładamy użycie dwóch
cyfr znaczących. Przyjmując 15 cyfr znaczących, możemy przybliżyć się do liczb tak małych jak
na przykład milion.
W większości przypadków niedokładności liczb zmiennoprzecinkowych nie będą mieć więk-
szego znaczenia, chyba że przeprowadzasz poważne obliczenia matematyczne lub naukowe.
Mały sekret liczb całkowitych
Liczby całkowite również mają swój mały sekret. Faktem jest, że liczby całkowite oraz zmienno-
przecinkowe nie mają ze sobą zbyt wiele wspólnego. Liczby całkowite, w przeciwieństwie do
zmiennoprzecinkowych, przechowują dokładnie taką wartość, jaka zostanie w nich zapisana,
ale szczerze nienawidzą przecinka dziesiętnego. Kiedy przeprowadzasz obliczenia na liczbach
całkowitych, a wynikiem nie będzie liczba całkowita, rezultat zostanie obcięty. Część całko-
wita będzie dokładna, ale część dziesiętna zostanie odrzucona.
Prawdopodobnie nie zaliczyłbyś żadnego matematycznego testu, gdybyś napisał, że 5/2 = 2,
ale właśnie taki wynik poda komputer! Jeśli potrzebujesz uzyskać odpowiedz z miejscami
dziesiętnymi, powinieneś użyć typu niecałkowitego.
Kiedy w swoim programie zapisujesz liczby, kompilator przyjmuje, że są one całkowite, i stąd
5/2 daje w wyniku 2. Jeśli umieścisz w liczbie przecinek dziesiętny  na przykład 5,0/2,0 
kompilator zinterpretuje taką operację jako działanie na liczbach całkowitych i w rezultacie
poda wynik, którego oczekujesz: 2,5.
Sprawdz się
1. Jakiego typu zmiennej powinieneś użyć, kiedy chcesz zapisać taką liczbę jak 3,1415?
A. int
B. char
C. double
D. string
2. Który z poniższych zapisów przedstawia poprawny operator służący do porównywania
dwóch zmiennych?
A. :=
B. =
C. equal
D. ==
57
Kup książkę Poleć książkę
Rozdział 3. Interakcja z użytkownikiem. Zapisywanie informacji w zmiennych
3. W jaki sposób można uzyskać dostęp do danych typu string?
A. Typ string jest wbudowany w język, tak więc nie trzeba nic robić.
B. Ponieważ typ string jest używany podczas operacji wejścia-wyjścia, należy dołączyć plik
nagłówkowy iostream.
C. Należy dołączyć plik nagłówkowy string.
D. C++ nie obsługuje łańcuchów tekstowych
4. Który z poniższych typów nie jest poprawnym typem zmiennej?
A. double
B. real
C. int
D. char
5. W jaki sposób można wczytać cały wiersz wprowadzony przez użytkownika?
A. Za pomocą cin>>.
B. Za pomocą readline.
C. Za pomocą getline.
D. Nie da się tego zrobić w prosty sposób.
6. Co zostanie wyświetlone na ekranie w wyniku wykonania następującej instrukcji w C++:
cout
A. 0
B. 0,617
C. W przybliżeniu 0,617, ale dokładny wynik nie może być zapisany w liczbie
zmiennoprzecinkowej.
D. To zależy od typów znajdujących się z obu stron równania.
7. Dlaczego w C++ jest potrzebny typ char, skoro istnieją już typy całkowite?
A. Ponieważ znaki i liczby całkowite są zupełnie różnymi rodzajami danych; pierwsze z nich
to litery, a drugie to liczby.
B. Ze względu na wsteczną zgodność z C.
C. Aby łatwiej było wczytywać oraz wyświetlać znaki zamiast liczb, ponieważ znaki
są w rzeczywistości przechowywane jako liczby.
D. Ze względu na wsparcie wielojęzykowości, aby możliwa była obsługa takich języków
jak chiński albo japoński, w których występuje wiele znaków.
Odpowiedzi znajdują się na końcu książki.
Zadania praktyczne
1. Napisz program, który wyświetli Twoje imię.
2. Napisz program, który wczyta dwie liczby i zsumuje je.
3. Napisz program, który wykonuje dzielenie na dwóch liczbach podanych przez
użytkownika i wyświetla dokładny wynik tego działania. Nie zapomnij przetestować
swojego programu zarówno dla liczb całkowitych, jak i dziesiętnych.
58
Kup książkę Poleć książkę
Skorowidz
debugger, 231
A
debugowanie, 246
abstrakcja funkcyjna, 267 268
awarii, 239 241
Access Violation, 240
modyfikowanie zmiennych, 245
adres pamięci, 132, 155
przepełnienia stosu, 186
aktualizacja zmiennej, 71
w Code::Blocks
algorytm, 103, 107 109
włamanie się do działającego programu, 243
mieszający, 206
wstrzymywanie działania programu, 233 239
alokacja pamięci, 135
zawieszenie programu, 242 245
argumenty
definicja metody, 274
funkcji, 41, 83
definiowanie funkcji, 86
w wierszu poleceń, 331
deklarowanie
arytmetyka wskazników, 156
funkcji, 87
automatyczne wcinanie tekstu, 17
instancji klasy, 279
klasy, 278
metody, 273
B
wskaznika, 139 140
bajt, 55
zmiennych, 47
bit, 55
dekrementacja, 50
błędy
delimiter, 222
kompilacji, 42
dereferencja wskaznika, 141
kompilatora, 22
destruktor, 288 291
podczas deklarowania zmiennych, 51 53 [ Pobierz całość w formacie PDF ]

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • absolwenci.keep.pl
  •