#include <stdio.h> #include <unistd.h> // For sleep function #include <stdlib.h> #define BUCKET_CAPACITY 10 // Maximum capacity of the bucket #define LEAK_RATE 1 second) typedef struct { // Rate at which the bucket leaks (units per int currentWater; // Current amount of water in the bucket } LeakyBucket; // Initialize the leaky bucket void initBucket(LeakyBucket *bucket) { bucket->currentWater = 0; } // Add data to the bucket int addWater(LeakyBucket *bucket, int water) { if (bucket->currentWater + water > BUCKET_CAPACITY) { printf("Bucket overflow! Excess water discarded.\n"); return 0; // Overflow occurred } bucket->currentWater += water; printf("Added %d units of water. Current level: %d\n", water, bucket >currentWater); return 1; // Successfully added water } // Leak water from the bucket void leakWater(LeakyBucket *bucket) { if (bucket->currentWater > 0) { bucket->currentWater -= LEAK_RATE; if (bucket->currentWater < 0) { bucket->currentWater = 0; // Prevent negative water level } printf("Leaked 1 unit of water. Current level: %d\n", bucket >currentWater); } } int main() { LeakyBucket bucket; initBucket(&bucket); // Simulate adding water and leaking over time for (int i = 0; i < 15; i++) { printf("\nCycle %d:\n", i + 1); // Add a random amount of water (1-5 units) int waterToAdd = rand() % 5 + 1; addWater(&bucket, waterToAdd); // Leak water leakWater(&bucket); // Sleep for 1 second to simulate time passing sleep(1); } return 0; } Output: Cycle 1: Added 3 units of water. Current level: 3 Leaked 1 unit of water. Current level: 2 Cycle 2: Added 1 units of water. Current level: 3 Leaked 1 unit of water. Current level: 2 Cycle 3: Added 4 units of water. Current level: 6 Leaked 1 unit of water. Current level: 5 ... Cycle 15: Added 2 units of water. Current level: 9 Leaked 1 unit of water. Current level: 8
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter