Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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.

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote