Lekcja 2LEKCJA 2 Przyjrzyjmy się bliżej językowi C++ Podczas Lekcji 1 utworzyłeś kilka programów w C++. Na razie nie chodziło nam o to, abyś zrozumiał instrukcje tego języka, ale raczej abyś poznał proces tworzenia i kompilowania programów w C++. Podczas bieżącej lekcji po raz pierwszy bliżej przyjrzysz się instrukcjom tworzącym program w C++. Przekonasz się, że większość programów w C++ ma ten sam format z jedną lub większą liczbą instrukcji #include na początku, dalej linią składającą się z void main(void), a następnie zbiorem instrukcji pogrupowanych przez lewostronne i prawostronne klamerki { } . Podczas tej lekcji dowiesz się, że te z pozoru niezrozumiałe instrukcje są tak naprawdę bardzo proste. Po jej przerobieniu będziesz znał następujące zagadnienia kluczowe: Dzięki instrukcji #include możesz korzystać z plików nagłówkowych, zawierających instrukcje C++ lub definicje programu. Główna część programu w C++ zaczyna się od instrukcji void main(void). Program składa się z jednej lub większej liczby funkcji utworzonych przez powiązane między sobą instrukcje, które wykonują określone zadanie. Przy wyświetlaniu wyjścia na ekran twoje programy będą w obszerny sposób korzystać ze strumienia wyjściowego cout. Tworząc programy w C++, operujesz w rzeczywistości instrukcjami. Podczas dalszych lekcji poznasz instrukcję przypisania, która przypisuje wartości zmiennym, instrukcję if, dzięki której program może podejmować decyzje itd. Na razie będziemy po prostu mówić o zawartości programu jako o instrukcjach programu.
Przyjrzyjmy się instrukcjom programu Podczas Lekcji l utworzyłeś w języku C++ program pod nazwą PIERWSZY.CPP, który zawierał następujące instrukcje: #include void main (void) { cout << "Wygraj z C++!"; }
W tym przypadku program składa się z trzech instrukcji. Klamerki (zwane symbolami grupowania) grupują powiązane ze sobą instrukcje:
Omówimy teraz szczegółowo każdą z instrukcji programu.
Znaczenie instrukcji #include Każdy z programów przedstawionych w Lekcji l zaczynał się od następującej instrukcji #include: #include
Przy tworzeniu programów w C++ możesz korzystać z instrukcji i definicji, które daje Ci kompilator. Podczas kompilacji programu instrukcja #include nakazuje kompilatorowi, by włączył zawartość podanego pliku na początek twojego programu. W naszym przypadku kompilator włączy zawartość pliku iostream.h. Pliki z rozszerzeniem h, włączane na początku (w nagłówku) programu, noszą nazwę plików nagłówkowych. Gdy zajrzysz do katalogu zawierającego pliki kompilatora, powinieneś tam znaleźć podkatalog INCLUDE, w którym jest wiele różnych plików nagłówkowych. Każdy plik nagłówkowy zawiera definicje potrzebne kompilatorowi do wykonywania różnych operacji. Na przykład, jest plik nagłówkowy , który daje nam definicje operacji matematycznych, inny definiuje operacje na plikach itd. Pliki nagłówkowe są w formacie ASCII, a więc możemy wyświetlać ich zawartość na ekranie lub je drukować. Na razie nie zawracaj sobie głowy tym, co w nich jest. Natomiast przyjmij po prostu, że dzięki instrukcji #include możesz z nich korzystać. We wszystkich programach w C++, które przedstawimy w tej książce, znajdziesz instrukcje #include, które musisz umieścić w swoich programach. Przyjrzyjmy się plikom nagłówkowym C++ Każdy program w C++, który utworzysz, będzie się zaczynał od jednej lub większej liczby instrukcji #include. Te instrukcje nakazują kompilatorowi włączenie do programu zawartości podanego pliku (pliku nagłówkowego), tak jak gdyby program zawierał to, co jest na danym pliku. Pliki nagłówkowe zawierają definicje potrzebne w programie do różnego typu operacji. Są pliki nagłówkowe definiujące operacje wejścia/wyjścia C++, inne definiują funkcje usługowe systemu operacyjnego (np. zwracające aktualną datę i godzinę) i wiele innych. Pliki nagłówkowe tak samo jak programy w C++ są plikami ASCII, które można wyświetlać czy drukować. Aby lepiej zrozumieć co zawierają, wydrukuj teraz plik nagłówkowy iostream.h, z którego będziemy korzystać we wszystkich przedstawionych w książce przykładach. Powinieneś go znaleźć w podkatalogu INCLUDE znajdującym się w katalogu zawierającym pliki kompilatora C++. Przy użyciu edytora tekstów możesz wyświetlić zawartość pliku nagłówkowego, a następnie go wydrukuj. Uwaga: Nigdy nie zmieniaj zawartości plików nagłówkowych. Jeśli to zrobisz, kompilator może sygnalizować błędy we wszystkich programach, jakie tworzysz.
Znaczenie instrukcji void main(void) Gdy tworzysz program w C++, twój plik źródłowy może zawierać wiele instrukcji. Jak zobaczysz, porządek w jakim te instrukcje występują w programie niekoniecznie jest zgodny z kolejnością, w jakiej będą one wykonywane podczas uruchamiania programu. Każdy program w C++ ma jedno miejsce, w którym zaczyna się jego wykonywanie, instrukcję main programu. W programach w C++ instrukcja void main(void) określa miejsce początkowe programu. Gdy twoje programy będą większe i bardziej złożone, będziesz je dzielić na mniejsze i łatwiejsze do opanowania części. Wtedy instrukcja void main(void) będzie określać grupę głównych instrukcji, czyli część programu wykonywaną na początku. Znaczenie instrukcji main programu Pliki źródłowe C++ mogą zawierać wiele instrukcji. Podczas uruchamiania programu instrukcja void main(void) jest instrukcją main programu, czyli pierwszą instrukcją, jaką program wykonuje. Twoje programy w C++ muszą zawierać jedną i tylko jedną instrukcję zawierającą nazwę main. Przy czytaniu dużych programów w C++ szukaj instrukcji zawierającej nazwę main, aby ustalić, w którym miejscu zaczyna się wykonywanie programu.
Znaczenie słowa void Gdy twoje programy staną się bardziej złożone, będziesz je dzielić na mniejsze i łatwiejsze do opanowania części zwane funkcjami. Funkcja to po prostu zestaw instrukcji programu, które realizują określone zadanie. Na przykład, jeśli tworzysz program listy płac, to możesz utworzyć funkcję pod nazwą zarobki, która oblicza pensję pracownika. Analogicznie przy pisaniu programu matematycznego zdefiniujesz funkcję pierwiastek_kwadratowy czy potęga, która będzie zwracać wynik określonego działania matematycznego. Gdy używasz funkcji w swoim programie, to wykonuje ona swoje zadanie, a następnie zwraca wynik do programu. Każda funkcja w programie ma niepowtarzalną nazwę. Ponadto każdy program ma co najmniej jedną funkcję. Programy przedstawione w Lekcji l miały jedną funkcję pod nazwą main. Podczas Lekcji 9 omówimy funkcje szczegółowo. A na razie powinieneś po prostu zrozumieć, że funkcja składa się z jednej lub większej liczby powiązanych instrukcji, które realizują określone zadanie. Przyglądając się programom w C++ będziesz często napotykać słowo void. W programach oznacza ono, że dana funkcja nie zwraca żadnej wartości lub nie pobiera żadnych wartości. Na przykład, jeśli pracujesz w środowisku MS-DOS lub UNIX, to programy mogą przy powrocie do systemu operacyjnego zwracać wartość, która określa czy program zakończył swe działanie powodzeniem i którą można sprawdzać w plikach typu BAT. W środowisku MS-DOS pliki BAT badają wartość zwracaną przez program przy użyciu polecenia IF ERRORLEVEL. Na przykład, przypuśćmy, że program LISTA.EXE zwraca przy wyjściu do systemu operacyjnego jedną z następujących wartości, zależną od powodzenia jego działania: Zwracana wartośćZnaczenie 0 1 2Powodzenie Brak Pliku Brak papieru w drukarce
W pliku BAT MS-DOSa możesz w następujący sposób badać, czy program zakończył się powodzeniem przy użyciu polecenia ERRORLEVEL: LISTA IF ERRORLEVEL 0 IF NOT ERRORLEVEL 1 GOTO POWODZENIE IF ERRORLEVEL 1 IF NOT ERRORLEVEL 2 GOTO BRAK_PLIKU IF ERRORLEVEL 2 IF NOT ERRORLEVEL 3 GOTO BRAK_PAPIERU REM Inne instrukcje
Większość programów, które utworzysz, czytając tę książkę, nie będzie zwracać do systemu operacyjnego żadnej wartości. W związku z tym przed słowem main będziesz pisać słowo void, tak jak tutaj:
Podczas dalszych lekcji dowiesz się, że programy mogą korzystać z informacji (takiej jak nazwa pliku), którą użytkownik podaje w linii poleceń przy wywoływaniu programu. Gdy program nie używa informacji z linii poleceń, to umieszczasz słowo void w nawiasach za słowem main, tak jak tutaj: void main(void) Bardziej złożone programy być może będą zwracać wartości do systemu operacyjnego albo przyjmować parametry linii poleceń. Na razie używaj w programach słów void i main tak jak tutaj pokazaliśmy.
Znaczenie instrukcji grupowania { } Podczas pisania bardziej złożonych programów będziesz chciał, żeby komputer wykonywał jakiś zbiór instrukcji określoną liczbę razy, a inny ciąg instrukcji wykonywał tylko, jeśli spełniony jest określony warunek. W pierwszym przypadku komputer może wykonywać 100 razy ten sam zbiór instrukcji, aby dodać wyniki z egzaminu dla 100 studentów. W drugim przypadku komputer może wyświetlać na ekranie pewien komunikat, jeśli wszyscy studenci zdali, a inny jeśli są tacy, którzy nie zdali. W swoich programach w C++ będziesz przy użyciu lewej i prawej klamerki { } grupował powiązane ze sobą instrukcje. W prostych programach przedstawionych w pierwszych lekcjach z tej książki te symbole grupują instrukcje programu głównego.
Wyświetlanie wyjścia na ekran przy użyciu cout Każdy z programów w C++, które utworzyliśmy podczas lekcji 1, wyświetlał na ekranie komunikat. Aby wyświetlić informację, pisaliśmy cout i dwa znaki mniejszości (<<), tak jak tutaj: cout << "Cześć C++"; Słowo cout oznacza strumień wyjściowy, który C++ przypisuje do standardowego urządzenia wyjściowego systemu operacyjnego. Domyślnie system operacyjny przypisuje standardowe urządzenie wyjściowe do ekranu. Aby wyświetlić komunikat na ekranie, po prostu należy zastosować symbol podwójnego znaku mniejszości (operacja wstawiania) do strumienia wyjściowego cout. Podczas Lekcji 3 dowiesz się, że możesz przy użyciu operatora wstawiania przesyłać na ekran znaki, liczby i inne symbole. Znaczenie strumienia wyjściowego cout Jak pisaliśmy, programy w C++ wyświetlają komunikaty na ekranie przy uŻyciu strumienia wyjściowego cout. Korzystając z tego strumienia traktuj go jak ciąg znaków, które system operacyjny wyświetli na ekranie. Innymi słowy porządek, w jakim program przesyła znaki do strumienia cout definiuje kolejność, w jakiej będą one wyświetlone na ekranie. Na przykład, dla poniższych instrukcji programu: cout << "Ten komunikat pojawi się najpierw,"; cout << "a za nim ten komunikat"; system operacyjny wyświetli strumień znaków w sposób następujący. Ten komunikat pojawi się najpierw, za nim ten komunikat Nazwa operatora wstawiania (<<) jest związana z tym, że pozwala on programom wstawiać znaki do strumienia wyjściowego. Jak już wiemy, strumień wyjściowy cout standardowo odpowiada ekranowi. Innymi słowy, gdy programy przesyłają wyjście na cout, to pojawia się ono na ekranie. Ale przy użyciu operatorów kierunkowych wyjścia systemu operacyjnego możesz przesyłać wyjście programu do drukarki czy pliku. Na przykład, poniższe polecenie mówi systemowi MS-DOS, by przesłał wyjście programu PIERWSZY .EXE na drukarkę, a nie na ekran. C:\> PIERWSZY > PRN Jak dowiesz się z Lekcji 3, C++ pozwala przy użyciu cout wypisywać znaki, liczby całkowite, takie jak 1001 i liczby zmiennoprzecinkowe, takie jak 3.12345. Podczas Lekcji 8 przedstawimy także strumień wejściowy C++ pod nazwą cin, przy użyciu którego programy mogą wczytywać informację z klawiatury .
Zapamiętaj Podczas tej lekcji przedstawiliśmy wiele elementów wspólnych, które występują w programach w C++. Lekcja 3 pozwoli Ci nauczyć się jak przy użyciu strumienia cout wyświetlać znaki, liczby całkowite i wartości zmiennoprzecinkowe. Zobaczysz też w jaki sposób możesz formatować takie wyjście. Zanim jednak przejdziemy do Lekcji 3 upewnij się, że jesteś za pan brat z następującymi zagadnieniami kluczowymi: Większość programów w C++ zaczyna się od instrukcji #include, która nakazuje kompilatorowi włączyć do programu zawartość podanego pliku nagłówkowego. Pliki nagłówkowe zawierają dołączane przez kompilator definicje, których możesz używać w programie. Plik źródłowy może składać się z wielu instrukcji. Instrukcja void main(void) określa początek programu głównego, czyli pierwszą instrukcję wykonywaną przez program. W miarę jak twoje programy będą coraz bardziej złożone, będziesz grupować powiązane ze sobą instrukcje w mniejsze i łatwiejsze do pojęcia części zwane funkcjami. Do grupowania instrukcji programu służą lewa i prawa klamerka { }. Większość programów w C++ przy użyciu strumienia wyjściowego cout wyświetla informacje na ekranie. Ale korzystając z operatorów kierunkowych wyjścia systemu operacyjnego możesz skierować wyjście strumienia cout do pliku, urządzenia (np. drukarki), a nawet do innego programu.