Arvutiteaduse instituut
  1. Kursused
  2. 2022/23 kevad
  3. Programmeerimine keeles C++ (LTAT.03.025)
EN
Logi sisse

Programmeerimine keeles C++ 2022/23 kevad

  • Pealeht
  • 1. Muutujad ja andmetüübid
  • 2. Keele põhikonstruktsioonid I
  • 3. Keele põhikonstruktsioonid II
  • 4. Funktsioonimallid, failitöötlus
  • 5. OOP I Klassid
  • 6. OOP II Pärilus ja polümorfism
  • 7. Kontrolltöö 1?

Seitsmendal nädalal toimub 1. kontrolltöö

7.1 1. kontrolltöö näide?
  • 9. Dünaamiline mäluhaldus II
  • 10. Klassimallid
10 Klassimallid
10.1 Kodutöö
10.2 Harjutused
10.3 Videolingid
  • 11. STL andmestruktuurid I
  • 12. STL andmestruktuurid II
  • 13. Erindite töötlemine
  • 14. Täiendavad teemad
  • 15. Kontrolltöö 2?

Viieteistkümnendal nädalal toimub 2. kontrolltöö

15.1 2. kontrolltöö näide?
  • 16. Projekti esitlus?
  • Viiteid
  • Vanad materjalid
  • Praktikumid
  • Juhendid
  • Viited

Kodused ülesanded

NB! Klasside ja liikmefunktsioonide deklaratsioonid ja definitsioonid kirjuta päisefaili kujund.h Liikmefunktsioonide definitsioonid peavad olema väljaspool klassi.

1. Universaalne punkt

Kirjuta klassimall universaalse punkti jaoks template <unsigned short const n> class Punkt{...}, kus n on dimensioon ehk koordinaatide arv). Klass peab töötama suvalise positiivse arvu korral.

Klassis on

  • privaatne isendiväli std::vector<float>* , mis hoiab punkti koordinaate
  • vaikekonstruktor, kus punkti koordinaadid väärtustatakse nulliga
  • ühe parameetriga konstruktor, mis saab ette viida koordinaatide vektorile
  • destruktor, mis vabastab mälu koordinaatide vektori alt
  • funktsioon kaugusPunktist, mis saab parameetrina ette punkti, mille suhtes kaugust arvutada

float kaugusPunktist (Punkt<n>& p1)

  • funktsioon toString, mis tagastab sõnena (string) punkti koordinaadid (x1, x2, ..., xn)
  • funktsioon getKoordinaadid(), mis tagastab viida koordinaatide vektorile

NB! Lisapunkt, kui on töötav üledefineeritud operaatori operator<<

Näide programmi tööst

int main(){
    vector<float> arvud1{1, 1}; 
    vector<float> arvud2{2, 2}; 
    const int arv = 5;
    Punkt<arv> punkt0;
    cout << "P0: " << punkt0.toString() << '\n';
    Punkt<2> punkt1 {&arvud1};
    Punkt<2> punkt2 {&arvud2};
    cout << "P1: " << punkt1.toString() << '\n';
    cout << "P2: " << punkt2.toString() << '\n';
    cout << "P1 kaugus P2-st " << punkt1.kaugusPunktist(punkt2) << '\n';
    return 0;
}
P0: (0.000000, 0.000000, 0.000000, 0.000000, 0.000000) 
P1: (1.000000, 1.000000) 
P2: (2.000000, 2.000000) 
P1 kaugus P2-st 1.41421

2. Universaalne sirglõik

Kirjuta klassimall universaalse sirglõigu jaoks, milles on üks malliparameeter.

Klassis on

  • kaks privaatset isendivälja T* p1 ja T* p2, mis hoiavad viitasid lõigu otspunktidele
  • vaikekonstruktorit ei ole
  • kahe parameetriga konstruktor, mis saab ette viidad otspunktidele
  • funktsioon pikkus, mis arvutab lõigu pikkuse
  • funktsioon toString, mis tagastab sõnena (string) lõigu kujul, nt (1, 2) - (2, 1). Kasutada punkti vastavat funktsiooni.
  • funktsioon getKoordinaadid(), mis tagastab viida koordinaatide vektorile

NB! Lisapunkt, kui on töötav üledefineeritud operaatori operator<<

Näide programmi tööst

int main(){
    vector<float> arvud1{1, 1}; 
    vector<float> arvud2{2, 2}; 
    Punkt<2> punkt1 {&arvud1};
    Punkt<2> punkt2 {&arvud2};
    Sirgloik<Punkt<2>> sl1{&punkt1, &punkt2};
    cout << "Lõik: " << sl1.toString() << '\n';
    cout << "Lõigu pikkus: "<< sl1.pikkus() << '\n';    return 0;
}
Lõik: (1.000000, 1.000000)  - (2.000000, 2.000000) 
Lõigu pikkus: 1.41421
  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused