;; This buffer is for text that is not saved, and for Lisp evaluation. ;; To create a file, visit it with C-x C-f and enter text in its buffer. #include #include #include "supermarket.h" #define CUSTOMER_ITEM_COUNT 5 typedef struct { item Items[CUSTOMER_ITEM_COUNT]; int PackingSpeed; }customer; int main() { bool CustomersLeft = true; int TimePast = 0; customer CustomerQueue[3] = { // NOTE: the {...} syntax is an easy way to initialize structs { {tissues, pasta, tomato_sauce, bread, butter}, 2 }, { {toothbrush, batteries, bread, bread, butter}, 3 }, { {bread, batteries, tomato_sauce, pasta, tissues}, 9 } }; int NextQueueIndex = 0; initTimeTable(); int ItemsLeft = CUSTOMER_ITEM_COUNT; state CurrentState = STATE_ready_for_customer; int CurrentCustomer = 0; int TimeToScan = 0; while(CustomersLeft) { if(CurrentState == STATE_ready_for_item) { if(ItemsLeft > 0) { int CurrentItemIndex = CUSTOMER_ITEM_COUNT - ItemsLeft; item CurrentItem = CustomerQueue[CurrentCustomer].Items[CurrentItemIndex]; TimeToScan = Time[CurrentItem] + CustomerQueue[CurrentCustomer].PackingSpeed; CurrentState = STATE_scanning; } else { CurrentState = STATE_ready_for_customer; } } else if (CurrentState == STATE_scanning) { TimePast ++; TimeToScan --; if (TimeToScan == 0) { ItemsLeft--; CurrentState = STATE_ready_for_item; } printf("Time since start: %d. Scanning a product. %d to go.\n", TimePast, ItemsLeft); } else { if(NextQueueIndex < 3) { CurrentCustomer = NextQueueIndex++; CurrentState = STATE_ready_for_items; } else { CustomersLeft = false; } } } }