Kevät 2006: T-106.3105 - Ohjelmoinnin harjoitustyö (2 op)


Kurssin sisältö

Kurssilla tehdään kaksi harjoitustyötä perl-kielellä. Kurssi arvostellaan hyväksytty/hylätty asteikolla. Kurssin tarkoitettu niille, jotka suorittavat kurssia T-106.3100 samaan aikaan. Mikäli et suorita kyseistä kurssia nyt, mutta haluaisit suorittaa tämän kurssin, ota yhteyttä osoitteeseen t1063100@cs.hut.fi.

Ratkaisut alla oleviin tehtäviin ja dokumentaatio, joka sisältää esimerkkiajot on palautettava osoitteeseen t1063100@cs.hut.fi 21.5.2006 mennessä. Sähköpostin otsikon tulee olla "T-106.3105 palautus"

Materiaalia

Riku Saikkosen luentokalvojen viimeisellä sivulla on lista eräitä hyviä perl aiheisia kirjoja ja verkosta löytyviä oppaita.

Tehtävät

Tehtävä 1: Oikeinkirjoituksen tarkistin

Tee Perl-ohjelma, joka tarkistaa, löytyvätkö syötteenä annetun englanninkielisen tekstin sanat ohjelman sanakirjasta. Ohjelman tulee lukea tekstiä (stdinistä) ja tulostaa kaikki sanat, jotka eivät esiinny sanakirjassa. Lisäksi ohjelman pitäisi ehdottaa näille sanoille korjausvaihtoehtoja arvaamalla kirjoitusasultaan lähellä olevia sanoja ja tulostamalla ne arvaukset, jotka löytyvät sanakirjasta.

Eri korjausvaihtoehtoja pitää arvata ainakin näillä kolmella tavalla (voit keksiä muitakin tapoja, jos haluat):

Ohjelman syöte on tavallista tekstiä, eli yhdellä rivillä voi olla monta sanaa. Muista myös ottaa sanoista pois esimerkiksi niiden lopussa olevat pilkut ja pisteet ennen kuin etsit niitä sanakirjasta. Ota huomioon myös se, että tekstissä voi olla isolla alkukirjaimella kirjoitettuja sanoja, mutta sanakirjasta ei löydy kaikkia sanoja sekä isolla että pienellä alkukirjaimella.

Tee ohjelma niin, että se ehdottaa korjauksia samalla tavalla kirjoitetulle sanalle vain kerran (yhden ajokerran aikana). Esimerkiksi jos sana tge esiintyy syötteessä kaksi kertaa, ohjelman pitäisi ehdottaa korjauksia sille vain kerran.

Ohjelma lukee sanakirjansa tiedostosta, jossa on luettelo englannin kielen sanoista, yksi kullakin rivillä. Useimmissa Unix-järjestelmissä tällainen sanakirja on tiedostossa /usr/dict/words tai /usr/share/dict/words. Sanakirjatiedoston polun ei tarvitse olla käyttäjän muutettavissa, eli voit kirjoittaa sen suoraan skriptin lähdekoodin.

Ohjelma voisi toimia esimerkiksi näin (esimerkin ensimmäinen rivi on syötteenä annettu teksti, ja ohjelma tulostaa loput rivit):

  Tge boy sais, "Hello, whoo are you?"
  Tge => age the tie toe
  sais => skis saws says saps sags sail said
  whoo => woo who whom

Unix-työkalu spell tai ispell tekee samankaltaista oikeinkirjoituksen tarkistusta, mutta et tietenkään saa käyttää sitä tässä tehtävässä! Tee itsenäinen Perl-ohjelma, joka ei suorita muita ohjelmia.

Todennäköisesti tarvitset tehtävässä muun muassa hajautustauluja ja Perl-funktioita open, split ja substr.

Tehtävä 2: Moduulien yleisimmät kurssit

Tietotekniikan osaston WWW-sivuilta osoitteesta http://www.tkk.fi/Yksikot/Tieto/Opinnot/moduulit.pdf löytyy T-koulutusohjelman opinto-oppaasta poimittu luettelo saatavilla olevista moduuleista ja niiden kursseista. Tehtävänä on analysoida tätä luetteloa etsimällä sieltä kurssit, jotka esiintyvät suurimmassa määrässä moduuleita. (Eräs melko yleinen skriptien käyttötarkoitus on tällainen kohtalaisen kertakäyttöinen analysointi - kun tulos on saatu, skriptiä ei välttämättä enää käytetä sellaisenaan toista kertaa.)

Linkin PDF-tiedoston saa tekstiksi Unix-työkalulla pdftotext, joka löytyy muun muassa Niksulan FreeBSD-koneilta. Komento pdftotext -layout moduulit.pdf tuottaa tiedoston moduulit.txt, jota on kohtalaisen helppo lukea Perl-skriptillä.

Tee Perl-ohjelma, joka lukee näin saadun moduulit.txt-tiedoston ja tuottaa siitä luettelon kurssikoodeja sekä moduuleita, joiden kurssiluettelossa kurssi esiintyy. Ohjelman tulosteena pitäisi olla rivejä, joissa on kurssin sisältävien moduulien lukumäärä, kurssikoodi sekä niiden moduulien koodit, joihin kurssi kuuluu. Järjestä tuloste lukumäärän mukaan, suurin ensin. Tulosteen muutaman ensimmäisen rivin pitäisi olla suunnilleen tällaista (välilyöntien määrä ei ole olennaista, eikä myöskään saman lukumäärän sisältävien kurssien keskinäinen järjestys):

 5 T-61.2010     T901-O T203-1 T270-2 T204-1 T205-1
 5 T-76.4115     T240-2 T250-2 T260-2 T221-3 T222-3
 4 T-121.2100    T901-O T204-1 T240-2 T250-2

Pieniä vinkkejä ja yksityiskohtia:


Valid HTML 4.0!