Programmeerimine keeles C++
Praktikumid 7–8: Projekt
Üldised nõuded
Aine lõppu jääb veel üks suur koduülesanne, mille lahendamise käigus saate seniõpitut kasutada. Peate kirjutama programmi, et demonstreerida oma programmeerimisoskust. Projekti teema valige ise.
Lahendamiseks on aega 14 päeva.
Tähtajad
- projekti püstitus 05.05.2022 23:59:59
- projekti programm 15.05.2022 23:59:59
Programm peab kasutama praktikumides tutvustatud kaustastruktuuri. Lahendusega peab kaasas olema Makefile (võib kasutada ka cmake, qmake või mõnda teist analoogset süsteemi), mis võimaldab programmi lihtsalt kompileerida kolme praktikumis toetatud kompileerimiskeskkonna (MinGW, Linux, Mac OS X) all. Teekide asukohta peab Makefile sees saama muutujaga määrata.
NB! Doxygeniga dokumenteerida pole vaja.
Ülesanne 1 – Projekti püstitus (3 punkti)
Andke projekti sõnaline püstitus. Teema peab olema teie jaoks huvitav. Selgitage lühidalt programmi ülesehitust ja kasutatavaid programmeerimisvahendeid. Projekti püstitus esitatakse Moodle'sse.
Ülesanne 2 – Projekti programm (10 punkti)
Projekti programmid esitatakse läbi aine veebilehel asuva vormi. Lisaks laetakse programm hindamiseks üles Moodle'i foorumisse. Projekti mahuks on umbes 10 tundi tööd.
Ülesanne 3 – Projekti esitlus (3 punkti)
Esitlege oma projekti praktikumis või salvestage projekti tutvustav videoesitlus (jagage link Moodles projektide hindamiseks). Esitluse pikkus võiks olla 5–10 minutit. Tutvustage programmi koodi ja selle kompileerimist. Demonstreerige programmi tööd.
Ülesanne 4 – Projektide hindamine (4 punkti)
Hinnake vähemalt kahte kaasüliõpilaste poolt esitatud projekti. Iga hindamise eest saab kuni 2 punkti.
Hinnake 5 punkti skaalas (5-suurepärane, 4-hea, 3-rahuldav, 2-nõrk, 1-ebarahuldav) projekti järgmisi karakteristikuid:
- teema
- kompileerimine ja käivitamine
- tehniline teostus
- kasutusmugavus
Põhjendage lühidalt enda poolt antud hindeid. Andke ka hinnatava projekti koondhinne, milleks on nende nelja hinde summa.
Näidisteemad
Kerge:
- Käsureapõhine trips-traps-trull (mingi krutskiga)
- Typeracer (sarnaselt https://play.typeracer.com/ )
- Diff (näiteks kuidas 2 tekstifaili teineteisest erinevad, mis real, mille poolest)
- Poomismäng
- Mullisort (Algoritmi realisatioon kirjeldusega)
Keskmine:
- Dijkstra algoritm (Algoritmi realisatsioon kirjeldusega)
- Lineaarvõrrandisüsteemide lahendaja
- Mõne geneetilise kauguse arvutamine. Raskendav boonus: meetodi kiirendamine Intel X86_64 vektorinstruktsioonidega.
- Mõni kasulik algoritm mis on teostatud C++ ja saab kutsuda mõnest teisest keelest (näiteks R, Python, Javascript/Node.js, etc). Sellist lähenemist kasutatakse sageli, et aeglane osa dünaamilises keeles kirjutatud skriptist palju kiiremaks teha.
Raske:
- Teise protsessi mälu ruumis tegutsemine ( mälu lugemine/ muutmine ). Oleneb operatsioonisüsteemist, windowsis (Abiks “Windows.h” päis).
- Hashcracker (Etteantud parooliräsi brute-forcemine), võib toetada ka ainult ühte algoritmi
- Boids -- simuleerimine ja visualiseerimine
- Väga lihtne software only ujukoma (liitmine, korrutamine, pöördarv, ruutjuur)
- Implicit Runge-Kutta diferentisaalvõrrandite lahendaja (üldine numbriline lahendaja mis võtab sisendiks suvalise funktsiooniobjekti). Tungivalt soovitatav varasem kogemus numbriliste meetoditega. Võib kasutada välist lineaarvõrrandisüsteemide lahendajat.
- Valguse simuleerimine ja visualiseerimine 2D ruumis (vaata https://benedikt-bitterli.me/tantalum/tantalum.html). Äärmiselt mahukas teema kui ei ole juba füüsika ja selle simuleerimisega tuttav.
- Minesweeperi lahendaja. Peaks suutma lahendada juhuslikult genereeritud intermediate tasemega puslesid keskmiselt enam kui veerand juhtudel.
- Jaapani mõistatuste lahendaja. Suudaks mõistlikus ajas lahendada inimestele mõeldud ülesandeid kuni suuruses 50 korda 50. Puslesid peaks saama anda sisendina lihtsas tekstilises formaadis (ei pea vastama täpselt lingis toodule).