Tölvunarfræði 2 - Vor 2012


Aukaverkefni 1


Lausnum skal skilað til viðkomandi dæmakennara (sjá lista yfir dæmatíma).

Reynið að skrifa stutt, skýr og hnitmiðuð forrit. Notið réttan inndrátt og gætið þess að forritin ykkar séu læsileg.

Skiladagur: þriðjudaginn 27. mars fyrir kl 16:00


Aukaverkefni (10 stig) - Pörun tilboða með forgangsbiðröðum (matching engine)


Leysið dæmi 2.5.22 í bókinni.

Stock market trading. Investors place buy and sell orders for a particular stock on an electronic exchange, specifying a maximum buy or minimum sell price that they are willing to pay, and how many shares they wish to trade at that price. Develop a program that uses priority queues to match up buyers and sellers and test it through simulation. Maintain two priority queues, one for buyers and one for sellers, executing trades whenever a new order can be matched with an existing order or orders.

Skrifið gagnamót fyrir MatchingEngine sem býður upp á að bæta við kauptilboði (buy/bid order) og sölutilboði (sell/ask order). Látið hvert tilboð innihalda verð og auðkenni þess sem lagði inn tilboðið. Látið MatchingEngine taka inn viðmót (interface) fyrir callback þegar viðskipti eiga sér stað (trade execution), þ.e. þegar kauptilboð er parað við sölutilboð. Látið notanda MatchingEngine skilgreina execution callback sem prentar bara út executions með upplýsingum um verð og auðkenni beggja aðila.

Skrifið notkunarlýsingu fyrir öll föll sem þið skrifið í MatchingEngine. Skrifið fastayrðingu gagna fyrir útfærslu ykkar á MatchingEngine gagnamótinu.

Viðskipti eiga sér stað þegar hæsta kauptilboð er hærra en lægsta sölutilboð.

Efni til að koma ykkur af stað:

Fyrir þá sem leiðast þá eru hér nokkrar hugmyndir að auka viðbótum:

  • Fall sem reiknar spread-ið, þ.e. mismuninn á hæsta kauptilboði og lægsta sölutilboði
  • Taka aukalega inn magn í tilboðum, t.d. selja 100 stykki á verði X, kaupa 50 stykki á verði Y, og leyfa tilboði að éta upp mörg gagntilboð í pörun
  • Fall sem prentar út töflu með öllum kaup og sölutilboðum (order book), hér er dæmi um slíka töflu. Það þarf að bæta iterator í PriQueue til að geta gert það snyrtilega.