Loading...
TsvetomirPavlov avatar TsvetomirPavlov -2 Точки

Задача Кафе Машина

Здравейте приятели! Искам да ви помоля да ми дадете идеи или решения за следната задача:

Да се напише код на С# за кафемашниа. Когато вкараме пари, да пита за избор, като изберем нещо, да проверява дали парите са достатъчно, ако са достътчно да провери дали има достатъчно кафе, захар, вода тн в машниата, ако има да направи съответната напитка и да вземе съответния грамаж от наличието в машината и ако парите са повече да върне ресто. Ако не разбирате нещо от обяснението питайте. Благодаря ви предварително!

Тагове:
-2
Programming Basics
DHristoskov avatar DHristoskov 211 Точки

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

0
06/04/2015 16:48:51
LoKSET avatar LoKSET 160 Точки

Точно тази задача на Телерик е толкова счупена - решавах я докато се упражнявах за СофтУни изпита и има много странни неща - например имаш 2 лева от 4х50 ст.  и трябва да върнеш 20ст. ресто - ми няма как да стане, а за да ти е вярна трябва да игнорираш такива "дреболии" и да ти излезе че може :D

0
06/04/2015 16:38:25
DHristoskov avatar DHristoskov 211 Точки

Аз това което забелязах, е че в Телерик имат проблем с условията на задачите, 50% са с някъкви котки.Условията са така написани, че голяма част от времето за решаване на задачата губя, за да си обясня самото условие, а не да решавам.Възможно е само аз да имам този проблем.

0
06/04/2015 16:48:13
TsvetomirPavlov avatar TsvetomirPavlov -2 Точки

Цените и съставките са произволни, не са от значение. Идеята ми е един път като направи кафе да промени вече "инвентара". Тоест ако има 1000 грама кафе, 1000 грама захар, 5000 грама вода, а за 1 кафе са нужни 7г кафе, 2г захар, 200 мл вода, да вземе тези стойности от началните и да ги промени за следващо боравене с тях. 

0
DHristoskov avatar DHristoskov 211 Точки

Понеже много оскъдна информация даваш и трудно мога да схвана идеята, но все пак можеш да направиш така:

        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)
        {
            //вадиш количествата за дълго кафе
        }

и така на татък до като си подредиш артикулите, въпреки че доста по - добре ще е ако си създадеш отделен/и клас/ове, за да можеш да си достъпваш и променяш цените или количествата и т.н.Моето е аматьорска работа :)

0
JOHNY avatar JOHNY 196 Точки

Не разбирам кое не ти е ясно? Алгоритъма или командите за да напишеш програмата?
Оставам с впечатлението, че е първото и ти предлагам да помислиш върху:

  1. Създаване на int a=5; за монета от 5ст и останалите подобни. Добави начална сума c например - това ти е касата в кафемашината.
  2. Създаване на int x=1000 за кафе и аналогично за останалите ти суровини, като 1000 е 1000 грама първоначална наличност.
  3. Създай си аналогично и продуктите (кафе,чай и т.н.).
  4. Създай си аналогично и цените на продуктите (например int z=20; като z ти е цената на едно кафе).
  5. Създай си аналогично и променливи колко гр. кафе например е необходимо за направата на 1 напитка.

Сега помисли върху следното:

  • Въвел си продуктите (цените им, необходимото количество за всяка една напитка);
  • Въвел си цени на всеки един продукт;
  • Имаш и разпознаваемост на монетите.

Хайде да видим следния алгоритъм:

 

  1. Клиентът пуска n на брой монети, всяка е с номинал. Лесно можеш да получиш общият им сбор.
  2. Проверяваме дали парите са достатъчни (сравнение на пуснатите монети с цената на продукта, тоест сравнение на две известни стойности);
  3. Ако не са достатъчни - извеждаме текст "Не Ви достигат Х стотинки" и го връщаме в началото за да пусне още или избере друга напитка;
  4. Ако са достатъчни проверяваме за наличност на суровина. Ако имаме достатъчно кафе,вода,захар и прочее вървим напред. Ако нямаме - връщаме го в началото с междинно извинително съобщение за да си избере нещо друго.
  5. Ако всичко дотук е изпълнено коректно - машината прави напитката и връща ресто (сумата на пуснатите монети - стойността на напитката). В този процес вадиш и необходимите суровини от първоначалната им наличност за да е коректна порцедурата и за бъдещи напитки.
  6. Връщаш ресто (тук помисли какво ще се случи ако "касата" или първоначалната наличност ти е 0. Помисли и как да определиш връщане на ресто САМО с налични и в обръщаемост монети. Жокер - раздели касата на подкаси или "улеи с монети". В улея за 50ст. имаш х монети, в този от 20ст- y и т.н. - прецени това още в точка 1!).
  7. Извеждаш съобщение, че напитката е готова и се връщаш в стендбай режим.

Общо взето мисля, че това е коректен алгоритъм за работа. Ако държиш да си блестящ ще трябва да направиш проверки и за отрицателни стойности (защото клиентът в нашия случай въвежда с числа през конзолата колко пари е пуснал). Добави проверки и за коректно въвеждане (числа, а не символи). Добави проверка за положителна сума (въвеждане на пуснати - 20 стотинки например). И т.н. и т.н.

 

Извинявам се, че не ти давам команди и конкретни примери. Абсолютно начинаещ съм в C# и не мога да бъда полезен. Надявам се, че все пак питането ти е било за алгоритъма и ще намериш полза в горните редове.

 

Успех!

1
06/04/2015 18:54:39
TsvetomirPavlov avatar TsvetomirPavlov -2 Точки

Да това е много добър алгоритъм! Следният въпрос възниква докато пиша: как да направя функция, която да викам за всяка напитка, за да взима от инвентара нужните продукти и да връща вече промененото количество. Колегата отгоре е дал решение, това ли е функцията, защото мисля че може да има по-оптимален начин. Иначе това, което е написал е вярно, просто след всяка поръчка трябва да го пиша.

0
JOHNY avatar JOHNY 196 Точки

Пак казвам - бъкел не разбирам от код все още, но се опитвам да мисля логично.

Вместо да го пишеш 2 пъти, нали споменахме, че сме задали количество суровина за всяка напитка?

Ето пример:
Имаме a=7,b=3,c=1,d=1 като a е грама кафе, b е грама захар, c & d са съответно бъркалка и чашка.

Какво ти пречи приятелю да ги обединиш? Едно кафе Z като продукт ще е равно на a+b+c+d.

След всяко отчитане на 1бр. направено кафе просто извади необходимото количество суровини от целия инвентар със суровини.

Жокери къде ще се препънеш:

  • Помисли за варианта кафе с/без захар (елементарна проверка и респективно z=a+c+d в този случай). Респективно искаш ли да пуска бъркалка, когато кафето е без захар?
  • Помисли за варианта, в който първоначалното количество ти стига за 100 кафета СЪС захар, но 20 от тях са без. Прецени как ще зареждаш машината за в бъдеще или искаш един цикъл.
  • Помисли кои променливи трябва да следиш. Съвет - следи основната суровина, в случая кафе. Предполагаме, че си заредил с достатъчно количество захар, бъркалки и чашки при първоначалното зареждане. Тоест - спираме да пускаме кафе, когато и само когато ТО е изчерпано.

Оставям ти още няколко спънки за да не убивам творчеството и фантазията ти, а и аз като новобранец надали мога да предвидя всичко.:)

 

Колкото до използването - бедните ми познания подсказват:

if (coffe=0)

{отиди еди къде си и откажи напитката

}

if (inmoney=<neededmoney)

{кажи му, че е стисня,отиди пак там (еди къде си) и откажи напитката

}

И т.н. и т.н. като добавяш едно else, когато си напълно уверен, че имаш достатъчно суровини и пуснати монети.

 

За цикъла - препоръчаха ми вчера do/whileи вероятно идеята не е лоша. Прави проверките докато си сигурен, че има кинти, напитки и стотинки за ресто. Сигурен ли си - пусни напитката, ако не си - продължавай да искаш нужното.

 

Извинявай ако те обърквам някъде. Бих ти го написал като код, с който да си поиграеш стига да имах познанията.

 

Опитай да изградиш твоят алгоритъм на действие. Моят може да е нелогичен, неправилен, некоректен и т.н. Но във всички случаи не можеш да се сърдиш на машината/жената/приятелите/сервитьорката и т.н. ако ти самият не знаеш точно какво искаш и как да го получиш стъпка по стъпка.

 

Поздрави!

1
06/04/2015 19:48:35
TsvetomirPavlov avatar TsvetomirPavlov -2 Точки

Благодаря приятелю полезна ми е информацията, която даде. Алгоритъма го промених малко, за да отговаря на нещата, които искам машината да прави и ти ми помогна.  

0
JOHNY avatar JOHNY 196 Точки

Радвам се, че си извлякъл нещо полезно от предположенията ми.

След малко ще седна заедно с Катя и ще опитаме да направим нещо работещо.

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

 

Не се чуствай длъжен да обръщаш внимание на желанието ми. Приемам го за лична амбиция и изобщо не трябва да се възприема от теб като нещо водещо. Напротив - само ако има полезна идея.

 

Поздрави и до скоро!

 

1
JOHNY avatar JOHNY 196 Точки

Привет,

Ето и нещо набързо скалъпено от двама ни с Катя.

В началото съм се опитал да обясня кое за какво ще ползваме.

Програмата е докарана дотам, че да ти иска пари, докато не стигнеш минимум от 30 стотинки (каквато е цената на кафето).

Ще включа междинно присвояване на бройка за всяка монета (дали е 5,10,20ст и т.н.) точно там, където и присъединяваме стойността. По този начин хем купувача ще трябва да въведе конкретна стойност на монета, хем ще можеш да следиш колко монети имаш от тип във всеки "улей" в касата.

Пример:

if (wholesum=5)

{

fivedesk++

}

 

Или нещо подобно (уча се в движение, извинявам се ако има грешка).

Принципа е - "Пуснете 1 монета. Каква е стойността и?". За всеки номинал добавяме по 1бр. в "улея" на касата. При различна стойност от възможните номинали го връщаме обратно. 

 

Надявам се, че така е по-ясно, а ако имаш забележки или нещо не ти допада-казвай. С удоволствие ще се науча на нещо смислено.

1
06/04/2015 22:00:34
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.