Домашно: Object-Oriented Programming - коментари и впечатления
Най-после стигнах до това домашно и меко-казано, съм във възторг :)
Не помня да съм се забавлявал толкова с писане на код, от студентските години с асемблер (не че съм писал много, но там всеки момент се помни ).
Много добре подбрани задачи, с нарастваща сложност и постепенно въвеждане на новите неща!
Тъкмо приключих с трета задача, по която загубих най-много време за удовлетворяване на входно-изходните ѝ условия.
Получи се нещо такова:
------------------------------
1 - List all persons
2 - List all registrations
3 - Change person name...
4 - Change person age...
5 - Change car registration...
6 - Generate random persons...
7 - Generate random registrations...
8 - Create a new person...
9 - Create a new registration...
0 - Exit
Сега като гледам листа, май ѝ липсва само експорт към файл. :)
Накрая - за разкош, реших да я напъна здраво с функциите за рандом генериране на Person и Registrations. Открих си един краш проблем (вектори с референции към локална памет не са добра идея), и след фиксването му издържа без крашове до 200000 потребителя и 100000 регистрации (повече не ми се занимава). Unit/load тестовете са хубаво нещо! :)
Приеснява ме, обаче, следното нещо - времето, което ми отнема решаването на задача като третата е горе-долу толкова, колкото ще имаме и на изпита. Надявам се там задачите да са по-фокусирани върху конкретни проблеми, а не толкова "творчески", че ще го закъсам! :)
Интересно ми е да чуя и мнения от колеги относно това домашно.
Поздрави!
EDIT:
Ето няколко от рандом генерираните ентрита:
..............................
Registration Number: AU-24901
Manufacturer: BMW
Model: 3 Series
Horsepower: 49
.....
Owner details:
Name: Ivan Pink
Age: 21
ID: 24502
..............................
Registration Number: AU-28292
Manufacturer: Lexus
Model: RX 350
Horsepower: 27
.....
Owner details:
Name: Alex Black
Age: 32
ID: 21375
..............................
Registration Number: AU-316
Manufacturer: Ford
Model: Mustang
Horsepower: 39
.....
Owner details:
Name: Peter Gray
Age: 38
ID: 142
Като си се заиграл, направи нещо, което намира всички persons, на които имената им започват с определена буква. Можеш ли да го направиш да ги намира, без да търсиш из всичките имена, а директно да извеждаш имената, които почват със съответната буква (ще се налага при всяко създаване на запис да правиш нещо) :)
Интересно предложение! :)
Предполагам, трябва да се направи без използването на двоично дърво или хеш таблица?
ЕДИТ:
Най-простият вариант, за който се сещам е масив от 26 вектора (по един за всяка буква) с пойнтъри към Person обектите, чиито имена започват с тази буква... Или направо вектори от стрингове с имената, ако това е единствента информация, която ще ни трябва при извеждането.
Ами, хеш таблица или дърво може да ползваш, но в конкретния случай има по-ефикасен подход. Забележи, че имаш краен, при това сравнително малък брой символи, които може да са първата (или която и да е) буква в едно име (в порядъци по-малко от броя имена, които генерираш) - пробвай да ползваш това. В някакъв смисъл, това, за което намеквам е много специален случай на хеш-таблица, но не е самата структура данни от стандартните библиотеки :)