JBTALKS.CC

标题: [C]数学计算问题 [打印本页]

作者: ~Kai    时间: 2009-12-22 01:55 AM
标题: [C]数学计算问题
比如说我有一个号码 28.61,要怎么把它弄近似值去28.70?

我碰到的问题是需要我把所得到的号码都弄成近似值到下个0.10。

  1. rounded = floor(28.61 + 0.05);
复制代码

floor, ceil, 除100, 乘 100... 都试过了,绞尽脑汁就是想不出用什么Formula
只能怪自己数学不学好一点
作者: duo8668    时间: 2009-12-22 09:33 AM
有 mod 这个function吗?
应该是 x100, mod 某个号码, 然后用些 if else 就可以了。
作者: Super-Tomato    时间: 2009-12-22 11:08 AM
原帖由 ~Kai 于 2009-12-22 01:55 AM 发表
比如说我有一个号码 28.61,要怎么把它弄近似值去28.70?

我碰到的问题是需要我把所得到的号码都弄成近似值到下个0.10。

rounded = floor(28.61 + 0.05);
floor, ceil, 除100, 乘 100... 都试过了,绞尽 ...




~_~

1. 數字 x 10
2. ceil 數字
3. 數字 / 10

這不就是答案了嗎?
作者: duo8668    时间: 2009-12-22 01:41 PM
原帖由 Super-Tomato 于 2009-12-22 11:08 AM 发表




~_~

1. 數字 x 10
2. ceil 數字
3. 數字 / 10

這不就是答案了嗎?

厉害~~!
作者: ~Kai    时间: 2009-12-22 03:16 PM
原帖由 Super-Tomato 于 2009-12-22 11:08 AM 发表




~_~

1. 數字 x 10
2. ceil 數字
3. 數字 / 10

這不就是答案了嗎?

人類總是喜歡把簡單的問題復雜化...

原來就是那么簡單,弄到我整晚睡不著

謝謝你
作者: ~Kai    时间: 2009-12-22 10:41 PM
  1. while((scanf("%d", &input) != 1) || (input <= 0) || (input >= 6)) {
  2.                         printf("\aERROR\nInvalid input!\n");
  3.                         printf("Input : ");
  4.                         scanf("%d", &input);
  5.                         fflush(stdin);
  6.                 }
复制代码

這個為什么觸發的時候只有輸入字母的時候loop得正常,而輸入號碼的時候就loop得不正常?
作者: Super-Tomato    时间: 2009-12-24 12:36 AM
原帖由 ~Kai 于 2009-12-22 10:41 PM 发表
while((scanf("%d", &input) != 1) || (input = 6)) {
                        printf("\aERROR\nInvalid input!\n");
                        printf("Input : ");
                        scanf("%d", &input);
                        fflush(stdin);
                }
這個為什么觸發的時候只有輸入字 ...



不明白你所指的不正常 looping 是甚麼問題, 還是把 coding 都貼出來吧
作者: ~Kai    时间: 2009-12-24 01:16 AM
原帖由 Super-Tomato 于 2009-12-24 12:36 AM 发表



不明白你所指的不正常 looping 是甚麼問題, 還是把 coding 都貼出來吧



就像這個。
打錯東西第二次的話就會變成什么都不出現...
作者: ~Kai    时间: 2009-12-24 01:18 AM
标题: 這是我整個Source Code
  1. #include <stdio.h>
  2. #include <time.h>
  3. #include <conio.h>
  4. #include <math.h>

  5. void main()
  6. {
  7.         int lock, tbnum, pzchoice, pzquantity, drkchoice, drkquantity;
  8.         char getmember, memberstat, membertype_get, membertype, pzsize_get, pzsize, pizza[12], drink[22],dispdiscount[5], memberdesc[22], custname[175]; // custname array based on World's Longest Name of a Person which has 174 characters
  9.         float pzprice, drkprice, calcdiscount, pzsubtotal, drksubtotal, totalchrg, amountdc, discounted, tax, total, round, rounded, totalpay, paid, change;
  10.         struct tm * timeinfo;
  11.         time_t lt;
  12.        
  13.         puts("=====================================\n");
  14.         puts("- WELCOME TO PIZZA HOUSE RESTAURANT -\n");
  15.         puts("=====================================\n");
  16.         puts("\n- MEMBERSHIP TYPES\n");
  17.         puts(" G - Gold Class Member\n P - Platinum Class Member\n");
  18.         puts("\n- PIZZA SIZES\n");
  19.         puts(" L - Large (12\")\n R - Regular (9\")\n P - Personal (6\")\n");
  20.         puts("\n- PIZZA FAVOURITES\n");
  21.         puts(" 1. Pepperoni\n 2. Seafood\n 3. Vegetable\n 4. Hawaiian\n 5. Mixed Combo\n");
  22.         puts("\n- DRINKS\n");
  23.         puts(" 1. Orange Juice\n 2. Coffee\n 3. Mineral Water (600ml)\n 4. Pepsi\n");
  24.         // Prompt customer's individual & order informations.
  25.         printf("\nPlease enter your name\t: ");
  26.         gets(custname);
  27.         fflush(stdin);
  28.         printf("Are you a member? (Y/N)\t: ");
  29.         // Limits user input to Y and N only.
  30.         lock = 0;
  31.         do {
  32.                 getmember = getch();
  33.                 switch(getmember) {
  34.                         case 'Y':
  35.                         case 'y':
  36.                                 if (lock == 0) {
  37.                                         printf("Y");
  38.                                         lock = 1;
  39.                                 }
  40.                                 else {
  41.                                 printf("\bY");
  42.                                 }
  43.                                 memberstat = 'Y';
  44.                         break;
  45.                         case 'N':
  46.                         case 'n':
  47.                                 if (lock == 0) {
  48.                                         printf("N");
  49.                                         lock = 1;
  50.                                 }
  51.                                 else {
  52.                                 printf("\bN");
  53.                                 }
  54.                                 memberstat = 'N';
  55.                         break;
  56.                         case '\r':
  57.                                 if (memberstat == 'Y' || memberstat == 'N'); {
  58.                                         printf("\n");
  59.                                 }
  60.                                 break;
  61.                         default:
  62.                                 if (lock != 1) {
  63.                                         printf("\b%c", memberstat);
  64.                                         lock = 0;
  65.                                 }
  66.                                 else {
  67.                                         lock = 1;
  68.                                 }
  69.                         break;
  70.                 }
  71.                 fflush(stdin);
  72.         }
  73.         while (getmember != '\r' || (memberstat != 'Y' && memberstat != 'N'));
  74.         // Prompt member type decision...
  75.         if (memberstat == 'Y') {
  76.                 printf("Membership Type? (G/P)\t: ");
  77.                 // Limits user input to G and P only.
  78.                 lock = 0;
  79.                 do {
  80.                         membertype_get = getch();
  81.                         switch(membertype_get) {
  82.                                 case 'G':
  83.                                 case 'g':
  84.                                         if (lock == 0) {
  85.                                                 printf("G");
  86.                                                 lock = 1;
  87.                                         }
  88.                                         else {
  89.                                         printf("\bG");
  90.                                         }
  91.                                         membertype = 'G';
  92.                                 break;
  93.                                 case 'P':
  94.                                 case 'p':
  95.                                         if (lock == 0) {
  96.                                                 printf("P");
  97.                                                 lock = 1;
  98.                                         }
  99.                                         else {
  100.                                         printf("\bP");
  101.                                         }
  102.                                         membertype = 'P';
  103.                                 break;
  104.                                 case '\r':
  105.                                         if (membertype == 'G' || membertype == 'P'); {
  106.                                                 printf("\n");
  107.                                         }
  108.                                         break;
  109.                                 default:
  110.                                         if (lock != 1) {
  111.                                                 printf("\b%c", membertype);
  112.                                                 lock = 0;
  113.                                         }
  114.                                         else {
  115.                                                 lock = 1;
  116.                                         }
  117.                                 break;
  118.                         }
  119.                         fflush(stdin);
  120.                 }
  121.                 while (membertype_get != '\r' || (membertype != 'G' && membertype != 'P'));
  122.         }
  123.         // Assign Member Description and Discount Amount
  124.         switch (membertype) {
  125.                 case 'G':
  126.                         strcpy(memberdesc, "Gold Class Member");
  127.                         calcdiscount = 0.1;
  128.                         strcpy(dispdiscount, "10%");
  129.                 break;
  130.                 case 'P':
  131.                         strcpy(memberdesc, "Platinum Class Member");
  132.                         calcdiscount = 0.2;
  133.                         strcpy(dispdiscount, "20%");
  134.                 break;
  135.                 default:
  136.                         strcpy(memberdesc, "Non Member");
  137.                         calcdiscount = 0;
  138.                         strcpy(dispdiscount, "0%");
  139.                 break;
  140.         }
  141.         printf("Table Number\t\t: ");
  142.         // Is the input an integer?
  143.         while (scanf("%d", &tbnum) != 1) {
  144.                 puts("\aERROR\nInvalid table number!\n");
  145.                 printf("Table Number\t\t: ");
  146.                 scanf("%d", &tbnum);
  147.                 fflush(stdin);
  148.         }
  149.         printf("Choice of Pizza\t\t: ");
  150.         // When Input is Invalid, display ERROR (SLIGHTLY BUGGED)
  151.         while((scanf("%d", &pzchoice) != 1) || (pzchoice <= 0) || (pzchoice >= 6)) {
  152.                         puts("\aERROR\nInvalid choice of pizza!\n");
  153.                         printf("Choice of Pizza\t\t: ");
  154.                         scanf("%d", &pzchoice);
  155.                         fflush(stdin);
  156.                 }
  157.         // Assign Pizza Name
  158.         switch (pzchoice) {
  159.                 case 1:
  160.                         strcpy(pizza, "Pepperoni");
  161.                 break;
  162.                 case 2:
  163.                         strcpy(pizza, "Seafood");
  164.                 break;
  165.                 case 3:
  166.                         strcpy(pizza, "Vegetable");
  167.                 break;
  168.                 case 4:
  169.                         strcpy(pizza, "Hawaiian");
  170.                 break;
  171.                 case 5:
  172.                         strcpy(pizza, "Mixed Combo");
  173.                 break;
  174.         }
  175.         printf("Pizza Size? (L/R/P)\t: ");
  176.         // Limits user input to L, R and P only.
  177.         lock = 0;
  178.         do {
  179.                 pzsize_get = getch();
  180.                 switch(pzsize_get) {
  181.                         case 'L':
  182.                         case 'l':
  183.                                 if (lock == 0) {
  184.                                         printf("L");
  185.                                         lock = 1;
  186.                                 }
  187.                                 else {
  188.                                 printf("\bL");
  189.                                 }
  190.                                 pzsize = 'L';
  191.                         break;
  192.                         case 'R':
  193.                         case 'r':
  194.                                 if (lock == 0) {
  195.                                         printf("R");
  196.                                         lock = 1;
  197.                                 }
  198.                                 else {
  199.                                 printf("\bR");
  200.                                 }
  201.                                 pzsize = 'R';
  202.                         break;
  203.                         case 'P':
  204.                         case 'p':
  205.                                 if (lock == 0) {
  206.                                         printf("P");
  207.                                         lock = 1;
  208.                                 }
  209.                                 else {
  210.                                 printf("\bP");
  211.                                 }
  212.                                 pzsize = 'P';
  213.                         break;
  214.                         case '\r':
  215.                                 if (pzsize == 'L' || pzsize == 'R' || pzsize == 'P'); {
  216.                                         printf("\n");
  217.                                 }
  218.                                 break;
  219.                         default:
  220.                                 if (lock != 1) {
  221.                                         printf("\b%c", pzsize);
  222.                                         lock = 0;
  223.                                 }
  224.                                 else {
  225.                                         lock = 1;
  226.                                 }
  227.                         break;
  228.                 }
  229.                 fflush(stdin);
  230.         }
  231.         while (pzsize_get != '\r' || (pzsize != 'L' && pzsize != 'R' && pzsize != 'P'));
  232.         // Assign Pizza Price and Size Description
  233.         switch (pzsize) {
  234.                 case 'L':
  235.                         pzprice = 25.90;
  236.                 break;
  237.                 case 'R':
  238.                         pzprice = 18.90;
  239.                 break;
  240.                 case 'P':
  241.                         pzprice = 9.00;
  242.                         break;
  243.         }
  244.         printf("Quantity of Pizza\t: ");
  245.         // Is the input an integer?
  246.         while (scanf("%d", &pzquantity) != 1) {
  247.                 puts("\aERROR\nInvalid number of pizza!\n");
  248.                 printf("Quantity of Pizza\t: ");
  249.                 scanf("%d", &pzquantity);
  250.                 fflush(stdin);
  251.         }
  252.         printf("Choice of Drink\t\t: ");
  253.         // When Input is Invalid, display ERROR (SLIGHTLY BUGGED)
  254.         while((scanf("%d", &drkchoice) != 1) || (drkchoice <= 0) || (drkchoice >= 5)) {
  255.                         puts("\aERROR\nInvalid choice of drink!\n");
  256.                         printf("Choice of Drink\t\t: ");
  257.                         scanf("%d", &drkchoice);
  258.                         fflush(stdin);
  259.                 }
  260.         // Assign Drink Name and Price
  261.         switch (drkchoice) {
  262.                 case 1:
  263.                         strcpy(drink, "Orange Juice");
  264.                         drkprice = 3.20;
  265.                 break;
  266.                 case 2:
  267.                         strcpy(drink, "Coffee");
  268.                         drkprice = 3.00;
  269.                 break;
  270.                 case 3:
  271.                         strcpy(drink, "Mineral Water (600ml)");
  272.                         drkprice = 2.20;
  273.                 break;
  274.                 case 4:
  275.                         strcpy(drink, "Pepsi");
  276.                         drkprice = 2.50;
  277.                 break;
  278.         }
  279.         printf("Quantity of Drink\t: ");
  280.         scanf("%d", &drkquantity);
  281.         // Calculations
  282.         pzsubtotal = pzprice * pzquantity;
  283.         drksubtotal = drkprice * drkquantity;
  284.         totalchrg = pzsubtotal + drksubtotal;
  285.         amountdc = totalchrg * calcdiscount;
  286.         discounted = totalchrg - amountdc;
  287.         // Order Summary
  288.         puts("\n- ORDER SUMMARY\n");
  289.         // Date & Time
  290.         time(&lt);
  291.         timeinfo = localtime(&lt);
  292.         printf("%s\n", asctime(timeinfo));
  293.         printf("(Table %d)\n", tbnum);
  294.         printf("Customer Name\t: %s\n", custname);
  295.         printf("Membership Type\t: %s (%s Discount)\n", memberdesc, dispdiscount);
  296.         puts("=====================================================================\n");
  297.         printf(" %-6s%-24s%-15s%-13s%-s\n", "Size", "Item", "Unit Price", "Quantity", "Sub-Total");
  298.         puts("=====================================================================\n");
  299.         printf(" %-6c%-24sRM %6.2f%10d%10s %6.2f\n", pzsize, pizza, pzprice, pzquantity, "RM", pzsubtotal);
  300.         printf(" %-6s%-24sRM %6.2f%10d%10s %6.2f\n", "-", drink, drkprice, drkquantity, "RM", drksubtotal);
  301.         printf("%69s\n", "-----------");
  302.         printf("%61s%6.2f\n", "Total Charge : RM", totalchrg);
  303.         printf("%52s%s%5s%6.2f\n", "Discount (", dispdiscount, ") : RM", amountdc);
  304.         printf("%69s\n", "-----------");
  305.         printf("%61s%6.2f\n", "Discounted Price : RM", discounted);
  306.         // Calculate Tax
  307.         tax = discounted * 0.1;
  308.         printf("%61s%6.2f\n", "Service Tax (10%) : RM", tax);
  309.         printf("%69s\n", "-----------");
  310.         // Calculate Total
  311.         total = discounted + tax;
  312.         printf("%61s%6.2f\n", "Total : RM", total);
  313.         // Calculate Roundings
  314.         rounded =  ceil(total * 10) / 10;
  315.         round = rounded - total;
  316.         printf("%61s%6.2f\n", "Rounding Adjustment : RM", round);
  317.         // Calculate Payment
  318.         totalpay = total + round;
  319.         printf("%69s\n", "-----------");
  320.         printf("%61s%6.2f\n", "Total payment : RM", totalpay);
  321.         printf("%69s\n\n", "===========");
  322.         printf("%62s", "Paid Cash : RM ");
  323.         scanf("%f", &paid);
  324.         // Ensure paid amount is more than total payment
  325.         while (paid < totalpay) {
  326.                 printf("%66s","\aERROR\n");
  327.                 printf("%80s","Insufficient amount!\n");
  328.                 printf("%62s", "Paid Cash : RM ");
  329.                 scanf("%f", &paid);
  330.                 fflush(stdin);
  331.         }
  332.         // Calculate Change
  333.         change = paid - totalpay;
  334.         printf("%61s%6.2f\n", "Change : RM", change);
  335.         // Display Thank You Message
  336.         puts("ALWAYS THE PREFERRED CHOICE!\n");
  337.         puts("Pizza House Restaurant (482123-0)\n53300 Setapak, Kuala Lumpur.\n");
  338.         printf("\n%s, thank you for visiting Pizza House Restaurant (482123-0)!\nHave a nice day, Please come again ~", custname);
  339. }
复制代码

作者: Super-Tomato    时间: 2009-12-24 03:22 AM
原帖由 ~Kai 于 2009-12-24 01:16 AM 发表

http://i291.photobucket.com/albums/ll320/NgHongKai/error1.jpg

就像這個。
打錯東西第二次的話就會變成什么都不出現...




while((scanf("%d", &input) != 1) || (input = 6)) {
                        printf("\aERROR\nInvalid input!\n");
                        printf("Input : ");
                        scanf("%d", &input);
                        fflush(stdin);
                }


粗體部分就是你執行兩次的原因
作者: ~Kai    时间: 2009-12-24 03:31 AM
原帖由 Super-Tomato 于 2009-12-24 03:22 AM 发表




while((scanf("%d", &input) != 1) || (input = 6)) {
                        printf("\aERROR\nInvalid input!\n");
                        printf("Input : ");
                        scan ...

非常感謝您的幫忙

做programming的卻需要過人的耐力和敏銳的觀察力...
作者: kidz1990    时间: 2010-1-9 12:01 AM
现在我拿c++了。。。看到c的code我会怕了。。这么长的code用c++一半就好了。。。做么感觉上你写的restaurant order meal program比我的长勒????em0001
作者: goodday    时间: 2010-1-9 03:49 AM
原帖由 ~Kai 于 2009-12-24 03:31 AM 发表

非常感謝您的幫忙

做programming的卻需要過人的耐力和敏銳的觀察力...


番茄是这边C 系的牛人
作者: ~Kai    时间: 2010-1-9 04:39 AM
原帖由 kidz1990 于 2010-1-9 12:01 AM 发表
现在我拿c++了。。。看到c的code我会怕了。。这么长的code用c++一半就好了。。。做么感觉上你写的restaurant order meal program比我的长勒????em0001

我有加很多不相关的东西下去咯...
作者: silentkiller    时间: 2010-1-9 05:42 AM
我也喜欢c++和vb的。。但担心读不好咯。。
既不懂得读出来要做啥么咯
觉得番茄好神(⊙o⊙)哦
作者: kidz1990    时间: 2010-1-9 11:54 PM
标题: 回复 #14 ~Kai 的帖子
加太多没用的东西不好,重要是全体能跑了没,能了才加些graphic的东西进去。。要不然会搞到自己累。。。em0005




欢迎光临 JBTALKS.CC (https://www.jbtalks.cc/) Powered by Discuz! X2.5