จงเขียนโปรแกรมทอนเงิน 500 , 100 , 50 , 20 , 10 , 5 และ 1 บาท

| ไอที | Java | 35121

จงเขียนโปรแกรมขายสินค้า และคิดเงินทอน โดยรับสินค้าและเงินจากผู้ซื้อ พร้อมคำนวณเงินทอน และ แสดงเงินทอนเป็น ธนบัตรและเหรียญ เช่น 500 , 100 , 50 , 20 , 10 , 5 และ 1 บาท เป็นจำนวนกี่รายการ

เช่น
-เงินที่ต้องทอนให้ลูกค้าจํานวน 15 บาท จะต้องใช้ เหรียญ 10 หนึ่งเหรียญ เหรียญ 5 หนึงเหรียญ
-เงินที่ต้องทอนให้ลูกค้าจํานวน 14 บาท จะต้องใช้ เหรียญ 10 หนึ่งเหรียญ เหรียญ 1 บาท สี่เหรียญ

อันดับแรก ให้เราทำการเตียม input เงินที่ต้องทอนเข้ามาก่อน ตามตัวอย่างด้านล่าง
import java.util.Scanner;

public class ChangPayment {
    public static void main(String[] args) {
        while(true){
            try{
                Scanner in = new Scanner(System.in);
                System.out.print("Money to chang : ");
                int money = in.nextInt();
                if(money >= 0) break;
            }
            catch(Exception e){}
        }
    }
}
ต้อง import คลาส Scanner เข้ามา ซึ่งในที่นี้ ผมใช้สำหรับรับข้อมูลทางแป้นพิมพ์ จากนั้นในฟังก์ชัน main ให้วนลูป while ตลอด ซึ่งเป็นการตรวจสอบข้อมูลที่กรอกเข้ามา สร้างตัวแปรชื่อ in เป็นชนิด Scanner จากนั้น สร้างตัวแปรชื่อ money เป็นชนิด int ซึ่งถ้ากรอกข้อมูลไม่ถูกต้อง ก็จะไปทำงานในส่วนของ catch ซึ่งไม่ได้เขียนอะไรไว้ จากนั้น ก็เข้าสู่วงวน while อีกรอบ จนกว่าจะกรอกข้อมูลถูก ซึ่งถ้ากรอกข้อมูลถูกต้องแล้ว จะเจอกับคำสั่ง break เพื่อออกจากลูปนั่นเอง ดังนั้น ในตอนนี้เราได้เตรียม input เรียบร้อยแล้ว

ต่อไป เรามาเตียม output กันบ้าง ซึ่งแสดงตามตัวอย่างด้านล่าง
int[] pay = new int[7];
System.out.println("500 is : " + pay[0]);
System.out.println("100 is : " + pay[1]);
System.out.println("50 is : " + pay[2]);
System.out.println("20 is : " + pay[3]);
System.out.println("10 is : " + pay[4]);
System.out.println("5 is : " + pay[5]);
System.out.println("1 is : " + pay[6]);
ในที่นี้เราสร้าง Array ขึ้นมาชื่อว่า pay ซึ่งมีจำนวน 7 ช่อง ช่องละเหรียญ แต่ละช่องจะเก็บจำนวนเหรียญของแต่ละเหรียญไว้

ต่อไปมาเริ่มทำการคำนวณกันเลย

ตัวอย่างการเขียนคำนวณ ตัวอย่างแรก

pay[0] = money/500;
money = money - (pay[0]*500);

pay[1] = money/100;
money = money - (pay[1]*100);

pay[2] = money/50;
money = money - (pay[2]*50);

pay[3] = money/20;
money = money - (pay[3]*20);

pay[4] = money/10;
money = money - (pay[4]*10);

pay[5] = money/5;
money = money - (pay[5]*5);

pay[6] = money;
ตัวอย่างแรกนี้ เราคำนวณแต่ละตัวแยกกันเลย เริ่มจาก นำเงินทั้งหมด มาหารจำนวนเงินที่ต้องทอน จะได้จำนวนออกมา เช่น มีอยู่ 600 เอามาหาร 500 ก็ได้ 1 แสดงว่า ใช้ใบ 500 จำนวน 1 ใบ จากนั้นก็นำไปหารร้อยอีก ก็จะได้ 1 ใบเหมือนกัน แสดงว่าต้องใช้ 500 จำนวน 1 ใบ 100 อีกหนึ่งใบ นอกนั้นจะเป็น 0 หมด

ตัวอย่างการเขียนคำนวณ ตัวอย่างที่สอง

จากวิธีแรก เราจะเห็นว่าโค้ดมีความซ้ำซ้อนมาก ดังนั้น เราจึงนำตัวอย่างที่ 1 มาทำเป็นลูป
int[] numpay = new int[]{500, 100, 50, 20, 10, 5, 1};
for (int i= 0; i < pay.length; i++) {
	pay[i] = money/numpay[i];
	money = money - (pay[i]*numpay[i]);
}
ตัวอย่างนี้ เราสร้าง Array มาอีกหนึ่งตัว เป็นจำนวนที่จะหารของจำนวนเงิน

ตัวอย่างการเขียนคำนวณ ตัวอย่างที่สาม

จากวิธีแรก เราจะเห็นว่าโค้ดมีความซ้ำซ้อนมาก ดังนั้น เราจึงนำตัวอย่างที่ 1 มาทำเป็นลูป
int[] numpay = new int[]{500, 100, 50, 20, 10, 5, 1};
for (int i= 0; i < pay.length; i++) {
	pay[i] = money/numpay[i];
	money = money%numpay[i];
}
วิธีนี้ ก็คล้าย ๆ กับวิธีที่สอง เพียงแต่เปลี่ยนวิธีหาค่าเงินที่เหลือ จากการ mod เพื่อเอาเศษที่เหลือ

มาดูตัวอย่างเต็ม ๆ กันครับ

ซึ่งในที่นี้ ผมจะเลือกวิธีที่ 3 เพราะสั้นที่สุดใน 3 ตัวอย่าง
import java.util.Scanner;

public class ChangPayment {
    public static void main(String[] args) {
        int money;
        while(true){
            try{
                Scanner in = new Scanner(System.in);
                System.out.print("Money to chang : ");
                money = in.nextInt();
                if(money >= 0) break;
            }
            catch(Exception e){}
        }
        int[] pay = new int[7];

        int[] numpay = new int[]{500, 100, 50, 20, 10, 5, 1};
        for (int i= 0; i < pay.length; i++) {
            pay[i] = money/numpay[i];
            money = money%numpay[i];
        }

        System.out.println("500 is : " + pay[0]);
        System.out.println("100 is : " + pay[1]);
        System.out.println("50 is : " + pay[2]);
        System.out.println("20 is : " + pay[3]);
        System.out.println("10 is : " + pay[4]);
        System.out.println("5 is : " + pay[5]);
        System.out.println("1 is : " + pay[6]);
    }
}
comments