Pierwszy program - wyjaśnienie działania

W tej lekcji dowiesz się w końcu krok po kroku, co robił Twój pierwszy program. Zanim jednak to nastąpi, przedstawię Ci jeszcze inne zagadnienie.


Komentarze w programach

Oprócz przedstawionych w poprzedniej lekcji elementów każdego programu, można wyróżnić jeszcze jeden element - komentarze. W przeciwieństwie jednak do wymienionych wcześniej elementów, komentarze nie mają żadnego znaczenia dla kompilatora.


Jedynym powodem stosowania komentarzy jest wygoda osoby piszącej programy. Co prawda pisząc program, trzeba będzie poświęcić dodatkowy czas na napisanie komentarza, jednak pomyśl jak dużo czasu zyskasz, gdy za kilka dni, tygodni czy miesięcy znów spojrzysz na program i uda Ci się bez problemu zrozumieć zawiłe fragmenty kodu właśnie dzięki komentarzom.


Stosowanie komentarzy ponadto jest niezbędne również, gdy nad programem pracuje kilka osób. Także pisząc programy, których fragmenty będziesz wykorzystywać w przyszłości w innych programach, komentarze są niezbędne.


Komentarze można zapisywać w programach na dwa sposoby:


/*To
jest
komentarz
kilkulinijkowy
*/

lub

// To jest komentarz jednolinijkowy.

Pierwsza metoda służy do dłuższych komentarzy lub takich komentarzy, które chcemy, aby zajmowały tylko pewną część linii. Cały komentarz mieści się między /* oraz */. Znaki rozpoczynające komentarz mogą być rozmieszczone dowolnie - mogą być w tej samej linii co tekst komentarza, mogą być w różnych liniach lub mogą się znajdować w jednej linii.


Druga metoda służy do komentarzy jednolinijkowych. Komentarz rozciąga się od // aż do końca linii. Nie można komentarza zakończyć przed końcem linii. Dlatego jeśli chcemy zakończyć komentarz wcześniej, a za nim umieścić normalny kod programu, musimy wówczas użyć pierwszej metody.


Komentarze mogą być ponadto również bardzo przydatne podczas testowania programu. Jeśli nie wiemy gdzie jest błąd w naszym programie, możemy pewne części programu otoczyć komentarzem - wówczas ta część programu się nie wykona. Otaczając coraz więcej kodu komentarzami, uda nam się w końcu zmniejszyć kod programu tak bardzo, że będziemy mogli stwierdzić, że tam właśnie jest błąd. Po poprawieniu błędu należy wtedy oczywiście usunąć wszystkie znaki komentarzy, tak aby wykonywał się cały kod programu.


Jak działa Twój pierwszy program

Jeszcze raz przytoczę pierwszy program w C++, jaki Ci przedstawiłem:


#include <iostream>
#include <cstring>

using namespace std;

int main()
{
  string imie;
  cout <<"Podaj imie: ";
  cin >>imie;
  cin.ignore();
  cout <<"Witaj "<<imie<<endl;
  cout <<"Gratulacje. To Twoj pierwszy program!"<<endl;
  cout <<"Nacisnij ENTER aby zakonczyc"<<endl;
  getchar();
  return 0;
}
program nr 1.1

Ponieważ wiesz już co nieco o budowie programu w C++, mam nadzieję, że uda Ci się teraz zrozumieć przynajmniej część programu.


Na początku dołączamy dwa pliki nagłówkowe - już wiesz do czego pliki nagłówkowe służą. Plik iostream dołączamy, aby móc skorzystać z wypisywania na ekran (cout) oraz pobierania napisów z klawiatury (cin). Natomiast plik cstring dołączamy, aby móc skorzystać z typu string, który umożliwia operacje na napisach.


Następnie dołączamy standardową przestrzeń nazw std. Mimo, że to już wiesz to powtórzę - dzięki temu skracamy sobie zapis w dalszej części programu.


W kolejnej części programu znajduje się główna funkcja programu main, w której pomiędzy { oraz return 0; wstawiliśmy właściwą treść naszego programu.


Wszystkie linie, które zaczynają się od słowa cout służą do wypisywania na ekran. Zauważ, że po każdym cout znajduje się operator <<. Zwróć też uwagę, że większość napisów wypisywanych na ekran znajduje się w podwójnych cudzysłowach.


Dodatkowo na końcu linii powodujących wypisanie napisu na ekran pojawia się słowo endl. Jest to manipulator języka C++ umożliwiający przejście do następnej linii. Gdybyśmy nie użyli tego manipulatora, po uruchomieniu programu wszystkie napisy pojawiłyby się w jednej linii.


Manipulator endl jest manipulatorem języka C++ umożliwiającym przejście do nowej linii. Alternatywnie, aby przejść do nowej linii można użyć znaku nowej linii '\n'. Obie wersje mogą się różnić szybkością działania i w zależności od zastosowań jedna wersja przejścia do nowej linii może być lepsza od drugiej.


Linia zaczynająca się od cin służy do pobrania Twojego imienia z klawiatury. Zwróć uwagę, że po cin znajduje się operator >> a następnie słowo imie ale tym razem bez cudzysłowów.


Linia string imie; ma sygnalizować, że w naszym programie będziemy chcieli wykorzystać pewien napis. PóĽniej okazuje się, że napis pobieramy z klawiatury, a następnie wypisujemy na ekran.


Linia getchar(); powoduje, że nasz program czeka aż użytkownik naciśnie ENTER. Tak naprawdę getchar to pewna gotowa funkcja, która znajduje się w pliku nagłówkowym cstdio.


Jak widzisz, w programie nie dołączyłem jednak pliku nagłówkowego cstdio, ale tylko dlatego, że w przypadku mojego kompilatora i moich plików nagłówkowych, plik cstdio jest dołączany automatycznie. Pamiętaj jednak, że w niektórych kompilatorach będziesz musiał ręcznie dołączyć plik nagłówkowy cstdio, aby móc skompilować ten i inne programy przedstawione w tym kursie języka C++.

Funkcja ignore()

Zauważ, że w kodzie programu znajduje się jeszcze jedna linia, o której w ogóle nie wspomniałem:


  cin.ignore();

Zauważ też, że linię wcześniej znajduje się

  cin >>imie;

Otóż wspomniana przeze mnie linia ze słowem ignore powoduje wyeliminowanie pewnego nieprzyjemnego skutku. Kiedy program poprosił Cię o wpisanie imienia, aby zasygnalizować, że wpisywanie jest już zakończone trzeba było użyć klawisza ENTER. Czy jednak klawisz ENTER wchodzi w skład Twojego imienia? Na pewno nie. Dlatego też klawisz ENTER został niejako zapamiętany, że został wciśnięty, jednak nie został dodany do Twojego imienia.


Co to powoduje? Otóż sprawia to, że w przypadku gdy będziemy chcieli jeszcze raz pobrać jakiś napis z klawiatury mogą pojawić się problemy. Dlatego też użyliśmy funkcji ignore. Funkcja ta znajduje się w pliku nagłówkowym iostream. Dzięki użyciu tej funkcji sprawiliśmy, że to, że klawisz ENTER został wciśnięty zostanie "zapomniane" i nie będzie żadnych problemów.


Nie pytaj w tym momencie dlaczego jednak zapis linii z funkcją ignore jest taki a nie inny, bowiem na to jest jeszcze dużo za wcześnie. Najlepiej zapamiętaj ten zapis i zapamiętaj, że zawsze kiedy pobieramy coś z klawiatury, warto w następnej linii użyć funkcji ignore - dzięki temu unikniesz problemów na przyszłość.


Jak działa ten program - wyjaśnienie drugie

Jeśli nie do końca udało Ci się zrozumieć jak działa ten program, teraz postaram się jeszcze raz przedstawić, co program robi. Zastrzegam jednak, że będzie to bardzo nieformalne tłumaczenie, więc jeśli jesteś już bardziej zaawansowanym użytkownikiem, lepiej omiń następny akapit.


Ogólnie mówiąc program działa tak: najpierw sygnalizuje, że będzie chciał używać napisu. Następnie wypisuje komunikat na ekran z prośbą o podanie imienia. Teraz pobiera Twoje imię z klawiatury oraz zaraz po tym zapobiega skutkowi naciśnięcia przez Ciebie klawisza ENTER. Teraz wypisuje komunikat na ekran o treści "Witaj " wraz z imieniem podanym przez Ciebie wcześniej z klawiatury. Następnie wypisuje kolejny komunikat, w którym gratuluje Ci napisania pierwszego programu. Teraz wypisuje komunikat informacyjny, że należy nacisnąć ENTER, aby zakończyć program i czeka tak długo gdy naciśniesz ENTER. Na samym końcu informuje system operacyjny, że program wykonał się w sposób prawidłowy.


Wykorzystanie komentarzy do wyjaśnienia

Poniżej jeszcze jeden przykład jak można wyjaśniać program. Skorzystamy tutaj z komentarzy, bo to one zazwyczaj właśnie służą do wyjaśniania kodu programu.


#include <iostream> // dla cin, cout, ignore, getchar
#include <cstring> // dla string

using namespace std; // wlaczenie standardowej przestrzeni nazw
/*
Ponizej znajduje sie funkcja main
*/

int main ()
{
  string imie; // bedziemy wykorzystywac napis
  cout <<"Podaj imie: "; // wypisanie na ekran
  cin >>imie; // pobranie imienia z klawiatury
  cin.ignore(); // zignorowanie ENTERa nacisnietego przed momentem
  cout <<"Witaj "<<imie<<endl; // wypisanie komunikatu
  cout <<"Gratulacje. To Twoj pierwszy program!"<<endl; // wypisanie komunikatu
  cout <<"Nacisnij ENTER aby zakonczyc"<<endl; // wypisanie komunikatu
  getchar(); //czekanie na nacisniecie klawisza ENTER
  return 0; // informacja, ze program zadzialal prawidlowo
} // koniec funkcji main
program nr 3.2

Czym jest ten "Hello world"

Na koniec warto dowiedzieć się czym jest "Hello world", o którym być może kiedyś usłyszysz. "Hello world" jest programem, który jest w zasadzie pierwszym programem, jaki użytkownik pisze poznając nowy język programowania. Można by rzec, że jest to taka swoista programistyczna tradycja.


Jak jednak widzisz, pierwszy program jaki Ci przedstawiłem był zupełnie inny i znacznie trudniejszy od programu "Hello world". Ale, żeby uspokoić swoje sumienie i Twoją ciekawość, oto przedstawiam Ci program "Hello world" w całej okazałości. Mam nadzieję, że komentarz, co robi ten program jest już w tym momencie zbyteczny.


#include <iostream>

using namespace std;

int main ()
{
  cout <<"Hello world"<<endl;
  return 0;
}
program nr 3.3

Jak widzisz program jest bardzo prosty. Jeśli po skompilowaniu i uruchomieniu program tylko miga Ci przed oczami, spróbuj w jakiś własny sposób zatrzymać wymik wyświetlenia na ekranie.


powrót