Struktura prostego programu w C++


Zagadnienia
  • Struktura języka c++
  • Bibliteki (pliki nagłówkowe)
  • Główna funkcja
  • Zasady pisania programów
  • Przydatne narzędzia/oprogramowanie

  • środowisko programistyczne "CODEBLOCKS" - bezpłatne wykorzystywane p[odczas matury z informatyki
  • środowisko onli np. onlinegdb.com, ideone.com inne)



  • Przydatne narzędzia/oprogramowanie

    Konsola - PRINTF i SCANF oraz COUT i CIN

    W języku C mamy dwa mechanizmy do obsługi konsoli:

    • printf  scanf z mnóstwem opcji i parametrów
    • cout  cin według mnie wygodniejsze

    W dalszej części będziemy posługiwać się wyłącznie poleceniami cout i cin z powodu bardziej "edukacyjnego" wyglądu.

    Przykładowy prosty program konsolowy wykorzystujący te dwa mechanizmy

    #include <cstdio>
    #include <stdlib.h>
    #include <iomanip>
    
    using namespace std;
    
    int main(){
      setlocale(LC_ALL, "");
      
      int liczba;
      printf("wczytaj całkowitą:");
      scanf("%i",&liczba);
      printf("wczytano: ");
      printf("%i\n",liczba);
      const float PI=3.1415926536;
      printf("%20.2f\n",PI);
      return 0;
      
      
    }
    
    #include <stdlib.h>
    #include <iostream>
    #include <iomanip>
    
    using namespace std;
    
    int main(){
      setlocale(LC_ALL, "");
      
      int liczba;
      cout << "wczytaj całkowitą:";
      cin >> liczba;
      cout << "wczytano: " << liczba << endl;
      const float PI=3.1415926536;
      cout << fixed << setprecision(2);
      cout.width(20);
      cout << PI << endl;
    
      return 0;
    }
    


    Ogólna struktura programu w C++ (generowana zwykle automatycznie przy tworzeniu projektu przez kompilator) składa się z kilku części przedstawionych poniżej:

    opis struktury programu c++



    Część I - biblioteki


    Ta część programu opisuje biblioteki jakie mają być dołączone do programu. Biblioteki to pliki, których zawartość jest dołączana do programu za pomocą dyrektywy preprocesora #include. Biblioteka to plik o nazwie podanej w nawiasie " < nazwa biblioteki > ", który posiada między innymi definicje przydatnych funkcji.

    Użycie funkcji pierwiastkującej zdefiniowanej w bibliotece cmath

    1. #include <cstdlib>
    2. #include <iostream>
    3. //dodanie biblioteki cmath, w której znajduje się
    4. //definicja funkcji pierwiastkującej sqrt
    5. #include <cmath>
    6.  
    7. using namespace std;
    8.  
    9. int main()
    10. {
    11.  
    12. //użycie funkcji sqrt wyznaczającej pierwiastek z liczby 2
    13. cout<<sqrt(2)<<endl;
    14.  
    15.  
    16. return 0;
    17. }


    Np. biblioteka cstdlib zawiera funkcje ogólne takie jak konwersje, alokacja pamięci czy funkcje matematyczne. Biblioteka iostream (input/output stream) jest standardową biblioteką wejścia/wyjścia w C++. Jeśli chcemy coś wyświetlać na ekranie (za pomocą obiektu cout i przeciążonego operatora "<<"), lub pobierać dane z klawiatury (za pomocą obiektu cin i przeciążonego operatora ">>") musimy ją dodać do nagłówka programu.

    Wcześniejsze wersje bibliotek miały rozszerzenie "*.h". Język C++ odchodzi od takiego nazewnictwa, gdyż pliki z tym rozszerzeniem były początkowo wykorzystywane w języku C (oczywiście C++ może nadal korzystać z tych bibliotek) i dla rozdzielenia bibliotek kojarzących się z danym językiem, C++ przyjął nazwy bez rozszerzenia. Niektóre biblioteki zostały przekształcone z C na C++, i w takich przypadkach pozbyto się rozszerzenia, ale dodano literkę "c" na początku takiego pliku np.:

    stara nazwa pliku nowa nazwa pliku math.h ---> cmath stdlib.h ---> cstdlib

    Część II - przestrzenie nazw

    Dyrektywę using namespace musimy użyć w przypadku, gdy zamiast pliku iostream.h, będziemy używać iostream, w celu udostępnienia definicji zawartej w tym pliku. Generalnie chodzi o to, żeby nie pisać za każdym razem wywołanie obiektu cout czy cin z przedrostkiem std::. Np.:

    1. #include<iostream>
    2. #include<cstdlib>
    3.  
    4. int main()
    5. {
    6.  
    7. //bez użycia dyrektywy using namespace std musimy
    8. //do każdej definicji z biblioteki
    9. //iostream dodać przedrostek std::
    10.  
    11. std::cout<<"Ala ma kota"<<std::endl;
    12.  
    13. return 0;
    14. }


    Wyobraźmy sobie, że mamy dwa pakiety, w których zdefiniowana jest funkcja o nazwie wspaniala(). Pierwszy pakiet jest od producenta JANEK, a drugi od MARCIN. Jeśli chcemy używać funkcji wspaniala() od MARCIN, bo uważamy, że jest lepsza, udostępniamy definicję przestrzeni nazw MARCIN:

    using namespace MARCIN;

    i nie musimy za każdym wywołaniem funkcji wspaniala(), pisać MARCIN::wspaniala().
    Wiąże się to także z uproszczeniem uaktualnienia starszych wersji programu, dodając tylko odpowiednią dyrektywę bez konieczności dopisywania do każdego elementu przedrostka.

    Część III - funkcja main

    Funkcja main() jest charakterystyczną funkcją w C++, która musi występować w każdym konsolowym programie. Wszystko co zaczyna się dziać w danej aplikacji, jest określana w ciele właśnie tej funkcji. Oczywiście wszystkie inne funkcje mogą być wywoływane z wnętrza tej funkcji.

    Funkcja main() ma kilka postaci:

    1. int main() lub int main(void) - postacie równoważne, oznaczające, że w ciele funkcji pojawia się informacja zwrotna (return 0 lub return EXIT_SUCCESS), która zwraca do systemu operacyjnego informacje o zakończeniu działania danej aplikacji
    2. void main() - nie posiada informacji zwrotnej o zakończeniu działania programu, niezalecane, a w niektórych systemach niedopuszczalne.
    3. main() - to samo co int main().
    4. int main(int argc, char *argv[]) - funkcja z argumentami opisana poniżej.

    Podczas uruchomienia programu za pomocą konsoli (w Windowsie: cmd.exe), oprócz podania nazwy programu, który chcemy uruchomić, możemy przekazać wstępne dane (parametry programu). Argument int argc, mówi ile tych danych jest, natomiast char *argv[] przechowuje te dane. Prześledźmy przykład programu program.exe, który wyświetli argumenty danego programu:

    Ćwiczenia, zadania, problemy
    1. Napisz w języku C++ program, który wyświetli na ekranie napis "Dzien dobry".
    2. Napisz w języku C++ program, który wyświetli na ekranie napis "Dzien dobry" w ramce.
    3. Napisz program wyświetlajacy w dwóch kolejnych wierszach napis "Serdecznie witamy" (w wierszu 1) oraz "w naszej bajce" w kolejnym wiuerszu.