Advertisement
Guest User

semafor

a guest
Apr 30th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.11 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <windows.h>
  3. #include <time.h>
  4. #include <conio.h>
  5.  
  6.  
  7. #define M 1         // frizieru kresls
  8. #define N 3         // kresli klientiem
  9. #define BUSY_TIME 5     // 5 intervali katram klientam
  10. #define SPAWN_CHANCE 5      // iespeja, kaa ienaaks jauns klients
  11.  
  12. //  iespejami statusi
  13. enum tstate { ST_NOTHING, ST_WAITING, ST_ACTIVE };
  14.  
  15. //  klients
  16. typedef struct {
  17.     tstate state;
  18. } tclient;
  19.  
  20. //  frizieris
  21. typedef struct {
  22.     tstate state;
  23.     int busytim;
  24. } thairdresser;
  25.  
  26. int main()
  27. {
  28.     tclient clients[N];
  29.     thairdresser hairdresser;
  30.  
  31.     srand(time(0));
  32.     int i, k, occupied = 0;
  33.  
  34.     //  visiem klientiem pieskiram statusu ST_NOTHING
  35.     for (i = 0; i <= N - 1; i++) {
  36.     clients[i].state = ST_NOTHING;
  37.     }
  38.     hairdresser.state = ST_NOTHING;
  39.  
  40.     printf("Uzspiediet jebkuru pogu, lai izietunn");
  41.     while (!kbhit()) {
  42.     // Ja frizieris tiko pabeidz darbu///
  43.     if (hairdresser.state == ST_WAITING) {
  44.         if (occupied > 0) { //vismaz viens klients gaida
  45.         clients[0].state = ST_ACTIVE;   // frizieris pienem primo klientu
  46.         hairdresser.state = ST_ACTIVE;  // frizieris aiznemts
  47.         hairdresser.busytim = BUSY_TIME;    // timer
  48.         } else {
  49.         hairdresser.state = ST_NOTHING; // ja neviena nav aizet gulet
  50.         }
  51.     }
  52.     // parbaudam, vai frizieris stradaaja
  53.     if (hairdresser.busytim > 0) {  // parbaudam, vai frizieris pabeidza darbu
  54.         hairdresser.busytim -= 1;
  55.         if (hairdresser.busytim == 0) { // pabeidza darbu
  56.         for (int i = 0; i < N - 1; i++) {   // apmierinats klients aiziet, masiva nobide
  57.             clients[i] = clients[i + 1];
  58.         }
  59.         clients[N - 1].state = ST_NOTHING;
  60.         occupied -= 1;  // atbrivojam vietu
  61.         printf("Klients apkalpots, frizieris aizies uz istabu Wn");
  62.  
  63.         hairdresser.state = ST_WAITING; // frizieris aizies uz istabu W
  64.         }
  65.     }
  66.     // Atnaak klients (vai neatnaak)
  67.     k = rand() % SPAWN_CHANCE;
  68.     if (k == SPAWN_CHANCE - 1) {
  69.         if (occupied < N) { // Ir brivas vietas;
  70.         occupied += 1;
  71.         printf("Atnak klients uz %i. vietun", occupied);
  72.         if (hairdresser.state == ST_NOTHING) {  // Ja frizieris gul tad celam vinu
  73.             hairdresser.state = ST_ACTIVE;
  74.             hairdresser.busytim = BUSY_TIME;
  75.             clients[occupied - 1].state = ST_ACTIVE;
  76.         } else {
  77.             clients[occupied - 1].state = ST_WAITING;
  78.         }
  79.         } else
  80.         printf("Klients atnaak, bet nav vietun");
  81.     } else
  82.         printf("Neviens nenaak...n");
  83.  
  84.     //  Izvadam informaciju par klienta stavokli
  85.     for (i = 0; i <= N - 1; i++) {
  86.         if (clients[i].state == ST_NOTHING) {
  87.         printf("%d: tukss | ", i);
  88.         } else if (clients[i].state == ST_WAITING) {
  89.         printf("%d: gaida | ", i);
  90.         } else if (clients[i].state == ST_ACTIVE) {
  91.         printf("%d: cirpt matus | ", i + 1);
  92.         }
  93.     }
  94.     printf("n");
  95.  
  96.     //  Izvadam informaciju par friziera stavokli
  97.     if (hairdresser.state == ST_NOTHING) {
  98.         printf("Frizieris: guln");
  99.     } else if (hairdresser.state == ST_WAITING) {
  100.         printf("Frizieris: aizej uz Wn");
  101.     } else if (hairdresser.state == ST_ACTIVE) {
  102.         printf("Frizieris: strada (%i)n", hairdresser.busytim);
  103.     }
  104.     printf("---------------------------------------------");
  105.     Sleep(1000);
  106.     }
  107.     system("pause");
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement