4. Schemat programu w języku C++

W ramach zajęć z Programowania będziemy na początku pisali aplikacje konsolowe.

Aplikacja konsolowa w języku C++ to program komputerowy, który działa w trybie tekstowym, interakcja z użytkownikiem odbywa się za pomocą wiersza poleceń (konsoli). Tego rodzaju aplikacje nie posiadają interfejsu graficznego użytkownika (GUI), a komunikacja z użytkownikiem odbywa się poprzez wprowadzanie i wyświetlanie tekstu w konsoli. Aplikacje konsolowe uruchamiane są w oknie konsoli lub wiersza polecenia.

Typowe cechy aplikacji konsolowych w C++ to:

  1. Proste wejście/wyjście: Dane wejściowe są wprowadzane przez użytkownika za pomocą klawiatury, a wyniki są wyświetlane w konsoli tekstowej.

  2. Wykorzystanie strumieni wejścia/wyjścia: Aplikacje konsolowe często korzystają ze strumieni wejścia (cin) i wyjścia (cout) dostępnych w bibliotece standardowej C++, aby odczytywać dane od użytkownika i wyświetlać wyniki.

  3. Brak interfejsu graficznego: W przeciwieństwie do aplikacji z interfejsem graficznym użytkownika (GUI), aplikacje konsolowe nie posiadają graficznych elementów takich jak przyciski, okna czy pola tekstowe.

  4. Wygodne do zadań związanych z przetwarzaniem tekstu lub działaniami w tle: Aplikacje konsolowe są często wykorzystywane do zadań, które nie wymagają interaktywnego interfejsu użytkownika, takich jak przetwarzanie plików, analiza danych, automatyzacja zadań systemowych itp.

Programowanie wymaga bardzo systematycznego i dokładnego zapisu algorytmu zgodnie z konwencją obowiązującą w danym języku. Dotyczy to nie tylko składni pojedynczych instrukcji, lecz również całego programu. Kompilator oczekuje od programisty, że ten dostarczy mu program zapisany zgodnie z pewnym szablonem, obowiązującym w danym języku. W zależności od podejścia twórców, szablon ten może być mniej lub bardziej dokładny. Poniżej przedstawiono podstawowy schemat aplikacji konsolowej w języku C++ wraz z wyjaśnieniem poszczególnych elementów składowych.
Schemat każdego programu w języku C++ można zapisać następująco:

/* Poniższe dwie linijki na wszelki wypadek będziemy na ogół zamieszczać.
Dołączenie biblioteki cstdlib nie jest bezwzględnie wymagane, co więcej - często nie jest to wcale potrzebne, lecz dla Was, początkujących, bezpieczniej będzie je zamieścić: */
#include <iostream>
#include <cstdlib> 
/* w niektórych kompilatorach trzeba dołączyć bibliotekę string,
jeśli chcemy używać zmiennych przechowujących napisy. */
#include <string>
/* Pozwala na korzystanie z elementów standardowej biblioteki C++ bez prefiksu std::, co ułatwia pisanie kodu. */
using namespace std;
/* Program zapisuje się w C++ w postaci funkcji. Każda funkcja zaczyna się
nagłówkiem, potem występuje treść zamknięta w nawiasy klamrowe.
*/
typ_funkcji  nazwa_funkcji (lista_parametrów)
{
...treść funkcji
};
/*Przed lub pomiędzy funkcjami zamieszcza się definicje i deklaracje stałych,
zmiennych i typów globalnych dla danego pliku, czyli takich, z których można
korzystać w każdym podprogramie. Niżej podajemy przykładowe definicje, choć wcale nie
muszą one wystąpić */
const int... // definicja stałych
...
struct...// definicja typów rekordowych
...
double...//definicja zmiennych
...
/* Program w języku C++ może składać się z wielu funkcji. Zawsze musi być co najmniej jedna - funkcja main.
Nasze programy na początek będą składały się właśnie tylko z tej jednej , głównej funkcji main:
------------------------------------------------------------------------------
*/
int  main(  )
/* Nawiasy klamrowe służą do oznaczenia początku i końca funkcji */
{
/* Kolejne instrukcje składające się na nasz algorytm */
instrukcja
instrukcja
...
instrukcja
/* W C++ pomiędzy instrukcjami znów mogą się znaleźć definicje zmiennych, typów, stałych - lecz w takim przypadku będą one lokalne. */
/* Zamykający nawias klamrowy na koniec funkcji main */
}
Każda instrukcja kończy się średnikiem
W szablonach niektórych kompilatorów nagłówek funkcji main ma bardziej rozbudowaną postać: int main (int argc, char *argv[ ]) ale parametry w nawiasie mają znaczenie tylko przy uruchamianiu programu z linii komend (wiersza poleceń), więc nie będziemy ich używać w naszych przykładach.

Schemat ten zawiera kilka kluczowych elementów:

  1. Dyrektywy preprocesora: Linie rozpoczynające się od znaku #, które wykonują operacje przed właściwą kompilacją kodu, takie jak włączanie bibliotek (za pomocą #include) lub definiowanie makr.

  2. Definicja funkcji głównej: Każdy program w C++ musi zawierać funkcję main(), która jest punktem wejścia programu. Funkcja ta zwraca wartość typu int, co oznacza, że może zwrócić wartość całkowitą na zakończenie działania programu.

  3. Przestrzeń nazw: Linia using namespace std; pozwala na korzystanie z elementów standardowej biblioteki C++ bez prefiksu std::, co ułatwia pisanie kodu.

  4. Deklaracje zmiennych: Miejsce, gdzie deklarujemy zmienne, które będziemy używać w programie.

  5. Instrukcje: Miejsce, gdzie umieszczamy kod właściwy programu, zawierający operacje, instrukcje warunkowe, pętle, funkcje itp.

  6. Zwrócenie wartości: Instrukcja return 0; oznacza, że program zakończył się sukcesem. Wartość 0 wskazuje na poprawne zakończenie działania programu. Inną wartość możemy zwrócić, jeśli chcemy oznaczyć jakieś wyjątkowe sytuacje, np. błąd.

Na schemacie aplikacji przedstawiono wiele elementów, które nie zostały jeszcze omówione. Nie musicie się tym na razie przejmować. W kolejnych modułach zostaną omówione poszczególne elementy. Możecie później wrócić do tego schematu, gdy będziecie gotowi do pisania własnych aplikacji.