Advertisement
pdaogu

HW10.3

Nov 13th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.70 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. #define BUDGET 3
  4. #define MONTH 12
  5. #define UNIT 1000000
  6.  
  7. int PrintSatistic (float spend[], int n) {
  8.     int i = 0;
  9.     printf("> Thong ke chi tieu ca nam: \n");
  10.     for (i = 0; i < n; ++i) {
  11.         printf("\t+ Thang %d: %d dong\n", i+1, (int) spend[i] * UNIT);
  12.     }
  13.     return 0;
  14. }
  15.  
  16. int PrintMaxMin (float spend[], int n) {
  17.     int i, u = 0, v = 0;
  18.     float max = spend[0], min = spend[0];
  19.     int i_max[MONTH] = {0}, i_min[MONTH] = {0};
  20.     i_max[u] = i_min[v] = 0;
  21.     for (i = 1; i < n; ++i) {
  22.         if (max < spend[i]) {
  23.             max = spend[i];
  24.             u = 0;
  25.             i_max[u] = i;
  26.         } else if (max == spend[i]) {
  27.             ++u;
  28.             i_max[u] = i;
  29.         }
  30.         if (min > spend[i]) {
  31.             min = spend[i];
  32.             v = 0;
  33.             i_min[v] = i;
  34.         } else if (min == spend[i]) {
  35.             ++v;
  36.             i_min[v] = i;
  37.         }
  38.     }
  39.     printf("> Cac thang chi tieu nhieu nhat (%d dong):\n", (int) max * UNIT);
  40.     for (i = 0; i < u; ++i)
  41.         printf("%d, ", i_max[i]+1);
  42.     printf("%d\n", i_max[i]+1);
  43.     printf("> Cac thang chi tieu tiet kiem nhat (%d dong):\n",(int) min * UNIT);
  44.     for (i = 0; i < v; ++i)
  45.         printf("%d, ", i_min[i]+1);
  46.     printf("%d\n", i_min[i]+1);
  47.     return 0;
  48. }
  49.  
  50. int PrintMonthRemain (float spend[], int n) {
  51.     int i = 0;
  52.     printf("> So tien con du sau moi thang: \n");
  53.     for (i = 0; i < n; ++i) {
  54.         printf("\t+ Thang %d: %d dong\n", i+1, (int) (BUDGET - spend[i]) * UNIT);
  55.     }
  56.     return 0;
  57. }
  58.  
  59. int YearRemain (float spend[], int n) {
  60.     int i = 0;
  61.     float remain = BUDGET * MONTH;
  62.     for (i = 0; i < n; ++i) {
  63.         remain -= spend[i];
  64.     }
  65.     return remain;
  66. }
  67.  
  68. int fInput(float min, float max) {
  69.     int tmp, isInvalid;
  70.     float inp;
  71.     do {
  72.         tmp = scanf("%f", &inp);
  73.         while (getchar() != '\n');
  74.         if (tmp != 1 || (inp < min || inp > max)) {
  75.             printf("!!! Vui long nhap dung so tu %f den %f !!!\n", min, max);
  76.             isInvalid = 1;
  77.         } else isInvalid = 0;
  78.     } while (isInvalid);
  79.     return inp;
  80. }
  81.  
  82. int Input(int min, int max) {
  83.     int tmp, isInvalid, inp;
  84.     do {
  85.         tmp = scanf("%d", &inp);
  86.         while (getchar() != '\n');
  87.         if (tmp != 1 || (inp < min || inp > max)) {
  88.             printf("!!! Vui long nhap dung so tu %d den %d !!!\n", min, max);
  89.             isInvalid = 1;
  90.         } else isInvalid = 0;
  91.     } while (isInvalid);
  92.     return inp;
  93. }
  94.  
  95. int main () {
  96.     int isOut = 0, choice, isInvalid;
  97.     int i;
  98.     float spend[MONTH], tmp;
  99.     int mode = -1;  // 0 = AN TOAN, 1 = LINH HOAT
  100.  
  101.     do {
  102.         if (mode == -1) {
  103.             printf("\n------------------------------------------------------\n");
  104.             printf("> Nhap che do chi tieu (0 = AN TOAN, 1 = LINH HOAT): ");
  105.             mode = Input(0, 1);
  106.             printf("> Nhap chi tieu cho tung thang (don vi: trieu dong):\n");
  107.             for (i = 0; i < MONTH; ++i) {
  108.                 do {
  109.                     isInvalid = 0;
  110.                     printf("\t+ Thang %d: ", i+1);
  111.                     tmp = fInput(0.0, (float) 1e6);
  112.                     switch (mode) {
  113.                         case 0:
  114.                             if (tmp < 0.0 || tmp > (float) BUDGET) {
  115.                                 isInvalid = 1;
  116.                                 printf("!!! Chi tieu can nho hon %d dong !!!\n", (int) BUDGET * UNIT);
  117.                             }
  118.                             break;
  119.                         case 1:
  120.                              if (tmp < 0.0 || tmp > YearRemain(spend, i)) {
  121.                                 isInvalid = 1;
  122.                                 printf("!!! Chi tieu can nho hon %d dong !!!\n", (int) YearRemain(spend, i) * UNIT);
  123.                              }
  124.                              break;
  125.                     }
  126.                 } while (isInvalid);
  127.                 spend[i] = tmp;
  128.             }
  129.             printf(">>> Hoan tat nhap du lieu chi tieu !\n");
  130.             printf("------------------------------------------------------\n");
  131.         }
  132.         printf("\n------------------------------------------------------\n");
  133.         printf("1. Thong ke chi tieu ca nam\n");
  134.         printf("2. Thang chi tieu nhieu nhat/tiet kiem nhat\n");
  135.         printf("3. So tien con du moi thang\n");
  136.         printf("4. So tien con du sau  1 nam\n");
  137.         printf("0. Thoat\n");
  138.         printf("------------------------------------------------------\n");
  139.         printf("> Nhap lua chon: ");
  140.         choice = Input(0, 4);
  141.         switch (choice) {
  142.             case 1:
  143.                 printf("\n------------------------------------------------------\n");
  144.                 PrintSatistic(spend, MONTH);
  145.                 printf("------------------------------------------------------\n");
  146.                 break;
  147.             case 2:
  148.                 printf("\n------------------------------------------------------\n");
  149.                 PrintMaxMin(spend, MONTH);
  150.                 printf("------------------------------------------------------\n");
  151.                 break;
  152.             case 3:
  153.                 printf("\n------------------------------------------------------\n");
  154.                 PrintMonthRemain(spend, MONTH);
  155.                 printf("------------------------------------------------------\n");
  156.                 break;
  157.             case 4:
  158.                 printf("\n------------------------------------------------------\n");
  159.                 printf("> So tien con du sau mot nam: %d\n", (int) YearRemain(spend, MONTH) * UNIT);
  160.                 printf("------------------------------------------------------\n");
  161.                 break;
  162.             case 0:
  163.                 isOut = 1;
  164.             default:
  165.                 printf("!!! Vui long nhap lua chon tu 0 den 4 !!!\n");
  166.         }
  167.     } while (!isOut);
  168. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement