Struktura programu w języku C++

Sposób instalacji środowiska programowania Dev-C++ opisaliśmy dokładnie w  tym rozdziale.

Czynności wstępne

  1. Utwórz w swoim katalogu nowy katalog projektowy o nazwie 01 - operację tę możesz również wykonać w oknie zapisu nowego projektu na dysk.

  2. Uruchom Dev-C++.

  3. Utwórz nowy projekt konsoli.

  4. Projekt zapisz w katalogu projektowym

  5. Wymaż zawartość edytora programu źródłowego.

Komentarze

Na początku programu źródłowego wstawiamy komentarz, czyli tekst wyjaśniający. Kompilator nie potrzebuje komentarzy, ale przydają się one nam, programistom. Człowiek często zapomina różne rzeczy - komentarz może mu je przypomnieć lub wyjaśnić.

W języku C++ wiersz komentarza rozpoczynamy znakami //, po których umieszczamy dowolny tekst. Komentarze nie są tłumaczone przez kompilator na instrukcje procesora, zatem nie wydłużają ani nie spowalniają programu wynikowego - stosuj je zawsze tam, gdzie dzieje się coś skomplikowanego lub nowego w programie.

Wpisz do edytora następujące komentarze:

// Pierwszy program w języku C++
// Data: 
// I LO w Tarnowie
//------------------------------

Główna funkcja programu w języku C++

Program w języku C++ składa się z definicji struktur danych (o tym na kolejnych lekcjach) oraz funkcji, czyli fragmentów kodu wykonujących określone zadania. Każdy program w C++ musi posiadać funkcję o nazwie main (ang. główna). Od tej funkcji rozpoczyna się wykonanie programu. Kompilator MinGW (składnik pakietu Dev-C++) dopuszcza uproszczony zapis funkcji main (tzn. w innych kompilatorach zapis ten może być zgłaszany jako błędny - na kolejnych lekcjach wprowadzimy standardowy zapis). Dopisz poniżej komentarza następujący tekst:

// Pierwszy program w języku C++
// Data: 
// I LO w Tarnowie
//------------------------------

main()
{

}

Zapis funkcji głównej programu C++ składa się ze słowa main, po którym muszą wystąpić nawiasy klamrowe (). W nawiasach klamrowych umieszcza się argumenty funkcji, jeśli takowe posiada. W uproszczonym zapisie funkcji main() w nawiasach nie podajemy żadnych argumentów.

Treść funkcji zapisuje się w klamerkach - nie myl ich z nawiasami. W powyższym przykładzie funkcja main() nie posiada treści, jest zatem pusta. Pusta funkcja jest poprawną funkcją języka C++, zatem program jest gotowy - nic nie robi, ale możemy go skompilować i uruchomić.

Kompilacja i uruchomienie programu

Zapisz tekst programu w katalogu projektowym - naciśnij Ctrl+S i zatwierdź okno zapisu pliku na dysk. Następnie kliknij myszką ikonę kompilacji programu źródłowego:

Na ekranie pojawi się okienko postępu kompilacji:

Gdy kompilacja się zakończy, w polu status powinien pojawić się napis Done (zwróć uwagę, iż pomimo przełączenia pakietu Dev-C++ na język polski, niektóre elementy są wciąż w języku angielskim - trudno, pakiet jest darmowy, więc trzeba mu to wybaczyć):

 

Jeśli nie pojawi się informacja o zakończeniu kompilacji, to albo wyłączyłeś ją w opcjach środowiska:

Narzędzia > Opcje środowiska > Interfejs > Okno Postępu Kompilacji

albo w twoim programie jest błąd. W tym drugim przypadku wiersz błędny zostaje wyróżniony brązowym kolorem, a pod oknem edytora tekstu pojawia się opis błędu. Na przykład w funkcji main() wpisałeś zamiast klamerki otwierającej nawias:

Jeśli błędy składniowe nie wystąpią w programie, to po zakończeniu kompilacji w katalogu projektowym znajdziesz program p01.exe, który jest gotowy do uruchomienia. W tym celu nie musisz nawet wychodzić ze środowiska Dev-C++ - wystarczy kliknąć myszką ikonę uruchomienia aplikacji (można to robić wielokrotnie, gdy program został już skompilowany do pliku wykonywalnego):

W przypadku naszego programu nic ciekawego się nie stanie. Program nie wykonuje żadnej sensownej operacji - uruchamia się i zaraz kończy. Na ekranie zobaczysz jak mignie okienko konsoli znakowej - dzieje się tak dlatego, iż program przy starcie tworzy okno konsoli, a przy zakończeniu swojego działania zamyka to okienko. Okienko konsoli nie zniknie, jeśli uruchomisz program z własnego okna konsoli, które możesz otworzyć następująco:

Kliknij przycisk Start i wybierz opcję uruchom. W okienku dialogowym, które się pojawi, wpisz polecenie cmd:

Polecenie cmd uruchamia tzw. symulację MS-DOS i interpreter poleceń. Teraz w okienku możemy wprowadzać różne polecenia. Najpierw przejdziemy do katalogu projektowego. Zakładam, iż jest to katalog c:\Dev-Cpp\prj\01 (jeśli projekt utworzyłeś w innym miejscu, to należy podać właściwy katalog). W oknie konsoli wpisujemy:

cd \dev-cpp\prj\01

Nastąpi przejście do katalogu z projektem. Rozpoznajemy to po zgłoszeniu systemu, które powinno posiadać postać:

C:\Dev-Cpp\prj\01>

Wpisz teraz polecenie dir - zobaczysz zawartość katalogu projektowego:

C:\Dev-Cpp\prj\01>dir
Wolumin w stacji C to C
Numer seryjny woluminu: E026-1C56

Katalog: C:\Dev-Cpp\prj\01

2008-10-07 14:47 <DIR> .
2008-10-07 14:47 <DIR> ..
2008-10-07 14:47 123 main.cpp
2008-10-07 14:47 444 main.o
2008-10-07 14:47 767 Makefile.win
2008-10-06 09:47 822 p01.dev
2008-10-07 14:47 15 451 p01.exe
5 plik(ów) 17 607 bajtów
2 katalog(ów) 11 870 650 368 bajtów wolnych

C:\Dev-Cpp\prj\01>

Jeśli kompilacja programu się powiodła, to wśród plików w katalogu projektowym zobaczysz program p01.exe. Możesz go uruchomić wpisując:

p01

Okienko konsoli się nie zamknie, ponieważ nie należy do programu p01.

Rozbudowa programu - funkcja system() i pliki nagłówkowe

Często będziemy uruchamiać nasze programy z poziomu Windows i nie chcemy, aby okno konsoli znikało zanim przeczytamy to, co program w nim wypisał. Istnieje kilka sposobów rozwiązania tego problemu - jednym z najprostszych jest wykorzystanie polecenia systemowego pause. Wpisz w otwartym za pomocą cmd oknie konsoli polecenie:

pause

W odpowiedzi pojawi się napis:

Aby kontynuować, naciśnij dowolny klawisz . . .

Polecenie pause czeka, aż użytkownik naciśnie dowolny klawisz na klawiaturze, a następnie zwraca sterowanie do systemu. Możemy to wykorzystać we własnych programach. Aby wykonywać dowolne polecenia systemu z wnętrza naszego programu, posłużymy się funkcją system(). Argumentem tej funkcji jest tekst polecenia - teksty w języku C++ zapisujemy w cudzysłowach, zatem wywołanie będzie następujące:

system("pause");

Wywołanie to wpisujemy wewnątrz klamerek funkcji main() w naszym programie:







>>>
// Pierwszy program w języku C++
// Data: 
// I LO w Tarnowie
//------------------------------

main()
{
  system("pause");
}

Nie dokonuj jeszcze kompilacji - funkcja system() nie jest standardowym składnikiem języka C++. Wymaga definicji. Definicje taką udostępnia plik nagłówkowy cstdlib, który rozprowadzany jest z każdą dystrybucją C++.

Co to jest plik nagłówkowy? Wyobraź sobie, iż tworzysz wiele programów (tak właśnie dzieje się we firmach softwarowych). W każdym z tych programów wykorzystujesz te same obiekty - funkcje, struktury danych. Zamiast definiować je bezpośrednio w każdym programie, tworzy się pliki z definicjami zwane plikami nagłówkowymi (ang. header files). Teraz wystarczy dołączyć pliki nagłówkowe do programów i uzyskujemy dostęp do zdefiniowanych w nich obiektów. Co więcej, jeśli nastąpi jakaś zmiana w definicji, np. dodanie nowego elementu, to nie musimy zmieniać wszystkich programów - wystarczy dokonać tej zmiany w pojedynczym pliku nagłówkowym.

Pliki dołączamy do programu poleceniem preprocesora #include. Pod komentarzem dopisz:





>>>




// Pierwszy program w języku C++
// Data: 
// I LO w Tarnowie
//------------------------------

#include <cstdlib>

main()
{
  system("pause");
}

Teraz skompiluj i uruchom swój program. Możesz operacje te wykonać jednym kliknięciem myszki w ikonę kompilacji i uruchomienia aplikacji:

Okienko konsoli nie zniknie, aż naciśniesz klawisz:

Strumień wyjścia cout

Komunikacja z konsolą znakową w języku C++ standardowo odbywa się przy pomocy tzw. strumieni. Strumień jest obiektem, do którego możemy w prosty sposób przesyłać dane lub pobierać dane. Wyświetlanie danych w okienku konsoli obsługuje strumień wyjścia cout (ang. console output - wyjście na konsolę znakową). Strumień cout zdefiniowany jest w pliku nagłówkowym iostream, zatem dopisz do swojego programu nowe polecenie dla preprocesora:






>>>




// Pierwszy program w języku C++
// Data: 
// I LO w Tarnowie
//------------------------------

#include <cstdlib>
#include <iostream>

main()
{
  system("pause");
}

To nie wszystko. Strumienie wejścia/wyjścia są obiektami popularnej biblioteki STL (ang. Standard Template Library - Biblioteka Standardowych Szablonów) - spotkamy się z nią na dalszych lekcjach. Obiekty tej biblioteki istnieją w tzw. przestrzeni nazw std. Jeśli zatem nie chcemy poprzedzać każdego odwołania do strumienia nazwą tej przestrzeni - std::, to wstawiamy do programu dyrektywę:








>>>




// Pierwszy program w języku C++
// Data: 
// I LO w Tarnowie
//------------------------------

#include <cstdlib>
#include <iostream>

using namespace std;

main()
{
  system("pause");
}

Teraz umieścimy w programie polecenie przesłania tekstu powitalnego do strumienia wyjścia na konsolę cout:













>>>


// Pierwszy program w języku C++
// Data: 
// I LO w Tarnowie
//------------------------------

#include <cstdlib>
#include <iostream>

using namespace std;

main()
{
  cout << "Witaj w C++";

  system("pause");
}

Skompiluj i uruchom program - zwracaj uwagę na średniki na końcach instrukcji - oznaczają one zakończenie instrukcji i są bardzo istotne dla kompilatora języka C++. Otrzymasz wynik jak poniżej:

Bezpośrednio za napisem Witaj w C++ pojawił się napis tworzony przez polecenie pause. Dzieje się tak dlatego, iż strumień cout nie przechodzi automatycznie z wydrukiem do początku następnego wiersza - należy mu to nakazać. Istnieją dwa rozwiązania:

Bezpośrednio w tekście umieszczamy tzw. znak sterujący (ang. control character) \n, który nie jest wyświetlany, lecz powoduje przejście z wydrukiem do początku następnego wiersza. Zmodyfikuj program następująco:













>>>


// Pierwszy program w języku C++
// Data: 
// I LO w Tarnowie
//------------------------------

#include <cstdlib>
#include <iostream>

using namespace std;

main()
{
  cout << "Witaj w C++\n";

  system("pause");
}

Skompiluj i uruchom ponownie program. Teraz otrzymasz następujący wydruk:

Identyczny efekt otrzymamy przesyłając do strumienia tzw. manipulator endl. Zmień program następująco:













>>>


// Pierwszy program w języku C++
// Data: 
// I LO w Tarnowie
//------------------------------

#include <cstdlib>
#include <iostream>

using namespace std;

main()
{
  cout << "Witaj w C++" << endl;

  system("pause");
}

Skompiluj i uruchom program.

Podsumowanie

Program w języku C++ posiada następującą strukturę:

// Pierwszy program w języku C++
// Data: 
// I LO w Tarnowie
//------------------------------
Komentarz, w którym krótko opisujemy przeznaczenie programu,
datę utworzenia oraz informacje o autorze. Komentarze nie są
obowiązkowe, lecz zaleca się ich stosowanie.
#include <cstdlib>
#include <iostream>
Pliki nagłówkowe zawierające definicje używanych w programie
struktur danych oraz funkcji bibliotecznych. Pliki dołączamy za
pomocą polecenie #include, które wykonuje preprocesor we wczesnej
fazie kompilacji programu źródłowego.
using namespace std;
Jeśli wykorzystujemy elementy biblioteki STL, to wstawiamy do programu
dyrektywę informującą kompilator o używanej przestrzeni nazw. Nie jest ona
obowiązkowa, lecz bez niej musimy poprzedzać odwołania do obiektów
STL nazwą std - np. std::cout << ...
main()
{
  cout << "Witaj w C++" << endl;

  system("pause");
}
Każdy program w języku C++ musi posiadać funkcję main(), od której
rozpoczyna się wykonywanie programu.

Poznaliśmy funkcję system(), która umożliwia wywołanie poleceń systemu z wnętrza programu C++. Wywoływanym poleceniem było polecenie pause, które wyświetla odpowiedni komunikat i oczekuje, aż użytkownik naciśnie dowolny klawisz na swojej klawiaturze. Celem tej operacji było wstrzymanie zamknięcia okna konsoli znakowej, aż użytkownik przeczyta tekst wypisany w oknie. Alternatywnym sposobem jest uruchamianie programu z okna konsoli otwartej poleceniem cmd. Wtedy w programie nie musimy umieszczać polecenia system("pause").

Instrukcje w języku C++ kończymy znakiem średnika - zapamiętaj to, gdyż najczęstszym błędem ucznia jest pominięcie tego znaku na końcu instrukcji.

Poznaliśmy również strumień wyjścia danych na konsolę znakową - cout. Dane przesyłamy do strumienia przy pomocy operatora <<. Tekst w języku C++ umieszczamy w cudzysłowach. Jeśli chcemy przejść z wydrukiem do nowego wiersza, to w tekście umieszczamy znak specjalny \n lub do strumienia przesyłamy manipulator endl.

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.