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).