A InfoWiki wikiből
Tartalomjegyzék |
Háromszög
Készítsünk el egy 'Haromszog' osztályt, mely egy háromszög három oldalának értékét képes tárolni. A háromszög bármely két oldalának összege nagyobb kell legyen a harmadik oldal összegénél, valamint egyik oldalhosszúsága sem lehet nulla. Készítsünk hozzá konstruktort, amely ellenőrzi hogy csak szerkeszthető háromszöget adhassunk meg. Készítsünk hozzá property-ket, amelyen keresztül később az oldalak hosszát olvashatjuk, és írhatjuk (a szabályok betartása mellett). Készítsünk hozzá kerület és terület számítási lehetőséget.
Az alapfeladat
Készítsük el a háromszög osztályt az alábbi szempontok szerint:
- egyik oldala sem lehet negatív vagy nulla
- a három oldal hosszúsága olyan kell legyen, hogy szerkeszthető háromszöget adjon ki, vagyis bármely két oldal összege nagyobb kell legyen a harmadik oldal hosszánál
// Haromszog interface class Haromszog { protected int _A_oldal; protected int _B_oldal; protected int _C_oldal; public Haromszog(int a, int b, int c) {...} protected bool Szerkesztheto_e() { ... } public int A_oldal { get {...} set {...} } public int B_oldal { get {...} set {...} } public int C_oldal { get {...} set {...} } }
- a 'Szerkesztheto_e()' segédfüggvény, mely kiszámolja, hogy a három oldal ismeretében ez a háromszög szerkeszthető-e. Mivel segédfüggvény, nem kell 'public'-nak lennie.
Továbbfejlesztés, kiegészítés néhány jellemzővel
Készítsük el a 'Haromszog2' osztályt, amely a 'Haromszog' osztály leszármazottja, amely rendelkezik 'EgyenloSzaru_e', 'EgyenloOldalu_e', 'Derekszogu_e', 'Kerulet', 'Terulet' csak olvasható property-kkel. A 'Terulet' property csak abban az esetben képes kiszámolni a területet, ha az derékszögű háromszög.
// Haromszog2 interface class Haromszog2:Haromszog { public bool EgyenloSzaru_e { get {...} } public bool EgyenloOldalu_e { get {...} } public bool Derekszogu_e { get {...} } public double Kerulet { get {...} } public double Terulet { get {...} } }
- a fenti interface szándékosan nem teljes. El kell gondolkodni azon, hogy szükséges-e ehhez az osztályhoz saját konstruktort készíteni. Ehhez érdemes elolvasni a "konstruktorok" fejezetet még egyszer.
Továbbfejlesztés, Heron képletes területszámítás
Készítsük el a 'Haromszog3' osztályt, amely a 'Haromszog2' osztály leszármazottja, amely akkor is képes kiszámolni a területet, ha az általános háromszög az alábbi Heron képlet alapján 'Terület=négyzetgyök( s(s-a)(s-b)(s-c) )' ahol 's' a fél kerület, vagyis 's=(a+b+c)/2'.
// Haromszog3 interface class Haromszog3:Haromszog2 { public double Terulet { get {...} } }
- ez az interface sem hibátlan. El kellene gondolkodni, hogy a 'Terulet' property felüldefiniálását milyen módon lehet elvégezni, mivel a fenti megoldás "warning"-os hibát okoz.
Főprogram, tesztelés
Készítsünk el egy főprogramot, amely bekéri a három oldal adatát, és példányosít mindhárom osztályból, és mindhárom példányra kiírja az adott példánynál létező információkat.