Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
isi_pp2 [2021/06/11 15:02]
pszwed [Za co będą odliczane punkty]
isi_pp2 [2024/03/19 22:38]
pszwed [Wykłady]
Line 1: Line 1:
 ====== Podstawy programowania 2 ====== ====== Podstawy programowania 2 ======
 +
 +===== Wykłady =====
 +
 +Wykłady odbywają się w środy o 19:00 na platformie MS Teams.
 +
 +[[https://teams.microsoft.com/l/team/19%3AVB_hmfafz560jilREju7ucJGcBPFfGcOUJcotJ6lNKQ1%40thread.tacv2/conversations?groupId=feffb47e-61c4-4e7f-a59c-8e7da40d7929&tenantId=80b1033f-21e0-4a82-bbc0-f05fdccd3bc8|Link do zespołu]]
 +
 +Kod do zespołu zostanie przekazany staroście
 +
 +
 +  -{{ ::01-isi-cpp-intro-wsk.pdf | Wprowadzenie. Wskaźniki - przypomnienie}} [>>28.02.2024]
 +  -{{ ::02-isi-cpp-ref-skladow-klas.pdf | Referencje, składowe klas. Wprowadzenie do standardowej biblioteki}} [06.03.2024, 13.03.2024]
 +  -{{ :03-isi-cpp-kompozycja-dziedziczenie.pdf |Kompozycja i dziedziczenie}} [>>20.03.2024]
 +  -{{ ::04-isi-cpp-funkcje-wirtualne.pdf |Funkcje wirtualne (polimorfizm)}} []
 +  -{{ ::05-isi-cpp-konstruktory-destruktory.pdf |Konstruktory, destruktory}} [05.04.2023]
 +  -{{ ::06-isi-cpp-przeciazanie-fun-op.pdf |Przeciążanie funkcji i operatorów}} [12.04.2023, 26.04.2023]
 +  -{{ ::07-isi-cpp-cast-rtti.pdf |Operatory rzutowania w C++}} [26.04.2023]
 +  -{{ ::08-isi-cpp-exceptions.pdf| Wyjątki}} [10.05.2023]
 +  -{{ ::09-isi-cpp-kontenery.pdf  | Kontenery i iteratory}} [10.05.2023(wektor) + ]
 +  -{{ ::10-isi-cpp-przenoszenie.pdf | Semantyka przenoszenia}} [%30.05.2022]
 +  -{{ ::11-isi-cpp-szablony.pdf | Wielokrotne użycie, szablony}} [%06.06.2022]
 +  -{{ ::12-isi-cpp-stl.pdf | Standardowa biblioteka. Kontenery, algorytmy, wyrażenia lambda}} [>> 07.06.2021,14.06.2021]
 +
  
 ===== Egzamin ===== ===== Egzamin =====
  
-  * I termin   19.06.2021, 10:00 +  * I termin   10.07.2023 15:30-17:30 sala H24 w B1 
-  * II termin  26.06.2021, 13:00 +  * II termin  16.07.2023 14:00-16:00 sala C2 224 
-  * III termin 3.09.2021,  13:00+  * III termin 05.09.2023,  12:00-14:00 C2 431
  
 +Podczas egzaminu:
 +* można korzystać z dowolnych materiałów w formie fizycznej (podręczników, notatek, itp.)
 +* nie można wymieniać się materiałami, podawać notatek sąsiadom, itp.
 +* nie można korzystać z telefonów
 +
 +Proszę przynieść własne kartki formatu A4, np. 3 na odpowiedzi oraz 3 na brudnopis i 2 długopisy.   
 +==== Uwagi 2023 ====
 +
 +  *Nie trzeba pisać 
 +<code>
 +trg.a=towary[i].a;
 +trg.b=towary[i].b;
 +trg.c=towary[i].c;
 +trg.d=towary[i].d;
 +</code>
 +
 +Wystarczy ''trg=towary[i]''
 +==== Uwagi ====
 +
 +=== Uwaga 1 ===
 +Jeżeli tematem było napisanie szablonów klas typu ''Set<T>'' lub ''Wielozbiór<T>'' z zastrzeżeniami dotyczącymi dostępnych operatorów dla klasy będącej parameterem szablonu, to zapewne nie można było użyć ''std::set<T>'' lub ''std::map<T>''.
 +
 +=== Uwaga 2 ===
 +
 +Szablony ''unordered_set'' lub ''unordered_map'' działają na klasach "haszowalnych", tzn. takich dla których da się obliczyć wartość indeksu w tablicy na podstawie zawartości. 
 +
 +Proszę spróbować skompilować:
 +
 +<code cpp>
 +
 +class A{
 +public:
 +    A(int _v):v(_v){}
 +    int v;
 +    bool operator==(const A&a)const{
 +        return v==a.v;
 +    }
 +};
 +
 +int main(){
 +    std::unordered_set<A> set;
 +    set.insert(A(1));
 +    std::cout<<(set.find(A(1))!=set.end())<<std::endl;
 +}
 +
 +</code>
 +
 +Dla nietypowej własnej klasy należy dostarczyć własny obiekt funkcyjny do obliczania "hasza" (czyli położenia w tablicy)...
 +
 +<code cpp>
 +class A{
 +public:
 +    A(int _v):v(_v){}
 +    int v;
 +    bool operator==(const A&a)const{
 +        return v==a.v;
 +    }
 +};
 +
 +class MyHashForA{
 +public:
 +    size_t operator()(const A&a)const{
 +        return std::hash<int>{}(a.v);
 +    }
 +};
 +int main(){
 +    std::unordered_set<A,MyHashForA> set;
 +    set.insert(A(1));
 +    std::cout<<(set.find(A(1))!=set.end())<<std::endl;
 +}
 +
 +</code>
 +
 +
 +
 +=== Uwaga 3 ===
 +Funkcja nie może zwracać wskaźnika po dereferencji do obiektu, dla którego pamięć przydzielono na stercie. 
 +Jak zwolnić tę pamięć? Memory leak...
 + 
 +<code cpp>
 +
 +class A{
 +public:
 +    int v;
 +};
 +
 +A bardzo_zle_napisana_funkcja(){
 +    A*ptr = new A();
 +    ptr->v=10;
 +    printf("ptr=%p\n",ptr);
 +    return *ptr;
 +}
 +
 +int main(){
 +    A a1 = bardzo_zle_napisana_funkcja();
 +    printf("&a1=%p\n",&a1);
 +    A a2;
 +    a2=bardzo_zle_napisana_funkcja();
 +    printf("&a2=%p\n",&a2);
 +    // jak zwolnić ptr?
 +}
 +
 +// Wynik
 +ptr=0x80004add0
 +&a1=0xffffcc3c
 +ptr=0x80004ae40
 +&a2=0xffffcc38
 +</code>
 ==== Planowane zadania ==== ==== Planowane zadania ====
  
Line 44: Line 175:
   * Za iterację po zbiorze ''set<T>'', aby sprawdzić czy zawiera element - O(n) zamiast O(log n)   * Za iterację po zbiorze ''set<T>'', aby sprawdzić czy zawiera element - O(n) zamiast O(log n)
   * Za niezwalnianie pamięci, jeżeli kontener zawiera wskaźniki do obiektów, dla których zaalokowano pamięć na stercie   * Za niezwalnianie pamięci, jeżeli kontener zawiera wskaźniki do obiektów, dla których zaalokowano pamięć na stercie
-===== Wykłady ===== 
- 
-  -{{ ::01-isi-cpp-intro-wsk.pdf | Wprowadzenie. Wskaźniki - przypomnienie}} [01.03.2021] 
-  -{{ ::02-isi-cpp-ref-skladow-klas.pdf | Referencje, składowe klas. Wprowadzenie do standardowej biblioteki}} [08.03.2021, 15.03.2021] 
-  -{{ :03-isi-cpp-kompozycja-dziedziczenie.pdf |Kompozycja i dziedziczenie}} [22.03.2021] 
-  -{{ ::04-isi-cpp-funkcje-wirtualne.pdf |Funkcje wirtualne (polimorfizm)}} [29.03.2021+12.04.2021] 
-  -{{ ::05-isi-cpp-konstruktory-destruktory.pdf |Konstruktory, destruktory}} [12.04.2021] 
-  -{{ ::06-isi-cpp-przeciazanie-fun-op.pdf |Przeciążanie funkcji i operatorów}} [19.04.2021, 26.04.2021] 
-  -{{ ::07-isi-cpp-cast-rtti.pdf |Operatory rzutowania w C++}} [26.04.2021] 
-  -{{ ::08-isi-cpp-exceptions.pdf| Wyjątki}} [10.05.2021] 
-  -{{ ::09-isi-cpp-kontenery.pdf  | Kontenery i iteratory}} [17.05.2021] 
-  -{{ ::10-isi-cpp-przenoszenie.pdf | Semantyka przenoszenia}} [24.05.2021] 
-  -{{ ::11-isi-cpp-szablony.pdf | Wielokrotne użycie, szablony}} [31.05.2021] 
-  -{{ ::12-isi-cpp-stl.pdf | Standardowa biblioteka. Kontenery, algorytmy, wyrażenia lambda}} [>> 07.06.2021,14.06.2021] 
- 
 ===== Laboratoria, grupy 2a i 2b ===== ===== Laboratoria, grupy 2a i 2b =====
  
Line 357: Line 473:
 void Fibo1::destroy() void Fibo1::destroy()
 { {
-    delete [] tab; // IF TAB+    delete [] tab; 
 } }
  
Line 387: Line 503:
  
 Fibo::~Fibo(){ Fibo::~Fibo(){
-    if(n>0) delete []tab; // TO JEST POPRAWNE, ale proponuję idiom if(tab) delete []tab;+    if(n>0) delete []tab; // TO JEST POPRAWNE, ale proponuję raczej idiom if(tab) delete []tab;
 } }
  
isi_pp2.txt · Last modified: 2024/03/19 22:38 by pszwed
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0