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
6 OOP II Pärilus ja polümorfism
6.1 Kodutöö
6.2 Harjutused
6.3 Videolingid
  • 7. Kontrolltöö 1?

Seitsmendal nädalal toimub 1. kontrolltöö

7.1 1. kontrolltöö näide?
  • 9. Dünaamiline mäluhaldus II
  • 10. Klassimallid
  • 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

1. Minu täisarv

Koosta klass MinuTaisarv, mis hoiab privaatselt täisarvu ja milles on get-set funktsioonid (int getArv() ja void setArv(int)) täisarvu pärimiseks ja seadmiseks. Defineeri üle operaator[] selliselt, et indeks i korral tagastakse i-ndal kohal olev number, kus i = 0 on üheliste koht.

Näiteks, kui arv on MinuTaisarv tüüpi ja täisarvuks on seatud 215, siis arv[0] tagastab 5, arv[1] tagastab 1, arv[2] tagastab 2 ja arv[3] tagastab -1. Defineeri üle ka operaator << arvu kuvamiseks ekraanil nt MinuTaisarv: 215. Klassis peab olema vaikekonstruktor, ühe parameetriga konstruktor. Programm peab hakkama saama ka juhuga, kus objekt luuakse vaikekonstruktoriga, st hoitavaks arvuks on 0.

Koosta ka klass Algarv, mis on MinuTaisarv alamklass. Klassis on lisaks privaatne isendiväli (täisarv), mis näitab, mitmes algarv see arv on. Näiteks 1 on esimene, 2 on teine, 3 on kolmas, 5 on neljas algarv jne (sellise eelduse teeme lihtsuse mõttes). Ülemklassis olevat täisarvu hoidvat muutujat mitte üle defineerida. Vaikekonstruktorit mitte teha. Klass ei pea töötama negatiivse arvuga.

Defineeri üle operaator << arvu enda ja mitmes algarv ta on, kuvamiseks ekraanil. Näiteks arvuga 5 Algarv isendi korral saadetakse väljundvoogu Arv 5 on 4. algarv.

Defineeri üle operaatorid ++ (post-increment) ja -- (post-decrement) (signatuurid on Algarv operator++(int) ja Algarv operator--(int)), mis tagastavad Algarv objekti kas järgmise või eelmise algarvuga.

Järgnev koodilõik:

int main() {
    Algarv arv(5);
    Algarv uusArv = arv++;
    cout << arv << '\n';
    cout << uusArv << '\n'; 
    return 0;
}

annab jägneva väljundi:

Arv 7 on 5. algarv
Arv 5 on 4. algarv

Klassis peab olema ühe parameetriga konstruktor, mis määrab täisarvu. Konstruktoris arvutatakse, mitmes algarv see on. Kui arv ei ole algarv, siis väärtustatakse mitmes algarv väärtusega -1.

Koosta funktsioon loeArv, mis saab argumendiks täisarvu. Kui sisestatud arv on algarv, siis funktsioon loob klassi Algarv objekti, vastasel juhul klassi MinuTaisarv objekti. Funktsioon tagastab arvu numbrite summa (ristsumma). Funktsioonis main testida klasside ja funktsioonide tööd.

Vihje. Täisarvu numbreid on mugav hoida vektoris vector<int>.

2. Toidukuller

Toidukuller pakub võimalust klientidele erinevaid toite koju tellida. Toidud on failis järgmisel kujul:

Risotto,5.00,10,
Sushi,19.00,
Vürtsikas porgandikook,6.50,15,
Veiselihapasta seentega,11.50,

Iga rida algab toidu nimetusega. Nimetusele järgneb hind. Kui tegu on kampaaniapakkumisega, siis nimetusele ja hinnale järgneb soodustuse protsent (täisarv). Eraldajaks on koma (ka rea lõpus).

Programm peab sisaldama klasse Toit ja KampaaniaToit. Klasside kõik isendiväljad peavad olema privaatsed.

1. Klassis Toit peavad olema privaatsed isendiväljad toidu nimetuse (string) ja hinna (float) jaoks.
2. Klassis peab olema vaikekonstruktor ja kahe parameetriga konstruktor isendiväljade määramiseks.
3. Klassis peavad olema funktsioonid isendiväljade seadmiseks ja pärimiseks. Hinna pärimiseks on virtuaalne funktsioon getHind.
4. Klassis defineeritakse üle operaator <<, mille abil on võimalik infot mõistlikult kuvada.
5. Klassis defineeritakse üle operaator <=, mille abil on võimalik objekte võrrelda. Võrdlemine toimub hinna alusel.
Klass KampaaniaToit on klassi Toit alamklass. Ülemklassis olemasolevaid isendivälju siin uuesti mitte kirjeldada. Lisaks peab olema privaatne isendiväli soodustuse protsendi (int) jaoks.

1. Klassis peab olema vaikekonstruktor ja kolme parameetriga konstruktor, mille abil saab määrata toidu nimetuse, hinna ja soodustuse protsendi.
2. Klassis defineeritakse üle getHind, mis arvutab hinna arvestades soodustuse protsendiga (valem: hind*(100-protsent)/100).
3. Klassis defineeritakse üle operaator <<, mille abil on võimalik infot mõistlikult kuvada.
4. Klassis defineeritakse üle operaator <=, mille abil on võimalik objekte võrrelda. Võrdlemine toimub hinna alusel.
Koosta funktsioon loe_toidud, mis saab argumendiks sõnena faili nime ja viite andmestruktuurile vector<Toit>. Funktsioon loeb failist toidud ja lisab vektorisse. Funktsioon tagastab toitude kogumaksumuse. NB! Kui viitasid (pointer) ei kasuta, siis vektori abil arvutatud kogumaksumuses ei kajastu soodustused.

Funktsioonis main kuvatakse ekraanile mõistlikul kujul kõik toidud ja nende kogumaksumus. Katsetatakse ka objektide võrdlemist.

Programmi vormistamisel panna päisefaili toit.h deklaratsioonid ja lähtekoodifaili toit.cpp definitsioonid. Vajadusel teha funktsioone juurde. Funktsiooni main sisaldav kood on eraldi failis.

3. Oma klassid

Mõtle välja oma ülesanne, kus on klasside hierarhia vähemalt kahe või kolme tasemega, nt Vanem<-Laps<-Lapselaps (Parent<-Child<-Grandchild). Igas klassis peavad olema isendiväljad, konstruktorid, operaatorite üledefineerimised ja funktsioonid andmetega opereerimiseks. Funktsioonis main testida loodud klasse. Klasside ja funktsioonide deklaratsioonid paigutada päisefaili ja definitsioonid lähtekoodifaili. Ülesande tekst peab olema eraldi failis.

NB! Häid ja sisukaid ülesandeid premeeritakse lisapunktiga.

  • 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