Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

MartinBG avatar MartinBG 4803 Точки

Домашно: Object-Oriented Programming - коментари и впечатления

Най-после стигнах до това домашно и меко-казано, съм във възторг :)

Не помня да съм се забавлявал толкова с писане на код, от студентските години с асемблер (не че съм писал много, но там всеки момент се помни laugh).

Много добре подбрани задачи, с нарастваща сложност и постепенно въвеждане на новите неща!

Тъкмо приключих с трета задача, по която загубих най-много време за удовлетворяване на входно-изходните ѝ условия.

Получи се нещо такова:

------------------------------
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:

Ето няколко от рандом генерираните ентрита: cheeky

 

..............................
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

1
C++ Programming 26/03/2017 16:15:41
MartinBG avatar MartinBG 4803 Точки

3-та задача с 100 000 000 presons и 50 000 000 регистрации изяде над12GB памет laugh, но се държи:

 

1
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Като си се заиграл, направи нещо, което намира всички persons, на които имената им започват с определена буква. Можеш ли да го направиш да ги намира, без да търсиш из всичките имена, а директно да извеждаш имената, които почват със съответната буква (ще се налага при всяко създаване на запис да правиш нещо) :)

1
MartinBG avatar MartinBG 4803 Точки

Интересно предложение! :)

Предполагам, трябва да се направи без използването на двоично дърво или хеш таблица?

 

ЕДИТ:

Най-простият вариант, за който се сещам е масив от 26 вектора (по един за всяка буква) с пойнтъри към Person обектите, чиито имена започват с тази буква... Или направо вектори от стрингове с имената, ако това е единствента информация, която ще ни трябва при извеждането.

0
28/03/2017 01:02:57
georgi.stef.georgiev avatar georgi.stef.georgiev 921 Точки

Ами, хеш таблица или дърво може да ползваш, но в конкретния случай има по-ефикасен подход. Забележи, че имаш краен, при това сравнително малък брой символи, които може да са първата (или която и да е) буква в едно име (в порядъци по-малко от броя имена, които генерираш) - пробвай да ползваш това. В някакъв смисъл, това, за което намеквам е много специален случай на хеш-таблица, но не е самата структура данни от стандартните библиотеки :)

0
MartinBG avatar MartinBG 4803 Точки

Едитнах си горния пост, докато си писал твоя...

Би ли коменетирал дали съм на прав път с идеята си там? :)

0
MartinBG avatar MartinBG 4803 Точки

Добре, приемам предизвикателството! :)

0
MartinBG avatar MartinBG 4803 Точки

Готово! :)

Имплементацията на тази част от задачата: https://pastebin.com/VmCyKvvj

Кодът в действие:

 

 

------------------------------
Enter number of random persons to generate: 100

Created 100 new persons.
------------------------------
0 - Exit
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...
10- System Information
11- Export all persons to file...
12- Export all registrations to file...
13- Reset all data
14- Save all data to file...
15- Restore all data from file...
16- Automated test
17- List persons by start name letter...
18- Persons statistics by start name letter

Enter your selection: 18
------------------------------
A : 7
B : 5
C : 4
D : 1
E : 8
F : 2
G : 6
H : 2
I : 4
J : 2
K : 5
L : 5
M : 3
N : 1
O : 5
P : 4
Q : 10
R : 1
S : 3
T : 5
U : 9
V : 1
W : 2
X : 4
Y : 6
Z : 5

------------------------------
0 - Exit
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...
10- System Information
11- Export all persons to file...
12- Export all registrations to file...
13- Reset all data
14- Save all data to file...
15- Restore all data from file...
16- Automated test
17- List persons by start name letter...
18- Persons statistics by start name letter

Enter your selection: 17
------------------------------
Enter first name letter: l
..............................
Name: Larry Purple
Age: 41
ID: 10000015
..............................
Name: Larry Gray
Age: 29
ID: 10000017
..............................
Name: Larry Blue
Age: 20
ID: 10000070
..............................
Name: Larry Purple
Age: 55
ID: 10000099
..............................
Name: Larry Black
Age: 21
ID: 10000108

------------------------------

 

 

Ето и статистика по първа буква за 1малко над 10 000 000 Person обекта:

 

18- Persons statistics by start name letter

Enter your selection: 18
------------------------------
A : 384149
B : 384447
C : 384949
D : 385041
E : 384219
F : 385905
G : 385543
H : 384392
I : 385482
J : 385288
K : 384265
L : 385580
M : 385025
N : 384444
O : 384290
P : 383229
Q : 384065
R : 384339
S : 384312
T : 384959
U : 384600
V : 384730
W : 384150
X : 384276
Y : 384867
Z : 383564

------------------------------

0
28/03/2017 03:16:44
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.