Loading [MathJax]/extensions/MathZoom.js
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
3 Keele põhikonstruktsioonid II
3.1 Kodutöö
3.2 Harjutused
3.3 Videolingid
  • 4. Klass, struktuur, mallid
  • 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

Kodused ülesanded

Kodutöö jaoks vajalik kood kirjuta failidesse kodu3.h ja kodu3.cpp. Nimede valideerimiseks kasuta järgnevat main.cpp malli. Uuri seda lähemalt.

#include "kodu3.h"
 
template <typename T>
concept fun_exists = requires() {
  { fun(1, 2) } -> std::integral;
  { fun(1.5) } -> std::integral;
  { fun(2, "C++") } -> std::same_as<std::string>;
  { fun(1, 2, 3) } -> std::same_as<bool>;
};
static_assert(fun_exists<int>, "Kontrolli üle funktsioonide nimed ja tüübid!");
template <typename T>
concept bmi_exists = requires(T a) {
  { kehamassiindeks(1.5, 2.5) } -> std::floating_point;
  { hinnang(1.6) } -> std::same_as<std::string>;
  { cli_kehamassiindeks(2, a) } -> std::same_as<std::string>;
};
static_assert(bmi_exists<char **>,
              "Kontrolli üle funktsioonide nimed ja tüübid!");
template <typename T>
concept file_exists = requires() {
  { andmed_failist("fail.txt") } -> std::same_as<void>;
};
static_assert(file_exists<int>, "Kontrolli üle funktsioonide nimed ja tüübid!");
template <typename T>
concept pattern_exists = requires(T a) {
  { otsi_mustrit(3, a) };
};
static_assert(pattern_exists<char **>,
              "Kontrolli üle funktsioonide nimed ja tüübid!");
 
int main() {
  return 0;
}

1. Üledefineeritud funktsioonid

NB! Kõikide funktsioonide deklaratsioonid paiguta faili kodu3.h, funktsioonide definitsioonid faili kodu3.cpp. Esita mõlemad failid.

Koosta programm, kus on neli samanimelist funktsiooni fun, mis erinevad üksteisest signatuuri poolest. Funktsioonide deklaratsioonid peavad olema definitsioonidest eraldi.

  • kui funktsiooni parameetriteks on kaks int-tüüpi arvu, siis tagastatakse nende summa;
  • kui funktsiooni parameetriteks on üks double-tüüpi arv, siis tagastatakse selle arvu ruut, mis on ümardatud täisarvuks;
  • kui funktsiooni parameetriteks on unsigned int-tüüpi arv ja sõne, siis tagastatakse sõne paljundatuna vastav arv kordi.
  • kui funktsiooni parameetriteks on kolm int tüüpi täisarvu, siis tagastatakse tõeväärtus, kas antud külgedega lõikudest saab moodustada kolmnurga.

Näide kolmandast funktsioonist. Funktsiooni poole pöördumisele main funktsioonis

cout << fun(10, "C++");

vastav väljund on

C++C++C++C++C++C++C++C++C++C++

Näide neljandast funktsioonist. Funktsiooni poole pöördumisele main funktsioonis

cout << boolalpha << "fun(3, 4, 5) = " << fun(3, 4, 5) << '\n';

vastav väljund on

fun(3, 4, 5) = true

2. Kehamassiindeks

A. Koosta funktsioon kehamassiindeks, mis tagastab kehamassiindeksi. Funktsiooni parameetriteks on pikkus meetrites ja kaal kilogrammides, mõlemad ujukomaarvud.

B. Koosta teine funktsioon hinnang, mille parameetriks on kehamassiindeks ja mis tagastab hinnangu sõnena. Hinnanguks sobivad sõnad: rasvumine, ülekaal, normaalkaal, alakaal, vt lisaks

https://www.kehamassiindeks.com/.

Näide funktsiooni tööst: Kui main funktsioonis on käsud

double kmi{kehamassiindeks(1.94, 65)};
cout << "kmi: " << kmi << " hinnang: "<< hinnang(kmi) << '\n';

siis väljundiks on

kmi: 17.2707 hinnang: alakaal

C. Koosta kolmas funktsioon cli_kehamassiindeks signatuuriga

std::string cli_kehamassiindeks(int argc, char* argv[]);

Funktsiooni parameetriteks on käsurea argumendid argc ja argv. Funktsioon tagastab sõnena kehamassiindeksi hinnangu. Argumentide teisenduseks uurida funktsiooni stod. Juhul, kui on vale argumentide arv (argc), siis tagastada "vale arv argumente".

Funktsiooni tulemus pseudokoodis:

cli_kehamassiindeks(3, {"main", "1.94", "65"}) = "alakaal"

Käsurea argumentide 1.94 65 ja main funktsiooni

int main(int argc, char* argv[]) {
    cout << "cli_kehamassiindeks(argv, argc) = " << cli_kehamassiindeks(argc, argv) << '\n';
    return 0;
}

tulemuseks on

cli_kehamassiindeks(argv, argc) = alakaal

Testimiseks keskkonnas CLion saab käsurea argumente lisada Run->Run->Edit Configurations->Program Arguments. Keskkonnas Visual Studio Code saab käsurea argumente lisada kompileeritud programmi käivitamisel terminaliakna käsureal.

3. Failist lugemine ja faili kirjutamine

Antud on tekstifail, milles on igal real ujukomaarvud, eraldajaks ;;. Ridade arv ei ole ette teada ja ujukomaarvude arv ridades on erinev.

Näide faili sisust

1.1;;2.3;;5;;9;;5.3
4.1;;2.2;;5.6;;9.2
3.1;;2.4;;5.2;;9.1;;3.2;;2.5
8.1;;5.2;;4.5;;3.9

Koosta funktsioon andmed_failist, mis saab argumendiks sõnena faili nime ja mis loeb andmed failist ning leiab iga rea jaoks aritmeetilise keskmise ja kõikide arvude summa üle faili. Tulemused kirjuta faili tulemused.txt järgmiselt: kõigepealt igale reale rea aritmeetiline keskmine ja viimasele reale kõigi elementide summa. Näites toodud faili korral on faili tulemused.txt sisu järgmine:

4.54
5.275
4.25
5.425
91.0

4. Mustri otsimine

Käsureal antakse mustrina ette sõne, mida tuleb käsurea argumentidest otsida, kujul

-otsi=otsitav sõne.

Koosta funktsioon otsi_mustrit, mille parameetriteks on käsurea argumendid ja mis teeb kindlaks, kas otsitav sõne on käsurea teiste argumentide hulgas.

Funktsiooni signatuur: string otsi_mustrit(int argc, char* argv[]) Siin argumentide arv edastatakse viitena (& ja sõnemassiiv viidana *) Näited funktsiooni tööst.

  • Kui käsureal on kala -otsi=kana kass kana, siis funktsioon tagastab "Otsitav 'kana' leiti."
  • Kui käsureal on kala -otsi=koer kass kana, siis funktsioon tagastab "Otsitavat 'koer' ei leitud."
  • Kui käsureal on kala kass kana, siis funktsioon tagastab "Mustrit ei ole olemas."

Vihje. Kasu on string funktsioonidest find() ja substr(), vt lähemalt

http://www.cplusplus.com/reference/string/string/substr/

http://www.cplusplus.com/reference/string/string/find/

Mall: (kodu3.zip)

  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta: ati.error@ut.ee
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