Institute of Computer Science
  1. Courses
  2. 2022/23 spring
  3. Programming in C++ (LTAT.03.025)
ET
Log in

Programming in C++ 2022/23 spring

  • 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
  • Institute of Computer Science
  • Faculty of Science and Technology
  • University of Tartu
In case of technical problems or questions write to:

Contact the course organizers with the organizational and course content questions.
The proprietary copyrights of educational materials belong to the University of Tartu. The use of educational materials is permitted for the purposes and under the conditions provided for in the copyright law for the free use of a work. When using educational materials, the user is obligated to give credit to the author of the educational materials.
The use of educational materials for other purposes is allowed only with the prior written consent of the University of Tartu.
Terms of use for the Courses environment