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

Programmeerimine keeles C++ 2024/25 kevad

  • Pealeht
  • 1. Muutujad ja andmetüübid
  • 2. Keele põhikonstruktsioonid I
  • 3. Keele põhikonstruktsioonid II
  • 4. Klass, struktuur, mallid
4 Klass, struktuur, mallid
4.1 Kodutöö
4.2 Harjutused
4.3 Videolingid
  • 5. Dünaamiline mäluhaldus I
  • 6. Dünaamiline mäluhaldus II
  • 7. Kontrolltöö 1

Seitsmendal nädalal toimub 1. kontrolltöö

1. kontrolltöö näidis on Moodles

  • 8. Dünaamiline mäluhaldus III
  • 9. STL andmestruktuurid I
  • 10. STL andmestruktuurid II
  • 11. OOP I Klassid
  • 12. OOP II Pärilus ja polümorfism
  • 13. Erindite töötlemine
  • 14. Täiendavad teemad
  • 15. Kontrolltöö 2

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

2. kontrolltöö näidis on Moodles

  • 16. Projekti esitlus
  • Mõned viited - vajalikud kaaslased
  • Vanad materjalid
  • Juhendid
  • Viited

Harjutusülesanded

1. Liitmise piiramine

Loo funktsioonimall nimega liidaJaPiira, millel on kaks malliparameetrit. Esimene neist on tüübiparameeter T, teine täisarv N vaikimisi väärtusega 10. Funktsioonil endal on kaks parameetrit tüübiga T ja funktsioon tagastab antud parameetrite summa juhul, kui see on väiksem kui teine malli parameeter. Vastasel juhul tagastada malli argumendi väärtus.

Näide funktsiooni poole pöördumisest:

int main() {
    cout << liidaJaPiira(4, 1) << '\n';
    cout << liidaJaPiira(10, 100) << '\n';
    cout << liidaJaPiira<int, 0>(0, 1) << '\n';
    return 0;
}

Väljund:

5
10
0

2. Elementide salvestaja

Loo funktsioonimall tüübiparameetriga T, mille signatuur on järgmine: void looFailJaKirjuta(filesystem::path asukoht, T elemendid[], size_t arv). Funktsioon peab avama väljundfaili antud asukohale ning kirjutama sinna teises parameetris antud elemendid. Kolmas parameeter määrab elementide arvu. Kui faili ei eksisteeri, peab funktsioon selle looma.

Näide:

int main() {
    auto asukoht = filesystem::path("elemendid.txt");
    string elemendid[] = {"üks", "kaks", "kolm"};
    looFailJaKirjuta<string>(asukoht, elemendid, 3);
}

Faili elemendid.txt sisu:

üks
kaks
kolm

3. Funktsioonimallid

  • Koosta mall funktsiooni liida jaoks, millel on kaks malliparameetrit ja mis tagastab nende summa. Katseta ise main funktsioonis erinevaid tüübikombinatsioone (<int, int>, <string, string>, <int, double>, jne).

Uuri, kas on võimalik parameetrite tüübile piiranguid seada.

  • Koosta mall funktsiooni onVahemikus jaoks, millel on üks <template> parameeter ja kaks int tüüpi parameetrit. Funktsioon tagastab tõeväärtuse, kas parameetrina antud arv asub etteantud vahemikus, otspunktid kaasa arvatud. Katseta main funktsioonis erinevaid argumentide väärtuseid ja vahemikke. Näide kasutuse kohta: onVahemikus<5>(1, 10).

4. Klassimall fikseeritud pikkusega listi jaoks

Koostada klassimall Massiiv, mis hoiab endas fikseeritud pikkusega (nt 100 elementi) massiivi, mis käitub nagu fikseeritud pikkusega list. Massiivi elementide tüüp on määratud klassimalli tüübiparameetriga. Tüübiparameeter kitsendada päises <concepts> vahenditega arvuliseks, st kas täisarvuks või ujukomaarvuks. Massiivi kõik elemendid on algselt nullid ja neid loetakse väärtustamata elementideks. Massiivi saab täita (väärtustada) järjest vasakult paremale ja elemendi kustutamisel kustutatakse viimane väärtustatud element. Klassimallis on järgmised funktsioonid (T on klassimalli tüübiparameeter):

  • T getElement(int i)

Funktsioon tagastab i-ndal kohal oleva elemendi, kui see on väärtustatud. Vastasel juhul tagastab -1111.

  • bool kasTais()

Funktsioon tagastab tõeväärtuse, kas massiivi kõik elemendid on väärtustatud.

  • int getSuurus()

Funktsioon tagastab, mitu elementi massiivist on väärtustatud.

  • void print()

Funktsioon kuvab ekraanile massiivi kõik väärtustatud elemendid.

  • void lisaElement(T el)

Funktsioon lisab elemendi massiivi "lõppu", st esimesele vabale (väärtustamata) kohale.

  • void kustutaElement()

Funktsioon kustutab (nullib) viimase väärtustatud elemendi.

  • void asendaElement(T el1, T el2)

Funktsioon asendab väärtustatud alal kõik elemendid el1 elemendiga el2.

  • int vabuKohti()

Funktsioon tagastab vabade (väärtustamata) elementide arvu.

  • bool kasSisaldub(T el)

Funktsioon tagastab tõeväärtuse, kas etteantud element sisaldub massiivis väärtustatud alal.

Lisada klassi vajalikud isendimuutujad massiivi hetkeseisundi hoidmiseks. Klassimall vormistada päisefaili kodu4.h, kus funktsioonide deklaratsioonid on eraldi nende definitsioonidest.

Näiteks, programmijupi

Massiiv<int> m{};
m.lisaElement(5);
m.lisaElement(8);
m.lisaElement(5);
m.lisaElement(5);
m.print();
m.kustutaElement();
m.print();
m.lisaElement(25);
m.asendaElement(m.getElement(0), 9);
m.print();
cout << m.getElement(8) << '\n';
cout << boolalpha << m.kasTais() << " " << m.kasTyhi() << '\n';
cout << m.vabuKohti() << " "  << m.kasSisaldub(23) << " " << m.getSuurus() << '\n';

tulemuseks ekraanil on

5 8 5 5 
5 8 5 
9 8 9 25 
-1111
false false
96 false 4
  • 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