Computer Programming การเขียนโปรแกรมคอมพิวเตอร์ สัปดาห์ที่ 7 โจทย์ประยุกต์คำสั่งควบคุมการทำงานแบบเงื่อนไขและคำสั่งควบคุมการทำงานแบบวนซ้ำ
objectives สามารถทำความเข้าใจโจทย์ วิเคราะห์โจทย์ และเขียนโปรแกรมให้ทำงานได้โดยใช้ทักษะการวิเคราะห์โจทย์ขั้นพื้นฐาน ทบทวนเขียนโปรแกรมภาษาซีให้มีทำงานแบบวนซ้ำและกำหนดเงื่อนไขร่วมกันได้ สามารถนำความรู้เรื่องคำสั่งควบคุมการทำงานแบบวนซ้ำและกำหนดเงื่อนไขไปประยุกต์เพื่อแก้ไขโจทย์ปัญหาได้อย่างถูกต้องเหมาะสม
Example 1 Example: สหกรณ์แห่งหนึ่งต้องการโปรแกรมสำหรับคำนวณเงินปันผลประกอบการ โปรแกรมจะทำการวนรับจำนวนเงินยอดรวมค่าใช้จ่ายของสมาชิกแต่ละราย โปรแกรมจะจบการทำงานเมื่อผู้ใช้ป้อนอักขระ ‘N’ จากนั้นจะแสดงจำนวนเงินปันผลที่สมาชิกแต่ละรายจะได้รับ โดยมีรายละเอียดของเงินปันผลดังนี้ ถ้าจำนวนเงินของสมาชิกที่ซื้อสิ้นค้าในสหกรณ์ทั้งปีมีจำนวน 1-500 บาท จะมีเงินปันผล 2% ถ้าจำนวนเงินของสมาชิกที่ซื้อสิ้นค้าในสหกรณ์ทั้งปีมีจำนวน 501-1,000 บาท จะมีเงินปันผล 5% ถ้าจำนวนเงินของสมาชิกที่ซื้อสิ้นค้าในสหกรณ์ทั้งปีมีจำนวน 1,001-5,000 บาท จะมีเงินปันผล 10% ถ้าจำนวนเงินของสมาชิกที่ซื้อสิ้นค้าในสหกรณ์ทั้งปีมีจำนวน 5,001-10,000 บาท จะมีเงินปันผล15% ถ้าจำนวนเงินของสมาชิกที่ซื้อสิ้นค้าในสหกรณ์ทั้งปีมีจำนวน 10,001 บาทขึ้นไป จะมีเงินปันผล 20% จงวิเคราะห์โปรแกรม เขียนขั้นตอนการทำงานอย่างละเอียด เขียนรหัสเทียม เขียนผังงาน และโปรแกรมภาษาซี โดยรับจำนวนเงินยอดรวมค่าใช้จ่ายของสมาชิกแต่ละราย และเมื่อเสร็จสิ้นการทำงานทำการคำนวณและแสดงจำนวนเงินปันผลที่สมาชิกแต่ละรายจะได้รับ
Problem Analysis Output Analysis จำนวนเงินปันผลที่สมาชิกแต่ละรายจะได้รับ Input Analysis จำนวนเงินยอดรวมค่าใช้จ่ายทั้งปีของสมาชิกแต่ละราย Process Analysis โปรแกรมทำการรับค่าจำนวนเงินยอดรวมค่าใช้จ่ายทั้งปีของสมาชิกแต่ละรายพร้อมทั้งคำนวณเงินปันผลของแต่ละราย จากนั้นโปรแกรมจะทำการวนรับค่าจำนวนเงินยอดรวมค่าใช้จ่ายทั้งปีของสมาชิกคนถัดไปหากผู้ใช้กด ‘Y’ และโปรแกรมจะสิ้นสุดการทำงานหากผู้ใช้กด ‘N’
Problem Analysis (cont.) Variable Define money เป็นตัวแปรชนิดทศนิยมเพื่อรับจำนวนเงินค่าใช้จ่ายของสมาชิกแต่ละราย bonus เป็นตัวแปรชนิดทศนิยมเพื่อรับจำนวนเงินปันผลที่ต้องจ่ายให้สมาชิกรายนั้นๆ money_1[] เป็นตัวแปรชนิดทศนิยมเพื่อรับจำนวนเงินค่าใช้จ่ายของสมาชิกแต่ละรายที่จะแสดงในส่วนของ for-loop ซึ่งจะวนแสดงตั้งแต่คนแรกที่ใช้บริการจนกระทั่งถึงสมาชิกรายสุดท้ายก่อนผู้ใช้โปรแกรมกดอักขระ ‘N’ เพื่อจบการทำงาน count , i เป็นตัวแปรชนิดจำนวนเต็มเพื่อการวนลูปและแสดงรายละเอียดสมาชิกแต่ละ latter เป็นตัวแปรชนิดอักขระเพื่อเก็บค่าตัวอักขระเพื่อที่จะทำหรือจบเงื่อนไขการทำงาน
Process เริ่มต้นทำงาน ทำการรับค่ายอดเงินรวมค่าใช้จ่ายทั้งปีของสมาชิกแต่ละราย คำนวณเงินปันผลตามเงื่อนไขที่กำหนด แสดงเงินปันผลให้สมาชิกรายนั้นทราบ ทำการวนรับค่ายอดเงินรวมค่าใช้จ่ายทั้งปีของสมาชิกรายถัดไป ถ้าผู้ใช้โปรแกรมกด ‘Y’ และจบการทำงานหากผู้ใช้โปรแกรมกด ‘N’ จบการทำงาน
Pseudo Code Begin Do { Read money of each member Calculate the bonus follow by each condition Show the money and bonus Read character ‘Y’ for continue read money of the other members (loop) } while (latter != ‘N’) End
Flowchart for loop START True bonus=money*0.02 False True money_1 [], money=0 latter money True (money >= 1)&& (money <= 500) bonus=money*0.02 False (money >= 501)&& (money <= 1,000) True bonus=money*0.05 False True (money >= 1,001)&& (money <= 5,000) bonus=money*0.1 False True (money >= 10,001 bonus=money*0.2 False Detail latter for loop True False latter != ‘N’ money_1[] END
Show money of each member (for-loop) i = 0 False i < count True money_1[] i++ END
#include<stdio.h> float money , bonus , money_1[ ]; char latter ; int count = 0, i; int main() { //prompt to describe the detail of program printf(" ***This is a program for calculate members bonus ***\n"); do { // read input money from user printf("Please enter your money : \n"); scanf("%f",& money); while (money < 1) //check for the right number ? printf("Error, you are enter the wrong number!!"); printf("Please enter your money again : \n"); scanf( “ %f”, & money); } // process for each condition if((money >=1 )&& (money <=500)) bonus = money *(2/100); else if((money >= 501) && (money <=1 000)) bonus = money *(5/100);
else if((money >=1001) && (money <=5000)) bonus = money *(10/100); else if((money >=5001) && (money <=10000)) bonus = money *(15/100); else if(money >10000) bonus = money *(20/100); //keep the data for show every member and show the detail of each member money_1 [count ] = bonus; count++; // count for for-loop printf("You r total payment per year is : %.2f\n", money); printf("You r return bonus is : %.2f \n", bonus); printf(“ Please enter the character ‘y' for continue 'or 'n' for end the program : "); scanf("%c", &latter); } while( latter != ‘n’ || latter != ‘N ‘); //check for the condition of while-loop for( i = 0; i< conunt ; i++) // show all of members bonus printf(“The return bonus of member [ i ] : %.2f \n", money_1 [ i ] ); printf("End of program\n"); return 0;
Example 2 Example: ธนาคารแห่งหนึ่งต้องการโปรแกรมสำหรับคำนวณเงินอัตรา ดอกเบี้ย (บุคคลธรรมดา) ที่จะต้องจ่ายสำหรับลูกค้าในแต่ละประเภททราบ ซึ่งโปรแกรมจะทำการวนรับจำนวนเงินฝากและประเภทของการฝากของ สมาชิกแต่ละราย โปรแกรมจะจบการทำงานเมื่อผู้ใช้ป้อนอักขระ ‘N’ จากนั้นจะ การแสดงจำนวนอัตราดอกเบี้ยรวมเงินต้นที่สมาชิกแต่ละรายจะได้รับ โดยมี รายละเอียดของประเภทบัญชีเงินฝากและอัตราดอกเบี้ยที่จะได้รับต่อปีดังนี้ ถ้าฝากออมทรัพย์จะคิดอัตราดอกเบี้ย 0.75% ถ้าฝากประจำ 3 เดือนจะคิดอัตราดอกเบี้ย 1.6% ถ้าฝากประจำ 6 เดือนจะคิดอัตราดอกเบี้ย 1.95% ถ้าฝากประจำ 12 เดือนจะคิดอัตราดอกเบี้ย 2.35% ฝากประจำ 24 เดือนจะคิดอัตราดอกเบี้ย 2.55% ฝากประจำ 36 เดือนจะคิดอัตราดอกเบี้ย 2.55% จงวิเคราะห์โปรแกรม เขียนขั้นตอนการทำงานอย่างละเอียด เขียนรหัสเทียม เขียนผังงาน และโปรแกรมภาษาซี โดยรับจำนวนเงินฝากของสมาชิกแต่ละราย และเมื่อเสร็จสิ้นการทำงานทำการคำนวณและแสดงจำนวนเงินต้นรวมทั้งอัตราดอกเบี้ยที่สมาชิกแต่ละรายจะได้รับ
Problem Analysis Output Analysis แสดงจำนวนเงินต้น ดอกเบี้ย และจำนวนอัตราดอกเบี้ยรวมเงินต้นที่สมาชิกแต่ละรายจะได้รับ Input Analysis รับจำนวนเงินฝากและประเภทของการฝากของสมาชิกแต่ละราย Process Analysis โปรแกรมจะรับค่าจำนวนเงินฝากและประเภทของการฝากของสมาชิกแต่ละราย พร้อมทั้งคำนวณดอกเบี้ยตามจำนวนเงินและประเภทบัญชีที่ฝากของแต่ละราย แสดงเงินต้น แสดงดอกเบี้ย แสดงเงินต้นรวมดอกเบี้ย จากนั้นโปรแกรมจะทำการวนรับค่าจำนวนเงินยอดรวมค่าใช้จ่ายทั้งปีของสมาชิกคนถัดไปหากผู้ใช้กด ‘Y’ และโปรแกรมจะสิ้นสุดการทำงานหากผู้ใช้กด ‘N’
Problem Analysis (cont.) Variable Define money เป็นตัวแปรชนิดทศนิยมเพื่อรับจำนวนเงินฝากของสมาชิกแต่ละราย profit_money [] เป็นตัวแปรชนิดทศนิยมเพื่อเก็บจำนวนเงินต้นรวมทั้งดอกเบี้ยที่ฝากอยู่ในบัญชีของสมาชิกแต่ละราย interest เป็นตัวแปรชนิดทศนิยมเพื่อเก็บจำนวนดอกเบี้ยเงินฝากของสมาชิกแต่ละราย count , i เป็นตัวแปรชนิดจำนวนเต็มเพื่อการวนลูปและแสดงรายละเอียดสมาชิกแต่ละราย latter เป็นตัวแปรชนิดอักขระเพื่อเก็บค่าตัวอักขระเพื่อที่จะทำหรือจบเงื่อนไขการทำงาน ‘a’ = Saving account : บัญชีออมทรัพย์ ‘b’ = Deposit account 3 months : บัญชีฝากประจำ 3 เดือน ‘c’ = Deposit account 6 months : บัญชีฝากประจำ 6 เดือน ‘d’ = Deposit account 12 months : บัญชีฝากประจำ 12 เดือน ‘e’ = Deposit account 24 months : บัญชีฝากประจำ 24 เดือน ‘f’ = Deposit account 36 months : บัญชีฝากประจำ 36 เดือน
Process เริ่มต้นทำงาน เช็คว่าจำนวนเงินที่รับเข้ามาถูกต้อง ทำการรับค่ายอดเงินฝากและประเภทบัญชีของสมาชิกแต่ละราย คำนวณดอกเบี้ยเงินฝากตามเงื่อนไขที่กำหนด แสดงผลเงินต้น ดอกเบี้ยเงิน และเงินต้นรวมดอกเบี้ยให้สมาชิกรายนั้นทราบ ทำการวนรับค่ายอดเงินรวมค่าใช้จ่ายทั้งปีของสมาชิกรายถัดไป ถ้าผู้ใช้โปรแกรมกด ‘Y’ และจบการทำงานหากผู้ใช้โปรแกรมกด ‘N’ จบการทำงาน
Pseudo Code Begin Do { Read and check money of each member Read type of account Calculate the interest follow by each condition Show amount of money, interest and compound interest Read character ‘Y’ for continue read money of the other members (loop) } while (latter != ‘N’) End
Flowchart for loop START True interest=money*(0.75/100) False True money=0, profit_money [] Interest, latter, count, i money True latter == ‘a’ interest=money*(0.75/100) False latter == ‘b’ True interest=money*(1.60/100) False True latter == ‘c’ interest=money*(1.95/100) False latter == ‘e’ || latter == ‘f’ True interest=money*(2.55/100) False Detail latter for loop True False latter != ‘N’ profit_money[] END
Show money of each member (for-loop) i = 0 False i < count True profit_money[i] i++ END
#include<stdio.h> float money, interest , profit_money [ ]; char c, latter; int count = 0, i; int main() { //prompt the description of program printf(" ***The program for calculate compound interest of bank***\n"); do { //read input money from member printf("Please enter your money : \n"); scanf("%f", &money); while (money < 1) //check for the right number? printf(“Sorry"); printf(“Your number is wrong, please enter your money again : \n"); scanf( “ %f”, &money); } //show the list of account or menu to members printf(“Please choose the type of account from the following \n"); printf(“Press ‘a’ for Saving account which the interest per year is 0.75 %%"); printf(" Press ‘b’ for deposit account 3 months which the interest per year is 1.6 %%\n"); printf(" Press ‘c’ for deposit account 6 months which the interest per year is 1.95 %%\n "); printf(" Press ‘d’ for deposit account 12 months which the interest per year is 2.35 %%\n "); printf(" Press ‘e’ for deposit account 24 months which the interest per year is 2.55 %%\n "); printf(" Press ‘f’ for deposit account 36 months which the interest per year is 2.55 press : f\n"); //read input account from members printf(" Please enter the type of account : "); scanf("%c",&c );
if(c = =‘ a‘ || c = = ‘A') // check for each criterion { interest = (money /100)*0.75; } else if( c = = ‘b‘ || c = = 'B') interest = ((money /100)*1.6)*4; else if( c = = ‘ c'|| c = = ‘C') interest = ( (money /100)*1.95)*2; else if(c = = '|| c = = 'D') interest = (money /100)*2.35; else if( c = = 'e‘ || c = = ‘E‘ || c = = 'f‘ || c = = 'F‘ ) interest = (money /100)*2.55; //keep the data for show every member and show the detail of each member profit_money [count] = money +interest; count++; // count for for-loop printf("\n Your money is : %.2f baht\n", money); printf(“\nY our interest per year is : %.2f baht\n", interest); printf(“\n Your total money : %.2f\n", money + interest); //read character for end while-loop printf(" Please enter the character ‘y' for continue 'or 'n' for end the program : "); scanf("%c",&latter); while( latter = = ‘ y‘ || latter = = ‘Y'); //check the end criterion
for( i = 0; i< conunt ; i++) // show all of members bonus printf(“The return bonus of member [ i ] : %.2f \n", profit_money [ i ] ); printf("End of program\n"); return 0; }
Example 3 Example: ร้านขายวัสดุก่อสร้างแห่งหนึ่งต้องการโปรแกรมสำหรับคำนวณ ส่วนลดให้ก้บลูกค้าที่มาใช้บริการ ซึ่งโปรแกรมจะทำการวนรับจำนวน ยอดเงินรวมของลูกค้าแต่ละราย โปรแกรมจะจบการทำงานเมื่อผู้ใช้ป้อน อักขระ ‘N’ จากนั้นจะการแสดงจำนวนส่วนลดที่ลูกค้าแต่ละรายจะได้รับ โดย มีรายละเอียดของส่วนลดดังนี้ ถ้าจำนวนเงินของลูกค้าที่ซื้อสิ้นค้าด้วยจำนวนเงิน 1,000-1,500 บาท จะมีเงินส่วนลด 2% ถ้าจำนวนเงินของลูกค้าที่ซื้อสิ้นค้าด้วยจำนวนเงิน 1,501-2,000 1บาท จะมีเงินส่วนลด 5% ถ้าจำนวนเงินของลูกค้าที่ซื้อสิ้นค้าด้วยจำนวนเงิน 2001-5,000 บาท จะมีเงินส่วนลด 12% ถ้าจำนวนเงินของลูกค้าที่ซื้อสิ้นค้าด้วยจำนวนเงิน 5001-10,000 บาท จะมีเงินส่วนลด 15% ถ้าจำนวนเงินของลูกค้าที่ซื้อสิ้นค้าด้วยจำนวนเงิน 10,001 บาทขึ้นไป จะมีเงินส่วนลด 25% จงวิเคราะห์โปรแกรม เขียนขั้นตอนการทำงานอย่างละเอียด เขียนรหัสเทียม เขียนผังงาน และโปรแกรมภาษาซี โดยรับจำนวนเงินรายจ่ายทั้งหมดของลูกค้าแต่ละราย และเมื่อเสร็จสิ้นการทำงานทำการคำนวณส่วนลดและแสดงจำนวนเงินที่ต้องจ่ายภายหลังจากหักส่วนลดสำหรับลูกค้าแต่ละราย
Problem Analysis Output Analysis จำนวนเงินยอดเต็มที่ต้องจ่าย ส่วนลดที่สมาชิก และยอดเงินที่ต้องจ่ายหลังหักส่วนลดของลูกค้าแต่ละรายจะได้รับ Input Analysis จำนวนยอดเงินรวมของลูกค้าแต่ละราย Process Analysis โปรแกรมทำการรับค่าจำนวนยอดเงินรวมของลูกค้าแต่ละรายพร้อมทั้งคำนวณเงินส่วนลดของแต่ละราย จากนั้นแสดงจำนวนเงินยอดเต็มที่ต้องจ่าย ส่วนลดที่สมาชิก และยอดเงินที่ต้องจ่ายหลังหักส่วนลดของลูกค้าแต่ละรายจะได้รับ โปรแกรมจะทำการวนรับค่าจำนวนเงินยอดรวมค่าใช้จ่ายทั้งปีของสมาชิกคนถัดไปหากผู้ใช้กด ‘Y’ และโปรแกรมจะสิ้นสุดการทำงานหากผู้ใช้กด ‘N’
Variable Define money เป็นตัวแปรชนิดทศนิยมเพื่อรับจำนวนเงินค่าใช้จ่ายของลูกค้าแต่ละราย Discount เป็นตัวแปรชนิดทศนิยมเพื่อเก็บจำนวนเงินส่วนลดที่ลูกค้าแต่ละรายได้รับ total_payment [ ] เป็นตัวแปรชนิดทศนิยมเพื่อเรียกเก็บจำนวนเงินค่าใช้จ่ายของลูกค้าแต่ละรายภายหลังหักส่วนลด count , i เป็นตัวแปรชนิดจำนวนเต็มเพื่อการวนลูปและแสดงรายละเอียดของลูกค้าแต่ละราย latter เป็นตัวแปรชนิดอักขระเพื่อเก็บค่าตัวอักขระเพื่อที่จะทำหรือจบเงื่อนไขการทำงาน
Process เริ่มต้นทำงาน ทำการรับค่ายอดเงินรวมค่าใช้จ่ายทั้งหมดของลูกค้าแต่ละราย เช็คว่าการป้อนจำนวนเงินถูกต้องหรือไม่ ถ้าถูกต้องคำนวณส่วนลดตามเงื่อนไขของยอดเงินซื้อสินค้าที่กำหนด แสดงเงินยอดค่าใช้จ่ายเต็ม จำนวนเงินส่วนลด และยอดค่าใช้จ่ายหลังลดให้ลูกค้ารายนั้นทราบ ทำการวนรับค่ายอดเงินรวมค่าใช้จ่ายทั้งหมดของลูกค้ารายถัดไป ถ้าผู้ใช้โปรแกรมกด ‘Y’ และจบการทำงานหากผู้ใช้โปรแกรมกด ‘N’ จบการทำงาน
Pseudo Code Begin Do { Read money of each customer Calculate the discount follow by each condition Show the payment before discount, discount, total payment after discount Read character ‘Y’ for continue read money of the other customers (loop) } while (latter != ‘N’) End
Flowchart for loop START True discount=money*(2/100) False True money, total_payment [] =0 discount, latter, count, i money True (money >= 1,000)&& (money <= 1,500) discount=money*(2/100) False (money >= 1,501)&& (money <= 2,000) True discount=money*(5/100) False True (money >= 2,001)&& (money <= 5,000) discount=money*(12/100) False True (money >= 10,001 discount=money*(25/100) False Detail latter for loop True False latter != ‘N’ Total_payment[] END
Show money of each member (for-loop) i = 0 False i < count True total_payment[i] i++ END
#include<stdio.h> float money , discount , total_payment[ ]; char latter ; int count = 0, i; int main() { //prompt to describe the detail of program printf(" ***This is a program for calculate discount of construction store***\n"); do { // read input money from user printf("Please enter your money : \n"); scanf("%f",& money); while (money < 1) //check for the right number ? printf("Error, you are enter the wrong number!!"); printf("Please enter your money again : \n"); scanf( “ %f”, & money); } // process for each condition if((money >=1 )&& (money < 1000)) printf(“No any discount for this member\n!!"); else if((money >=1 000)&& (money <=1500)) discount = money *(2/100);
else if((money >= 1501) && (money <=2000)) discount = money *(5/100); else if((money >=2001) && (money <=5000)) discount = money *(12/100); else if((money >=5001) && (money <=10000)) discount = money *(15/100); else if(money >10000) discount = money *(25/100); //keep the data for show every member and show the detail of each member total_payment [ count] = discount ; count++; // count for for-loop printf("You r payment before discount is : %.2f\n", money); printf("You r discount is : %.2f \n", discount ); printf("You r payment after discount is : %.2f \n", money - discount ); //read character for end while-loop printf(“ Please enter the character ‘y' for continue 'or 'n' for end the program : "); scanf("%c", &latter); } while( latter != ‘n’ || latter != ‘ N’ ); //check for the condition of while-loop
for( i = 0; i< conunt ; i++) // show all of members bonus printf(“The total payment after discount of member [ i ] is : %.2f \n", money_1 [ i ] ); printf("End of program"); return 0; }
Example 4 Example: ณ ศูนย์บริการไฟฟ้าแห่งหนึ่งต้องการโปรแกรมที่ใช้คำนวณค่า ไฟฟ้าของผู้ใช้งานแต่ละราย ซึ่งโปรแกรมจะทำการวนรับจำนวนหน่วยไฟที่ ใช้ทั้งหมดแต่ละราย โดยจะรับข้อมูลเป็นจำนวนกำลังงานไฟฟ้าที่ใช้ไป (มี หน่วยเป็นยูนิต) ซึ่งมีข้อกำหนดว่ากำลังไฟฟ้าที่รับเข้ามาจะไม่เกิน 2000 ยู นิต โปรแกรมจะจบการทำงานเมื่อผู้ใช้ป้อนอักขระ ‘N’ แล้วนำมาคำนวณค่า ไฟฟ้าในอัตราก้าวหน้าดังนี้ ถ้ากำลังไฟที่ใช้อยู่ในช่วง 0 – 100 ยูนิต คิดค่าไฟฟ้า ยูนิตละ 4.00 บาท ถ้ากำลังไฟที่ใช้อยู่ในช่วง 101 – 500 ยูนิต คิดค่าไฟฟ้าที่เกินมา ยูนิตละ 4.50 บาท ถ้ากำลังไฟที่ใช้อยู่ในช่วง 501 – 1000 ยูนิต คิดค่าไฟฟ้าที่เกินมา ยูนิตละ 5.00 บาท 1001 ยูนิตขึ้นไป คิดค่าไฟฟ้าที่เกินมา ยูนิตละ 6.00 บาท จงวิเคราะห์โปรแกรม เขียนขั้นตอนการทำงานอย่างละเอียด เขียนรหัสเทียม เขียนผังงาน โปรแกรมภาษาซี โดยรับจำนวนหน่วยไฟที่ใช้ทั้งหมดแต่ละราย และเมื่อเสร็จสิ้นการทำงานจะคำนวณค่าใช้จ่ายสำหรับสมาชิกแต่ละราย
Example 4 (cont.) ตัวอย่าง Please enter the used electrical power : 1400 Payment detail : 1000 unit up ==> 400 * 6.00 = 2400฿ 501 – 1000 unit ==> 500 * 5.00 = 2500฿ 101 – 500 unit ==> 400 * 4.50 = 1800฿ 0 – 100 unit ==> 100 * 4.00 = 400฿ Total payment : 7100฿
Problem Analysis Output Analysis จำนวนหน่วยกำลังไฟฟ้าที่ใช้และค่าไฟฟ้าในอัตราก้าวหน้า Input Analysis หน่วยไฟที่ผู้ใช้ใช้งานต่อเดือน Process Analysis โปรแกรมทำการรับค่าหน่วยไฟที่ผู้ใช้ใช้งานแต่ละรายต่อเดือนเข้ามา เช็คว่ากำลังไฟฟ้าที่รับเข้ามาจะไม่เกิน 2000 ยูนิต พร้อมทั้งคำนวณค่าไฟฟ้าในอัตราก้าวหน้าของผู้ใช้แต่ละราย จากนั้นแสดงยอดเงินที่ต้องจ่าย โปรแกรมจะทำการวนรับค่ากำลังไฟฟ้าที่ใช้ต่อเดือนของผู้ใช้คนถัดไปหากผู้ใช้กด ‘Y’ และโปรแกรมจะสิ้นสุดการทำงานหากผู้ใช้งานโปรแกรมกด ‘N’
Problem Analysis (cont.) Variable Define Unit เป็นตัวแปรชนิดจำนวนเต็มเพื่อเก็บกำลังไฟฟ้าที่ใช้ของผู้ใช้แต่ละราย val เป็นตัวแปรชนิดจำนวนเต็มใช้เก็บจำนวนกำลังไฟฟ้าที่จะต้องคำนวณใน แต่ละเงื่อนไขตามการคำนวณอัตราก้าวหน้า payment เป็นตัวแปรชนิดทศนิยมเพื่อเก็บค่าใช้จ่ายชั่วคราวในแต่ละเงือนไข totalPayment เป็นตัวแปรชนิดทศนิยมค่าใช้จ่ายทั้งหมดที่จะต้องแจ้งแก่ผู้ใช้
Process เริ่มต้นทำงาน ทำการรับค่าจำนวนหน่วยกำลังไฟฟ้าที่ใช้ของผู้ใช้แต่ละราย เช็คว่าการป้อนจำนวนหน่วยไฟว่าถูกต้องหรือไม่ ถ้าถูกต้องคำนวณรายจ่ายตามเงื่อนไขของยอดเงินซื้อสินค้าที่กำหนด แสดงหน่วยกำลังงานไฟฟ้าที่ใช้และเงินยอดค่าใช้จ่ายให้ผู้ใช้แต่ละรายนั้นทราบ ทำการวนรับค่ากำลังงานไฟฟ้าที่ใช้ของผู้ใช้รายถัดไป ถ้าผู้ใช้โปรแกรมกด ‘Y’ และจบการทำงานหากผู้ใช้โปรแกรมกด ‘N’ จบการทำงาน
Pseudo Code Begin Do { Read electrical power (unit) and check the criterion (!> 2,000 unit) Calculate the discount follow by each condition Show the payment before discount, discount, total payment after discount Read character ‘Y’ for continue read money of the other customers (loop) } while (latter != ‘N’) End
Unit, totalPayment,payment,val totalPayment += payment Flowchart START C Unit, totalPayment,payment,val Get Unit Unit > 2,000 || Unit < 0 Y Unit > 1,000 Y val = Unit – 1000 payment = val * 6.00 totalPayment += payment “Show 1000 unit up” A
totalPayment += payment TotalPayment += payment Flowchart (cont.) Unit > 500 val = Unit – 500 payment = val * 5.00 totalPayment += payment Show “501 - 1000” A Unit > 100 val = Unit – 100 payment = val * 4.50 TotalPayment += payment Show “101 - 500” B val = Unit payment = val * 4.00 Show “0 – 100” Show totaPayment Getch == 'N' C Y N END
Coding //check unit is more than 2000 unit? while(unit > 2000) { printf("Information not correct, please input angin :"); scanf("%d",&unit); } printf("Payment detail : \n"); //Calulate 1000 up val = 0; payment = 0.0; if(unit > 1000) val = unit - 1000; payment = val * 6.00; unit = unit - val; totalplayment += payment; printf(" 1000 unit up => %d * 6.00 = %.02f฿\n",val,payment); //Calulate 501 - 1000 Coding #include <stdio.h> #include <conio.h> int main() { //declaration of variable float payment, totalPlayment; int Unit, val; //begin do-while loop do //initial variables val = 0; Unit = 0; payment = 0.0; totalPlayment = 0.0; //get electrical power printf("\n Please enter the used electrical power : "); scanf("%d",&Unit);
Coding (cont.) //check unit is more than 2000 unit? while(Unit > 2000) { printf("Information not correct, please input again :"); scanf("%d",&Unit); } //prompt to user for payment detail printf("Payment detail : \n"); //variables declaration for calculate 1000 up val = 0; payment = 0.0; //continue
Coding (cont.) if(Unit > 1000) { val = Unit - 1000; payment = val * 6.00; Unit = Unit - val; totalPlayment += payment; } printf(" 1000 unit up ==> %d * 6.00 = %.02f ฿\n",val, payment); // variables declaration for calculate 501 - 1000 val = 0; payment = 0.0; if(Unit > 500) val = Unit - 500; payment = val * 5.00; printf(" 501 - 1000 ==> %d * 5.00 = %.02f฿\n",val, payment);
Coding (cont.) // variables declaration for calculate 101 - 500 val = 0; payment = 0.0; if(Unit > 100) { val = Unit - 100; payment = val * 4.50; Unit = Unit - val; totalPlayment += payment; } printf(" 101 - 500 ==> %d * 4.50 = %.02f฿\n",val, payment); // variables declaration for calculate 0 - 100 val = Unit; payment = val * 4.00;
Coding (cont.) totalPlayment += payment; printf(" 0 - 100 ==> %d * 4.00 = %.02f฿\n",val,payment); printf("Total payment %.02f ฿\n",totalPlayment); printf(“Do you want to process again [Y/N] : "); }while(getche () != 'N' || getche () != ‘n' ); //check for the condition of while-loop return 0; }
จงเขียนโปรแกรมเพื่อคำนวณเกรดเฉลี่ย (GPA) ของนิสิตวิศวกรรมไฟฟ้าชั้นปีที่ 1 ในภาคการศึกษาแรก โดยมีรายละเอียดของวิชาเรียนดังต่อไปนี้ 1. กำหนดให้รายวิชาที่ลงทะเบียน • วิชาฟิสิกส์ (Physics) 3 หน่วยกิต • วิชาแคลคูลัส (Calculus) 3 หน่วยกิต • วิชาเคมี (Chemistry) 3 หน่วยกิต • วิชาการเขียนโปรแกรมคอมพิวเตอร์เบื้องต้น (C Programming) 4 หน่วยกิต • วิชาพฤติกรรมมนุษย์ (Human Behavior) 1 หน่วยกิต 2. เกณฑ์การคิดคะแนนในแต่ละรายวิชา • A = 4.00 • B+= 3.50 • B = 3.00 • C+= 2.50 • C = 2.00 • D+ = 1.50 • D = 1.50 • F = 0.00 โปรแกรมจะทำการรับค่าของจำนวนนิสิตทั้งหมดที่ลงทะเบียนจากเจ้าหน้าที่กองบริการการศึกษา จากนั้นจะทำการคิดเกรดของนิสิตทั้งหมด โปรแกรมจะแสดงเกรดเฉลี่ยสำหรับเทอมแรกของนิสิตทุกคนออกสู่หน้าจอ (5 คะแนน)
จงเขียนโปรแกรมสำหรับเก็บประวัติการศึกษาของนิสิต (Student Profile) วิศวกรรมไฟฟ้าชั้นปีที่ 1 โดยกำหนดให้รายละเอียดของที่นิสิตแต่ละคนที่จะต้องจัดเก็บมีดังต่อไปนี้ • รหัสนิสิต (ID Code) --> (รหัสนิสิต 9 หลัก) • ชื่อ (Name) • สกุล (Last_name) • เพศ (Sex) --> (m : male, f : female) • ชั้นปี--> (1, 2, 3, 4) • เกรดเฉลี่ย (GPA)-->ป้อนโดยเจ้าหน้าที่กองบริการการศึกษา • อายุ (Age)--> (17, 18, 19, 20, …..) • ที่อยู่ (Address)-->(เลขที่ 19 หมู่ 2 ต. แม่กา อ. เมือง จ. พะเยา รหัสไปรษณีย์ 56000) โปรแกรมจะทำการรับจำนวนประวัติการศึกษาของนิสิต (Student Profile) วิศวกรรมไฟฟ้าชั้นปีที่ 1 ทั้งหมดที่จะบันทึกจากเจ้าหน้าที่กองบริการการศึกษา จากนั้นจะวนทำการบันทึกค่าจนครบจำนวนที่ป้อนเข้ามา เมื่อเสร็จสิ้นการบันทึกจะแสดงผลของการจัดเก็บข้อมูลของนิสิตทั้งหมดออกสู่หน้าจอ (5 คะแนน)
ตัวอย่างการรับข้อความ Please enter your ID Code : 55103026 Please enter your name : Aphisit Please enter your last name : Wongkeaw Please enter your sex : m Please enter the year : 1 Please enter your GPA : 3.25 Please enter your age : 19 Please enter your address : 19 Moo. 2, University of Phayao, Meaka Subdistrict, Maung District, Phayao Province, 56000
ใช้โปรแกรมที่ได้จากข้อ 1 และ 2 เพื่อทำการจัดเก็บประวัติการศึกษาของนิสิต (Student Profile) วิศวกรรมไฟฟ้าชั้นปีที่ 1 ให้สมบูรณ์ โดยกำหนดให้ดำเนินการดังนี้ดังนี้ (5 คะแนน) ภายในฟังก์ชันหลักให้ทำการรับ รหัสนิสิต ชื่อ-สกุล เพศ ชั้นปี อายุ และที่อยู่ ส่วน GPA กำหนดให้ฟังก์ชันหลักต้องเรียกใช้ฟังก์ชันในการคำนวนเกรดเฉลี่ย (Cal_GPA_Function) และส่งค่ากลับมาให้กับฟังก์ชันหลักอีกที ปรับแก้โปรแกรมจากข้อที่ 2 โดยสร้างฟังก์ชันในการแสดงผล (Show_Detial_Function) ที่ถูกเรียกใช้งานโดยฟังก์ชันหลัก ซึ่งผลลัพธ์ของการแสดงผลจากฟังก์ชันดังกล่าวสำหรับนิสิตแต่ละคนแสดงดังตัวอย่างด้านล่าง
ตัวอย่างการแสดงผล ID Code : 55103026 Mr ตัวอย่างการแสดงผล ID Code : 55103026 Mr. Aphisit Wongkeaw Sex : m Year : 1 GPA : 3.25 Age : 19 Address : 19 Moo. 2, University of Phayao, Meaka Subdistrict, Maung District, Phayao Province, 56000