#include #include #include #include #define STACK struct list * #define ELEMENT struct list int summa=0; struct element { int value; float price; }; struct list { struct element data; struct list *next; }; struct element add(void); struct element Pop (STACK *pstack); int Push (struct element x, STACK *pstack); int Empty(STACK pstack) { if (pstack==NULL) return 1; else return 0; } void show(struct list *begin) { struct element x; if(Empty(begin)) return; while(begin) { x=begin->data; printf("Количество:%d Цена:%.3f\n", x.value, x.price); begin=begin->next; } } int Push (struct element x, STACK *pstack) { ELEMENT *ins; ins = (ELEMENT *) malloc (sizeof (ELEMENT)); if (ins==NULL) return 0; ins->data = x; ins->next = *pstack; *pstack = ins; return 1; } STACK sell(struct list *begin) { struct element x; puts("Сколько нужно продать?"); int val; float pricetmp; int valuetmp; float sum=0; scanf("%d", &val); if(val>summa) { while(!Empty(begin)) { x=Pop(&begin); valuetmp=x.price; pricetmp=x.price*1.2; sum+=x.value*x.price*1.2; printf("Продано товаров %d на сумму %.3f Общая сумма: %.3f\n", x.value, pricetmp, sum); } printf("Нужно %d\n", abs(summa-val)); summa=0; return NULL; } while(!Empty(begin)) { x=Pop(&begin); if(x.value>val) { pricetmp=x.price*1.2; sum=(float)val*pricetmp; x.value-=val; printf("%d штук было продано по цене %.3f на сумму %.3f\n", val, pricetmp, sum); printf("Осталось из этой партии %d\n", x.value); summa-=val; Push(x, &begin); show(begin);break; } else { val-=x.value; pricetmp=x.price*1.2; sum= (float)x.value*pricetmp; summa-=x.value; printf("%d штук было продано по цене %f %f\n", x.value, pricetmp, sum); } } return begin; } int main() { struct list *begin=NULL; struct element *x; setlocale( LC_ALL, "rus"); int key=-1, i; while(key) { printf("_____________________________\n"); printf("|1.| Закупить товар |\n"); printf("|__|_________________________|\n"); printf("|2.| Продать товар |\n"); printf("|__|_________________________|\n"); printf("|0.| Выход |\n"); printf("|__|_________________________|\n"); printf("|Всего на складе %12d|\n", summa); printf("|____________________________|\n"); scanf("%d", &key); system("CLS"); switch(key) { case 1: { Push(add(),&begin);break; } case 2: { begin=sell(begin);system("pause");break; } } } return 0; } struct element Pop (STACK *pstack) //удаление элемента { ELEMENT *del; struct element x; del = *pstack; *pstack = (*pstack)->next; x=del->data; free (del); return x; } struct element add(void) { struct element x; ELEMENT p; int name; printf("Закупить товара:"); scanf("%d", &x.value); summa+=x.value; printf("\nЦена закупки:"); scanf("%f", &x.price); return x; }