Hyvää: Ohjelmasi suoriutuu BOSSin testeistä oikein hyvin. Olet osannut tehdä syötteenlukemista varten oikein järkevän valinnan eri mahdollisuuksista (getline, >> ja get). Kun syötteet on luettu järkevästi, niiden käsitteleminenkin helpottuu. Vielä helpommalla olisi päässyt, jos olisit laittanut itse lukuoperaation (tässä tapauksessa >>) silmukan ehtoon. Olet nimennyt muuttujat ihan kuvaavasti ja hyvin. Kommenttisi olivat selkeitä ja sisällöltään hyviä, niitä saisi vain olla vähän enemmän. Hyvänä nyrkkisääntönä voi pitää sitä, että kommentoi kaikki pidemmät koodilohkot (siis esim. funktiot, if:t ja silmukat) ja muuttujien esittelyt. Kehitettävää: Assarin välipalautuksessa antamia muutosehdotuksia olisi pitänyt noudattaa. Et ollut käyttänyt structeja tai funktioita oikeastaan ollenkaan. Olet käyttänyt taulukoita kertoimien ja eksponenttien tallentamiseen. Parempi ratkaisu olisi dynaaminen tietorakenne, kuten vector. Näin etukäteen ei tarvitse varata tarpeettoman isoa muistikasaa ohjelman käyttöön. Harvoin kuitenkaan kertoimia tai eksponentteja on lähelläkään tuhatta, joten muistia varataan paljon turhaan. Ohjelmakoodisi on paikoin todella tiivistä. Rivinvaihdot oikeissa paikoissa parantaisivat luettavuutta kummasti. Laita aina selveyden vuoksi ja virheitä vaälttääksesi aaltosulut kaikkiin koodilohkoihin, vaikka ne olisivatkin vain yhden rivin mittaisia. Alkukommentin sisältö voisi olla vähän tarkempi. Ainakin siitä pitäisi selvitä, kuka tiedoston on tehnyt, mihin tarkoitukseen ja milloin. Silmukkarakenteet ovat selkeämpiä, kun ne perustuvat järkevien ehtojen käyttöön, eikä silmukasta poistuta breakin avulla kuin erikoistilanteissa. Tuon derivointikyselyn saisi tehtyä ilman ikuista silmukkaa ja breakia järkevämmin ja selkeämmin. Vakioita kannattaa käyttää enemmän. Esimerkiksi oletustiedoton nimi on hyvä vakio: const string OLETUS_TIEDOSTO = "yhtalot.txt"; Vakioiden käyttö parantaa koodin luettavuutta ja muokattavuutta. Ohjelmasi main-funktio on ylipitkä. Hyvä pituus funktiolle on alle 80 riviä. Jatkossa voisit kiinnittää huomiota ohjelman jakamiseen enemmän. Loogisesti yhteenkuuluvat asiat kannattaa yhdistää samaan kohtaan ohjelmaa (samaan funktioon), niin ohjelman hahmottaminen on helpompaa. Yhteenkuuluvat tiedot on yleensä tapana yhdistää tietueeksi. Työssäsi Termin tiedot (eli kerroin ja potenssi) olisi ollut järkevää yhdistää toisiinsa tietueen avulla. Samoin Yhtalon tiedot (eli piirtomerkkijono ja yhtalon kaikki termit). Muuta: Ohjelman tulostukset kannattaa määrittää vakioiksi. Näin niitä on jälkikäteen helpompi korjata ja muokata. Siis esim: const string KYSY_TIEDOSTO = "Anna asetustiedoston nimi (oletuksena yhtalot.txt): "; Erityisesti tämä tapa on kätevä, jos sama teksti tulostetaan useammassa eri paikkaa koodia. Ylimääräisiä kirjastoja ei kannata includoida turhaan mukaan. Sinulla on includoitu "iomanip", jota et käytä mihinkään. Indeksoitaessa vektoria ja stringiä kannattaa käyttää mielummin .at()-funkiota, kuin []-sulkeita. Eli esim. piirtoalusta.at(y).at(x) meilummin kuin piirtoalusta[y][x]. Tämä siksi, että yleensä käytettäessä []-indeksointia, ohi-indeksointia ei tarkisteta, tosiin kuin käytettäessä .at():ä. Harjoitustyötäsi ei voida tällaisena hyväksyä, syynä tietueiden/funktioiden puuttuminen. Tämä oli yksi harjoitustyön tärkeimmistä asioista, jota painotettiin välipalautuksessakin. Mutta ei hätää: Sinulla on mahdollisuus vielä korjata työsi ja palauttaa se uudestaan. Korjaa työstä vähintään seuraavat kohdat: - Tee tiettueet termistä ja yhtälöstä - Jaa ohjelmasi funktioihin ainakin niin, että tiedoston lukeminen, derivointi, yhtälöiden lisääminen piirtoalustalle ja koordinaatiston tulostaminen ovat omina funktioinaan (näitä vielä voi ja kannattaakin jakaa osiin, käyttämäsi pyorista-funktio on esim. hyvä olla). (Luonnollisesti voit korjata myös muita palautteessa mainittuja kehityskohtia).