in English suomeksi Opintopiiriprojekti

Tietokoneen toiminta, Kevät 2007, Opintopiirin projekti PR 1 (24 pp)

Projektissa on kolme erillistä osaa (A, B ja C). Niillä on kaikilla sama painoarvo (8 pp).

Oman oppimisenne kannalta on fiksua, että osallistutte täysipainoisesti kaikkien osaprojektien tekemiseen. Tottakai töitä voi projektissa jakaa, mutta tarkoitus on kuitenkin, että kaikki oppivat samat asiat tämän projektin avustuksella. Vastuu on teillä itsellänne!

Raportin sisältö on määritelty opintopiirityöskentelyn kuvauksessa ja sen viimeinen palautusajankohta on aikataulusivulla. Projektin voi palauttaa myös myöhästyneenä, mutta siitä seuraa myöhästymissakkoa 12.5% projektin pp'stä per myöhästymispäivä. Esimerkiksi projektin myöhästyessä 30 tuntia jokaiselta vähennetään 6 pp (25%) lopullisista projektin yhteispisteistä. Aloittakaa projekti pian, tehkää töitä sen eteen koko ajan ja koettakaa saada se valmiiksi etuajassa!

Aihepiirit valitaan siten, että

  1. Ota kaikkien ryhmän jäsenten syntymäpäivistä päiväosa (esim. luku 5, jos syntynyt 5.3.1988).
  2. Laske kaikki päiväosat yhteen. (Esim. 5+13+8+25 = 51).
  3. Jaa päiväosien summa viidellä, ota jakojäännös ja lisää siihen yksi (esim. "51 mod 5 " +1 = 1+1 = 2). Käytä tulosta luennon numerona osaprojektin A ensimmäisen kertaustehtävän aihepiirin valintaan (esim. Luento 2).
  4. Jaa päiväosien summa viidellä, ota jakojäännös ja lisää siihen kuusi. (Esim. "51 mod 5 " +6 = 1+6 = 7). Käytä tulosta luennon numerona osaprojektin A toisen kertaustehtävän aihepiirin valintaan (esim. Luento 7).
  5. Jaa päiväosien summa seitsemällä, ota jakojäännös ja lisää siihen neljä (esim. "51 mod 7 " +4 = 2+4 = 6) Käytä tulosta luennon numerona osaprojektin C aihepiirin valintaan (esim. Luento 6). Jos aihepiiriksi tuli Luento 4 (Aliohjelmien toteutus), niin tulkitse se käsittämään luentoja 2-4 eli aihepiirin nimenä on tällöin "Ttk-91 konekielinen ohjelmointi".

Osaprojektit

  1. Suunnitelkaa ja toteuttakaa kaksi (2) kertaustehtävää, yksi kummastakin edellä valituista aihepiiristä. Huomatkaa, että vaikka tehtävä on aika helppo käytännössä toteuttaa, niin kunnollisen kertaustehtävän keksiminen ei ole sitä. Käyttäkää siis kohtuullisesti aikaa suunnitteluun, ennen kuin ryntäätte totetukseen.

  2. Suunnitelkaa ja toteuttakaa (noin 200-300 rivinen) ttk-91 ohjelma, mihin sisältyy seuraavat osat:
    1. Funktio Init(T, n, x, y), joka alustaa n-alkioisen vektorin (yksiulotteisen taulukon) T siten, että T[i] = x*i + y.
      1. T on viiteparametri, muut arvoparametreja
      2. pitää olla 1 < n ≤ 100, -20 000 000 ≤ x ≤ +20 000 000, -100 000 000 ≤ y ≤ +100 000 000
      3. palauttaa arvon 0, jos kaikki OK, ja arvon ≠ 0, jos joku virhe
        (Virheen lajin voi koodata paluuarvoon, jos haluaa.)
    2. Funktio Print(T, n, a, b), joka tulostaa n-alkioisen vektorin T alkioiden T[a], .., T[b] arvot
      1. T on viiteparametri, muut arvoparametreja
      2. pitää olla 1 < n ≤ 100, 0 ≤ a ≤ b < n
      3. palauttaa arvon 0, jos kaikki OK, ja arvon ≠ 0, jos joku virhe
    3. Funktio WAver (T, U, V, n, wU, wV), joka palauttaa vektorissa T vektorien U ja V vastaavien alkioiden painotetun keskiarvon T = (wU*U + wV*V) / (wU+wV), eli T[i] = (wU * U[i] + wV * V[i]) / (wU+wV).
      1. T, U, V ovat viiteparametrejä, muut arvoparametreja
      2. T, U, V ovat n-alkioisia vektoreita
      3. mitkä tahansa vektoreista T, U tai V voivat olla samoja
      4. pitää olla 1 < n ≤ 100, wU ≥0 , wV≥0, wU+wV > 0
      5. käyttää vähintään yhtä paikallista muuttujaa (esim. summan wU+wV tallettamiseen)
      6. palauttaa arvon 0, jos kaikki OK, ja arvon ≠ 0, jos joku virhe
    4. Funktio MyGrade (T, U, V, n), joka palauttaa vektorissa T (sen alkioissa) vektorien U ja V vastaavien alkioiden painotetun summan kiinteillä painoarvoilla 1 ja 3, eli T[i] = (U[i] + 3 * V[i])/4.
      1. T, U, V ovat viiteparametrejä, n on arvoparametreja
      2. T, U, V ovat n-alkioisia vektoreita
      3. mitkä tahansa vektoreista T, U tai V voivat olla samoja
      4. pitää olla 1 < n ≤ 100
      5. painotetun summavektorin T laskeminen toteutetaan funktion WAver() avulla
      6. palauttaa arvon 0, jos kaikki OK, ja arvon ≠ 0, jos joku virhe
    5. Pääohjelma, jossa
      1. määritellään 4-alkioiset vektorit A ja B sekä 10-alkioiset vektorit E, F ja G
      2. alustetaan funktion Init() avulla vektorit A ja B siten että A[i] = 100*i+10 ja B[i] = i
      3. tulostetaan vektorit A ja B funktion Print avulla
      4. lasketaan funktion WAver() avulla vektorille B vektorien A ja B keskiarvo, B[i] = (A[i] + B[i]) / 2.
      5. tulostetaan vektori B funktion Print() avulla
      6. alustetaan funktion Init() avulla vektorit F ja G siten, että F[i] = 1000000i ja G[i] = 10000i +100
      7. alustetaan vektori E funktion MyGrade() avulla vektorien F ja G painotetuksi summaksi.
      8. luetaan käyttäjältä indeksit i ja j
      9. tulostetaan funktion Print() avulla vektorien G, F ja E alkioiden i-j arvot
      10. toistetaan em. kahta kohtaa, kunnes i:n arvona on -1

    Noudattakaa luennoilla esitetyjä suositusten mukaisia aliohjelmien (funktioiden) kutsumekanismia. Projektin tarkastajilla voi olla käytössään joku toinen pääohjelma ihan eri taulukoilla.

    Jos haluatte, niin virheiden käsittelyssä voi hieman "oikaista" seuraavalla tavalla. Minkä tahansa virheen tapahtuessa voi tulostaa virhesignaalin "-11111" ja välittömästi lopettaa ohjelman suoritus. Virheen havaitsevasta funktiosta ei tällöin tarvitse palata kutsuvaan rutiiniin nollasta poikkeavan paluuarvon kera. Kaikki mahdolliset virheet tulee silti tarkistaa tällä tavoinkin toimiessa.

  3. Kirjoittakaa 4-5 sivuinen artikkeli (hyvä kieliasu, puhdasta tekstiä, ei kuvia, ei kaavioita) yllä annetusta aihepiiristä. Artikkeli ei saa missään tapauksessa olla pidempi kuin 6 sivua. Pohtikaa artikkelissanne koko aihepiiriä, ottaen mukaan kaikki olennaiset osa-alueet ja jättäen pois epäolennaiset.

    Huomioikaa esityksessänne erityisesti seuraavat seikat:
    1. Kohdeyleisö on muut opiskelijat tällä kurssilla. Toisin sanoen, lukijan taustatiedoista ei voi olettaa enempää kuin mitä tämän kurssin taustatiedoissa on ja mitä kurssilla on käsitelty ennen tätä aihepiiriä. Kaikki käytetyt käsitteet, jotka eivät sisälly lukijan oletettuihin taustatietoihin, tulee esitellä ja selostaa artikkelissa. Esityksen tulee olla helppolukuinen kohdeyleisölle.
    2. Tavoittena on antaa (artikkelin pituuden puitteissa) tyhjentävä, opettava aihepiirin selvitys, jota voisi käyttää oppimateriaalina (esimerkiksi kokeeseen valmistautuessa) tällä kurssilla.
    3. Hyvässä artikkelissa on sen alussa mainittu tavoite ja selkeä rakenne lopussa oleva yhteenveto mukaanlukien. Artikkeli on kaikki omaa tekstiä - se ei sisällä lainkaan suoria lainauksia tai käännöstä. Artikkelissa on lopussa lähdeviitteet (verkkolähteistä URL ja lähteen tarkistus päivämäärä).
    4. Esitys voidaan julkaista kurssin verkkosivulla ja sitä voidaan käyttää myöhemmillä kursseilla oppimateriaalina, jos se on hyvä ja sen käyttöön on saatu lupa projektin raportissa.
 


Teemu Kerola