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
  • 5. Dünaamiline mäluhaldus I
5 Dünaamiline mäluhaldus I
5.1 Kodutöö
5.2 Harjutused
5.3 Videolingid
  • 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. Väärtuste vahetamine

Koosta mallifunktsioonid:

template<typename T> void vaheta_ref (T& x, T& y);
template<typename T> void vaheta_ptr (T* x, T* y);

Mõlema funktsiooni eesmärk on vahetada ära sisendina antud parameetrite väärtused.

Näide

int x = 5, y = 7;
vaheta_ref<int> (x, y);   // x = 7 ja y = 5
vaheta_ptr<int> (&x, &y); // x = 5 ja y = 7

2. Massiivi elementide liitmine

Koosta funktsioonid, mis leiavad ühedimensionaalse massiivi paarisarvuliste elementide, mille indeks on paarisarv, summa järgmiste signatuuride jaoks (teine parameeter on elementide arv):

int liida(int [], int);

int liidaP1(int*, int); // kasuta indekseid

int liidaP2(int*, int); // kasuta viitade aritmeetikat

int* liida(int*, int, int*); // kasuta viitade aritmeetikat, kolmas parameeter on summa jaoks

int& liida(int*, int, int&); // kasuta viitade aritmeetikat, kolmas parameeter on summa jaoks

Näiteks, koodijupi

int massiiv[]{0, 1, 2, 3, 4, 6};
cout << "liida = " << liida(massiiv, 6) << '\n';

tulemusena kuvatakse ekraanile 6.

Katseta kõiki funktsioone main funktsioonis.

3. Suurte täisarvude liitmine

Keeles C++ on suurima int tüüpi täisarvu väärtus 2147483647. Kui täisarv on suurem, siis ei ole seda võimalik int tüüpi muutujasse korrektselt omistada ja temaga tehteid teostada. Analoogiliselt, kui kahe täisarvu int summa on suurem kui 2147483647, siis on tulemus ebakorrektne. Üks võimalus suurte täisarvudega manipuleerimiseks on paigutada täisarvu numbrid massiivi. Näiteks, täisarvu 123456789123456789 esitus massiivis oleks int m[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4, 5, 6, 7, 8, 9}.

Kirjuta programm, mis loeb failist kaks suurt täisarvu (koosnevad maksimaalselt 20 numbrist) ja kuvab ekraanile nende summa. Jagada programm sobivalt funktsioonideks. Kui summa ületab 20 numbrikohta, siis kuvatakse ekraanile selle kohta teade.

Näiteks, kui failis on kaks arvu

5442
18683

siis programmi väljund võiks olla

Lugesin failist arvu: 5442
Lugesin failist arvu: 18683
Arvude summa on
24125

Näide suurematest arvudest ka:

Lugesin failist arvu: 1234567899876543212
Lugesin failist arvu: 18683345686543221
Arvude summa on:
1253251245563086433

Vihje: Arvutuste lihtsustamiseks võib arvu paigutada massiivi vastupidises järjekorras ja tulemuse hiljem ringi pöörata.

4. Ruutvõrrandi lahendamine

Koosta funktsioonid ja katseta neid main funktsioonis.

bool lahenda_1(double a, double b, double c, double& x1, double& x2);
bool lahenda_2(double* a, double* b, double* c, double& x1, double& x2);
bool lahenda_3(double& a, double& b, double& c, double* x1, double* x2);
bool lahenda_4(double* a, double* b, double* c, double* x1, double* x2);

Parameetritega a, b ja c on määratud võrrand ax2 + bx + c = 0. Funktsioon tagastab false, kui võrrandil ei ole reaalarvulisi lahendeid. Kui võrrandil on reaalarvulised lahendid, siis funktsioon tagastab true ning kirjutab parameetritesse x1 ja x2 võrrandi lahendid. Lahendite puudumisel x1 ja x2 väärtust ei muudeta.

NB! Funktsioonid peavad töötama ka siis, kui a = 0.

Näide ühe funktsiooni rakendamisest

double a = 1.0, b = -2.0, c = 1.0;
double x1, x2;       // lahendid on 1 ja 1
if (lahenda_1(a, b, c, x1, x2))
      cout << "Lahendid on: " << x1 << ", " << x2 << '\n';
else
      cout << "Reaalarvulisi lahendeid ei ole!" << '\n';

  • 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