Loading...
KrIsKa7a avatar KrIsKa7a 29 Точки

C# OOP Basics Exam Retake 5 September 2017

Здравейте.

Ако може някой да ми обясни защо при качването на следната структура(https://github.com/KrIsKa7a/CSharpOOPBasic/tree/master/14.ExamPreparationII%20-%20Exam%2005%20September%202017) в judge постоянно ми дава compile-time error? Знам, че кода може и да не е напълно правилен, но поне да видя.

Тагове:
0
C# OOP Basics
dobroslav.atanasov avatar dobroslav.atanasov 247 Точки
Best Answer

Здравей,

Погледнах ти кода и открих доста грешки от които ти гърми Compile time error:

1. Всички класове трябва да са в единствено число: 

      - ти си писал: Tyres, Drivers and Cars, а тръбва да са Tyre, Driver and Car.

 

2. Във всички child класове (AggressiveDriver, EnduranceDriver, UltrasoftTyre and HardTyre) конструкторите са PUBLIC а не protected.

 

3. В HardTyre and UltrasoftTyre няма смисъл да override Name, а направо го подавай в констуктора

     - Пример:     public UltrasoftTyre(double hardness) : base("Ultrasoft", hardness) { }

                           public HardTyre(double hardness) : base("Hard", hardness) { }

 

4. В Tyre class Degradation трябва да ти е virtual, за да може в UltrasoftTyre да му направиш валидация: https://pastebin.com/BxgcnPnv

 

5. Speed може да го направиш така:    

            public virtual double Speed => (this.Car.Hp + this.Car.Tyre.Degradation) / this.Car.FuelAmount;

и да го override - неш в AggressiveDriver така:

            public override double Speed => base.Speed * 1.3;

 

Car class - https://pastebin.com/N8FPLj7s

Driver class with AggressiveDriver and EndiranceDriver - https://pastebin.com/kx9a0brT

 

С тези корекции кода минава в Judge (110/120). Като 2 тест гърми предполагам е някай private или protected field.

 

Надявам се, че съм ти помогнал :)

Поздрави

0
KrIsKa7a avatar KrIsKa7a 29 Точки

Благодаря ти много! Сега ще ги погледна. За имената на класовете съм се заблудил с copy-paste от документа. То НЯМА логика да класа да е Cars, при положение, че не са множествено число.

Благодаря много за изчерпателния отговор!

1
d_rumenov avatar d_rumenov 35 Точки

Здравейте!

Ако може някой да погледне и това и да сподели къде са ми грешките, защото вече не знам колко пъти преглеждам тези файлове и не искат да минат в Judge... :(

https://github.com/drumenov/GrandPrix

Поздрави!

0
dobroslav.atanasov avatar dobroslav.atanasov 247 Точки

Здравей,

Всичко изглежда супер, но имаш една малка грешка, която в случая става "Compile time error" :). Грешката ти е в клас Car на ред 28. Трябва да е: "this.fuelAmount = Math.Min(value, MAX_FUEL);" а ти си написал this.FuelAmount (това е рекурсия). Иначе с тази промяна в Judge (120/120).

Надявам, че ти помогнах :)

Поздрави

0
hammer4 avatar hammer4 115 Точки

Car, Tyre и Driver трябва да са имената на класовете. Оттам нататък гледай детайлите на събмита за други грешки, като примерно очакван брой параметри за конструкторите.

0
13/02/2019 16:08:12
DESAN avatar DESAN 4 Точки

Здравейте реших тоя изпит криво ляво, но на всичките тестове ми дава непълен брой точки, тестовете са затворени, и аз си нямам ни най малка идея защо. Ето ми го решението -> линк за сваляне

В първа фаза дава 90/120, във втора фаза дава 120/180 а в трета фаза дава 71/100. По принцип в тези по-стари изпити не се казва конструктора какво приема в какъв ред го приема, докато в по-новите изпити това е указано. Това защото джъдж е настроен с повече оверлоуди ли е или просто, рулетка . Другото което не ми е ясно е има моменти в които мога да направя логиката ми да се върти в класа например  в класа Driver може да се променя изотвътре горивото му и вътре да се проверява в класа дали е паднало до 0 и ако е паднало да задава, че не участва повече тоя шофьор като свойство на самия клас, мога да го направя и външно в RaceTower същите магии примерно + речник с ключ шофьора и стойност причината поради която е отпаднал... Какво се очаква да се направи за да е доволен джъдж. Отделно не ми е ясно като се изпреварва това изпреварване по кой от многото възможни начини става шофьора като изпревари 1x друг шофьор работата ясна ама ако са >?2броя какво става и двамата ли "бавнеят" щот са изпреварени или само първия изпреварен забавня а изпреварващия е и пред 2мата бивши предни... някак си разбирам условията многозначно в тоя изпит като ги чета... Също печелившия уинър може да се подава от рейс тауър може да се взима директно през енджин класа... кое е по-правдиво алах керим...И като цяло какво се прави като не излезе задачата с ненулеви тестове...

0
13/02/2019 12:36:22
TeodorStefanovPld avatar TeodorStefanovPld 1274 Точки

Като ги правиш тея неща,трябва да се съобразяваш с solid принципите. Примерно race tower-a работа ли му е да знае за горивото на състезателя. В конструктора винаги ти е описано какво ще има,сига по какъв ред също не е толкова важно вэпржса и как си ги приемаш ти вътре. На компилатора не му пука дали първото property ще приеме последния параметър или обратното.. на engine-a не му е работа да знае кои е победителя тои е просто warapper около race tower. Първите тестове за структера явно си сбъркал modifier или име на property да не ти излезе. А другите вече явно имаш грешки в логиката. А за 2мата състезатели всеки по отделно го проверяваш дали е по бавен и намалавяш там времето или както беше по задачата. Но я по-добре прочети пак за солид и encapsulation явно има нужда.

0
DESAN avatar DESAN 4 Точки

Абе съобразявам се аз... обикновенно гледам всичко да го капсулирам в поведението на класа обаче не винаги нещата са "правилно зачетени" по този начин. Давам пример този изпит е с решение от автора

Интересни са 2 момента.  Малко въведение за да е ясно за какво говоря: Има герои героите имат торба с айтеми в класа Character торбата е пропърти с поле и към него има поведение в което има метод Ползвай тоз айтем ; метод GiveItem(Character anotherInstance, Item someItem) както и UseItemOn(Character anotherInstance, Item someItem).. Интересното е че при действие от посочените видове което се вика през конзолата айтема не се проверява дали го има в метода на класа Character където е дейтвието с него а това е изнесено в класа-контролер отвън та каде са енкапсулацията и солид принципите "трябва ли му на контролер-класа да знае какво има в торбата на героите"?

2рия върховен момент е със стринг билдъра при контролера ако не се TrimEnd()- не стринга дето се връща от метода нещата са "Incorect Answer", да де ама аз примерно вместо тримЕнд обичам да казвам просто Console.Write(стринга без трим енд) и проблеми няма ... ама и точки няма.  Така, че не винаги като видим, че нещо не е 100/100 е от "солид принципи липса на енкапсулация" и неразбиране на материята... На компилатора за реда на параметрите е вярно, че не му пука, ама на джъдж му пука дали първия параметър е от тип стринг на дадения клас когато му се извика конструктора и като не си го намери става проблем.

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