Skip to content

jujokio/Advanced_Object-Oriented_Programming

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Tässä työssä on käytetty hyväksi tiedostoa Catch.hpp
https://github.com/philsquared/Catch

VT 1 tehtävänanto:

Kirjoita ohjelma, joka tulostaa matriisin. 
Matriisin alkiot ovat muotoa ij, missä i on 
rivinumero ja j sarakenumero. Käyttäjä voi
 antaa matriisin rivien määrän ja sarakkeiden 
määrän komentoriviparametreina. Mikäli parametri 
puuttuu, ohjelma kysyy sitä käyttäjältä. 
Toteuta matriisin (tai sen osan) tulostus 
funktio(i)na, jo(t)ka toteutetaan erillisessä 
tiedostossa.

VT 2 Tehtävänanto:

Toteuta 2x2-neliömatriisi-luokka, SquareMatrix, 
sekä kokonaisluvun kapseloiva matriisin alkio -luokka, 
IntElement. Toteuta IntElement-luokalle myös 
laskuoperaattorit +, -, * sekä tulostusoperaattori 
<<. Luokkiin saa toteuttaa muitakin funktioita. 
Kirjoita Doxygen-dokumentaatio ja catch-yksikkötestit 
luokkien jäsenfunktioille. 

VT 3 Tehtävänanto:

Toteuta neliömatriisi-luokka, SquareMatrix, 
sekä kokonaisluvun kapseloiva matriisin alkio -luokka,
IntElement. Parametrillisen muodostimen tulee heittää 
poikkeus, mikäli parametri ei ole neliömatriisi. 
Luokkiin saa toteuttaa muitakin funktioita. 
Käytä iteraattoreita, joukkopohjaisia silmukoita, 
standardikirjaston algoritmeja sekä lambda-funktioita. 
Kirjoita Doxygen-dokumentaatioa ja catch-yksikkötestit 
luokkien jäsenfunktioille. Ohjelman tulee 
käynnistettäessä suorittaa vain pelkät testit esimerkin 
mukaisesti. Main-funktiota ei siten tarvitse toteuttaa, 
jos määrittelee catchin vakion CATCH_CONFIG_MAIN. 


VT 4 Tehtävänanto:

Muuta edellisen viikkotehtävän neliömatriisi-luokkaa, 
SquareMatrix, sillä tavalla että IntElement-olioiden 
sijaan std::vectoriin tallennetaan osoittimet näihin 
olioihin. Älykkäiden osoittimien (smart pointers) 
käyttö on suositeltavaa. Toteuta parametrillinen 
muodostin, joka tekee neliömatriisin 
merkkijonoesityksestä. Toteuta myös kopio- ja 
siirtokopiomuodostimet, sijoitus- ja 
siirtosijoitusoperaattorit sekä clone()-funktio 
IntElement-luokkaan. Funktio clone() toimii kuten 
kopiomuodostin, mutta palauttaa osoittimen luotuun 
olioon. Kirjoita Doxygen-dokumentaatio ja catch-yksikkötestit 
luokkien jäsenfunktioille. Tarkastele testien koodikattavuutta 
gcov-työkalulla. Aja cppcheck, ja pyri korjamaan sen raportoimat 
ongelmat. Varmista valgrindillä tai vastaavalla työkalulla, 
ettei ohjelmassasi ole muistivuotoja. 


VT 5 Tehtävänanto:

Toteuta ConcreteSquareMatrix-, SymbolicSquareMatrix-, Element-, 
IntElement- ja VariableElement-luokat, eli muokkaa edellistä 
viikkotehtävää sillä tavalla, että matriisin alkio voi olla 
luku (IntElement) tai muuttuja (VariableElement) 
(muuttujat ovat käytännössä kirjainmerkkejä). Symbolisessa 
matriisissa voi siis käyttää muuttujia tyyliin [[1,x][y,2]], 
konkreettinen matriisi vastaa edellisen viikkotehtävän matriisia. 
Muuttujat ja niiden arvot tallennetaan valuaatio-olioon, joka 
toteutetaan std::map-tietorakenteena. Kun alkio evaluoidaan 
valuaatiota käyttäen, tuloksena saadaan kokonaisluku 
(tai poikkeus, jos muuttujaa ei ole määritelty). Toteuta 
alkio-luokkiin Prototype-suunnittelumallin mukainen clone()-funktio 
ja Element-luokalle tulostusoperaattori. Vastaavasti kun symbolinen 
matriisi evaluoidaan valuaatiota käyttäen, tuloksena saadaan 
konkreettinen matriisi tai poikkeus

VT 6 Tehtävänanto:

Täydennä edellisen viikon tehtävää sillä tavalla, että 
symbolisista matriiseista voi muodostaa laskulausekkeita 
peruslaskutoimituksille. Käytä Composite- ja 
Interpreter-suunnittelumalleja kaavion mukaisesti. Toisin sanoen 
luo abstrakti SquareMatrix-kantaluokka, ja kuvaa laskulausekkeet 
CompositeSquareMatrix-aliluokan olioina. Kun tällaisen lausekkeen 
arvo lasketaan (evaluoidaan) kutsumalla evaluate-funktiota 
rekursiivisesti, muuttujat korvataan kokonaislukuarvoilla valuaation 
mukaisesti ja laskuoperaatiot suoritetaan, jolloin tuloksena on 
konkreettinen kokonaislukumatriisi (tai poikkeus). Toteuta myös 
tulostusoperaattori SquareMatrix-luokkalle. Tee lisäksi 
ConcreteSquareMatrix-luokalle muodostin, joka luo satunnaisesti 
alustetun neliömatriisin. Tutki ohjelman suorituskykyä suorittamalla 
kertolaskuja suurille matriiseille. Tutki gprof-ohjelman avulla, 
miten ohjelman suorituskykyä voisi parantaa.


VT 7 Tehtävänanto:

Korvaa edellisen tehtävän IntElement ja VariableElement malliluokalla 
TElement<T>, ja määrittele IntElement- ja VariableElement- luokat sen 
avulla:

	using IntElement = TElement<int>;
	using VariableElement = TElement<char>;

Tee sama ConcreteSquareMatrix- and SymbolicSquareMatrix-luokille, eli 
määrittele malliluokka ElementarySquareMatrix<T> ja ConcreteSquareMatrix 
ja SymbolicSquareMatrix sen avulla

	using ConcreteSquareMatrix = ElementarySquareMatrix<IntElement>;
	using SymbolicSquareMatrix = ElementarySquareMatrix<Element>;

Tee matriisilaskimelle käyttöliittymä. Matriisilaskin koostuu 
matriisipinosta (std::stack) (aluksi tyhjä) sekä valuaatiosta 
(aluksi tyhjä) ja toimii seuraavasti:

	Käyttäjä voi antaa minkä tahansa symbolisen nxn-neliömatriisin 
	muodossa "[[1,y][2,x]]", jolloin matriisi tallennetaan pinoon.

    	Käyttäjä voi syöttää laskuoperaation '+', '-' tai '*', jolloin 
	kaksi päällimmäistä matriisia otetaan pinosta, niistä 
	muodostetaan syötteen mukainen matriisilaskukaava 
	(CompositeSquareMatrix), ja kaava tulostetaan näytölle ja
	 tallennetaan pinoon.

    	Käyttäjä voi asettaa minkä tahansa muuttujan arvon syöttämällä 
	muotoa "x=5" olevan lausekkeen, jolloin muuttujan x arvo 
	valuaatiossa asetetaan arvoon 5.
   
	Kun käyttäjä antaa yhtäsuuruusmerkin '=', pinossa päällimmäisenä 
	oleva matriisi evaluoidaan ja tulos näytetään käyttäjälle. 
	Pinosta ei poisteta mitään.
    
	Kun käyttäjä syöttää "quit", ohjelma päättyy.

About

School project for (812339A) Advanced Object-Oriented Programming. University of Oulu 1/2017

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published