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 06.05.2020 18:00
- projekti programm 17.05.2020 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 ja vaadatakse koos õppejõuga praktikumis läbi.
Ülesanne 2 – Projekti programm (10 punkti)
Projekti programmid esitatakse läbi aine veebilehel asuva vormi.
Ülesanne 3 – Projekti esitlus (3 punkti)
Esitlege praktikumis oma projekti 5–10 minutit. Demonstreerige programmi tööd.
NB: (2021 kevad toimub teistmoodi, vt. Slack)
Ülesanne 4 – Projektide hindamine (4 punkti)
Hinnake vähemalt kahte kaasüliõpilaste poolt esitatud projekti. Iga hindamise eest saab kuni 2 punkti.
Projektid on väljas Moodle'i foorumis. Hinnake 5 punkti skaalas (5-suurepärane, 4-hea, 3-rahuldav, 2-nõrk, 1-ebarahuldav) järgmisi projekti 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.
Teemad
Kerge:
- Käsureapõhine trips-traps-trull
- 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).