You are on page 1of 17

IDZ DO

PRZYKADOWY ROZDZIA
SPIS TRECI

KATALOG KSIEK
KATALOG ONLINE
ZAMW DRUKOWANY KATALOG

TWJ KOSZYK
DODAJ DO KOSZYKA

CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK

CZYTELNIA
FRAGMENTY KSIEK ONLINE

C++. Sztuka
programowania
Autor: Herbert Schildt
Tumaczenie: Magorzata Koziej (rozdz. 2), Marcin Miklas
(rozdz. 2, 7, 9), Marcin Samodulski (rozdz. 1, 3 6, 8)
ISBN: 83-7361-679-9
Tytu oryginau: The Art of C++
Format: B5, stron: 384

Poznaj profesjonalne techniki programistyczne


Ksika C++. Sztuka programowania przedstawia profesjonalne sposoby tworzenia
aplikacji w jzyku C++. Nie opisuje podstaw jzyka skupia si na tworzeniu
praktycznych aplikacji z wykorzystaniem profesjonalnych technik programistycznych.
Wykonujc zawarte w ksice przykady, rozwiesz rne zadania programistyczne
i osigniesz biego w posugiwaniu si jzykiem C++.
Szablony STL, biblioteki i model obiektowy jzyka C++
Mechanizm odzyskiwania pamici
Wykorzystanie wielowtkowoci w aplikacjach
Eksperymentalne elementy jzyka C++
Aplikacje internetowe w C++
Techniki sztucznej inteligencji
Tworzenie wasnego interpretera C++
O Autorze:
Herbert Schildt jest jednym z najpoczytniejszych autorw ksiek powiconych
programowaniu, konkretnie jzykom C, C++, Java i C#. By czonkiem komitetu
ANSI/ISO, ktry dokona standaryzacji jzyka C++. Jego ksiki powicone
programowaniu zostay sprzedane w 3 milionach egzemplarzy na caym wiecie
i przetumaczone na kilkanacie jzykw.

Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl

Spis treci
O Autorze .......................................................................................... 9
Wstp ............................................................................................. 11
Rozdzia 1. Potga C++ ..................................................................................... 13
Zwiza, lecz bogata skadnia.......................................................................................... 14
Potne biblioteki............................................................................................................ 14
Biblioteka szablonw STL .............................................................................................. 15
Programista ma wadz.................................................................................................... 16
Precyzyjne sterowanie ..................................................................................................... 17
Przecianie operatorw.................................................................................................. 17
Przejrzysty, zwizy model obiektowy ............................................................................ 18
Dziedzictwo C++............................................................................................................. 18

Rozdzia 2. Prosty mechanizm odzyskiwania pamici dla jzyka C++................... 21


Porwnanie dwch metod zarzdzania pamici............................................................. 22
Plusy i minusy rcznego zarzdzania pamici......................................................... 23
Plusy i minusy mechanizmu odzyskiwania pamici.................................................. 24
Moesz mie obie metody......................................................................................... 25
Tworzenie mechanizmu odzyskiwania pamici w jzyku C++ ....................................... 25
Zrozumienie problemu .............................................................................................. 26
Wybr algorytmu odzyskiwania pamici ........................................................................ 26
Zliczanie referencji.................................................................................................... 27
Znacz i zamiataj ........................................................................................................ 27
Kopiowanie ............................................................................................................... 27
Ktry algorytm wybra?............................................................................................ 28
Implementowanie mechanizmu odzyskiwania pamici............................................. 28
Wielowtkowy czy nie? ............................................................................................ 29
Kiedy odzyskiwa pami? ....................................................................................... 29
Co z auto_ptr? ........................................................................................................... 30
Prosty mechanizm odzyskiwania pamici w C++ ........................................................... 31
Omwienie klas mechanizmu odzyskiwania pamici ............................................... 41
GCPtr szczegowo ......................................................................................................... 42
Zmienne skadowe klasy GCPtr ................................................................................ 43
Funkcja findPtrInfo() ................................................................................................ 44
Definicja typu GCiterator.......................................................................................... 44
Konstruktor klasy GCPtr........................................................................................... 44
Destruktor klasy GCPtr ............................................................................................. 46

C++. Sztuka programowania


Odzyskiwanie pamici za pomoc funkcji collect() .................................................. 46
Przecione operatory przypisania ............................................................................ 48
Konstruktor kopiujcy klasy GCPtr .......................................................................... 50
Operatory wskanikowe i funkcja konwertujca....................................................... 51
Funkcje begin() i end().............................................................................................. 52
Funkcja shutdown()................................................................................................... 53
Dwie funkcje pomocnicze ......................................................................................... 53
Klasa GCInfo................................................................................................................... 54
Klasa Iter ......................................................................................................................... 55
Jak uywa klasy GCPtr? ................................................................................................ 57
Obsuga wyjtkw alokacji pamici.......................................................................... 58
Bardziej interesujcy przykad .................................................................................. 59
Alokowanie i porzucanie obiektw ........................................................................... 61
Alokowanie tablic ..................................................................................................... 63
Uycie GCPtr z typami klasowymi ........................................................................... 65
Wikszy program demonstracyjny ............................................................................ 67
Testowanie obcienia .............................................................................................. 72
Kilka ogranicze ....................................................................................................... 74
Pomysy do wyprbowania ............................................................................................. 75

Rozdzia 3. Wielowtkowo w C++................................................................... 77


Czym jest wielowtkowo? ........................................................................................... 78
Wielowtkowo zmienia architektur programu ..................................................... 78
Dlaczego jzyk C++ nie ma wbudowanej obsugi mechanizmu wielowtkowoci? ....... 79
Jaki system operacyjny i kompilator wybra? ................................................................. 80
Przegld funkcji obsugi wtkw w Windows................................................................. 81
Tworzenie i zatrzymywanie wtku............................................................................ 81
Inne funkcje obsugi wtkw dostpne w Visual C++ .............................................. 82
Wstrzymywanie i wznawianie wtku........................................................................ 84
Zmiana priorytetu wtku ........................................................................................... 84
Pobieranie uchwytu gwnego wtku........................................................................ 86
Zagadnienie synchronizacji....................................................................................... 86
Tworzenie panelu kontrolnego wtkw........................................................................... 90
Panel kontrolny wtku............................................................................................... 91
Panel kontrolny wtku pod lup................................................................................ 95
Prezentacja dziaania panelu kontrolnego ............................................................... 101
Wielowtkowy mechanizm odzyskiwania pamici ....................................................... 106
Dodatkowe zmienne skadowe................................................................................ 107
Konstruktor wielowtkowej klasy GCPtr................................................................ 107
Wyjtek TimeOutExc.............................................................................................. 109
Wielowtkowy destruktor klasy GCPtr................................................................... 110
Funkcja gc() ............................................................................................................ 110
Funkcja isRunning()................................................................................................ 111
Synchronizacja dostpu do listy gclist .................................................................... 111
Dwie inne zmiany ................................................................................................... 112
Kompletny kod wielowtkowego mechanizmu odzyskiwania pamici .................. 112
Uycie wielowtkowego mechanizmu odzyskiwania pamici................................ 123
Pomysy do wyprbowania ........................................................................................... 128

Rozdzia 4. Rozszerzanie jzyka C++ ................................................................ 129


Dlaczego naley uy translatora?................................................................................. 129
Eksperymentalne sowa kluczowe................................................................................. 131
Ptla foreach............................................................................................................ 131
Wyraenie cases ...................................................................................................... 132

Spis treci

5
Operator typeof ....................................................................................................... 133
Ptla repeat-until ..................................................................................................... 134
Translator eksperymentalnych elementw jzyka C++ ................................................. 135
Uycie translatora.......................................................................................................... 143
Jak dziaa translator? ..................................................................................................... 144
Deklaracje globalne................................................................................................. 144
Funkcja main() ........................................................................................................ 145
Funkcje gettoken() i skipspaces()............................................................................ 146
Przeksztacanie ptli foreach ................................................................................... 149
Przeksztacanie wyraenia cases ............................................................................. 152
Przeksztacanie operatora typeof............................................................................. 154
Przeksztacanie ptli repeat-until............................................................................. 155
Program demonstracyjny............................................................................................... 157
Pomysy do wyprbowania ........................................................................................... 163

Rozdzia 5. Program do cigania plikw z internetu ........................................ 165


Biblioteka WinINet ....................................................................................................... 166
Podsystem programu do cigania pliku z internetu...................................................... 167
Oglny opis dziaania.............................................................................................. 171
Funkcja download() ................................................................................................ 172
Funkcja ishttp() ....................................................................................................... 177
Funkcja httpverOK() ............................................................................................... 178
Funkcja getfname() ................................................................................................. 179
Funkcja openfile() ................................................................................................... 179
Funkcja update() ..................................................................................................... 180
Plik nagwkowy podsystemu do cigania plikw ...................................................... 181
Program prezentujcy dziaanie podsystemu do cigania plikw ................................ 181
Program do cigania plikw z graficznym interfejsem uytkownika........................... 183
Kod programu WinDL ............................................................................................ 183
Jak dziaa program WinDL?.................................................................................... 188
Pomysy do wyprbowania ........................................................................................... 190

Rozdzia 6. Obliczenia finansowe w C++........................................................... 191


Plan spaty poyczki...................................................................................................... 192
Obliczanie przyszej wartoci lokaty ............................................................................. 193
Obliczanie pocztkowej wartoci inwestycji
wymaganej do otrzymania podanej przyszej wartoci............................................ 195
Obliczanie pocztkowej wartoci inwestycji
wymaganej do otrzymania okrelonych wypat .......................................................... 196
Obliczanie maksymalnej wielkoci regularnej wypaty z danej lokaty.......................... 198
Obliczanie wartoci pozostaego kredytu ...................................................................... 200
Pomysy do wyprbowania ........................................................................................... 201

Rozdzia 7. Rozwizywanie problemw metodami sztucznej inteligencji ............. 203


Reprezentacja i terminologia......................................................................................... 204
Eksplozje kombinatoryczne........................................................................................... 205
Strategie przeszukiwania ............................................................................................... 207
Ocenianie strategii przeszukiwania ......................................................................... 207
Problem ......................................................................................................................... 208
Reprezentacja graficzna .......................................................................................... 208
Struktura FlightInfo i klasa Search ................................................................................ 209
Przeszukiwanie w gb .................................................................................................. 211
Funkcja match() ...................................................................................................... 216
Funkcja find().......................................................................................................... 217
Funkcja findroute() ................................................................................................. 218

C++. Sztuka programowania


Wywietlanie trasy .................................................................................................. 219
Analiza przeszukiwania w gb............................................................................... 220
Przeszukiwanie wszerz.................................................................................................. 220
Analiza przeszukiwania wszerz............................................................................... 223
Dodawanie heurystyk .................................................................................................... 223
Przeszukiwania wspinaczkowe ............................................................................... 224
Analiza przeszukiwania wspinaczkowego .............................................................. 228
Przeszukiwanie najmniejszego kosztu........................................................................... 229
Analiza przeszukiwania najmniejszego kosztu ....................................................... 231
Znajdowanie wielu rozwiza ....................................................................................... 231
Usuwanie cieki..................................................................................................... 231
Usuwanie wierzchokw ......................................................................................... 232
Szukanie optymalnego rozwizania .............................................................................. 238
Wracamy do zgubionych kluczy ................................................................................... 244
Pomysy do wyprbowania ........................................................................................... 247

Rozdzia 8. Tworzenie wasnego kontenera STL ................................................ 249


Krtkie omwienie biblioteki STL................................................................................ 250
Kontenery................................................................................................................ 250
Algorytmy ............................................................................................................... 251
Iteratory................................................................................................................... 251
Inne skadniki biblioteki STL ........................................................................................ 251
Wymagania stawiane definiowanemu kontenerowi ...................................................... 252
Wymagania oglne ................................................................................................. 252
Dodatkowe wymagania dla kontenerw sekwencyjnych ........................................ 254
Dodatkowe wymagania dla kontenerw asocjacyjnych .......................................... 254
Tworzenie kontenera tablicy dynamicznej ze zmiennymi indeksami............................ 255
Jak dziaa tablica RangeArray? ............................................................................... 255
Kompletna klasa RangeArray ................................................................................. 257
Klasa RangeArray pod lup .................................................................................... 266
Kilka programw wykorzystujcych tablic RangeArray ....................................... 279
Pomysy do wyprbowania ..................................................................................... 288

Rozdzia 9. Miniinterpreter jzyka C++............................................................. 289


Interpretery kontra kompilatory..................................................................................... 289
Opis oglny interpretera Mini C++ ............................................................................... 290
Charakterystyka interpretera Mini C++......................................................................... 291
Ograniczenia interpretera Mini C++ ....................................................................... 293
Nieformalna teoria jzyka C++ ..................................................................................... 294
Wyraenia jzyka C++............................................................................................ 295
Definiowanie wyraenia.......................................................................................... 295
Parser wyrae .............................................................................................................. 297
Kod rdowy parsera ............................................................................................. 297
Wyodrbnianie elementw leksykalnych z kodu rdowego................................. 309
Wywietlanie bdw skadniowych ....................................................................... 314
Obliczanie wyraenia .............................................................................................. 315
Interpreter Mini C++ ..................................................................................................... 317
Funkcja main() ........................................................................................................ 334
Wstpny przegld kodu........................................................................................... 335
Funkcja interp()....................................................................................................... 339
Obsuga zmiennych lokalnych ................................................................................ 341
Wywoywanie funkcji zdefiniowanych przez uytkownika .................................... 343
Przypisywanie wartoci zmiennym ......................................................................... 345
Wykonywanie instrukcji if ...................................................................................... 347

Spis treci

7
Instrukcje switch i break ......................................................................................... 348
Przetwarzanie ptli while ........................................................................................ 350
Przetwarzanie ptli do-while................................................................................... 351
Ptla for................................................................................................................... 353
Obsuga instrukcji cin i cout.................................................................................... 354
Biblioteka funkcji interpretera Mini C++ ...................................................................... 356
Plik nagwkowy mccommon.h .................................................................................... 358
Kompilacja i konsolidacja interpretera Mini C++ ......................................................... 360
Demonstrowanie dziaania interpretera Mini C++ ........................................................ 360
Udoskonalanie interpretera Mini C++ ........................................................................... 368
Rozszerzanie interpretera Mini C++.............................................................................. 369
Dodawanie nowych elementw jzyka C++ ........................................................... 369
Dodawanie elementw pomocniczych .................................................................... 370

Skorowidz ..................................................................................... 371

Rozdzia 6.

Obliczenia finansowe
w C++
Poza wszystkimi duymi i skomplikowanymi aplikacjami, takimi jak: kompilatory, przegldarki internetowe, edytory tekstw, bazy danych i programy ksigowe, ktre zdominoway wiat komputerw, istnieje pewna grupa programw bdcych zarwno poytecznymi, jak i nieskomplikowanymi. Programy te wykonuj rne obliczenia finansowe,
na przykad wyznaczaj wysoko raty kredytu, przysz warto lokaty, pozosta warto kredytu. adne z wymienionych oblicze nie s bardzo skomplikowane ani nie wymagaj obszernego kodu, lecz uzyskujemy dziki nim cakiem uyteczne informacje.
Poniewa jzyk C++ najlepiej nadaje si do tworzenia potnych aplikacji systemowych, czsto nie docenia si jego moliwoci w dziedzinie oblicze finansowych. Jest
to oczywicie bd. Jzyk C++ charakteryzuje si doskonaymi waciwociami w tym
zakresie, gdy oferuje szeroki zakres funkcji matematycznych i wydajny mechanizm
arytmetycznych operacji zmiennoprzecinkowych. Ponadto, ze wzgldu na fakt, e kod
wykonywalny generowany na podstawie kodu C++ jest ekstremalnie wydajny, jzyk
C++ stanowi doskonay wybr dla programw wykonujcych zoone analizy finansowe i modelowanie.
Aby pokaza, z jak atwoci mona wykonywa obliczenia finansowe posugujc
si jzykiem C++, w tym rozdziale stworzonych zostanie kilka maych programw,
ktre obliczaj:
1. Wysoko raty;
2. Przysz warto lokaty;
3. Pocztkow warto inwestycji wymagan do otrzymania podanej

przyszej wartoci;
4. Pocztkow warto inwestycji wymagan do otrzymania okrelonych

wypat;
5. Maksymaln wielko regularnej wypaty z danej lokaty;
6. Pozosta kwot kredytu.

192

C++. Sztuka programowania

Programy te mog by wykorzystywane w niezmienionej postaci lub mona je przystosowa do konkretnych potrzeb. Pomimo tego, e s to najprostsze programy w tej
ksice, moe si okaza, e bdziesz ich uywa najczciej.

Plan spaty poyczki


Prawdopodobnie najczciej wykonywanym obliczeniem finansowym jest wyznaczenie rat kredytu, przeznaczonego na przykad na samochd lub dom. Raty kredytu oblicza si za pomoc nastpujcego wzoru:
Rata = (oproc (kwota / liczbaRatRocznie)) / (1 ((oproc /
liczbaRatRocznie) + 1) liczbaRatRocznie liczbaLat)
gdzie oproc okrela oprocentowanie kredytu, kwota wysoko kredytu, liczbaRatRocznie oznacza liczb rat przypadajc na jeden rok, a liczbaLat okrela dugo
spaty kredytu w latach.
W poniszym programie w celu obliczenia wysokoci rat przedstawiony wzr zosta
uyty w ciele funkcji . Do funkcji tej przekazujemy oprocentowanie, wielko pierwszej raty, dugo spaty kredytu w latach oraz liczb rat przypadajcych na
jeden rok. Funkcja zwraca wysoko raty.

 

 

 

 
    
// Obliczanie jednakowych rat kredytu.
         
     
  
   
   
    !""#" // przekszta procenty na uamki
    $   
 % $  
      & !#"
  !#" %  ' 
     
(
  
   
  

Rozdzia 6. Obliczenia finansowe w C++

193

  # )  )


# )  )
 

)* '+ ,' - , . )


  
 

)* '+ ' , /0   ' '1 2 '   . )


  
 

)* '+ 3-  . )


  
 

)* '+ 3- 4 '  ,. )


  
 

)5 . )

67

   8

   


  "
(

Aby obliczy wysoko raty kredytu, wprowad wymagane dane. Oto przykadowy
przebieg programu:
* '+ ' , /0 , . !"""
* '+ ' , /0   ' '1 2 '   . 9
* '+ 3-  . :
* '+ 3- 4 '  ,. !8
 . 8"#;<

Zwr uwag na kilka elementw w ciele funkcji 


. Po pierwsze, obiekt  
zwizany ze strumieniem   zosta ustawiony na Polish. Wykonano to przez wywoanie metody
 i przekazanie obiektu   dla Polski. Dziki temu zapewnione jest prawidowe wywietlanie sum pieninych zgodnie z zasadami obowizujcymi w jzyku polskim, przez co rozumiemy oddzielanie poszczeglnych czonw
tysicznych za pomoc znaku spacji oraz stosowanie przecinka do oddzielania czci
cakowitej liczby od jej czci uamkowej. Po drugie, przed wywietleniem obliczonej
wysokoci raty, format liczby zosta zmieniony na 
 (stay) z precyzj 2 miejsc
po przecinku z odpowiednim zaokrglaniem. Jeli to konieczne, do czci uamkowej
dodawane s zera. We wszystkich prezentowanych w tym rozdziale programach do
oblicze finansowych zastosowane jest to samo podejcie. Aby zmieni format liczb
w celu dopasowania go do innego jzyka lub regionu, wystarczy zmieni jzyk lub
region obiektu   przekazywanego do funkcji
.

Obliczanie przyszej wartoci lokaty


Inn czsto obliczan wartoci jest przysza warto lokaty na podstawie pocztkowej wielkoci lokaty, oprocentowania, rocznej czstotliwoci kapitalizacji odsetek
oraz dugoci lokaty wyraonej w latach. Na przykad moesz chcie si dowiedzie,
ile bdziesz mia na koncie za 12 lat, jeeli obecny stan Twego konta to 98 000 z,

194

C++. Sztuka programowania

a rednie oprocentowanie roczne wynosi 6 procent. Przedstawiony tutaj program odpowie na to pytanie.
Aby obliczy przysz warto inwestycji, uyj nastpujcego wzoru:
Przysza warto = lokata ((oproc / rocznaCzstKapit) + 1) rocznaCzstKapit liczbaLat
gdzie oproc okrela oprocentowanie lokaty, lokata to pocztkowa wysoko wkadu,
rocznaCzstKapit oznacza czstotliwo kapitalizacji odsetek w roku, a liczbaLat to
dugo lokaty wyraona w latach. W przypadku naliczania odsetek raz do roku, czstotliwo kapitalizacji odsetek w roku wynosi oczywicie 1.
W poniszym programie w celu obliczenia przyszej wartoci inwestycji przedstawiony
wzr zosta uyty w ciele funkcji  . Do funkcji tej przekazujemy oprocentowanie lokaty, dugo lokaty w latach oraz roczn czstotliwo kapitalizacji odsetek.
Funkcja zwraca przysz warto lokaty.

 

 

 

 
    
// Obliczanie przyszej wartoci lokaty.
  6 =      >6 
      
   
 >6  !""#" // przekszta procenty na uamki
 ! &  >6  
   $  
   $  ' 
(
  
   
  
  # )  )
 

)* '+ ', /0  , . )


  
 

)* '+ ' , /0   '  ,  '1 2 '   . )


  
 

)* '+ 3-  . )


  
 

)* '+  32 3- ' /0 , 3?   ,. )


  
 

)53 34 ' /0. )

67

   8

6 =   



Rozdzia 6. Obliczenia finansowe w C++

195

  "
(

Oto przykadowy przebieg programu:


* '+ ', /0  , . !""""
* '+ ' , /0   '  ,  '1 2 '   . <
* '+ 3-  . :
* '+  32 3- ' /0 , 3?   ,. !8
3 34 ' /0. !@ ABB:"

Obliczanie pocztkowej wartoci


inwestycji wymaganej do otrzymania
podanej przyszej wartoci
Czasami chcemy wiedzie, ile musimy zainwestowa, aby otrzyma w przyszoci jak
okrelon warto. Na przykad jeeli zbierasz pienidze na prywatn szko dla dziecka
i wiesz, e za 5 lat bdziesz potrzebowa 75 000 z, zadasz pytanie: ile pienidzy musz
przeznaczy na lokat oprocentowan na 7 procent w skali roku, aby uzyska zaoon
kwot. Wykorzystujc program zaprezentowany w tym podrozdziale, moesz znale
odpowied na to pytanie.
Wzr, na podstawie ktrego mona obliczy pocztkow warto lokaty, wyglda nastpujco:
Pocztkowa warto =
= wartoDocelowa / (((oproc / rocznaCzstKapit) + 1) rocznaCzstKapit liczbaLat)
gdzie oproc okrela oprocentowanie lokaty, wartoDocelowa to zaoona przysza
warto, ktr chcemy uzyska, rocznaCzstKapit oznacza czstotliwo kapitalizacji
odsetek w roku, a liczbaLat to dugo lokaty wyraona w latach. Jeeli odsetki naliczane s raz do roku, czstotliwo kapitalizacji odsetek w roku wynosi oczywicie 1.
W poniszym programie w celu obliczenia pocztkowej wysokoci lokaty przedstawiony wzr zosta uyty w ciele funkcji

 . Do funkcji tej przekazujemy zaoon warto docelow, oprocentowanie lokaty, dugo lokaty w latach oraz roczn
czstotliwo kapitalizacji odsetek. Funkcja zwraca pocztkow warto lokaty.

 

 

 

 
    
// Obliczanie pocztkowej wartoci lokaty
// wymaganej do uzyskania zaoonej przyszej wartoci.
   =   C    >6 
      

196

C++. Sztuka programowania


   
 >6  !""#" // przekszta procenty na uamki
 ! &  >6  
   $  
   C   ' 
(
  
   
  
  # )  )
 

)* '+  122 ' /0. )


  
 

)* '+ ' , /0   '  ,  '1 2 '   . )


  
 

)* '+ 3-  . )


  
 

) * '+  32 3- ' /0 , 3?   ,. )


  
 

)5*  32 , ' ' /0  , . )


67

   8

 =   


  "
(

Oto przykadowy przebieg programu:


* '+  122 ' /0. ;:"""
* '+ ' , /0   '  ,  '1 2 '   . ;
* '+ 3-  . :
* '+  32 3- ' /0 , 3?   ,. A
*  32 , ' ' /0  , . :@ "!!BA

Obliczanie pocztkowej wartoci


inwestycji wymaganej
do otrzymania okrelonych wypat
Kolejn czsto obliczan wielkoci jest pocztkowa warto lokaty, ktra zapewnia
regularne wypaty okrelonej sumy. Na przykad moesz zaplanowa, e bdziesz
potrzebowa w przyszoci 5 000 z miesicznie w charakterze emerytury wypacanej

Rozdzia 6. Obliczenia finansowe w C++

197

przez 20 lat. Pytanie, ktre powiniene sobie zada, brzmi: jak duo musz zgromadzi, aby zapewni sobie tak emerytur. Odpowied znajdziesz, wykorzystujc nastpujcy wzr:
Pocztkowa warto = ((wysWyp liczbaWypRocznie) / oproc)
(1 (1 / (oproc / liczbaWypRocznie + 1) liczbaWypRocznie liczbaLat))
gdzie oproc okrela wysoko oprocentowania lokaty, wysWyp to podana wysoko
regularnych wypat, liczbaWypRocznie oznacza zakadan liczb wypat na rok, a liczbaLat to okres wypacania wyraony w latach.
W poniszym programie w celu obliczenia pocztkowej wysokoci lokaty przedstawiony wzr zosta uyty w ciele funkcji  
. Do funkcji tej przekazujemy zaoon warto docelow regularnej wypaty, oprocentowanie lokaty, okres wypacania
wyraony w latach oraz roczn liczb wypat. Funkcja zwraca pocztkow wymagan
warto lokaty.

 

 

 

 
    
// Obliczanie pocztkowej wartoci inwestycji
// wymaganej do otrzymania okrelonych regularnych wypat.
     *D    >6 
     
   
  ! 8
 >6  !""#" // przekszta procenty na uamki
! *D $    >6 
 ! &  >6 
  $  
8 ! % !   ' 
  ! $ 8
(
  
  ' 
  '
  # )  )
 

)* '+  122 ,' - '4 . )


  '
 

)* '+ ' , /0   '  ,  '1 2 '   . )


  

198

C++. Sztuka programowania


 

)* '+ 3-  . )


  
 

)* '+ 3- '4 '  ,. )


  '
 

)5*  32 , ' ' , /0  , . )


67

   8

 '   '


  "
(

Oto przykadowy przebieg programu:


* '+  122 ,' - '4 . :"""
* '+ ' , /0   '  ,  '1 2 '   . <
* '+ 3-  . 8"
* '+ 3- '4 '  ,. !8
*  32 , ' ' , /0  , . <9; 9"@B<

Obliczanie maksymalnej wielkoci


regularnej wypaty z danej lokaty
Innym rodzajem oblicze finansowych jest wyznaczanie maksymalnej kwoty wypaty
(w sensie regularnych wypat), jak mona otrzymywa przez okrelony czas, na podstawie danej lokaty. Zamy, e masz 500 000 z na koncie i chciaby wiedzie, ile
moesz podejmowa kadego miesica przez 20 lat, zakadajc, e oprocentowanie
lokaty wynosi 6 procent. Wzr do obliczania poszukiwanej wartoci jest nastpujcy:
Maksymalna wysoko wypaty = lokata (((oproc / liczbaWypRocznie) /
(1 + ((oproc / liczbaWypRocznie) + 1) liczbaWypRocznie liczbaLat))
+ (oproc / liczbaWypRocznie))
gdzie oproc okrela wysoko oprocentowania lokaty, liczbaWypRocznie to zakadana
liczba wypat na rok, liczbaLat oznacza okres wypacania wyraony w latach, a lokata
wskazuje pocztkow wysoko lokaty.
W poniszym programie w celu obliczenia maksymalnej wysokoci wypaty przedstawiony wzr zosta uyty w ciele funkcji . Do funkcji tej przekazujemy pocztkow warto lokaty, oprocentowanie lokaty, okres wypacania wyraony w latach oraz roczn liczb wypat. Funkcja zwraca maksymaln warto wypaty.

 

 

 

 
    

Rozdzia 6. Obliczenia finansowe w C++


// Obliczanie maksymalnej wielkoci regularnej wypaty
// podejmowanej przez okrelony czas z lokaty o podanej wartoci pocztkowej.
  7'      >6 
     
   
  ! 8
 >6  !""#" // przekszta procenty na uamki
!  >6  
 ! & !
  $  
8  '  % !
   $  ! 8 & !
(
  
   
  '
  # )  )
 

)* '+  32 , '2 ' /0  , . )


  
 

)* '+ ' , /0   '  ,  '1 2 '   . )


  
 

)* '+ 3-  . )


  
 

)* '+ 3- '4 '  ,. )


  '
 

)5E,  ,'  '4 . )

67

   8

7'   '


  "
(

Oto przykadowy przebieg programu:


* '+  32 , '2 ' /0  , . :"""""
* '+ ' , /0   '  ,  '1 2 '   . <
* '+ 3-  . 8"
* '+ 3- '4 '  ,. !8
E,  ,'  '4 . @ :B8!<

199

200

C++. Sztuka programowania

Obliczanie wartoci
pozostaego kredytu
Czsto potrzebna jest informacja dotyczca tego, ile kredytu zostao do spacenia.
Mona to atwo obliczy, znajc pocztkow kwot kredytu, jego oprocentowanie,
wysoko raty oraz liczb dokonanych wpat. Aby pozna pozosta kwot kredytu,
trzeba zsumowa dokonane wpaty, odejmujc od kadej wpaty odsetki, a nastpnie
odj tak otrzyman liczb od pocztkowej kwoty kredytu.
Przedstawiona tutaj funkcja    oblicza pozosta do spacenia kwot kredytu.
Do funkcji tej przekazujemy pocztkow warto kredytu, oprocentowanie lokaty,
wielko raty, liczb spat w roku i liczb dokonanych wpat. Funkcja zwraca pozosta kwot kredytu.

 

 

 

 
    
// Oblicza pozosta kwot kredytu.
         
     
   
   
        
   !""#" // przekszta procenty na uamki
6   " 
  &&
 %  %  $  
  
(
  
     
   
  # )  )
 

)* '+  32 , '2 ,' - , . )


  
 

)* '+ ' , /0   '  ,  '1 2 '   . )


  
 

)* '+ ', /0  . )


   

Rozdzia 6. Obliczenia finansowe w C++

201

 

)* '+ 3- 4 '  ,. )


  
 

)* '+ 3-  ,  '4 . )


   
 

) 3 4 ,'  , . )

67

   8

      


  "
(

Oto przykadowy przebieg programu:


* '+  32 , '2 ,' - , . !""""
* '+ ' , /0   '  ,  '1 2 '   . 9
* '+ ', /0  . 8";#:B
* '+ 3- 4 '  ,. !8
* '+ 3-  ,  '4 . @"
 3 4 ,'  , . : ::B!9

Pomysy do wyprbowania
Istnieje wiele innych oblicze finansowych, ktre mog Ci si przyda, jak choby
obliczanie stopy oprocentowania lokaty lub wysoko regularnych wpat prowadzcych do uzyskania okrelonej przyszej wartoci. Moesz take wygenerowa plan
amortyzacji kredytu.
By moe zechcesz stworzy wiksz aplikacj obejmujc wszystkie przedstawione
w tym rozdziale obliczenia. Uytkownik mgby wybiera odpowiedni opcj z menu.

You might also like