An eccentric wine lover buys individual labels of wine in either 1, 3, 6, or 12
ID: 3795339 • Letter: A
Question
An eccentric wine lover buys individual labels of wine in either 1, 3, 6, or 12 bottle lots and consumes
either 1 or 2 bottles of the same type at a time.
Unfortunately, his wine cellar can only hold 50 bottles and he is further constrained by the fact that he
wishes ti keep wines of a particular label in contiguous areas of his cellar so that he can easily tell how
many bottles of a particular type he has left. Once positioned in the cellar, a bottle is never moved to
another position.
Write and test a C program that shows how his wine stock varies as he buys and consumes wine.
Input: lines of the form
N,C N is 1, 3, 6, or 12 representing purchases or 1 or 2 representing consumption
C is an identifying character for the wine type
N = 0 terminates the program
Output
After each input line your program outputs either an error message or a depiction of the cellar
Example program run
Enter number,type :7,a
invalid buy quantity: 7
Enter number,type :3,a
aaa
Enter number,type :6,b
aaabbbbbb
Enter number,type :-3,b
invalid consume quantity: -3
Enter number,type :-2,b
aaa bbbb
Enter number,type :6,c
aaa bbbbcccccc
Enter number,type :-1,c
aaa bbbb ccccc
Enter number,type :-2,d
consume failed
Enter number,type :6,b
buy failed
Enter number,type :3,b
aabbbbbbbbccccc
Enter number,type :12,d
aabbbbbbbbcccccdddddddddddd
Enter number,type :12,e
aabbbbbbbbcccccddddddddddddeeeeeeeeeeee
Enter number,type :12,f
buy failed
Enter number,type :-2,d
aabbbbbbbbccccc ddddddddddeeeeeeeeeeee
Enter number,type :-2,e
aabbbbbbbbccccc dddddddddd eeeeeeeeee
Enter number,type :3,f
aabbbbbbbbccccc dddddddddd eeeeeeeeeefff
Enter number,type :3,d
aabbbbbbbbccccdddddddddddddddeeeeeeeeeefff
Enter number,type :1,e
buy failed
Enter number,type :1,f
aabbbbbbbbccccdddddddddddddddeeeeeeeeeeffff
Enter number,type :0,x
Bye
Explanation / Answer
#include <stdio.h>
int main(void) {
// your code goes here
//initialize the characters array which is useful as flag setting if a particular character is there in the array already
int characters[256];
//Initialize the stocks array which is useful to store the stocks of beer.
char stock[10000];
int i,j,k,n;
//Initialize the stocks to empty labels
for(i = 0; i< 10000; i++){
stock[i] = ' ';
}
//Initialize all the characters count to zero
for(i = 0;i < 256 ; i++){
characters[i] = 0;
}
//Initialize length of the stocks to zero
int stockLength = 0;
char c;
//Scan the number and character to do the operation
scanf("%d %c ",&n,&c);
//While we want to do more operations
while(n != 0){
//n >0 means buying operations
if(n >0){
//buy only the buy quantity is 1 or 3 or 6 or 12
if(n == 1 || n == 3 || n == 6 || n == 12){
int buyCount = n;
// If the last character of the stock is same as the buy label or this was never bought before
if(characters[c] == 0 || stock[stockLength]== c){
//Add the bought labels to the end of the stock
while(buyCount--){
stock[++stockLength] = c;
}
characters[c] = 1;
//Print the stock
printf("%s ",stock+1);
}
//buy failed because we can't put this at the end of stock.
else{
printf("buy falied ");
}
}
//Invalid buy quantity
else{
printf("invalid buy quantity : %d ",n);
}
}
//n <0 means consume operations
else if(n <0){
//consume only if consumeQuantity is -1 or -2
if((n == -1) || (n == -2)){
int consumeCount = n;
if(consumeCount == -1){
//We can only consume if the last labels in the stock is the same as we wanted to consume label.
if(stock[stockLength] == c){
stock[stockLength--] = ' ';
if(stock[stockLength]!= c)
characters[c] = 0;
//Decrease the stock length and print the stock afte removing consumed quantities.
printf("%s ",stock+1);
}else{
printf("consume falied ");
}
}
else if(consumeCount == -2){
//We have to check whether we have 2 number stock of same label to consume.
if(stock[stockLength] == c && stock[stockLength - 1] == c){
stock[stockLength--] = ' ';
stock[stockLength--] = ' ';
if(stock[stockLength]!= c)
characters[c] = 0;
//decrease the stock count and print the stock after consuming 2 ones.
printf("%s ",stock+1);
//else consume failed because we don't have consumable quantity of stock of same label at the back.
}else{
printf("consume falied ");
}
}
//Invalid Consume quantity. Must be -1 or -2.
}else{
printf("invalid consume quantity : %d ",n);
}
}
//Scan repeatedly in the loop until n= 0 which is a terminate operation.
scanf("%d %c ",&n,&c);
}
return 0;
}
Use the above code for your question.
You mentioned the case which stores the bottles can only store 50 . so please handle that case. Remaining everything my code wil take care.
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.