Advertisement
pdaogu

HW10.1

Nov 13th, 2018
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.84 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3.  
  4. #define TIEU_THU 400
  5. #define TIEN_DIEN 750
  6.  
  7. #define MAXSIZE 40
  8.  
  9. typedef enum {OFF, ON} STATE;
  10.  
  11. int GetState (STATE state) {
  12.     switch (state) {
  13.         case ON:
  14.             return 1;
  15.         case OFF:
  16.             return 0;
  17.         default:
  18.         return -1;
  19.     }
  20. }
  21.  
  22. int SetState (STATE state[], int n, int i, STATE set) {
  23.     if (i >= 1 && i <= n) {
  24.         state[i-1] = set;
  25.         return 0;
  26.     }
  27.     else return -1;
  28. }
  29.  
  30. int Check (STATE state[], int n, int i) {
  31.     if (i > 0 && i <= n) {
  32.         return GetState(state[i-1]);
  33.     }
  34.     else return -1;
  35. }
  36.  
  37. int PrintState (STATE state[], int n) {
  38.     int i;
  39.     putchar('\n');
  40.     printf("> Trang thai cua cac may hien tai la:\n");
  41.     for (i = 0; i < n; ++i) {
  42.         printf("%d  ", GetState(state[i]));
  43.         if (i % 4 == 3)
  44.             putchar('\n');
  45.     }
  46.     putchar('\n');
  47.     return 0;
  48. }
  49.  
  50. int TotalPower (int count[], int n) {
  51.     int i, sum = 0;
  52.     for (i = 0; i < n; ++i) {
  53.         sum += count[i] * TIEU_THU;
  54.     }
  55.     return sum;
  56. }
  57.  
  58. int PrintPower (int count[], int n) {
  59.     int i;
  60.     putchar('\n');
  61.     printf("> Tong dien nang tieu thu cua tung may tinh den hien tai la:\n");
  62.     for (i = 0; i < n; ++i) {
  63.         printf("%d  ", count[i] * TIEU_THU);
  64.         if (i % 4 == 3)
  65.             putchar('\n');
  66.     }
  67.     putchar('\n');
  68.     return 0;
  69. }
  70.  
  71. int PrintMaxMin (int count[], int n) {
  72.     int i, u = 0, v = 0, max = count[0], min = count[0];
  73.     int i_max[MAXSIZE] = {0}, i_min[MAXSIZE] = {0};
  74.     i_max[u] = i_min[v] = 0;
  75.     for (i = 1; i < n; ++i) {
  76.         if (max < count[i]) {
  77.             max = count[i];
  78.             u = 0;
  79.             i_max[u] = i;
  80.         } else if (max == count[i]) {
  81.             ++u;
  82.             i_max[u] = i;
  83.         }
  84.         if (min > count[i]) {
  85.             min = count[i];
  86.             v = 0;
  87.             i_min[v] = i;
  88.         } else if (min == count[i]) {
  89.             ++v;
  90.             i_min[v] = i;
  91.         }
  92.     }
  93.     putchar('\n');
  94.     printf("> Cac may duoc su dung nhieu nhat (%d lan su dung):\n", max);
  95.     for (i = 0; i < u; ++i)
  96.         printf("%d, ", i_max[i]+1);
  97.     printf("%d\n", i_max[i]+1);
  98.     printf("> Cac may duoc su dung it nhat (%d lan su dung):\n", min);
  99.     for (i = 0; i < v; ++i)
  100.         printf("%d, ", i_min[i]+1);
  101.     printf("%d\n", i_min[i]+1);
  102.     return 0;
  103. }
  104.  
  105. int Select () {
  106.     int tmp, select, isInvalid;
  107.     do {
  108.         tmp = scanf("%d", &select);
  109.         while (getchar() != '\n');
  110.         if (tmp != 1 && (select > 40 || select < 1)) {
  111.             printf("!!! Vui long nhap ma may tu 1 den 40 !!!\n");
  112.             isInvalid = 1;
  113.         } else isInvalid = 0;
  114.     } while (isInvalid);
  115.     return select;
  116. }
  117.  
  118. int main () {
  119.     int choice, i, isOut = 0, tmp, isInvalid, select;
  120.     STATE state[MAXSIZE];
  121.     int count[MAXSIZE] = {0};
  122.     for (i = 0; i < MAXSIZE; ++i)
  123.         state[i] = OFF;
  124.     do {
  125.         printf("\n--------------------------------------------\n");
  126.         printf("1. Chon may\n");
  127.         printf("2. Roi may\n");
  128.         printf("3. In trang thai may\n");
  129.         printf("4. In dien nang tieu thu cac may\n");
  130.         printf("5. In tong dien nang tieu thu\n");
  131.         printf("6. May duoc dung nhieu nhat va it nhat\n");
  132.         printf("0. Thoat\n");
  133.         printf("--------------------------------------------\n");
  134.         printf("> Nhap lua chon: ");
  135.         do {
  136.             tmp = scanf("%d", &choice);
  137.             while (getchar() != '\n');
  138.             if (tmp != 1 || (choice > 6 || choice < 0)) {
  139.                 isInvalid = 1;
  140.                 printf("!!! Vui long nhap dung lua chon !!!\n");
  141.             } else isInvalid = 0;
  142.         } while (isInvalid);
  143.         switch(choice) {
  144.             case 1:
  145.                 do {
  146.                     printf("\n--------------------------------------------\n");
  147.                     printf("> Nhap may can dung: ");
  148.                     select = Select();
  149.                     if (Check(state, MAXSIZE, select)) {
  150.                         printf("!!! May dang duoc su dung. Vui long chon may khac !!!\n");
  151.                     } else {
  152.                         SetState(state, MAXSIZE, select, ON);
  153.                         ++count[select-1];
  154.                         printf(">>> Dang ky may thanh cong !\n");
  155.                     }
  156.                     printf("--------------------------------------------\n");
  157.                 } while (!Check(state, MAXSIZE, select));
  158.                 break;
  159.             case 2:
  160.                 do {
  161.                     printf("\n--------------------------------------------\n");
  162.                     printf("> Nhap may muon roi: ");
  163.                     select = Select();
  164.                     if (!Check(state, MAXSIZE, select)) {
  165.                         printf("!!! May chua duoc su dung. Vui long chon dung may !!!\n");
  166.                         isInvalid = 0;
  167.                     } else {
  168.                         isInvalid = SetState(state, MAXSIZE, select, OFF);
  169.                         printf(">>> Roi may thanh cong !\n");
  170.                     }
  171.                     printf("--------------------------------------------\n");
  172.                 } while (isInvalid);
  173.                 break;
  174.             case 3:
  175.                 PrintState(state, MAXSIZE);
  176.                 break;
  177.             case 4:
  178.                 PrintPower(count, MAXSIZE);
  179.                 break;
  180.             case 5:
  181.                 tmp = TotalPower(count, MAXSIZE);
  182.                 printf("\n> Tinh den thoi diem hien tai.\n\tTong dien nang tieu thu cua cac may la: %d\n\tTien dien thanh toan la: %d\n", tmp, tmp * TIEN_DIEN);
  183.                 break;
  184.             case 6:
  185.                 PrintMaxMin(count, MAXSIZE);
  186.                 break;
  187.             case 0:
  188.                 isOut = 1;
  189.             default:
  190.                 printf("!!! Vui long nhap lua chon tu 0 den 6 !!!\n");
  191.         }
  192.     } while (!isOut);
  193.     return 0;
  194. }
  195.  
  196. // Dung may
  197. // Roi may
  198. // Trang thai may
  199. // Dien nang tieu thu
  200. // Tong dien nang tieu thu
  201. // May duoc dung nhieu nhat, it nhat
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement