C++ май 2016 - Лекция 2 - въпроси
Здравейте !
Тук може да задавате въпроси относно лекция 2 проведена на 03.06.2016 от курса за Ц++ девелъпмънт.
Поздрави,
Мартин (:
Здравейте !
Тук може да задавате въпроси относно лекция 2 проведена на 03.06.2016 от курса за Ц++ девелъпмънт.
Поздрави,
Мартин (:
Здравейте,
На мен лично не ми тръгна Live Stream-a. И все още изписва Please Stand by
Здравейте !
Реших да се позабавлявам, като практикувам на judje и попаднах на интересен казус.
Задачата е за гладния Garfield и е тук:
https://softuni.bg/downloads/svn/csharp-basics/Exams/2016-02-21/Problem01-Hungry-Garfield.zip
Допускат се решения на C#, C++, JS, Java и PHP.
Авторското решение е на C# и използва тип decimal. Точността на пресметнатия резултат е част от тестовете.
Написах решение на C++, но резултатът е 90/100.
Как на C++ да се постигне максимален резултат, 100/100?
Поздрави
Кирил Иларионов
Кога ще бъде качена лекцията и онлайн ?
А къде може да се пусне самото решение в Джъдж , че и аз да тествам .
Редакция: Намерих къде да пусна решението - https://judge.softuni.bg/Contests/Practice/Index/163#0
Впрочем как намери самото условие, защото аз не видях линк към него в Джъджа...
https://judge.softuni.bg/Contests#!/List/ByCategory/1/Programming-Basics-Old-Exams
От горния линк, за Basic Old Exams, избираш изпита от 21-Feb-2016
и линковетe към условията на задачите са в горния десен ъгъл.
Е "обектно ориентирана система е възел от връзки между обекти", а релационната БД е набор от таблици и връзки между тях. Кое е по-удобно и устоичиво при разработка или при експлоатация?
Интересно зададен въпрос.
В зависимост от това, което правиш двете се използват за тотално различни неща.
1. Cpp е обектно ориентиран език, в който обектите могат да си "говорят" един на друг, това е смисълът от "възел от връзки между обекти", като тези обекти в определени условия и различни имплементации могат да изпълняват и определени функции и да се изменят определени техни характеристики на база на резултата от тези функции.
2. Релационната БД е система от връзки между различни таблици. Нейната единствена идея е да предоставя информация, без да прави сложни действия с нея, т.е. в базата данни може да се имплементират всякакви операции, могат да се направят псевдо функции, но нейната цел не е да кара обекти да изпълняват дадени функции, а само да запазва характеристиките на тези обекти и предоставя описание на база на изискване за краен резултат.
Кое е по-добро, зависи от изискванията за продукта. Аз избирам и двете. Когато имам да правя приложение, в което ще има запазване и обработка на данни, за запазването на тези данни използвам БД, а за обработката използвам Cpp, Obj C, Swift или C. Ако приложението, което се прави е само и единствено за съхранение на данни, т.е. някакъв логър примерно на врата колко хора са влезнали и кога са влезнали, тогава имплементацията може да е в базата данни (като пак трябва да има някаква проста програмка, която да добавя записите). Друг случай - аз трябва да записвам някаква монотонна, проста информация, която няма да се налага да я пазя дълго време, може да се ползва само и единствено cpp, като в него ще се пазят тези данни и ще се обработват и при нужда изпращат нанякъде.
Здравейте!
Аз имам въпрос по домашното! Направил съм си структура, в която променливите name, employees, freeplaces и т.н. са ми private, а getter-ите и setter-ите са public, както беше на лекцията. Само,че в задачата се казва, че трябва да намерим сградата с най-много employees, т.е. да ги сравняваме. Има ли начин да направим това във функция main, ако самите променливи са private. Самите getter-и изписват стойността на екрана, но не връщат нищо, така, че не може да използваме тях. Другия вариант да се реши задачата, ако в класа нищо не private, а всичко е public.
След като са ти private/protected можеш да ги достъпваш единствено в рамките на класа или чрез public getters/setter от самия клас.
А защо getter-ите не ти връщат нищо? Те трябва да връщат стойност, не да я изписват на екрана. Това им е смисълът. За връщане на екрана може да си изполваш отделна функция.
inline int employees() { return _employees; };
Напротив get функцията връща някаква стойност - стойността на private/protected променлива за която е указано да връща.
inline int employees() { return _employees; }; - в този случай ти връща променлива от тип int .
И съответно в main можеш да направиш променлива примерно:
int countOfEmployees = className.employees(); и с тази променлива можеш да правиш каквото е необходимо;
Здравейте. Какви функции се искат на задача 1 от домашното?
Изисква се само да се опише един такъв клас. Може да няма int main() функция.
Добре😊
Здравейте,
какво точно трябва да се пресметне във Highest coefficient employees/(employees + free seats) ?
и 2-ро има ли ограничение в дължината на кода?
Поздрави
1. Трябва отговора да е типа : В сградата има 81% заети места.
2. Няма ограничения в дължината на кода.
Т.е. трябва да се разделят служители на свободни работни места? Така ми излиза, че в едната от сградите заетите места са към 967%
Не, трябва да разделиш броя на служителите на капацитета на сградата.
За сградата за която говориш “Rapid Development Crew”, трябва да се получи 822 / (822 + 85) = 822 / 907 = 0,90...
Здравейте,
Аз имам още един въпрос към домашното. Имам клас Building, в който имам още един клас Infrastructure. В клас Infrastructure се намират променливите offices и floors, със съответните getter-и и setter-и. Само, че когато в main започна да сравнявам сградите, за да намеря тази с най-много офиси и т.н. не мога да достигна до getter-a на offices, защото кода трябва да изглежда нещо такова:
if (building1.infrastructure.getOffices()) > ....... и т.н.
а в случая класа Infrastructure, част от класа Building e private и не мога да достигна до него. По какъв начин трябва да си преструктурирам кода за да получа желания резулт, без да променям infrastructure от private на public?
Варианта е да направя още един getter за offices в класа Building, само че не се получава много тафталогия и излишни функции по този начин?
Защо не сложиш всички атрибути в класа Building? Можеш спокойно да си ги сетнеш в дефиницията на конструктора, като нали вече имаш прототипите им в класа. Това, което ти искаш да направиш е nested classes. По твоя начин мисля че трябва да използваш сетър за сетъра и гетър за гетъра, не съм много запознат но така ми се вижда логично
Малко късно до да се присъединя,
class Building {
public:
inline Building(float newHeight, float newWidth)
{
height = newHeight;
width = newWidth;
}
Building()
{
height = 0;
width = 0;
}
float height;
float width;
~Building(){
cout<< "Destructor was called!\n" << endl;
}
};
class Specifics{
public:
inline Specifics(int newFloors, double newSeats, int newEmployee )
{
floors = newFloors;
seats = newSeats;
employee = newEmployee;
}
Specifics()
{
floors = 0;
seats = 0;
employee = 0;
}
int floors;
double seats;
int employee;
~Specifics(){
cout << "Destructor was called!\n" << endl;
}
};
class OfficeBuilding{
public:
inline OfficeBuilding(float height, float width, int floors, double seats, int employee)
{
building.height = height;
building.width = width;
specifics.floors = floors;
specifics.seats = seats;
specifics.employee = employee;
}
double allOffice(){
_allOffice = ((specifics.seats * specifics.floors) / 35);
return _allOffice;
}
string name;
Specifics specifics;
Building building;
~OfficeBuilding(){
cout<< "Destructor was called!\n" << endl;
}
Докато highest coeficient вече е обсъждан, аз имам по 'семпли' въпроси:
1. стринг-а за нейм идеи как да го 'извикам' ?
2. Функцийката ми allOffice не я харесва ама никак (къде бъркам?!)
Един вид ми куца дефиницията / употребата на класове и конструктори.
Малко помощ ?
1 може би малко късен въпрос, при положение, че вече е минала лекция 3, но все пак: в пример 5 в github, файл cpp2_5 (примерите с класовете Size, Position, Rectangle). В конструктора на Rectangle имаме:
inline Rectangle(Position newPosition, Size newSize) | |
{ | |
size = newSize; | |
position = newPosition; | |
} |
използваме равенство за обекти от тип Position, Size без да сме дефинирали равенството в тези класове. Ще можете ли да обясните какво става тук. Благодаря
Здрасти, ами това не е равенство, а знак за присвояване на стойност.
В примера, който ти си дал става ясно, че стойността която подадеш като аргумент към конструктора на обекта, в този случай са две стойности: newSIze и newPosition, ще се запишат в property-тата size и position на обекта, който си инициализирал, по щаблона на класа в който е деклариран този конструктор Rectangle().
В след малко ще дам линк към видеото. Ако не ти се чака отвори канала ми. При останалите хора, мисля че е нямало проблем, освен малко забавяне от рода на минута предполагам.
Явно проблемът е бил в моя браузър и флаш плеър:)
Какво стана с видеото на 2 лекция? Или проблема е само при мен? Ако е само при мен може ли някакъв линк!
Благодаря.