Публикуваме условието и на втората курсова задача за курса по програмиране на C# (2013).
Срокът за предаване на задачата е 25.8.2013 г. (седмица след приключване на курса). Решенията си изпращайте като архив на електронния адрес на курса. За да бъде приета за успешно изпълнена курсовата задача, решението ви трябва да покрива всички изисквания. Изпълнението на допълнителните задачи не е задължително.
Геометрични фигури
Задача
Да се напише програма, която реализира класове за геометрични обекти, като предоставя възможност за въвеждането и извеждането на характеристиките им, както и за изчисление на съответните периметри, лица, повърхнини и обеми.
Изисквания
- Да се декларират следните класове и интерфейси:
- Базов клас GeometryObject, който се предоставя характеристика наименование на обекта и методи за прочитане на характеристиките на обекта от клавиатурата и извеждането им на екрана. Всички останали класове да наследяват GeometryObject;
- Интерфейс IObject2D, който предоставя метод за изчисление на периметър и лице;
- Интерфейс IObject3D, който предоставя метод за изчисление на пълна повърхнина и обем;
- Клас Point с характеристики абсциса и ордината;
- Клас Line с характеристики начална точка и крайна точка;
- Клас Triangle с характеристики дължина на страна A, дължина на страна B и дължина на страна C, който имплементира IObject2D;
- Клас Square с характеристика дължина на страната, който имплементира IObject2D;
- Клас Rectangle с характеристики дължина на първата страна и дължина на втората страна, който имплементира IObject2D;
- Клас Circle с характеристика радиус, който имплементира IObject2D;
- Клас Cube с характеристика дължина на страната, който имплементира IObject3D;
- Клас Pyramid (правилна пирамида) с характеристики брой ъгли на основата (3 или 4), дължина на страната на основата и дължина на височината, който имплементира IObject3D. При изчислението на пълната повърхнина трябва предварително да се изчисли височината на околната стена с помощта на питагоровата теорема;
- Клас Prism (правилна призма) с характеристики брой ъгли на основата (3 или 4), дължина на страната на основата и дължина на височината, който имплементира IObject3D;
- Клас Cone (прав кръгов конус) с характеристики радиус на основата и дължина на височината, който имплементира IObject3D. При изчислението на пълната повърхнина трябва предварително да се изчисли дължината на образуващата с помощта на питагоровата теорема;
- Клас Cylinder (прав кръгов цилиндър) с характеристики радиус на основата и дължина на височината, който имплементира IObject3D;
- Клас Sphere с характеристика радиус, който имплементира IObject3D.
- Всички величини да се съхраняват в полета/променливи с тип double;
- Да се създаде колекция от геометрични обекти и да бъде попълнена с няколко случайно генерирани примерни обекта;
- Да се реализира опция за въвеждане на нов геометричен обект през конзолата (чрез избор на тип на обекта и въвеждане на характеристиките му) и добавянето му в колекцията от геометрични обекти;
- Да се реализира опция за извеждане характеристиките на всички геометрични обекти в колекцията;
- При извеждането на характеристиките на геометричен обект да се проверява дали съответният обект имплементира един от интерфейсите IObject2D и IObject3D; ако това е изпълнено, да се извеждат и съответните пресметнати характеристики от интерфейса;
- Да бъде спазен принципът за капсулиране;
- Да се използва предефиниране на методи.
Допълнителни задачи
- Да се реализират и класове за успоредник, трапец, произволен многоъгълник, паралелепипед, пресечена пирамида и пресечен конус;
- Да се създадат интерфейсите IPolygon и IRoundShape, които наследяват IObject2D. Съществуващите класове за равнинни фигури да имплементират съответните наследени интерфейси вместо интерфейса IObject2D. Да се декларира клас Ellipse с характеристики голям радиус и малък радиус, който имплементира IRoundShape. Характеристиката основа в класовете Pyramid и Prism да бъде от тип IPolygon, а характеристиката радиус на основата в класовете Cone и Cylinder да бъде заменена с характеристика основа от тип IRoundShape.