Tölvunarfræði 2

Vikublað 6


Við höfum nú farið yfir fyrstu þrjá kaflana í Algorithms bókinni, að nokkrum undirköflum undanskildum. Í þessari viku byrjum við á huglægum gagnagrindum í kafla 4. Þar eru skoðaðar útfærslur á hlöðum (e. stack) og biðröðum (e. queue).

Í næstu viku verður haldið áfram með útfærslu á hlöðum og biðröðum.

Forritunarverkefni 1

Í þessu fyrsta forritunarverkefni eigið þið að skrifa forritið Drithöfundur í C++. Drithöfundur les inn bók sem textaskrá og "hermir" eftir þeirri bók með því að skrifa slembitexta sem hefur sömu tíðnidreifingu bókstafa og upphaflega bókin.

Tökum sem dæmi að við viljum herma eftir Njálu. Einfaldasta útgáfa af Drifhöfundi myndi finna tíðni allra bókstafa í Njálu og í hvert sinn velja einn bókstaf af handahófi byggt á þeim líkum. Til dæmis, ef eyða, ' ', er fimmti hver stafur að meðaltali í Njálu þá eru líkurnar á því að forritið skrifi út eyðu 20%. Næstalgengasti stafurinn er kannski 'a' og þá eru minni líkur á að forritið velji hann, o.s.frv. Textinn sem kemur út hefur sömu tíðnidreifingu á bókstöfunum og Njála, en líkist Njálu ekki mikið.

Við getum hins vegar haldið aðeins lengra með þessa hugmynd og byggt líkurnar á því hvaða bókstafur kom síðast. Það eru til dæmis mun meiri líkur á bókstafnum 'ð' ef síðasti stafur var 'a', en ef hann var einhver annar stafur. Þetta er vegna þess að orðin "að" og "það" koma víða fyrir í Njálu (eins og flestum öðrum íslenskum bókum). Hér að neðan er dæmi um hvernig svona slembitexti gæti litið út:

a Gumirög hannið þóðir þel þót dið s hú hrekumérastórjög heg aði Gr s. ta ll ttti a völdindir, stir

Nú getum við aukið fjölda þeirra bókstafa sem við miðum við, þannig að við byggjum líkurnar á bókstöfunum á síðustu k stöfum sem við notuðum. Hér að ofan var k = 1, en ef við miðum við tvo síðustu stafina þá getum við fengið slembitextann:

gir í bjót þá sangbeir Gist haflið hög mér fa þakarpingi st í kvaði. Gis að ráðar vorðir eranga. Það

Eftir því sem k er aukið þeim mun meira líkist slembitextinn upprunalega textanum. Lítum á k = 5:

taki til Mýdal. Það var Mörk bað þá heyverkum fyrir það yfir því valda, val-Freyjur þó óráðanda f

og k = 10:

r að níta sjálfdæmi Gunnar." Mörður var allra kvenna fegurst og best að sér orðin um það er þú k

Reikniritið sem þið notið er ekki mjög flókið. Forritið fær uppgefið gildið á k, hversu langur slembitextinn á að vera og nafn inntaksskrárinnar. Það byrjar á því að lesa alla inntaksskránna inní streng (string breytu eða char fylki) og velur k-stafa streng af handahófi úr inntakstextanum sem undanfara og prentum hann út. Við leitum síðan að þessum k-stafa undanfara í textanum og í hvert sinn sem hann finnst þá bætum við bókstafnum sem kemur á eftir honum í textanum í lista. Til dæmis ef k er 2 og fyrsti undanfarinn er "þe" þá gæti listinn yfir stafi sem koma fyrir á eftir honum orðið ['s', 't', 's', 'i', 'i', ... ]. Við veljum síðan bókstaf af handahófi út þessum lista. Þeir bókstafir sem koma oft fyrir í listanum eru þá líklegri til að verða fyrir valinu en þeir sem koma sjaldnar fyrir.
Þegar fyrsti slembistafurinn hefur verið valinn er hann prentaður út og undanfarinn uppfærður með því að henda burt fyrsta stafnum og setja nýja stafinn aftast. Til dæmis ef stafurinn 't' varð fyrir valinu hér að ofan þá væri næsti undanfari orðið "et" og við myndum þá aftur búa til lista yfir alla þá bókstafi sem koma á eftir strengnum "et" í textanum".

Það eru til ýmsar gagnagrindur sem myndu gera leitina að bókstöfunum sem koma á eftir undanfaranum hraðvirkari, en í þessu verkefni er nóg að leita bara með renna í gegnum allan textann í strengum í hvert sinn og skrá hjá sér stafinn sem kemur á eftir í hvert sinn sem við finnum undanfarann.

Þetta verkefni á ekki að vera mjög erfitt. Reynið því að gera það sem mest sjálf, því þannig lærið þið mest á því. Eftir sem áður er í lagi fyrir ykkur að ræða um verkefnið við samnemendurna, en forðist að taka við forritskódum frá öðrum.

Hægt er að finna mikið magn af bókum á íslensku á heimasíðu Netútgáfunnar. Að vísu eru þær allar á HTML formi, en það er ekki mikið af HTML skipunum í skránum, en hægt er að fá hreina textaskrá með því að velja allan textann (ctrl-a), afrita hann (ctrl-c) og skeyta honum svo inn í textaritil (ctrl-v). Einnig er gríðarlega mikið af bókum á ensku hjá Project Gutenberg.

Skilið stuttri skýrslu um forritið ykkar, þar sem þið lýsið aðeins nánar hönnun forritsins og sýnið niðurstöður forritsins á 2-3 mismunandi bókum fyrir gildin 1, 4, 7 og 10 á k. Skilið einnig útprentun af forritinu til dæmatímakennara ykkar fyrir kl 18:00 föstudaginn 25. febrúar. Þeir munu ekki taka við verkefnum sem koma seinna.


annaing (hja) hi.is / hh (hja) hi.is, 14. febrúar, 2005.