Обектно-ориентирано програмиране БСУ - ІІ курс Курсова задача [29.11.2000] Номерът на курсовата задача се получава като резултат от операцията "остатък от целочислено деление" в С++. Първият аргумент на операцията е факултетният номер на студента, а вторият аргумент е числото 73 (ф.н. % 73). Да се моделира дадения в задачата "реален" обект с неговите свойства като се използват класове. Да се създадат най-малко 2 класа, свързани с наследственост. Базовият клас трябва да съдържа поне една функция. Производният клас трябва да има следните членове: - констуктор и деструктор, - set и get функции, - print функция, извеждаща на екрана в подходящ вид членовете-данни на класа, - функциите, описани в конкретната задача, - предефиниране на операцията, описана в задачата. Да се демонстрира: - създаване и унищожаване на обекти - работата на член-функциите на класа - работа на програмата с подходящи тестови примери Това са минималните изисквания за съдържанието на курсовата задача -- за 5 точки при добро изпълнение. Допълнително количество точки могат да се получат, ако се използват още техники на ООП като: - член на класа от тип указател - използване на указател this - статични членове на клас - предефиниране на унарни и бинарни операции - предефиниране на потоковите операции - използване на индиректни базисни класове - предефиниране на членове от базисния клас в производния клас - виртуални функции - динамично и статично свързване на обекти с член-функции от различни класове - шаблони - обработка на изключения Съкращения: БК - базов клас, ПК - производен клас --------------------------------------------------------------------------- Задачи: 0 БК - точка в равнината ПК - окръжност в равнината, зададена с център и радиус функция - намиране на пресечните точки на окръжността с координатните оси операция - събиране (+) - резултатът е най-малката окръжност, съдържаща две дадени. 1 БК - време (час, минути, секунди) ПК - телевизионно предаване: ден, време, име на предаването функция - при зададено време връща името на предаването, ако вримито съвпадат с това на обекта операция - сравнение (>=) по времето <телевизионно предаване> >= <телевизионно предаване> дава 0 или 1 2 БК - матрица 2х2 ПК - матрица 2х2 M и число r функция - детерминантата на матрицата операция - събиране (+) по долното правило + дава 3 БК - точка в равнината ПК - квадрат със страни, успоредни на координатните оси, зададен с центъра си и дължината на страната си функция - разстоянието от центъра на квадрата до началото на координатната система операция - пресечния квадрат на два квадрата (/). <квадрат>/<квадрат> дава <квадрат> 4 БК - вид стока (в склад) - наименование на стоката ПК - стока: вид стока, количество, единична цена функция - връща стойността на цялата стока от даден вид операция - (--) намалява количеството на стоката с 1 <стока>-- дава <стока> 5 БК - низ с дължина 3 ПК - низ с дължина 3 и число функция - на числото се присвоява сумата от ASCII кодовете на елементите на низа операция - низа: превръщане на малки букви в главни, числото: сумата от ASCII кодовете на елементите на низа (-) - <низ и число> дава <низ и число> 6 БК - масив от цели числа с дължина 3 ПК - масив m от цели числа с дължина 3 и низ s с дължина 3 функция - връща 2 числа: сумата на елементите на масива и първият символ от низа операция - (-) елементите на низа стават: m[i]%256, а елементите на масива - ASCII кодовете на символите на низа. - <масив и низ> дава <масив и низ> 7 БК - дата ПК - лек автомобил с характеристики: модел, дата на регистрация, година на производство, цвят, обем на двигателя функция - при зададена дата, връща колко са годините между производството и регистрацията операция - сравнения на два автомобила (>=) относно обем на двигателя. <автомобил> >= <автомобил> дава 0 или 1 8 БК - е-mail адрес ПК - "приятел": име, е-mail адрес, псевдоним функция - при зададен низ - част от е-mail адрес, връща 1, ако низът е част от него, иначе - 0 операция - проверка за синтаксис на (!) на е-mail адрес !<е-mail адрес> дава 0 или 1 9 БК - окръжност в равнината ПК - кръг и точка в равнината функция - проверка дали точката лежи в кръга операция - отрицание (~) - точката става центърът на кръга, а центъра на кръга - точката. ~<кръг и точка> дава <кръг и точка> 10 БК - низ (с произволна дължина), съдържащ десетични цифри ПК - БК и цяло число функция - връща низ, който се състои от цифрите на цялото число операция - "обръщане" (-) низът и числото си "разменят местата" - <БК и цяло число> дава <БК и цяло число> 11 БК - точка в равнината ПК - окръжност в равнината, зададена с център и радиус функция - намиране на пресечните точки на две окръжности операция - изваждане (-) - резултатът е най-голямата окръжност, съдържаща се в двете дадени. <окръжност> - <окръжност> дава <окръжност> 12 БК - точка в равнината ПК - свободен вектор в 3-мерното пространство функция - скаларно произведение операция - събиране (+) на вектори. <свободен вектор> + <свободен вектор> дава <свободен вектор> 13 БК - двумерен вектор ПК - вектор и матрица 2х2 функция - най-големия елемент на матрицата операция - умножение (*) на матрицата с вектора * <вектор и матрица> дава <вектор> 14 БК - триъгълник в равнината ПК - триъгълник и точка в равнината функция - разстояние от точкото до центъра на тежестта на триъгълник операция - симетрия (!) спрямо началото на координатната система. ! <триъгълник и точка> дава <триъгълник и точка> 15 БК - точка в равнината ПК - квадрат със страни, успоредни на координатните оси, зададен с върхът си, най-близо до координатния център и дължина на страна функция - пресича ли квадрата координатна ос операция - транслация (>>) на квадрат. <квадрат> >> <точка> дава <квадрат> 16 БК - точка в равнината ПК - права в равнината, зададена с точка и ъгъл, който сключва с абсцисната ос функция - точката на пресичане на правата и абсцисната ос операция - въртене (*) на права на ъгъл 90 градуса около зададена точка. <права> * <точка> дава <права> 17 БК - име, презиме и фамилия на човек ПК - БК и ЕГН функция - сравнява 2-ма души - ако ЕГН-тата са равни, трябва и имената да съвпадат операция - сравнение (>) по възраст <БК и ЕГН> > <БК и ЕГН> дава 0 или 1 18 БК - марка леки автомобили ПК - автомобил: марка, цвят, обем на двигател, цена функция - при зададено число, връща разликата между това число и цената на автомобила операция - сравнения на два автомобила (==) според марката им <автомобил> == <автомобил> дава 0 или 1 19 БК - име, презиме и фамилия на човек ПК - шофьорска книжка, съдържаща следните данни: име, презиме и фамилия, ЕГН, дата до която книжката е валидна и категория на водача функция - извежда на колко години ще бъде водачът на датата на изтичане валидността на книжката операция - потоков изход (<<): отпечатва ими, презиме и фамилия и категория. 20 БК - дата ПК - шофьорска книжка, съдържаща следните данни: име, презиме и фамилия, ЕГН, дата до която книжката е валидна и категория на водача функция - проверка на валидността на книжката: при въвеждане на дата, извежда 0, ако книжката е невалидна на тази дата операция - потоков изход (<<): отпечатва ими, презиме и фамилия и дата 21 БК - точка в равнината ПК - сила в равнината, зададена с приложна точка, посока и големина функция - промяна на големината на силата, като се умножава със зададено число операция - изваждане (-=) от една сила друга сила, само ако имат една и съща приложна точка. <сила> -= <сила> дава <сила> (с присвояване) 22 БК - точка в пространството ПК - правилен тетраедър, зададен с центъра си и дължината на ръба функция - намиране околната повърхнина на тетраедъра операция - транслация (%=) със зададен вектор <тетраедър> %= <точка> дава <тетраедър> (с присвояване) 23 БК - права в равнината ПК - права и точка в равнината функция - разстоянието от правата до точката операция - пресечна точка на две прави (||) <права и тчка> || <права и точка> дава <точка> 24 БК - точка в равнината ПК - отсечка с краища зададена точка и координатното начало функция - завъртане на отсечката на даден ъгъл относно началото операция - сравнение (>=) на отсечки по дължина <отсечка> >= <отсечка> дава 0 или 1 25 БК - време (час, минути, секунди) ПК - лекция: ден от седмицата, време, име на учебна дисциплина функция - при зададен ден връща името на дисциплината, ако денят съвпада с този на обекта, иначе връща празен низ операция - сравнение (>=) по деня и времето <лекция> >= <лекция> дава 0 или 1 26 БК - права в пространството ПК - равнина в пространството, зададена с права и точка функция - при зададени 2 равнини, дава пресечната им правата операция - пресечна точка (/) на права и равнина <права> / <равнина> дава <точка> 27 БК - точка в пространството ПК - равнина в пространството, зададена с права и точка функция - при зададена точка, показва дали точката е от равнината операция - перпендикулярност на равнини (>) <равнина> > <равнина> дава 0 или 1 28 БК - точка в пространството ПК - права в пространството, зададена с 2 точки функция - при зададена точка, показва дали точката е на правата операция - успоредност на прави (==) <права> == <права> дава 0 или 1 29 БК - дата ПК - "приятел": име, презиме и фамилия, рожден ден функция - при зададен низ - част от име връща 1, ако низът е част от името, презимето или фамилията, иначе - 0 операция - сравнение (>=) по дата <приятел> >= <приятел> дава 0 или 1 30 БК - точка в равнината ПК - кръг и точка в равнината функция - разстояние между точката и центъра на кръга операция - транслация (+) на точката - тя става център на кръга + <кръг и точка> дава <кръг и точка> 31 БК - телефонен номер (xxx-yy-zz) ПК - телефонен абонат: име, призиме, фамилия, телефонен номер функция - при зададени двойка цифри връща номера, ако те са yy или zz на номера операция - сравнение (==) за равни телефонни номера <телефонен абонат> == <телефонен абонат> дава 1 или 0 32 БК - дата ПК - студентски изпит: име на дисциплината, дата за изпита, курс, семестър функция - при зададени курс и семестър връща името на дисциплината, ако те съвпадат с тези на обекта операция - сравнение (>=) по датите за изпит <студентски изпит> >= <студентски изпит> дава 0 или 1 33 БК - име и телефон на издателство ПК - книга: издателство, име на книгата, автор, цена функция - при входен параметър масив от книги, връща индекса на масива, който е индекс на обект, равен на текущия (търсене в масив) операция - (++) увеличава цената на книгата с 1% ++<книга> дава <книга> 34 БК - точка в пространството ПК - сфера и права в пространството функция - повърхнина на сферата операция - проверка дали сферата пресича правата (&) & <сфера и права> дава 0 или 1 35 БК - окръжност в равнината ПК - цилиндър в пространството функция - проверява дали един цилиндър се съдържа в друг цилиндър операция - сума (+) - резултатът е най-малкият цилиндър, съдържащ два дадени. <цилиндър> + <цилиндър> дава <цилиндър> 36 БК - име, фамилия ПК - студент: име, фамилия, фак. номер, курс, група функция - извежда фак. номер на студента, ако той е от дадени курс и група операция - сравнение (>=) по фак. номера <студент> >= <студент> дава 0 или 1 37 БК - име на учебна дисциплина и в кой курс се изучава ПК - учебна дисциплина: име, в кой курс се изучава, брой часове за лекции и за упражнения функция - връща обекта, ако седмичните часове за лекции са повече от зададено число операция - сравнение (>) на две учебни дисциплини по часовете за лекции <учебна дисциплина> > <учебна дисциплина> дава 1 или 0 38 БК - икономична скорост на автомобил и разход на гориво за тази скорост ПК - лек автомобил: БК, марка, модел, обем на двигател функция - връща отношение разход на гориво към обем на двигател операция - сравнение (>) по разход на гориво скорост <лек автомобил> > <лек автомобил> дава 0 или 1 39 БК - точка в равнината ПК - три точки в равнината функция - лице на триъгълника, определен от тези точки операция - унарен минус (-) - резултатът са 3 точки, средите на отсечките, свързващи дадените точки - <три точки> дава <три точки> 40 БК - масив от цели числа с дължина 20 ПК - БК и число функция - брой на елементите на масива, равни на числото операция - увеличаване на всичките елементи на масива с числото и увеличаване на числото с 1 (++) <БК и число>++ дава <БК и число> 41 БК - работник ПК - магазинер с базова заплата и процент от оборота функция - увеличение на базова заплата операция - сравнение (>) според отношение оборот към базова заплата <магазинер> > <магазинер> дава 0 или 1 42 БК - точка в пространството ПК - сфера функция - обем на сферата операция - съвпадане на две сфери (==). <сфера> == <сфера> дава 0 или 1 43 БК - матрица 3х3 ПК - матрица 3х3 M и число r функция - връща най-големия елемент на матрицата операция - изваждане (-) по долното правило - дава 44 БК - матрица 2х2 ПК - матрица 2х2 M и число r функция - връща 0 или 1 в зависимост от това, дали числото се среща като елемент на матрицата операция - умножение с число (*) по долното правило <число> * дава <число*M, число*r> 45 БК - време (час, минути, секунди) ПК - дейност: низ с дължина 10 (име), време (начален час), число (времетраене) функция - в колко часа ще завърши дейността? операция - сравнение (>) на дейности по времетраене <дейност> > <дейност> дава 0 или 1 46 БК - е-mail адрес, телефон ПК - "приятел": име, презиме и фамилия, е-mail адрес, телефон функция - при зададен низ - част от име връща 1, ако низът е част от името, презимето или фамилията, иначе - 0 операция - сравнение (>=) по име, презиме, фамилия (лексикографски) <приятел> >= <приятел> дава 0 или 1 47 БК - вид стока (в склад) - наименование и производител ПК - стока: вид стока, количество, единична цена функция - връща стойността на цялата стока от даден вид операция - сума на две стоки (+=) - ако са от един и същи вид сумира количествата, и слага средна цена, ако не, нищо не прави <стока> += <стока> дава <стока> 48 БК - число n, матрица nхn ПК - матрица nхn, състояща се от 0 и 1 функция - при вход 0 или 1 дава броя на нулите или единиците в матрицата операция - операция и (&) за матрици поелементно <матрица> & <матрица> дава <матрица> 49 БК - права в равнината ПК - права и отсечка в равнината функция - пресечна точка на правата и отсечката операция - отсечката определя права, а правата определя отсечка с краища върху координатните оси (~) ~ <права и отсечка> дава <права и отсечка> 50 БК - максимална и икономична скорост(и) на автомобил и разход на гориво за тези скорости ПК - лек автомобил: БК, марка, модел, обем на двигател функция - връща отношение разход на гориво към обем на двигател за зададена скорост - максимална или икономична операция - сравнение (>) по максимална скорост <лек автомобил> > <лек автомобил> дава 0 или 1 51 БК - точка в равнината ПК - вектор в равнината, зададен с начална точка, посока (ъгъл) и дължина функция - скаларно произведение операция - събиране (+) на вектори <вектор> + <вектор> дава <вектор> 52 БК - име на домейн, част от IP адрес (3 числа) ПК - компютър в Интернет: БК, име на компютър, последно число от IP адреса функция - връща пълното име на компютъра в Интернет операция - сравнение (==) по домейн <компютър> == <компютър> дава 0 или 1 53 БК - име на работник ПК - търговски работник с почасово заплащане и % от оборота функция - ефективност на търговски работник - отношение време за работа, оборот операция - сравнение (==) според имената <търговски работник> == <търговски работник> дава 0 или 1 54 БК - дата, час ПК - бележка: дата, час, име на ангажимент функция - при зададен низ - част от име връща 1, ако низът е част от името на ангажимент, иначе - 0 операция - сравнение (>=) по дата и час < бележка> >= < бележка> дава 0 или 1 55 БК - точка в равнината ПК - правоъгълник със страни, успоредни на координатните оси, зададен с цеттъра си и дължините на двете различна страни функция - разстоянието от центъра на правоъгълника до началото на координатната система операция - пресечния правоъгълник на два правоъгълника (&&). <правоъгълник> && <правоъгълник> дава <правоъгълник> 56 БК - име, презиме и фамилия ПК - "приятел": БК, е-mail адрес, телефон функция - при зададен низ - част от е-mail адрес, връща 1, ако низът е част от него, иначе - 0 операция - проверка за синтаксис на (!) на е-mail адрес !<е-mail адрес> дава 0 или 1 57 БК - точка в равнината ПК - хоризонтална отсечка, зададена със средата си и дължината си функция - връща точка, началото на отсечката операция - транслация (>>) на отсечка. <отсечка> >> <точка> дава <отсечка> 58 БК - време (час, минути, секунди) и дата ПК - самолетен полет: време и дата, заминава за, вид на самолета функция - връща 1 или 0 в зависимост дали времето на полета е сутрин (p.m.) или слeд обяд (p.m.) операция - сравнение (==) по заминава за <самолетен полет> == <самолетен полет> дава 0 или 1 59 БК - марка леки автомобили (име на фирма-производител) ПК - автомобил: марка, модел, базова цена функция - при зададено число, връща разликата между това число и базовата цена на автомобила операция - сравнения на два автомобила (==) според марката им <автомобил> == <автомобил> дава 0 или 1 60 БК - дата ПК - паспорт, съдържащ следните данни: име, презиме и фамилия, народност, дата на раждане, ЕГН функция - проверка за съответствие на ЕГН и дата на раждане операция - предефиниране на изходен поток (<<), като отпечатва ими, презиме и фамилия и ЕГН. 61 БК - точка в равнината ПК - наредена четворка точки в равнината функция - дава 1, ако точките образуват изпъкнал четириъгълник операция - унарен минус (-) - резултатът е 4 точки, със същите координати, наредени в обратен ред. - <наредена четворка> дава <наредена четворка> 62 БК - дата ПК - студентски изпит: име на дисциплината, дата за изпита, курс, семестър, брой на изпитите (статичен член) функция - статична функция, брой на създадените обекти операция - преместване (++) на датата за изпит с 1 ден напред. <студентски изпит>++ дава <студентски изпит> 63 БК - вид на компоненти за компютър (памет, дънна платка, ...) ПК - ред от ценова листа: вид на компонент, конкретно име, цени на едро и дребно функция - връща разликата между цена на едро и цена на дребно операция - (--) намалява цените с 10% <ред от ценова листа>-- дава <ред от ценова листа> 64 БК - точка в пространството ПК - куб със зададен център, дължина на ръб и нормален вектор към една от стените функция - проверка дали стена на куба е успоредна на някоя координатна равнина операция - получаване на нов куб (!) със същия център и със стени успоредни на координатните равнини. ! <куб> дава <куб> 65 БК - време (час, минути, секунди) ПК - самолетен полет: ден от седмицата, време, заминава за, вид на самолета функция - връща 1 или 0 в зависимост дали времето на полета е сутрин (p.m.) или слeд обяд (p.m.) операция - сравнение (<) по времето <самолетен полет> < <самолетен полет> дава 0 или 1 66 БК - точка в равнината ПК - сила в равнината, зададена с приложна точка, посока и големина функция - промяна на посоката на силата, като се завърта на зададен ъгъл операция - добавяне (+=) към една сила друга сила, ако имат една и съща приложна точка. <сила> += <сила> дава <сила> (с присвояване) 67 БК - точка в n-мерното пространство ПК - n-мерна сфера, зададена с център и радиус функция - при зададена точка, връща дали точката е вътре в сферата операция - събиране (+) на две сфери, получава се най-малката съдържаща ги сфера. <сфера> + <сфера> дава <сфера> 68 БК - равностранен триъгълник ПК - правилна 3-ъгълна пирамида, зададена с равностранен триъгълник и височина функция - намиране на обема на пирамидата операция - хомотетия (%) със зададено число, дължината на страната на равностранния триъгълник се умножава с това число <пирамида> % <число> дава <пирамида> 69 БК - време (час, минути, секунди) ПК - заминаващ влак: време, заминава за, вид на влака функция - връща 1 или 0 в зависимост дали времето на заминаване е сутрин (p.m.) или слeд обяд (p.m.) операция - сравнение за различно (!=) по "заминава за" <заминаващ влак> != <заминаващ влак> дава 0 или 1 70 БК - окръжност в равнината ПК - окръжност и права в равнината функция - проверка дали окръжността пресича правата операция - завъртане (&) на правата около центъра на окръжността на даден ъгъл <окръжност и права> & <число> дава <окръжност и права> 71 БК - точка в равнината ПК - окръжност в равнината, зададена с център и радиус функция - намиране на разстоянето между центровете на две окръжности операция - увеличаване с 1 (++) - резултатът е окръжност със същия център и с единица по-голям радиус. <окръжност> ++ дава <окръжност> 72 БК - точка в пространството ПК - равнина в пространството, зададена от точка и нормален вектор функция - проверка дали 2 равнини са успоредни операция - проверка (==) дали 2 равнини са перпендикулярни <равнина> == <равнина> дава 0 или 1 73 БК - правоъгълник с 2 страни, лежащи на координатните оси и зададени дължини на тези страни ПК - правоъгълник от БК и точка функция - дава нов правоъгълник с връх точката операция - сбор (+=) на обекти от ПК - дава правоъгълник със страни сбора на съответните страни на двете правоъгълника и точка - средата на отсечката с краища двете точки <правоъгълник и точка> += <правоъгълник и точка> дава <правоъгълник и точка> (с присвояване)