Unix ja shell-ohjelmointi 16.3.2001 Unix ja shell-ohjelmointi 16.3.2001

KATSO TOIMINTAOHJEET KÄÄNTÖPUOLELTA!

Huom. Ratkaisuissa saa käyttää vain luennoilla esiteltyjä komentoja, ei perliä tai komentojen Gnu- tai Linux-spesifisiä ominaisuuksia.

  1. Kirjoita skripti, joka

    1. etsii tiedostosta rivit, joiden ensimmäinen ja viimeinen ei-tyhjä merkki on sama. (Tyhjä tarkoittaa välilyöntiä tai tabulaattoria.) (2p)
    2. tulostaa argumenttina annetusta liukuluvusta mantissan itseisarvon (poistaa mahdollisen etumerkin ja eksponentin, +12.34e-57:sta tulisi 12.34). Eksponenttimerkki voi olla iso tai pieni e. Luvun oikeellisuutta ei tarvitse tarkistaa. Testausapuna ohessa tiedosto floats.txt jossa on liukulukuja ja niiden mantissoja. (2p)
    3. etsii pelkkiä numeroita (yksi kokonaisluku per rivi) sisältävistä tiedostoista kaikki neljällä tasan jaolliset luvut. Tiedostossa mahdollisesti oleviin muunlaisiin riveihin ei tarvitse varautua. Testausavuksi ohessa on tiedosto integers.txt. (2p)

  2. Kirjoita skripti, joka

    1. etsii annetun hakemiston alta tavalliset tiedostot, joita on muutettu tänään (skriptin ajopäivänä) kello 08:00 jälkeen. (3p)

    2. poistaa tiedostonimien lopusta puolipisteellä erotetut versionumerot (esim. file1.txt;1:sta tulisi file1.txt). Jos versionumeroa lukuunottamatta samannimisiä tiedostoja on useita, tulostetaan sopiva virheilmoitus ja jätetään ko. tiedostot sikseen. Voit olettaa että viimeisen puolipisteen perässä ei voi olla muuta kuin versionumero. (3p)

  3. Kirjoita skripti, joka

    1. lajittelee henkilötunnuksia sisältävän tiedoston syntymäajan mukaiseen järjestykseen, samana päivänä syntyneet järjestysnumeron mukaan. Tunnusten oikeellisuutta ei tarvitse tarkistaa. (Henkilötunnus on muotoa ppkkvvsnnnt, missä pp on syntymäpäivä, kk kuukausi, vv vuosi, s vuosisata, +=1800, -=1900, A=2000, nnn järjestysnumero joka on naisilla parillinen ja miehillä pariton, ja tarkistusmerkki t jolla ei tässä ole merkitystä.) Testaukseen voit käyttää tiedostoja hetuja.txt ja hetuja.sorted-a (samat tunnukset oikein lajiteltuina). (3p)
    2. kuten edellä mutta samana päivänä syntyneet pitää lajitella ensisijaisesti sukupuolen mukaan, naiset ensin. Testiaineistoksi käy sama hetuja.txt kuin edellä, haluttu tulos löytyy nyt tiedostosta hetuja.sorted-b. (3p)

  4. Kirjoita skripti, joka testaa käyttäjän laskutaitoja pienillä kokonaisluvuilla (esim. enintään 3-numeroisilla) siten, että se arpoo satunnaisen laskutehtävän (yhteen-, vähennys-, kerto- tai jakolasku), kysyy sitä käyttäjältä ja tarkistaa vastauksen. Vastauksen ollessa väärä samaa kysytään uudestaan, jos vastaus on toistamiseen väärä kerrotaan käyttäjälle oikea vastaus. Argumenttina annetaan kysymysten määrä, lopussa tulostetaan onnistumisprosentti. Jakolaskutehtävät pitää muodostaa niin, että jako menee tasan.

    Satunnaislukujen generoimiseen voi käyttää ksh:n ja bash:in satunnaismuuttujaa $RANDOM, joka palauttaa satunnaisen kokonaisluvun väliltä 0... 32767. (6p)

  5. Kirjoita skripti, joka muuttaa annetuissa tiedostoissa tai stdinissä tekstin seassa olevat %xx -koodatut merkit, missä xx on merkin heksadesimaalikoodi, vastaavaksi merkiksi. Testausapuna tiedosto heksaa.txt ja haluttu tulos unhexed.txt. (6p)


Normaalit tenttejä koskevat säännöt ovat voimassa seuraavin poikkeuksin:

  1. Mukana saa olla kirjallisuutta, muistiinpanoja jne, rajoituksena vain että niiden levittely ei saa häiritä muita. Yhteistyö ei muutenkaan ole sallittua kuten ei tenteissä yleensäkään.

  2. Aloita kirjoittamalla nimesi jne konseptiin normaaliin tapaan. Itse vastauksia ei kuitenkaan tarvitse siihen kirjoittaa (ks. alla). Tehtävät jaetaan paperilla normaaliin tapaan, minkä lisäksi ne löytyvät koneesta.

  3. Jokaisella on käytössään mikro jossa pyörii Linux (riisuttu RedHat 7.0; käytettävissä on ainakin ksh (pdksh) ja bash sekä joukko yleisiä editoreita, ainakin emacs, pico ja vi). Verkkoyhteyttä ulos ei ole.

  4. Aloitettaessa koneessa on ikkuna joka kysyy nimeäsi ja syntymäaikaasi. Vastaa siihen, klikkaa OK ja auki jää pääteikkuna sekä Netscape, jossa on näkyvissä kopio kurssin kotisivusta.

  5. Tehtävät pitää tehdä koneella siten, että kunkin tehtävän vastaus tulee tiedostoon jonka nimi on tehtävän numero (esim. "1a", "5" jne) kotihakemiston alihakemistoon "vast". Jos vastaukseksi tarvitaan useampia tiedostoja, ne on sijoitettava samaan paikkaan ja nimettävä tyyliin "3a-1" jne.

  6. Käytettävissä on apuohjelma "tarkista", joka tarkistaa että vastaukset ovat oikeassa paikassa (mutta ei niiden oikeellisuutta).

  7. Jos aikaa jää, voit täyttää kurssikyselyn, joka löytyy klikkaamalla Netscapessa ensin [Home] ja sitten kohtaa "Kurssikysely". (Vastaukset menevät nimettöminä suoraan kurssia arvioivalle työryhmälle.)

  8. Kun olet valmis, anna komento "tulosta", joka printtaa vastauksesi luokan edustalla olevalle printterille. Tentin valvoja ottaa sen sieltä ja laittaa lähtiessäsi konseptisi väliin. (Printterin käyttö muuten tentin aikana on kielletty.)

  9. Jos koneesi menee totaalisesti jumiin, kaatuu tms, voit pyytää valvojaa hälyttämään apua (= minut). Muuten valvoja ei voi auttaa koneen kanssa.


    Malliratkaisut ja arvosteluperusteet löytyvät täältä.