Задача Кафе Машина
Здравейте приятели! Искам да ви помоля да ми дадете идеи или решения за следната задача:
Да се напише код на С# за кафемашниа. Когато вкараме пари, да пита за избор, като изберем нещо, да проверява дали парите са достатъчно, ако са достътчно да провери дали има достатъчно кафе, захар, вода тн в машниата, ако има да направи съответната напитка и да вземе съответния грамаж от наличието в машината и ако парите са повече да върне ресто. Ако не разбирате нещо от обяснението питайте. Благодаря ви предварително!
Точно тази задача на Телерик е толкова счупена - решавах я докато се упражнявах за СофтУни изпита и има много странни неща - например имаш 2 лева от 4х50 ст. и трябва да върнеш 20ст. ресто - ми няма как да стане, а за да ти е вярна трябва да игнорираш такива "дреболии" и да ти излезе че може :D
Аз това което забелязах, е че в Телерик имат проблем с условията на задачите, 50% са с някъкви котки.Условията са така написани, че голяма част от времето за решаване на задачата губя, за да си обясня самото условие, а не да решавам.Възможно е само аз да имам този проблем.
Цените и съставките са произволни, не са от значение. Идеята ми е един път като направи кафе да промени вече "инвентара". Тоест ако има 1000 грама кафе, 1000 грама захар, 5000 грама вода, а за 1 кафе са нужни 7г кафе, 2г захар, 200 мл вода, да вземе тези стойности от началните и да ги промени за следващо боравене с тях.
Понеже много оскъдна информация даваш и трудно мога да схвана идеята, но все пак можеш да направиш така:
static double suger = 1000;
static double water = 5000;
static double coffee = 1000;
static double coffeePrice = 1.50;
static double CalcCoffeePrice(int a)
{
suger -= 2;
water -= 200;
coffee -= 7;
double _coffee =a*coffeePrice;
return _coffee;
}
static double CalcDoubleCoffee(int a)
{
//вадиш количествата за дълго кафе
}
и така на татък до като си подредиш артикулите, въпреки че доста по - добре ще е ако си създадеш отделен/и клас/ове, за да можеш да си достъпваш и променяш цените или количествата и т.н.Моето е аматьорска работа :)
Не разбирам кое не ти е ясно? Алгоритъма или командите за да напишеш програмата?
Оставам с впечатлението, че е първото и ти предлагам да помислиш върху:
Сега помисли върху следното:
Хайде да видим следния алгоритъм:
Общо взето мисля, че това е коректен алгоритъм за работа. Ако държиш да си блестящ ще трябва да направиш проверки и за отрицателни стойности (защото клиентът в нашия случай въвежда с числа през конзолата колко пари е пуснал). Добави проверки и за коректно въвеждане (числа, а не символи). Добави проверка за положителна сума (въвеждане на пуснати - 20 стотинки например). И т.н. и т.н.
Извинявам се, че не ти давам команди и конкретни примери. Абсолютно начинаещ съм в C# и не мога да бъда полезен. Надявам се, че все пак питането ти е било за алгоритъма и ще намериш полза в горните редове.
Успех!
Да това е много добър алгоритъм! Следният въпрос възниква докато пиша: как да направя функция, която да викам за всяка напитка, за да взима от инвентара нужните продукти и да връща вече промененото количество. Колегата отгоре е дал решение, това ли е функцията, защото мисля че може да има по-оптимален начин. Иначе това, което е написал е вярно, просто след всяка поръчка трябва да го пиша.
Пак казвам - бъкел не разбирам от код все още, но се опитвам да мисля логично.
Вместо да го пишеш 2 пъти, нали споменахме, че сме задали количество суровина за всяка напитка?
Ето пример:
Имаме a=7,b=3,c=1,d=1 като a е грама кафе, b е грама захар, c & d са съответно бъркалка и чашка.
Какво ти пречи приятелю да ги обединиш? Едно кафе Z като продукт ще е равно на a+b+c+d.
След всяко отчитане на 1бр. направено кафе просто извади необходимото количество суровини от целия инвентар със суровини.
Жокери къде ще се препънеш:
Оставям ти още няколко спънки за да не убивам творчеството и фантазията ти, а и аз като новобранец надали мога да предвидя всичко.:)
Колкото до използването - бедните ми познания подсказват:
if (coffe=0)
{отиди еди къде си и откажи напитката
}
if (inmoney=<neededmoney)
{кажи му, че е стисня,отиди пак там (еди къде си) и откажи напитката
}
И т.н. и т.н. като добавяш едно else, когато си напълно уверен, че имаш достатъчно суровини и пуснати монети.
За цикъла - препоръчаха ми вчера do/whileи вероятно идеята не е лоша. Прави проверките докато си сигурен, че има кинти, напитки и стотинки за ресто. Сигурен ли си - пусни напитката, ако не си - продължавай да искаш нужното.
Извинявай ако те обърквам някъде. Бих ти го написал като код, с който да си поиграеш стига да имах познанията.
Опитай да изградиш твоят алгоритъм на действие. Моят може да е нелогичен, неправилен, некоректен и т.н. Но във всички случаи не можеш да се сърдиш на машината/жената/приятелите/сервитьорката и т.н. ако ти самият не знаеш точно какво искаш и как да го получиш стъпка по стъпка.
Поздрави!
Благодаря приятелю полезна ми е информацията, която даде. Алгоритъма го промених малко, за да отговаря на нещата, които искам машината да прави и ти ми помогна.
Радвам се, че си извлякъл нещо полезно от предположенията ми.
След малко ще седна заедно с Катя и ще опитаме да направим нещо работещо.
Казвам работещо, а не коректно, защото ще върши исканата от теб работа, но няма да е оптимизиран код.
От написаното до тук оставам с впечатлението, че познаваш материята повече от мен и лесно ще промениш нужното ако съм го направил некоректно.
Не се чуствай длъжен да обръщаш внимание на желанието ми. Приемам го за лична амбиция и изобщо не трябва да се възприема от теб като нещо водещо. Напротив - само ако има полезна идея.
Поздрави и до скоро!
Привет,
Ето и нещо набързо скалъпено от двама ни с Катя.
В началото съм се опитал да обясня кое за какво ще ползваме.
Програмата е докарана дотам, че да ти иска пари, докато не стигнеш минимум от 30 стотинки (каквато е цената на кафето).
Ще включа междинно присвояване на бройка за всяка монета (дали е 5,10,20ст и т.н.) точно там, където и присъединяваме стойността. По този начин хем купувача ще трябва да въведе конкретна стойност на монета, хем ще можеш да следиш колко монети имаш от тип във всеки "улей" в касата.
Пример:
if (wholesum=5)
{
fivedesk++
}
Или нещо подобно (уча се в движение, извинявам се ако има грешка).
Принципа е - "Пуснете 1 монета. Каква е стойността и?". За всеки номинал добавяме по 1бр. в "улея" на касата. При различна стойност от възможните номинали го връщаме обратно.
Надявам се, че така е по-ясно, а ако имаш забележки или нещо не ти допада-казвай. С удоволствие ще се науча на нещо смислено.