Примерни
задачи за изпит
Да
се
дефинират:
- базов клас Person с два членове-данни: име и фамилия, член-функции за достъп до данните, член-функции read и write за четене от файл и писане на файл на данните с параметър файлова променлива.
- производен клас Student с член променлива факултетен номер, член-функция за достъп до данните и член-функции read и write (с параметър файлова променлива) за четене от файл и писане на файл на данните на обект от този клас.
Да се напише програма,
която да чете файл с имена на хора (Person) и друг
файл с имена на студенти (Student) и да създаде полиморфна
колекция (вектор или масив) с тези данни. Накрая да изведе файл
с всички хора и студенти, сортирани лексикографски по пълно
име (първо по малко име, след това по фамилия).
Програмата трябва да се извиква от командния ред с три аргумента (на командния ред): име на входен файл с хора, име на входен файл със студенти и име на изходен файл.
Да
се
спазва формата за вход и изход, даден в примерните файлове:
Файл person.txt
John Doe
Adam Smith
Jane Black
Bob Robinson
Файл student.txt
Ivan Iliev F45353
Teodor Mitov P45235
Kaloian Stoianov F55325
Файл output.txt
Adam
Smith
Bob
Robinson
Ivan Iliev
F55325
Jane
Black
John
Doe
Kaloian Stoianov
F49115
Teodor
Mitov P45235
Да
се
дефинира клас-шаблон Triangle за модел на триъгълник със
зададени дължини на трите му страни. Параметър на шаблона да
бъде числов тип (int, long, double) за дължините на страните.
Да се използва динамичен масив за съхраняване на тези дължини.
Да
се
напишат член-функции за пресмятане на обиколката и лицето на
триъгълника.
Да
се
предефинират (поне 4) от следните операции:
1- Префиксна операция ++, която добавя по 1 към дължините на
трите стр>ани.
2- Постфиксна операция ++, която добавя по 1 към дължините на
трите страни.
3- Префиксна операция --, която изважда по 1 от дължините на
трите страни.
4- Постфиксна операция --, която изважда по 1 от дължините на
трите страни.
5- Операция >, за сравняване на два триъгълника според
техните лица.
6- Операция <, за сравняване на два триъгълника според
техните лица.
7- Операция изходен поток <<
8- Операция входен поток >>
9- Бинарна операция +, която създава нов триъгълник с дължини
на страните - сума от дължините на страните на аргументите
(събират се дължините на най-големите страни, на средните и на
най-малките страни).
10- Бинарна операция +, която създава нов триъгълник с
дължина на страна - сума от дължината на страна първия
аргумент и втория аргумент (число от типа на параметъра на
шаблона).
11- Бинарна операция -, която създава нов триъгълник с дължина
на страна - разлика от дължината на страна първия аргумент и
втория аргумент.
12- Операция ==, която връща true когато триъгълниците за
еднакви (подобни).
13- Операция !=, която връща true когато триъгълниците не са
еднакви (подобни).
14- Операция !, която връща true само когато триъгълникът е
правоъгълен.
15- Операция !, която връща true само когато триъгълникът е
остроъгълен.
16- Операция !, която връща true само когато триъгълникът е
тъпоъгълен.
17- Операция &&, която връща true когато триъгълниците
имат еднакви дължини на поне една страна.
18- Операция ||, която връща true когато триъгълниците имат
различни дължини на трите страни.
19- Унарна операция *, която връща дължината на най-голямата
страна на триъгълника.
20- Бинарна операция *, с първи аргумент триъгълник с дължини
на страните a, b, c и втори аргумент x - положително число от
същия тип както страните на триъгълника, която конструира нов
триъгълник с дължини на страните xa, xb,xc.
21- Бинарна операция , / с първи аргумент триъгълник с дължини
на страните a, b, c и втори аргумент x - положително число от
същия тип както страните на триъгълника, която конструира нов
триъгълник с дължини на страните a/x, b/x, c/x (за целочислен
тип на параметъра на шаблона делението е целочислено).
Когато
трите
числа, които трябва да бъдат страни на триъгълник, не могат да
формират триъгълник, да се използват числата 1, 1, 1, т.е. да
се конструира равностранен триъгълник с дължина на страната 1.
Да
се
дефинират "големите три" за управление на паметта. Да се
демонстрира:
(a)
разликата
между
инициализация
и
присвояване
Triangle<int>
s;
Triangle<int>
t
= s;
и
присвояване
Triangle<int>
s(3,
4, 5);
Triangle<int>
t;
s
= t;
(b) Фактът, че конструираните обекти се унищожават автоматично.
(c) Фактът, че конструкторът за копиране се
вика когато обект се предава на функция по стойност.
(d) Фактът, че конструкторът за копиране не се вика когато обект
се предава на функция чрез псевдоним.
(e) Фактът, че конструкторът за копиране се вика при връщане на
стойност на функция
Демонстрирайте
всички написани член-функции и предефинирате операции.
Примерно
решение ва задачата - triangle.cpp