Lekcja 2 – Mój pierwszy projekt

Gdy wreszcie zainstalowaliśmy i skonfigurowaliśmy VS Code, możemy przystąpić do właściwej części nauki programowania, czyli kodowania. Aby dodać do naszego projektu pusty plik z kodem źródłowym, wybierz pozycję menu File|New File. W okienku, które się pojawi będziesz miał pustą stronę. Zapisz ten plik jako nazwa.cpp, ważne, aby podać rozszerzenie pliku C++ File (.cpp), a jako nazwę wpisz po prostu main. W ten sposób utworzysz plik main.cpp, który wypełnimy kodem naszego programu.Kod programu
Naturalnie, teraz przyjrzymy się bliżej naszemu elementarnemu projektowi, przy okazji odkrywając najważniejsze aspekty programowania w C++.

Komentarze

Pierwsza linijka:

// First – pierwszy program w C++

to komentarz, czyli dowolny opis słowny. Jest on całkowicie ignorowany przez kompilator, natomiast może być pomocny dla piszącego i czytającego kod. Komentarze piszemy w celu wyjaśnienia pewnych fragmentów kodu programu, oddzielenia jednej jego części od drugiej, oznaczania funkcji i modułów itp. Odpowiednia ilość komentarzy ułatwia zrozumienie kodu, więc stosuj je często. W C++ komentarze zaczynamy od // (dwóch slashy):

// To jest komentarz

lub umieszczamy je między /* i */, na przykład:

/* Ten komentarz może być bardzo długi
i składać się z kilku linijek. */

Funkcja main()

Kiedy uruchamiamy nasz program, zaczyna on wykonywać kod zawarty w funkcji main(). Od niej więc rozpoczyna się działanie aplikacji – a nawet więcej: na niej też to działanie się kończy. Zatem program (konsolowy) to przede wszystkim kod zawarty w funkcji main() – determinuje on bezpośrednio jego zachowanie. W przypadku rozważanej aplikacji funkcja ta nie jest zbyt obszerna, niemniej zawiera wszystkie niezbędne elementy. Jest to funkcję o zastrzeżonej nazwie main. Komunikacja pomiędzy funkcjami odbywa się za pośrednictwem argumentów i wartości zwracanych przez funkcje, bądź (rzadziej) przez zmienne zewnętrzne, których zakres obejmuje jeden plik źródłowy programu.

Najważniejszym z nich jest nagłówek, który u nas prezentuje się następująco:

int main()

Przykład struktury prostego programu:

#include <iostream>
#include <conio.h>
void czytaj();
void sortuj();
void pisz();
int main() {
  czytaj() ;
  sortuj() ;
  pisz() ;
  return 0;
}
void czytaj() { cout << „czytaj()” << endl; }
void sortuj() { cout << „sortuj()”<< endl; }
void pisz() { cout << „pisz()”<< endl; }

Po wykonaniu programu na ekrenie pojawią się trzy wiersze tekstu:

czytaj()
sortuj()
pisz()

#include

Dołączanie plików nagłówkowych.

Pozostały nam jeszcze pierwsze linijki programu: #include <iostream>, które wcale nie są tak straszne, jak wyglądają na pierwszy rzut oka. Przede wszystkim zauważmy, że zaczynają się one od znaku #, czym niewątpliwie różnią się od innych instrukcji języka C++. Są to bowiem specjalne polecenia wykonywane jeszcze przed kompilacją – tak zwane dyrektywy. Przekazują one różne informacje i komendy, pozwalają więc sterować przebiegiem kompilacji programu.

Jedną z tych dyrektyw jest właśnie #include. Jak sama nazwa wskazuje, służy ona do dołączania – przy jej pomocy włączamy do naszego programu pliki nagłówkowe. Ale czym one są i dlaczego ich potrzebujemy?

Jest instrukcją sterującą, która zleca kompilatorowi włączenie do programu zawartości pliku nagłówkowego o nazwie na przykład iostream. W naszym przypadku dyrektywa #include ma za zadanie włączenie do kodu plików iostream i conio.h. Pierwszy z nich pozwala nam pisać w oknie konsoli za pomocą cout oraz wyprowadzenia tekstu na ekran monitora, drugi plik nagłówkowy pozwala na przykład na losowanie liczb.

Każda funkcja programu składa się z czterech części: typu zwracanego (tutaj void oraz int), nazwy funkcji (tutaj main oraz czytaj), wykazu (listy) argumentów i ciała funkcji.

Ciało funkcji.

Ciała funkcji, objętego parą nawiasów klamrowych “{}”. Ciało funkcji może zawierać instrukcje, tj. polecenia do wykonania przez dany program. Instrukcja wywołania funkcji, np. czytaj().

Przykład programu.

Napisz program sprowadzający czy podane imię jest męskie czy żeńskie?

Kod źródłowy przykładu:

1: #include <iostream>
2: #include <math.h>
3: using namespace std;
4: int main()
5: {
6:     string imie;
7:     cout << „Podaj imie: „;
8:     cin >> imie;
9:     cout << „Witaj ” << imie;
10:   if ( imie[imie.length()-1] != 'a’ ) {
11:             cout << ” (chlopak)”;
12:   }
13:   } else {
14:   cout << ” (dziewczyna)”;
15:   }
16:   cout << ” na lekcji inf!”<< endl;
17:   return 0;
18: }

Należy wyjaśnić co zostało zrobione w tym kodzie źródłowym. W pierwszym i drugim wierszu dodajemy pliki nagłówkowe za pomocą #include, są to pliki nagłówkowe potrzebne do kompilacji naszego programu. W wierszu trzecim jest using namespace std; służy ten wpis do pozbycia się przestrzeni nazw, która jest zbiorem symboli, któremu nadajemy nazwę (tutaj std::), gdyż są częścią biblioteki standardowej języka C++.

Kolejna linia int main() to definiowanie funkcji zastrzeżonej (głównej), która musi być zawsze w pliku uruchamianym. Po niej jest klamra rozpoczynająca i kończąca w linii osiemnastej. W wierszu szóstym dodajemy zmienną typu string (znakowego) do której będziemy przypisywać podawane imiona do sprawdzenia. O zmiennych będziemy mówili w lekcji 3.

W wierszu 7 instrukcja cout służy do wyświetlania na urządzeniu wyjścia (monitor) tekstu podanego w znakach cudzysłów, zaś za pomocą instrukcji cin mamy możliwość  przypisania danych podanych przez użytkownika do zmiennej o nazwie imie (typu string). Kolejne linie to sprawdzanie, czy podane słowo, a dokładnie ostatnia litera (if) nie jest (!=) literą „a”.  Jeśli jest literką różną od „a” (prawda) to wyświetl napis „(chłopak)”, w przeciwnym wypadku (else), wypisz słowo „dziewczyna”.

Na końcu mamy (wiersz:17) jeszcze return 0;
Wykonanie funkcji main kończy się instrukcją return 0; jest to wymagany przez język C++ sposób opuszczenia bloku main. W ogólności instrukcja return może wystąpić w dwóch postaciach: return; oraz return wyrażenie; Pierwszą z nich można stosować w przypadku funkcji typu void jako opcję. Zauważmy, że w naszym przykładzie funkcja main() jest typu int. W większości kompilatorów przy deklarowaniu i definiowaniu funkcji, słowo kluczowe int można pominąć. W takim przypadku kompilator przyjmuje int jako domyślny typ zwracany.