Софтуерно Инженерство
Loading...
+ Нов въпрос
sevdalin avatar sevdalin 37 Точки

[C# OOP Basics] Problem 10. ***Family Tree

Здравекте колеги,

тази задача си е доста трудна. Реших да я напиша с Class Person като в него сложих още 2 List-а, с класове за Children и  Parents. Входните данни ги събирам в 5 отделни речника, колкото и вида input имаме. След това правя проверки и намирам всичките родители и деца и ги вкарвам в обекта ми от тип Person. Проблема е, че накрая се "заклах" и няма как да принтирам резултата, по начина по-който се иска в условието, а именно по реда на въвеждането на данните. За да направя каквито и да е било промени, това означава автоматично почти цялостно пренаписване на кода, а аз го мислих 1 час и още 2ч го писах, така че искам да се справя със сегашното положение, макар и да не е най-оптималното.

 

Това ми е кода, ZIP file: изтегли

 

Първият вариант за който се сетих, че може да реши проблема  е ако в началото вкарам целият Input в един  StringBuilder. И след това направя някакъв Customer ICompare, който първо бърка в обекта ми "person" и преди да извади данните и да ги принтира, сравнява по следният начин. Взема името и датата, примерно на децата и търси в StringBuilder-a, като подрежда стойностите според това, на кой ред в StringBuilder-а ги е засякло. Според вас, това може ли да се напише?

 

Вторият вариант за който се сетих сега е, ако отново запиша входа в StringBuilder, но вместо да правя Customer ICompare, да чета по редовете на StringBuilder-а и за всеки ред да правя търсене съотвено за Children или Parents, в моя обект. Като ще правя сравнение по име и по дата, докато не ми върне стойност True, за някой от 2-та входа. Ако не върне, продължавам на следващият ред и така докато мина всички редове от Input-a веднъж за да изкарам децата, и 2-ри път за да изкарам родителите.

 

Надявам се някой да може да помогне по тази задача. Какво мислите за 2-та варианта, които предлагам за решаване на проблема. Ясно, е че става малко неоптимално, но исках да я напиша "качествено" с класове и т.н., както най-вероятно би била написана в realwork, ако трябва да се пише нещо такова. Съответно това беше варианта за който се сетих, а и условието  малко ме подведе, защото е малко объркано с начинът на въвеждане на данните и тяхната релация по между им. Все пак не искам да затрия няколко часа труд просто ей така, защото не ги вади в реда в който искам, за това се надявам да измъдрим нещо заедно :)

Условието на задачата може да се изтегли от тук., ако на някой му трябва.

 

########################################################################################################

########################################################################################################

 

UPDATE:

Задачата я реших за 80/100. Гърми ми 3-ти тест с грешен резултат. Позачистих малко решението, от всичките DateTime bulshits които се налагаше да правя, за да Parse-вам инпут-а и сега се чудя, защо по-дяволите бях тръгнал да пазя Датата в DateTime, като ние не правим нищо с нея, освен да я принтираме бях си усложнил живота с още 1 час, но нищо, поне научих 1-2 нови неща за DateTime :)

Решението може да видите ето тук https://pastebin.com/HT0ML8bQ

Вярно, не е много оптимално написано, но аз съм доволен, че поне успях да го напиша. Като съм използвал "добрите практики" за OOP, и съм си направил private fields, достъпвани през пропъртита. Аз сигурно съм единственият човек, който е избрал да подходи по този вариант, ами именно всеки различен Input да бъде пазен в собствен Речник... но това е друг въпрос :)

Ако някой има желание да разгледа решението ми и да сподели мнение ще бъде супер. Ако пък и някой знае какъв е 3-тият тест, за да го хвана защо гърми ще бъде още по-добре ама и да не го разбера, здраве да е.

 

Тагове:
1
C# OOP Basics 01/06/2017 17:29:09
fiherLuci avatar fiherLuci 217 Точки

 Аз я реших на php и ако можеш да се ориентираш - https://github.com/…/OOP…/Inheritance/06.FamilyThree.php . Имай предвид, че е доста дълго решението. Та каква е идеята - взимам си входа и си го обработвам и намирам информацията за човека, който ме интересува и знам какво му е името и каква му е рождената дата. И после проверявам с if проверки какъв е входа (дали е дата - дата или име- дата и т.н. и ако някъде било то от ляво или от дясно имам датата или името на моя човек то запазвам другия като негов родител или дете или квото трябва. Общо взето кода е дълъг, но са основно if проверки.

1
30/05/2017 13:32:22
TanyaZheleva avatar TanyaZheleva 356 Точки

Не мога да предложа собствено решение, защото тази задачка все още ми е трън в очите. :(

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

https://softuni.bg/forum/11195/csharp-problem-10-familytree

0
sevdalin avatar sevdalin 37 Точки

Да прегледах я... въпроса е, че искам да завърша моята, не да я пиша наново.

0
sevdalin avatar sevdalin 37 Точки

Ъпдейтнах си поста, ако имаш някакъв интерес да прочетеш... :)

0