Tällä rästitehtävällä voit korvata yhden kierroksista 4, 5 tai 6. Jos sinulta puuttuu minimipisteet kahdelta näistä kierroksista, sinun pitää tehdä sekä tämä tehtävä että rästitehtävä 1 tai 3. Jos sinulta puuttuu minimipisteet kaikilta näiltä kierroksilta, tee rästitehtävät 1, 2 ja 3. Jotta rästitehtävä korvaisi tehtäväkierroksen, siitä on saatava vähintään 300 pistettä. Vaikka saisit tehtävästä enemmän pisteitä, niin harjoitustehtäväarvosanaa määrättäessä tällä tehtävällä korvatun kierroksen pistemääräksi lasketaan kuitenkin vain korvattavan kierroksen minimipistemäärä.
Tee Eclipseen uusi projekti, jonka nimi on tehtava10_2. Luo sitten tähän projektiin moduuli polynomeja ja kirjoita siihen ohjelma, jonka avulla käyttäjä voi tehdä erilaisia yhden muuttujan polynomien laskutoimituksia. Tarkempi selostus ohjelman vaatimuksista on alempana.
Ohjelmasi pitää pystyä laskemaan kahden polynomin summa ja tulo,
derivoimaan polynomi sekä laskemaan polynomin arvo halutussa pisteessä.
Polynomi tallennetaan listaan siten, että polynomin nollannen asteen
termin kerroin on listassa indeksillä 0, ensimmäisen asteen kerroin
listassa indeksillä 1 jne. Listan pituus on sama kuin polynomin
asteluku. Esimerkiksi polynomi
4x**4 - 12x**3 + 25x**2 + 24x**1 - 16
olisi tallennettu
listaksi [-16, 24, 25, -12, 4]
ja polynomi
25x**2 - 16
listaksi [-16, 0, 25]
.
Yksinkertaisuuden vuoksi tässä tehtävässä käsitellään vain sellaisia
polynomeja, joissa termien kertoimet ovat kokonaislukuja.
Termien kertoimet voivat olla myös nollia. Tehtävän helpottamiseksi
tässä tehtävässä sallitaan myös polynomit, joiden
korkeimman asteen termin kerroin on 0, esimerkiksi polynomi
0x**2 - 16
(esitetään listana [-16, 0, 0]
)
on tässä tehtävässä sallittu. Ohjelmaa olisi järkevää laajentaa siten,
että tällaisista polynomeista karsittaisiin pois alun nollakertoimiset
termit, mutta tämä laajennus on jätetty tästä tehtävästä pois, jotta
tehtävän työmäärä ei tulisi liian suureksi.
Kirjoita ohjelmaasi seuraavat funktiot:
[0]
.
4x**2 - 3x**1 + 2 -8x**3 + 26x**2 - 19x**1 + 10 0x**4 - 2x**3 + 5 -5 0
Kirjoita lisäksi pääohjelma, joka tekee seuraavat asiat annetussa järjestyksessä. Katso tarkemmin esimerkkiajoista, millaisia tulostusten pitää olla.
Polynomia kuvaavien listojen tulostus ei normaalisti kuuluisi tällaiseen ohjelmaan. Se on lisätty pääohjelmaan siksi, että tehtävästä voisi saada osan pisteistä siinä tapauksessa, että polynomien laskutoimitukset toimivat oikein, mutta funktiossa polynomi_merkkijonoksi on vielä ongelmia.
Ole tarkka siitä, että ohjelmasi tulostus ja polynomien tulostukset ovat täsmälleen (välimerkkejä myöten) alla olevan mallin mukaisia.
Ohjelmasi ei tarvitse varautua siihen, että käyttäjä antaa lukuja pyydettäessä esimerkiksi merkkijonoja. Testaa ohjelmaasi ajamalla sitä itse monta kertaa ennen tehtävän palautusta. Palauta Gobliniin tiedosto polynomeja.py.
Huomautus: Pythonille on kirjoitettu myös valmiita moduuleita polynomien käsittelyyn. Niitä ei saa käyttää tämän tehtävän ratkaisussa. Oliot sopisivat polynomien kuvaamiseen erittäin hyvin. Niitä ei ole kuitenkaan käytetty tässä tehtävässä, koska oliot eivät kuulu kierrosten 4-6 vaatimuksiin.
[ohjelman suoritus alkaa] Anna ensimmainen polynomi. Anna polynomin asteluku. 2 Anna 2. asteen termin kerroin. 4 Anna 1. asteen termin kerroin. -3 Anna 0. asteen termin kerroin. 2 p1(x) = 4x**2 - 3x**1 + 2. Anna toinen polynomi. Anna polynomin asteluku. 1 Anna 1. asteen termin kerroin. -2 Anna 0. asteen termin kerroin. 5 p2(x) = -2x**1 + 5. Lasketaan polynomien summa: Summapolynomi listana: [7, -5, 4] p1(x) + p2(x) = 4x**2 - 5x**1 + 7. Lasketaan polynomien tulo: Tulopolynomi listana: [10, -19, 26, -8] p1(x) * p2(x) = -8x**3 + 26x**2 - 19x**1 + 10. Missa pisteessa 1. polynomin arvo lasketaan? 2.5 p1(2.500) = 19.500. Lasketaan derivaatta: Derivaattapolynomi listana: [-3, 8] p1'(x) = 8x**1 - 3. [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa] Anna ensimmainen polynomi. Anna polynomin asteluku. 4 Anna 4. asteen termin kerroin. 0 Anna 3. asteen termin kerroin. -2 Anna 2. asteen termin kerroin. 0 Anna 1. asteen termin kerroin. 0 Anna 0. asteen termin kerroin. 5 p1(x) = 0x**4 - 2x**3 + 5. Anna toinen polynomi. Anna polynomin asteluku. 3 Anna 3. asteen termin kerroin. -4 Anna 2. asteen termin kerroin. 6 Anna 1. asteen termin kerroin. 1 Anna 0. asteen termin kerroin. -5 p2(x) = -4x**3 + 6x**2 + 1x**1 - 5. Lasketaan polynomien summa: Summapolynomi listana: [0, 1, 6, -6, 0] p1(x) + p2(x) = 0x**4 - 6x**3 + 6x**2 + 1x**1. Lasketaan polynomien tulo: Tulopolynomi listana: [-25, 5, 30, -10, -2, -12, 8, 0] p1(x) * p2(x) = 0x**7 + 8x**6 - 12x**5 - 2x**4 - 10x**3 + 30x**2 + 5x**1 - 25. Missa pisteessa 1. polynomin arvo lasketaan? -5.01 p1(-5.010) = 256.503. Lasketaan derivaatta: Derivaattapolynomi listana: [0, 0, -6, 0] p1'(x) = 0x**3 - 6x**2. [ohjelman suoritus päättyy]
[ohjelman suoritus alkaa] Anna ensimmainen polynomi. Anna polynomin asteluku. -2 p1(x) = 0. Anna toinen polynomi. Anna polynomin asteluku. 0 Anna 0. asteen termin kerroin. 5 p2(x) = 5. Lasketaan polynomien summa: Summapolynomi listana: [5] p1(x) + p2(x) = 5. Lasketaan polynomien tulo: Tulopolynomi listana: [0] p1(x) * p2(x) = 0. Missa pisteessa 1. polynomin arvo lasketaan? 6.5 p1(6.500) = 0.000. Lasketaan derivaatta: Derivaattapolynomi listana: [0] p1'(x) = 0. [ohjelman suoritus päättyy]
Värikoodit:
Sininen: Syöte käyttäjältä
Vihreä: Ohjelman tuloste
Punainen: Erityishuomatus: ei tulosteta