November 21, 2025, Friday, 324

Języki Programowania 8

From MJanik

(Difference between revisions)
Jump to: navigation, search
Line 1: Line 1:
-
 
W ramach przygotowania do zadania możesz:
W ramach przygotowania do zadania możesz:
<li> zapoznać się z plikiem: [http://www.if.pw.edu.pl/~majanik/data/JP/2012/makefile.pdf Makefile - instrukcja] i przygotować Makefile dla ostatnio pisanego programu
<li> zapoznać się z plikiem: [http://www.if.pw.edu.pl/~majanik/data/JP/2012/makefile.pdf Makefile - instrukcja] i przygotować Makefile dla ostatnio pisanego programu
<li> napisz klasę MojeLiczby, która zawiera pole stl::vector<int> liczby oraz metody:  
<li> napisz klasę MojeLiczby, która zawiera pole stl::vector<int> liczby oraz metody:  
 +
   * void generuj(n) - generuje n liczb z zakresu 0-99 i wstawia je na koniec vecotr'a
   * void generuj(n) - generuje n liczb z zakresu 0-99 i wstawia je na koniec vecotr'a
   * void print() - wypisuje wszystkie liczby zapisane w wektorze
   * void print() - wypisuje wszystkie liczby zapisane w wektorze
   * void clear() - usuwa wszyskie liczby dotychczas zapisane w wektorze
   * void clear() - usuwa wszyskie liczby dotychczas zapisane w wektorze
 +
<li> zmodyfikuj funkcję main w taki sposób, by przyjmowała jako argument ilość liczb które instancja (obiekt) klasy MojeLiczby ma wygenerować i wypisać na ekran.  
<li> zmodyfikuj funkcję main w taki sposób, by przyjmowała jako argument ilość liczb które instancja (obiekt) klasy MojeLiczby ma wygenerować i wypisać na ekran.  
Przykład wywołania programu:  ./programLiczby 10
Przykład wywołania programu:  ./programLiczby 10

Revision as of 13:30, 19 November 2025

W ramach przygotowania do zadania możesz:

  • zapoznać się z plikiem: Makefile - instrukcja i przygotować Makefile dla ostatnio pisanego programu
  • napisz klasę MojeLiczby, która zawiera pole stl::vector<int> liczby oraz metody: * void generuj(n) - generuje n liczb z zakresu 0-99 i wstawia je na koniec vecotr'a * void print() - wypisuje wszystkie liczby zapisane w wektorze * void clear() - usuwa wszyskie liczby dotychczas zapisane w wektorze
  • zmodyfikuj funkcję main w taki sposób, by przyjmowała jako argument ilość liczb które instancja (obiekt) klasy MojeLiczby ma wygenerować i wypisać na ekran. Przykład wywołania programu: ./programLiczby 10 Przykładowy efekt: 4 39 58 67 85 2 33 44 7 83

    Makefile

    Czym jest Makefile? Makefile to plik konfiguracyjny używany przez narzędzie make do automatyzacji procesu kompilacji. Pozwala definiować zasady budowania programu: które pliki należy skompilować, w jakiej kolejności i z jakimi poleceniami.

    Po co stosować Makefile?

      * Automatyzuje budowę programu (kompilacja, linkowanie, czyszczenie plików pośrednich).
      * Skraca czas — kompilowane są tylko pliki, które zostały zmodyfikowane.
      * Upraszcza pracę w dużych projektach z wieloma plikami źródłowymi.
      * Pozwala definiować własne cele (targets), np. make clean.
    

    Najczęstsze elementy Makefile

      * *Cel (target)* – nazwa zadania, np. main.
      * *Reguła (rule)* – określa zależności i polecenia, które mają zostać wykonane.
      * *Zależności (dependencies)* – pliki, od których zależy dany cel.
      * *Polecenia (commands)* – komendy wykonywane przez make (musi je poprzedzać tabulator!).
    

    Przykładowy Makefile <verbatim> CXX=g++ CXXFLAGS=-Wall -O2

    main: main.o utils.o

       $(CXX) $(CXXFLAGS) main.o utils.o -o main
    

    main.o: main.cpp utils.hpp utils.o: utils.cpp utils.hpp

    clean:

       rm -f *.o main
    

    </verbatim>

    Kiedy używać Makefile?

      * Gdy projekt składa się z więcej niż jednego pliku źródłowego.
      * Gdy chcesz mieć powtarzalny i automatyczny proces budowania.
      * Gdy potrzebujesz wygodnego sposobu zarządzania kompilacją i plikami pośrednimi.
    

    Podsumowanie Makefile jest prostym, ale bardzo skutecznym narzędziem umożliwiającym automatyzację kompilacji w projektach C/C++. Ułatwia zarządzanie kodem, oszczędza czas i pozwala utrzymać porządek w projekcie.





    Kontener STL std::vector

    Czym jest std::vector? std::vector to sekwencyjny kontener z biblioteki STL, który przechowuje elementy w sposób ciągły w pamięci. Umożliwia dynamiczne powiększanie i zmniejszanie rozmiaru podczas działania programu. Dostarcza szybki dostęp do elementów przez indeks (operacja O(1)) oraz efektywne dodawanie na końcu (amortyzowane O(1)).

    Najważniejsze cechy

      * Elementy są przechowywane w kolejności dodania.
      * Rozmiar może się zmieniać w trakcie działania programu.
      * Zapewnia dostęp za pomocą operatora [] i metody at().
      * Posiada bogaty zestaw metod do modyfikowania zawartości.
    

    Najczęściej używane metody

      * push_back(x) – dodaje element na końcu.
      * pop_back() – usuwa ostatni element.
      * size() – zwraca liczbę elementów.
      * empty() – sprawdza, czy wektor jest pusty.
      * clear() – usuwa wszystkie elementy.
      * begin(), end() – iteratory pozwalające przechodzić po wektorze.
    

    Przykład użycia

    #include <vector> 
    #include <iostream>
    
    int main() {
       std::vector<int> liczby;
       liczby.push_back(10);
       liczby.push_back(20);
       liczby.push_back(30);
       for (size_t i = 0; i < liczby.size(); i++) {
           std::cout << liczby[i] << std::endl;
       }
    
       return 0;
    }
    

    Kiedy używać std::vector?

      * Gdy potrzebujesz dynamicznej tablicy.
      * Gdy kluczowy jest szybki dostęp do elementów.
      * Gdy dane często dodajesz na końcu kontenera.
      * Gdy zależy Ci na prostocie i efektywności.
    

    Zalety

      * Bardzo szybki dostęp do elementów.
      * Kompaktowe przechowywanie danych w pamięci.
      * Prosta obsługa i szerokie wsparcie w STL.
    

    Wady

      * Wstawianie elementów w środku jest kosztowne (przesuwanie danych).
      * Przealokowanie podczas powiększania może czasem kosztować więcej czasu.
    

    Podsumowanie std::vector to najczęściej używany kontener STL dzięki swojej wydajności, elastyczności i intuicyjności. W większości przypadków stanowi zalecaną strukturę do przechowywania sekwencji danych w C++.