C Ćwiczenia zaawansowane, #Programowanie
[ Pobierz całość w formacie PDF ]
Wprowadzenie
Dlaczego warto uczyć się języka C++?
Przez wiele lat język C++ wydawał się być narzędziem nieco zbyt trudnym do po-
wszechnego stosowania. Niektórzy uważali, że jest za bardzo podobny do asemblera, bo
umożliwia przeprowadzanie operacji na niskim poziomie, zwanym poziomem maszy-
nowym. Inni wskazywali na nadmiarowość możliwości języka — choćby w gruncie rzeczy
niepotrzebne, bo realizowane także innymi środkami przeciążanie operatorów. Język
C++, a wcześniej jego protoplasta C, miał co prawda opinię języka kultowego, ale przy tym
trudnego, nazbyt ascetycznego w zapisie i wręcz prowokującego do popełniania błędów.
Ciągle był to jednak język o niezmierzonym bogactwie bibliotek, umożliwiający pro-
gramistyczną pracę na najróżniejszych polach — od programowania domowego aż po
ekstremalnie złożone zagadnienia systemów operacyjnych.
Kilka lat temu ten hermetyczny, nieco rozchełstany, żywiołowo rozwijający się język
doczekał się precyzyjnej standaryzacji. Pojawiły się w nim gotowe struktury danych,
umożliwiające natychmiastowe implementacje takich złożoności, jak listy, kolejki czy
stosy. Jednocześnie ta początkowa nadmiarowość technicznych środków wyrazu do-
skonale wpasowała się w jeden spójny system zwany niekiedy Standardem C++.
Dlaczego warto nauczyć się Standardu C++, choć jest to język trudny? Odpowiedź jest
prosta — by w przyszłości łatwo pisać oprogramowanie. Ten wysiłek z całą pewnością
się opłaci i bardzo szybko się zwróci. Odkąd otrzymaliśmy nową, integralną część języka,
zwaną biblioteką standardową, jeszcze nigdy programowanie nie było tak łatwe. Ale żeby
to dostrzec, trzeba się tego języka najpierw nauczyć...
6
C++. Ćwiczenia zaawansowane
Uczy się trudnego języka, by zostać najlepszymi, najszybszymi, najdokładniejszymi pro-
gramistami współczesnych komputerów.
Czeka Cię więc wyjątkowa przygoda intelektualna — naprawdę zazdroszczę jej tym,
którzy teraz postanawiają poznać język C++ i wszystko jest przed nimi. Nie chciałbym
jednak Cię straszyć. O ile wirtuozeria języka jest dostępna dla programistów wybitnych,
sprawne posługiwanie się Standardem C++ nie jest umiejętnością niezwykłą. Język
C++ nie jest zarezerwowany dla zawodowych informatyków — główne pole jego za-
stosowań to różne zagadnienia w naukach przyrodniczych, przy których zazwyczaj nie
pracują informatycy.
Co Jest potrzebne
do Korzystania z tej książki?
Za chwilę powiem, co powinieneś już potrafić, przystępując do pracy z tą książką. Jeśli
ktoś spełnia te kryteria — to proszę mi wierzyć — już zna większą część tajemnicy.
Najtrudniejsza w programowaniu jest umiejętność wyobrażania sobie algorytmów i to
niezależnie od języka programowania. Najtrudniejszy jest elementarz programowania,
czyli tworzenie odpowiednich do konkretnego zadania zmiennych, konstruowanie wy-
rażeń, warunków logicznych i pętli, definiowanie funkcji. Jeśli dysponujesz takimi pod-
stawami, reszta jest stosunkowo prosta.
Książka ta koncentruje się na tak zwanym programowaniu obiektowym, czyli na umie-
jętności tworzenia klas i operowaniu klasami. Przystępując do lektury, powinieneś znać
język C++ w podstawowym zakresie, w zasadzie bliższym staremu językowi C. Powi-
nieneś więc znać podstawowe instrukcje sterujące i potrafić komponować z nich proste
algorytmy. Musisz posługiwać się standardowymi (wbudowanymi) typami danych. Po-
winieneś mieć minimum wiedzy na temat wskaźników. Potrafić zadeklarować, napisać
i wywołać własną funkcję, ukrywającąjakiś fragment algorytmu.
Wszystkie te elementy wstępu do sztuki programowania opisałem w pierwszej części
moich ćwiczeń („C++. Ćwiczenia praktyczne", Helion 2004,
cwcpp.htm).
Jeśli uznasz, że poziom niniejszych ćwiczeń jest zbyt wysoki, polecam
uważne przerobienie tamtej, elementarnej książki.
Studiowanie książki wymaga wcześniejszego przygotowania odpowiedniego oprogra-
mowania, tak by było gdzie kompilować i badać tę setkę przykładów, którą dla Ciebie
przygotowałem. Przykłady będą banalne w dosłownym tego słowa znaczeniu, zdarzy
się, że będą składały się z jednej, istotnej linijki kodu. Do ich opracowania wystarczy
najprostszy kompilator — choćby dostępne bezpłatnie w sieci środowisko DEV C++.
Może także być znacznie potężniejszy C++Builder czy równie potężny Visual C++.
Narzędzia te jednak przestawisz na ubogi tryb konsoli i ich ogromny potencjał w zasa-
dzie tylko zajmie miejsce na dysku.
Wprowadzenie
7
Proszę uważne skompletować oprogramowanie, tak by podczas studiowania tajemnic
C++już nic Ci nie przeszkadzało. We wspominanej książce
C++. Ćwiczenia praktyczne
poświęcam sporo uwagi zagadnieniu wyboru środowiska do programistycznej pracy
oraz jego wstępnej regulacji. Tutaj pierwszy rozdział też poświęciłem czynnościom roz-
ruchowym, których w praktycznym kursie programowania zlekceważyć w żaden sposób
nie wolno.
Jak najlepiej pracować z tą książka?
Książkę należy czytać przy włączonym komputerze, dlatego zalecam, byś przed rozpo-
częciem lektury odpowiednio przygotował się do pracy — uzyskał wielogodzinny, nie-
ograniczony dostęp do komputera i zainstalował odpowiednie oprogramowanie. Każdy
kolejny przykład powinien być natychmiast wprowadzony do komputera, skompilowany,
uruchomiony i dokładnie przeanalizowany. Podawane tutaj programy są na tyle proste i
krótkie, że wprowadzanie ich do komputera nie stanowi żadnego problemu. Te kilka
minut, przeznaczone na wpisywanie tekstu źródłowego, proszę traktować jako chwilę
zasłużonego relaksu, po którym przystępujesz do ciężkiej, umysłowej pracy.
W każdym miejscu każdego przerabianego programu należy odważnie dokonywać róż-
nych zmian i modyfikacji. Wiele zmian będę sugerować w krótkich omówieniach pre-
zentowanych ćwiczeń. Podczas nauki Twój komputer wiele razy się zawiesi — a o to
w języku C++ szczególnie łatwo — ale jeśli ma to wyjaśnić jakieś szczegóły opracowy-
wanych algorytmów, będzie bardzo owocnym restartem maszyny...
Ćwiczenia najlepiej jest przerabiać w takiej kolejności, w jakiej je tutaj podaję (przy-
najmniej w obrębie rozdziału), bo bardzo często następne zadanie zawiera w sobie mody-
fikację poprzedniego. Opracowując ćwiczenia kolejno, możesz zaoszczędzić dużo czasu
na wprowadzaniu do edytora tekstu programu źródłowego.
Pliki źródłowe wszystkich ćwiczeń znajdziesz pod internetowym adresem:
Co Ci da przerobienie
niniejszych ćwiczeń?
Książka jest cienka i nie może zastąpić szczegółowych dokumentacji języka, w każdym
wydaniu liczących przynajmniej kilkaset stron. Zawiera jednak setkę mikroeksperymen-
tów z językiem C++ i komputerem. Te ćwiczenia są ułożone w precyzyjną sekwencję.
Najpierw dowiadujesz się, co kryje się pod najważniejszym pojęciem programowania
obiektowego, czyli pod terminem klasy. Potem długo badasz wewnętrzny ustrój klasy.
Pod koniec przyglądasz się zagadnieniom uzyskiwania nowych klas z klas napisanych
wcześniej — czyli tak zwanemu dziedziczeniu.
8
G++. Ćwiczenia zaawansowane
Przez cały czas — i to od samego początku — w Twoich algorytmach będą się przewi-
jały charakterystyczne frazy współpracy z biblioteką standardową języka C++. Jest to
wyrazem prawdziwej rewolucji, która dosłownie na naszych oczach dokonuje się w sztuce
programowania. Jeszcze niedawno tak zwane
wzorce klas (szablony)
były uznawane za
zagadnienia skrajnie trudne, kończące typowe kursy programowania.
Standard C++
diametralnie zmienił tę hierarchię stopni trudności — szablony okazały się najbardziej
nośną częścią języka, niemal zupełnie uwalniającą programistę od tworzenia skompli-
kowanych struktur danych. Wkrótce kursy programowania przestaną zajmować się we-
wnętrzną strukturą dwukierunkowej listy (list) czy stosu (stack), bo od niedawna nie
musimy sami tworzyć tych budzących grozę algorytmów. Podobnie jak nie pytamy, w
jaki sposób procesor kalkulatora sumuje dwie liczby, nie będziemy zainteresowani py-
taniem, jak działa kolejka danych (queue), zbiór (set) czy dynamiczna tablica (vector).
Struktury te mamy bowiem wbudowane w
Standard C++.
Po
sumiennym i aktywnym przerobieniu ćwiczeń będziesz potrafił programować
obiektowo — będziesz w stanie samodzielnie pisać programy w języku C++. Muszę Cię
jednak ostrzec, że współczesny program komputerowy to tyleż zasadniczy algorytm, co
wcale niełatwy do skonstruowania interfejs — a interfejsem nie zajmuję się tutaj w naj-
mniejszym stopniu. Mówiąc inaczej — ta książka wprowadzi bardziej w świat czystego
języka niż praktycznych rozwiązań. Mam jednak nadzieję, że podczas lektury i pracy
przy komputerze wykonasz najważniejszy krok w swojej programistycznej edukacji —
będziesz przygotowany do dalszego studiowania nieograniczonego spektrum szczegóło-
wych zagadnień.
Będziesz programistą. Czyż to nie brzmi dumnie?
8
C++. Ćwiczenia zaawansowane
Przez cały czas — i to od samego początku — w Twoich algorytmach będą się przewi-
jały charakterystyczne frazy współpracy z biblioteką standardową języka C++. Jest to
wyrazem prawdziwej rewolucji, która dosłownie na naszych oczach dokonuje się w sztuce
programowania. Jeszcze niedawno tak zwane
wzorce klas (szablony)
były uznawane za
zagadnienia skrajnie trudne, kończące typowe kursy programowania.
Standard C++
diametralnie zmienił tę hierarchię stopni trudności — szablony okazały się najbardziej
nośną częścią języka, niemal zupełnie uwalniającą programistę od tworzenia skompli-
kowanych struktur danych. Wkrótce kursy programowania przestaną zajmować się we-
wnętrzną strukturą dwukierunkowej listy (1 i st) czy stosu (stack), bo od niedawna nie
musimy sami tworzyć tych budzących grozę algorytmów. Podobnie jak nie pytamy, w
jaki sposób procesor kalkulatora sumuje dwie liczby, nie będziemy zainteresowani py-
taniem, jak działa kolejka danych (queue), zbiór (set) czy dynamiczna tablica (vector).
Struktury te mamy bowiem wbudowane w
Standard
C++.
Po sumiennym i aktywnym przerobieniu ćwiczeń będziesz potrafił programować
obiektowo — będziesz w stanie samodzielnie pisać programy w języku C++. Muszę Cię
jednak ostrzec, że współczesny program komputerowy to tyleż zasadniczy algorytm, co
wcale niełatwy do skonstruowania interfejs — a interfejsem nie zajmuję się tutaj w naj-
mniejszym stopniu. Mówiąc inaczej — ta książka wprowadzi bardziej w świat czystego
języka niż praktycznych rozwiązań. Mam jednak nadzieję, że podczas lektury i pracy
przy komputerze wykonasz najważniejszy krok w swojej programistycznej edukacji —
będziesz przygotowany do dalszego studiowania nieograniczonego spektrum szczegóło-
wych zagadnień.
Będziesz programistą. Czyż to nie brzmi dumnie?
[ Pobierz całość w formacie PDF ]
zanotowane.pl doc.pisz.pl pdf.pisz.pl lemansa.htw.pl
Wprowadzenie
Dlaczego warto uczyć się języka C++?
Przez wiele lat język C++ wydawał się być narzędziem nieco zbyt trudnym do po-
wszechnego stosowania. Niektórzy uważali, że jest za bardzo podobny do asemblera, bo
umożliwia przeprowadzanie operacji na niskim poziomie, zwanym poziomem maszy-
nowym. Inni wskazywali na nadmiarowość możliwości języka — choćby w gruncie rzeczy
niepotrzebne, bo realizowane także innymi środkami przeciążanie operatorów. Język
C++, a wcześniej jego protoplasta C, miał co prawda opinię języka kultowego, ale przy tym
trudnego, nazbyt ascetycznego w zapisie i wręcz prowokującego do popełniania błędów.
Ciągle był to jednak język o niezmierzonym bogactwie bibliotek, umożliwiający pro-
gramistyczną pracę na najróżniejszych polach — od programowania domowego aż po
ekstremalnie złożone zagadnienia systemów operacyjnych.
Kilka lat temu ten hermetyczny, nieco rozchełstany, żywiołowo rozwijający się język
doczekał się precyzyjnej standaryzacji. Pojawiły się w nim gotowe struktury danych,
umożliwiające natychmiastowe implementacje takich złożoności, jak listy, kolejki czy
stosy. Jednocześnie ta początkowa nadmiarowość technicznych środków wyrazu do-
skonale wpasowała się w jeden spójny system zwany niekiedy Standardem C++.
Dlaczego warto nauczyć się Standardu C++, choć jest to język trudny? Odpowiedź jest
prosta — by w przyszłości łatwo pisać oprogramowanie. Ten wysiłek z całą pewnością
się opłaci i bardzo szybko się zwróci. Odkąd otrzymaliśmy nową, integralną część języka,
zwaną biblioteką standardową, jeszcze nigdy programowanie nie było tak łatwe. Ale żeby
to dostrzec, trzeba się tego języka najpierw nauczyć...
6
C++. Ćwiczenia zaawansowane
Uczy się trudnego języka, by zostać najlepszymi, najszybszymi, najdokładniejszymi pro-
gramistami współczesnych komputerów.
Czeka Cię więc wyjątkowa przygoda intelektualna — naprawdę zazdroszczę jej tym,
którzy teraz postanawiają poznać język C++ i wszystko jest przed nimi. Nie chciałbym
jednak Cię straszyć. O ile wirtuozeria języka jest dostępna dla programistów wybitnych,
sprawne posługiwanie się Standardem C++ nie jest umiejętnością niezwykłą. Język
C++ nie jest zarezerwowany dla zawodowych informatyków — główne pole jego za-
stosowań to różne zagadnienia w naukach przyrodniczych, przy których zazwyczaj nie
pracują informatycy.
Co Jest potrzebne
do Korzystania z tej książki?
Za chwilę powiem, co powinieneś już potrafić, przystępując do pracy z tą książką. Jeśli
ktoś spełnia te kryteria — to proszę mi wierzyć — już zna większą część tajemnicy.
Najtrudniejsza w programowaniu jest umiejętność wyobrażania sobie algorytmów i to
niezależnie od języka programowania. Najtrudniejszy jest elementarz programowania,
czyli tworzenie odpowiednich do konkretnego zadania zmiennych, konstruowanie wy-
rażeń, warunków logicznych i pętli, definiowanie funkcji. Jeśli dysponujesz takimi pod-
stawami, reszta jest stosunkowo prosta.
Książka ta koncentruje się na tak zwanym programowaniu obiektowym, czyli na umie-
jętności tworzenia klas i operowaniu klasami. Przystępując do lektury, powinieneś znać
język C++ w podstawowym zakresie, w zasadzie bliższym staremu językowi C. Powi-
nieneś więc znać podstawowe instrukcje sterujące i potrafić komponować z nich proste
algorytmy. Musisz posługiwać się standardowymi (wbudowanymi) typami danych. Po-
winieneś mieć minimum wiedzy na temat wskaźników. Potrafić zadeklarować, napisać
i wywołać własną funkcję, ukrywającąjakiś fragment algorytmu.
Wszystkie te elementy wstępu do sztuki programowania opisałem w pierwszej części
moich ćwiczeń („C++. Ćwiczenia praktyczne", Helion 2004,
cwcpp.htm).
Jeśli uznasz, że poziom niniejszych ćwiczeń jest zbyt wysoki, polecam
uważne przerobienie tamtej, elementarnej książki.
Studiowanie książki wymaga wcześniejszego przygotowania odpowiedniego oprogra-
mowania, tak by było gdzie kompilować i badać tę setkę przykładów, którą dla Ciebie
przygotowałem. Przykłady będą banalne w dosłownym tego słowa znaczeniu, zdarzy
się, że będą składały się z jednej, istotnej linijki kodu. Do ich opracowania wystarczy
najprostszy kompilator — choćby dostępne bezpłatnie w sieci środowisko DEV C++.
Może także być znacznie potężniejszy C++Builder czy równie potężny Visual C++.
Narzędzia te jednak przestawisz na ubogi tryb konsoli i ich ogromny potencjał w zasa-
dzie tylko zajmie miejsce na dysku.
Wprowadzenie
7
Proszę uważne skompletować oprogramowanie, tak by podczas studiowania tajemnic
C++już nic Ci nie przeszkadzało. We wspominanej książce
C++. Ćwiczenia praktyczne
poświęcam sporo uwagi zagadnieniu wyboru środowiska do programistycznej pracy
oraz jego wstępnej regulacji. Tutaj pierwszy rozdział też poświęciłem czynnościom roz-
ruchowym, których w praktycznym kursie programowania zlekceważyć w żaden sposób
nie wolno.
Jak najlepiej pracować z tą książka?
Książkę należy czytać przy włączonym komputerze, dlatego zalecam, byś przed rozpo-
częciem lektury odpowiednio przygotował się do pracy — uzyskał wielogodzinny, nie-
ograniczony dostęp do komputera i zainstalował odpowiednie oprogramowanie. Każdy
kolejny przykład powinien być natychmiast wprowadzony do komputera, skompilowany,
uruchomiony i dokładnie przeanalizowany. Podawane tutaj programy są na tyle proste i
krótkie, że wprowadzanie ich do komputera nie stanowi żadnego problemu. Te kilka
minut, przeznaczone na wpisywanie tekstu źródłowego, proszę traktować jako chwilę
zasłużonego relaksu, po którym przystępujesz do ciężkiej, umysłowej pracy.
W każdym miejscu każdego przerabianego programu należy odważnie dokonywać róż-
nych zmian i modyfikacji. Wiele zmian będę sugerować w krótkich omówieniach pre-
zentowanych ćwiczeń. Podczas nauki Twój komputer wiele razy się zawiesi — a o to
w języku C++ szczególnie łatwo — ale jeśli ma to wyjaśnić jakieś szczegóły opracowy-
wanych algorytmów, będzie bardzo owocnym restartem maszyny...
Ćwiczenia najlepiej jest przerabiać w takiej kolejności, w jakiej je tutaj podaję (przy-
najmniej w obrębie rozdziału), bo bardzo często następne zadanie zawiera w sobie mody-
fikację poprzedniego. Opracowując ćwiczenia kolejno, możesz zaoszczędzić dużo czasu
na wprowadzaniu do edytora tekstu programu źródłowego.
Pliki źródłowe wszystkich ćwiczeń znajdziesz pod internetowym adresem:
Co Ci da przerobienie
niniejszych ćwiczeń?
Książka jest cienka i nie może zastąpić szczegółowych dokumentacji języka, w każdym
wydaniu liczących przynajmniej kilkaset stron. Zawiera jednak setkę mikroeksperymen-
tów z językiem C++ i komputerem. Te ćwiczenia są ułożone w precyzyjną sekwencję.
Najpierw dowiadujesz się, co kryje się pod najważniejszym pojęciem programowania
obiektowego, czyli pod terminem klasy. Potem długo badasz wewnętrzny ustrój klasy.
Pod koniec przyglądasz się zagadnieniom uzyskiwania nowych klas z klas napisanych
wcześniej — czyli tak zwanemu dziedziczeniu.
8
G++. Ćwiczenia zaawansowane
Przez cały czas — i to od samego początku — w Twoich algorytmach będą się przewi-
jały charakterystyczne frazy współpracy z biblioteką standardową języka C++. Jest to
wyrazem prawdziwej rewolucji, która dosłownie na naszych oczach dokonuje się w sztuce
programowania. Jeszcze niedawno tak zwane
wzorce klas (szablony)
były uznawane za
zagadnienia skrajnie trudne, kończące typowe kursy programowania.
Standard C++
diametralnie zmienił tę hierarchię stopni trudności — szablony okazały się najbardziej
nośną częścią języka, niemal zupełnie uwalniającą programistę od tworzenia skompli-
kowanych struktur danych. Wkrótce kursy programowania przestaną zajmować się we-
wnętrzną strukturą dwukierunkowej listy (list) czy stosu (stack), bo od niedawna nie
musimy sami tworzyć tych budzących grozę algorytmów. Podobnie jak nie pytamy, w
jaki sposób procesor kalkulatora sumuje dwie liczby, nie będziemy zainteresowani py-
taniem, jak działa kolejka danych (queue), zbiór (set) czy dynamiczna tablica (vector).
Struktury te mamy bowiem wbudowane w
Standard C++.
Po
sumiennym i aktywnym przerobieniu ćwiczeń będziesz potrafił programować
obiektowo — będziesz w stanie samodzielnie pisać programy w języku C++. Muszę Cię
jednak ostrzec, że współczesny program komputerowy to tyleż zasadniczy algorytm, co
wcale niełatwy do skonstruowania interfejs — a interfejsem nie zajmuję się tutaj w naj-
mniejszym stopniu. Mówiąc inaczej — ta książka wprowadzi bardziej w świat czystego
języka niż praktycznych rozwiązań. Mam jednak nadzieję, że podczas lektury i pracy
przy komputerze wykonasz najważniejszy krok w swojej programistycznej edukacji —
będziesz przygotowany do dalszego studiowania nieograniczonego spektrum szczegóło-
wych zagadnień.
Będziesz programistą. Czyż to nie brzmi dumnie?
8
C++. Ćwiczenia zaawansowane
Przez cały czas — i to od samego początku — w Twoich algorytmach będą się przewi-
jały charakterystyczne frazy współpracy z biblioteką standardową języka C++. Jest to
wyrazem prawdziwej rewolucji, która dosłownie na naszych oczach dokonuje się w sztuce
programowania. Jeszcze niedawno tak zwane
wzorce klas (szablony)
były uznawane za
zagadnienia skrajnie trudne, kończące typowe kursy programowania.
Standard C++
diametralnie zmienił tę hierarchię stopni trudności — szablony okazały się najbardziej
nośną częścią języka, niemal zupełnie uwalniającą programistę od tworzenia skompli-
kowanych struktur danych. Wkrótce kursy programowania przestaną zajmować się we-
wnętrzną strukturą dwukierunkowej listy (1 i st) czy stosu (stack), bo od niedawna nie
musimy sami tworzyć tych budzących grozę algorytmów. Podobnie jak nie pytamy, w
jaki sposób procesor kalkulatora sumuje dwie liczby, nie będziemy zainteresowani py-
taniem, jak działa kolejka danych (queue), zbiór (set) czy dynamiczna tablica (vector).
Struktury te mamy bowiem wbudowane w
Standard
C++.
Po sumiennym i aktywnym przerobieniu ćwiczeń będziesz potrafił programować
obiektowo — będziesz w stanie samodzielnie pisać programy w języku C++. Muszę Cię
jednak ostrzec, że współczesny program komputerowy to tyleż zasadniczy algorytm, co
wcale niełatwy do skonstruowania interfejs — a interfejsem nie zajmuję się tutaj w naj-
mniejszym stopniu. Mówiąc inaczej — ta książka wprowadzi bardziej w świat czystego
języka niż praktycznych rozwiązań. Mam jednak nadzieję, że podczas lektury i pracy
przy komputerze wykonasz najważniejszy krok w swojej programistycznej edukacji —
będziesz przygotowany do dalszego studiowania nieograniczonego spektrum szczegóło-
wych zagadnień.
Będziesz programistą. Czyż to nie brzmi dumnie?
[ Pobierz całość w formacie PDF ]