EX08

180 views
Skip to first unread message

Ago Luberg

unread,
Mar 13, 2015, 10:12:26 AM3/13/15
to iti...@googlegroups.com
EX08 tekst on väljas: https://courses.cs.ttu.ee/pages/ITI0011:harjutus_08
Annan teada, kui testid on olemas.
Kõiki teemasid, mida ülesande juures vaja on, ei ole praktikumis käsitletud. Täiendan jooksvalt juhendit vastavalt.

Ago

Ago Luberg

unread,
Mar 16, 2015, 2:35:24 AM3/16/15
to iti...@googlegroups.com
Nüüdsest on ka kõik testid väljas.
Paar märkust ülesande kohta:
  • Kujundite puhul tuleb arvestada olukorraga, kus kujundit ei saa moodustada. Näiteks negatiivne küljepikkus. Kui kujundit etteantud parameetritega ei ole võimalik luua, tuleb kas (testsüsteem arvestab mõlemaid, aga näiteks negatiivne pindala annab vea):
    • kujundi loomisel (nt new Rectangle(-10, 10)) "visata" IllegalArgumentException
    • pindala/ümbermõõdu arvutamisel tagastada Double.NaN.
  • Mallis oli algselt pindala/ümbermõõdu funktsioonide tagasustüübid "int", nüüd on "double"
  • Funktsioon, mis loendab unikaalseid kujundeid (countUniqueEllipses), peab kokku lugema erinevad kujundid mälus. Ehk siis kui teil on kaks täpselt samasugust autot maja ees, siis need loendatakse kokku kui kaks autot.
  • Funktsioon, mis loendab erinevaid kujundeid (countDifferentRectangles), loendab kahe samasuguse valge autot puhul need kokku üheks.
  • Lisaks muidugi mõlemad loendamise funktsioonid arvestavad, mis tüüpi kujundid tuleb kokku lugeda. Kolmnurkasid ei loendatagi. Küll lähevad kolmnurgad arvesse kujundute summaarse ümbermõõdu arvutamise funktsioonis
Kui on mõni küsimus, andke julgelt märku.

Ago 

Rasmus Iila

unread,
Mar 16, 2015, 4:55:08 AM3/16/15
to iti...@googlegroups.com

Teatud külgede puhul, ei ole võimalik kolmnurka tasandile moodustada. Näiteks (1, 2, 5). Loogiliselt võttes, peaks sellise kolmnurga ümbermõõdu arvutamine returnima Double.Nan. Aga niimoodi annab testimootor 7 % vähem võrreldes sellega kui reaalselt selle libakolmnurga külgede summa välja arvutada. Ma pole kindel, kas see instants jäi kogemata vahele või peabki nii olema?

Ago Luberg

unread,
Mar 16, 2015, 7:13:31 AM3/16/15
to iti...@googlegroups.com
Jah, kolmnurk (1, 2, 5) ei ole korrektne ja tulemus peaks olema Double.NaN (või siis objekti loomisel antakse IllegalArgumentException). Küll aga toon välja, et 0 pindalaga kujundid on lubatud. Näiteks kui ruudu külje pikkus on 0, siis kujund on täitsa olemas, selle pindala on lihtsalt 0 (ümbermõõt on ka 0). Seega, sellise kujundi puhul ei tohiks tagastada Double.NaN.

Ago

16. märts 2015 10:55 kirjutas Rasmus Iila <rasmu...@hot.ee>:

Teatud külgede puhul, ei ole võimalik kolmnurka tasandile moodustada. Näiteks (1, 2, 5). Loogiliselt võttes, peaks sellise kolmnurga ümbermõõdu arvutamine returnima Double.Nan. Aga niimoodi annab testimootor 7 % vähem võrreldes sellega kui reaalselt selle libakolmnurga külgede summa välja arvutada. Ma pole kindel, kas see instants jäi kogemata vahele või peabki nii olema?

--
Saite selle sõnumi, kuna olete liitunud Google'i gruppide grupiga "ITI0011".
Grupist eraldumiseks ja selle grupi meilide saamise peatamiseks saatke meil aadressile iti0011+u...@googlegroups.com.
Rohkem valikuid leiate lehelt https://groups.google.com/d/optout.

Maxim Gromov

unread,
Mar 16, 2015, 11:26:51 AM3/16/15
to iti...@googlegroups.com
Kolmnurga kohta, sellise tingimuse lisamine alandas testide tulemusi 96% - lt 57% - le :

if (!(a + b > c && a + c > b && b + c > a)) {
   
throw new IllegalArgumentException("Invalid values");
}

(Ehk siis kontroll, et kahe külje summa peaks olema suurem kui kolmas külg).
Message has been deleted
Message has been deleted

Ago Luberg

unread,
Mar 16, 2015, 2:27:28 PM3/16/15
to iti...@googlegroups.com
Antud ülesande puhul 0 pindalaga kujund on lubatud. See tähendab, et kui (a + b == c), siis kõik küljed saavad ilusti kokku, lihtsalt nende vahel oleva ala pindala on 0. Ümbermõõtu saab aga arvestada.

Ago

16. märts 2015 17:35 kirjutas Maxim Gromov <max...@gmail.com>:
Üks test on vigane, mis kontrollib kolmnurga külge.

See kood teeb 96% dist 57% ti:


if (!(a + b > c && a + c > b && b + c > a)) {
   
throw new IllegalArgumentException("Invalid values");
}

Asendades sellega, saan 100% :

if (!(a + b >= c && a + c >= b && b + c >= a)) {

   
throw new IllegalArgumentException("Invalid values");
}

Õige peaks olema aga see mis üleval pool.

--

Rainer L

unread,
Mar 16, 2015, 4:03:09 PM3/16/15
to iti...@googlegroups.com

Kas miski ei lähe kokku, või ma olen millestki valesti aru saanud? Kui ma need read välja kommenteerin, et ta returniks Double.NaN, kui tegu on vale kolmnurgaga, siis tuleb tulemus parem kui siis, kui need kontrollid sisse on jäetud. Samas, kui loen postitust foorumis, siis seal samas alampunktis väidetakse, et peaks returnima Double.NaN, kui tegu on vale kolmnurgaga.


On Friday, March 13, 2015 at 4:12:26 PM UTC+2, Ago Luberg wrote:

Rasmus Iila

unread,
Mar 16, 2015, 4:17:04 PM3/16/15
to iti...@googlegroups.com
Antud juhul loetaks õigeks ka kolmnurka, mille kaks külge on võrdsed kolmandaga. Mingit pinda küll ei teki, aga jooned ulatuvad täpselt kokku. Teine piirang on see, et küljed ei tohi olla negatiivsed (0 tohib olla).

maria kert

unread,
Mar 16, 2015, 4:21:24 PM3/16/15
to iti...@googlegroups.com
Minul muutis kolmanda küljega võrdsustamine tulemust väiksemaks.

--

Rainer L

unread,
Mar 16, 2015, 4:28:40 PM3/16/15
to iti...@googlegroups.com
Ma ei võrdsustagi kolmandat külge, constructoris visatakse exception, aga kui ma jätan selle, et kui samal tingimusel, mil visati exception, returnitakse Area ja Perimeter asemel Double.NaN, välja, siis tuleb parem tulemus kui siis, kui ma neid nimetatud meetodites kontrollin.

Ago Luberg

unread,
Mar 16, 2015, 7:06:04 PM3/16/15
to iti...@googlegroups.com
Tere

Vabandan, et ei jõudnud varem vastata.
Rainer, vastan sinu küsimusele.

Sinu viidatud olukordades kukkus kood läbi ühel juhul kolmes ja teisel juhul kahes testis. Kaks testi neist olid ellipsi kohta. Vahe tuli jah kolmnurga testist. Su kaasapandud pildimaterjal on väga abiks. Nagu näha, oled muutnud pindala arvutamise valemit. Ühel juhul liidetakse kolm külge kokku ja jagatakse kahega. Teisel juhul kasutad getPerimeter() tulemust ja jagad kahega. Esimesel juhul liidetakse kokku kolm täisarvu (int) ja jagatakse täisarvuga (int). Tulemuseks on täisarv. Näiteks (1 + 3 + 3) / 2 = 7 / 2 = 3. Kui nüüd hakkad ruutjuure all arvutama, saad sinna vähemalt ühe teguri 0 ja kogu pindala on 0.  Teisel juhul toimub arvutus double / int, kuna getPerimeter() tagastab double tüüpi väärtuse. Tehe oleks 7.0 / 2 = 3.5. Sellisel juhul tuleb õige tulemus.

Seega, eksimus ei olnud üldse seotud ebakorrektsete küljepikkustega.

Lisaks märkuseks, et sa küll pildi peal peitsid giti kommentaarid ära. Teadmiseks, et meie näeme ka tudengite commiti ajalugu :)

Maria, äkki sul oli/on sama probleem?
Ma arvan, et teised võiksid ka oma koodi selle pilguga läbi vaadata.

Ago

Rainer L

unread,
Mar 17, 2015, 2:13:34 AM3/17/15
to iti...@googlegroups.com
Mõtlesin pigem seda, et kui getArea ja getPerimeter peaksid returnima Double.NaN, kui kujundit ei saa joonistada, kuid seda pole tegelikult vaja (viimane versioon, mis andis 100% läks ilma nendeta), kuigi niimoodi on kirjas välja toodud postituses. Need kommentaarid lihtsalt ei kannata avalikkuse kriitikat, seetõttu "peitsin" need ära (ma usun, et see on ilmne kui neid lugeda).

Seega
  • Kujundite puhul tuleb arvestada olukorraga, kus kujundit ei saa moodustada. Näiteks negatiivne küljepikkus. Kui kujundit etteantud parameetritega ei ole võimalik luua, tuleb kas (testsüsteem arvestab mõlemaid, aga näiteks negatiivne pindala annab vea):
    • kujundi loomisel (nt new Rectangle(-10, 10)) "visata" IllegalArgumentException
    • pindala/ümbermõõdu arvutamisel tagastada Double.NaN.
Mõlemaid koos vist mitte siis. Võib-olla võivad mõlemad olla, ei testinud seda varianti.

Ago Luberg

unread,
Mar 17, 2015, 11:36:27 AM3/17/15
to iti...@googlegroups.com
Vabandust väikese spämmi pärast. Tuleb välja, et google groups jättis osad postitused ootele, kuna kahtlustas spämmi. Et mitte tekitada kahtlust, et ma mõnda teadet käin siin kustutamas, siis avalikustan need nüüd tagantjärgi.
Loodetavasti edaspidi neid probleeme pole ja iga postitus jõuab koheselt avalikuks.

Ago
Reply all
Reply to author
Forward
0 new messages