กลุ่��ม 4
การเขี�ยนคำ�าสั่��งคำวบคำ�มแบบวนซ้ำ��า
สั่มาชิ�ก
1) นายธนภั�ทร เหลื องร�ตน�วั�ฒนะ เลืขท��10
2) น.ส.จาร�ภัา พรหมมงคลื เลืขท�� 28
3) น.ส.จ�ฑามาศ อ�ครเดชพงศา เลืขท�� 29
4) น.ส.หท�ยชนก ห#วัยหงส�ทอง เลืขท�� 32
5) น.ส.ศ$ร$วัรรณ พงศโอสธ� เลืขท�� 33
6) น.ส.ส$ร$กาญจน� พานะก$จ เลืขท�� 34
7) น.ส.ส�ดาร�ตน� ก(าจรก$ตต$ค�ณ เลืขท�� 35
ช�)นม�ธยมศ*กษาปี-ท�� 6/2
โรงเร�ยนเฉลื$มพระเก�ยรต$สมเด/จพระศร�นคร$นทร�
กาญจนบุ�ร�
การเขี�ยนคำ�าสั่��งคำวบคำ�มแบบวนซ้ำ��า
หั�วขี�อ
1. เทคน$คการเข�ยนน$พจน�คณ$ตศาสตร�2. ค(าส��งควับุค�มวันซ้ำ()าแบุบุ for
3. ค(าส��งควับุค�มวันซ้ำ()าแบุบุ while
4. กรณ�ศ*กษา การใช#ค(าส��งควับุค�มวันซ้ำ()า
จุ�ดประสั่งคำ"
1. วั$เคราะห�น$พจน�คณ$ตศาสตร�ในร4ปีแบุบุย5อตามท��ก(าหนดให# แลื#วัเข�ยนผลืลื�พธ�ได#
2. เข�ยนน$พจน�คณ$ตศาสตร�ในร4ปีแบุบุย5อตามท��ก(าหนดให#3. วั$เคราะห�โปีรแกรมท��ใช#ค(าส��งควับุค�มวันซ้ำ()าแบุบุค(าส��ง for , while ,
do-while แลื#วัเข�ยนผลืการท(างานได#4. วั$เคราะห�โปีรแกรมท��ใช#ค(าส��งควับุค�มวันซ้ำ()าแบุบุค(าส��ง for , while ,
do-while แลื#วัเข�ยนข#อผ$ดพลืาดได#5. วั$เคราะห�ข#อผ$ดพลืาดโปีรแกรมท��ใช#ค(าส��งควับุค�มวันซ้ำ()าแบุบุค(าส��ง for
, while , do-while แลื#วั แก#ไขให#ถู4กต#องได#
1. เทคำน�คำการเขี�ยนน�พจุน"คำณิ�ตศาสั่ตร"
จากบุทท��ผ5านมาได#แนะน(าการเข�ยนสมการค(านวัณ ลื�กษณะน$พจน�คณ$ตศาสตร�โดยใช#ส�ญลื�กษณ�ต�วัด(าเน$นงานท��ม�ให#เลื อกใช#งานได#หลืากหลืายร4ปีแบุบุ ส(าหร�บุในหน5วัยเร�ยนน�)ม�ข#อเสนอแนะเพ$�มเต$ม ด#านเทคน$ควั$ธ�เข�ยนน$พจน� แลืะใช#ต�วัด(าเน$นการอ�กร4ปีแบุบุเพ �อเข�ยนน$พจน�แบุบุย5อด�งน�)
1.1 ต�วด�าเน�นการเพ��มคำ�า (Increment Operator)
ภัาษาซ้ำ�ม�ส�ญลื�กษณ� ด�งน�)
ตาราง 4.1 ส�ญลื�กษณ�ต�วัด(าเน$นการเพ$�มค5า
ต�วด�าเน�นการ ศ�พท"เฉพาะ คำวามหัมาย++ increment เพ$�มค5าอ�ก
1
ต�วอย�างคำ�าสั่��ง เข�ยนน$พจน�โดยใช#ต�วัด(าเน$นการเพ$�มค5า อย45ต(าแหน5งหลื�งต�วัแปีรท��ก(าหนดให# b=3 ;
อธิ�บาย 1.เปีร�ยบุได#ก�บุการเข�ยนค(าส��ง 2 บุรรท�ดค อ a = b ; (
หมายถู*ง a = 3)
b = b + 1 ; ( หมายถู*ง b =
3 + 1)
2.ค(าตอบุค อ a เก/บุค5า 3 ส5วัน b เก/บุค5า 4
ต�วอย�างคำ�าสั่��ง เข�ยนน$พจน�โดยใช#ต�วัด(าเน$นการเพ$�มค5า อย45ต(าแหน5งหน#าต�วัแปีรท��ก(าหนดให# b=3 ;
a=b++
อธิ�บาย 1. เปีร�ยบุได#ก�บุการเข�ยนค(าส��ง 2 บุรรท�ดค อ
b = b + 1 ; ( หมายถู*ง b = 3 + 1)
a = b ; ( หมายถู*ง a = 4 )
2.ค(าตอบุค อ a เก/บุค5า 4 ส5วัน b เก/บุค5า 4
1.2 ต�วด�าเน�นการลุ่ดคำ�า ( decrement operator )
ภัาษาซ้ำ�ม�ส�ญลื�กษณ� ด�งน�)ตาราง 4.2 ส�ญลื�กษณ�ต�วัด(าเน$นการลืดค5า
ต�วด�าเน�นการ ศ�พท"เฉพาะ คำวามหัมาย-- decrement ลืดค5าอ�ก 1
ต�วอย�างคำ�าสั่��ง เข�ยนน$พจน�โดยใช#ต�วัการด(าเน$นการลืดค5าอย45ต(าแหน5งหลื�งต�วัแปีร ก(าหนดให# b = 3
อธิ�บาย 1. เปีร�ยบุได#ก�บุการเข�ยนค(าส��ง 2 บุรรท�ดค อ
a = b ; ( หมายถู*ง a = 3)
b = b - 1 ; ( หมายถู*ง b = 3 - 1)
2.ค(าตอบุค อ a เก/บุค5า 3 ส5วัน b เก/บุค5า 2
ต�วอย�างคำ�าสั่��ง เข�ยนน$พจน�โดยใช#ต�วัการด(าเน$นการลืดค5าอย45ต(าแหน5งหน#าต�วัแปีร
a = b- - ;
a = - - b ;
อธิ�บาย 1. เปีร�ยบุได#ก�บุการเข�ยนค(าส��ง 2 บุรรท�ดค อ
b = b - 1 ; ( หมายถู*ง b = 3 - 1)
a = b ; ( หมายถู*ง a = 2 )
2. ค(าตอบุค อ a เก/บุค5า 2 ส5วัน b เก/บุค5า 2
1.3 ต�วด�าเน�นการก�าหันดคำ�า (compound
assignment operators)
ภัาษาซ้ำ�ม�ส�ญลื�กษณ�ด�งน�)
ตารางท�� 4.3 ส�ญลื�กษณ�ต�วัด(าเน$นการก(าหนดค5า
สั่�ญลุ่�กษณิ" (symbol)
ต�วด�าเน�นการ (operators)
ต�วอย�าง
= Assignment a=b+= Addition a+=b หมายถู*ง
(a=a+b)-= Subtraction a-=b หมายถู*ง
(a=a-b)*= Multiplication a*=b หมายถู*ง
(a=a*b)/= Division a/=b หมายถู*ง
(a=a/b)%= Remainder a%=b หมายถู*ง
(a=a%b)&= bitwise AND a&=b หมายถู*ง
(a=a&b)|= bitwise
Inclusive ORa|=b หมายถู*ง
(a=a|b)
^= bitwise exclusive OR
a^=b หมายถู*ง (a=a^b)
<<= right shift a<<2 หมายถู*ง (a=a<<2)
>>= left shift a>>3 หมายถู*ง (a=a>>3)
1.4 ประสั่�ทธิ�ภาพพจุน"แบบย�อ
ต�วัอย5างต5อไปีน�)แสดงให#เห/นวั5า การเข�ยนน$พจน�แบุบุย5อสามารถูให#ปีระส$ทธ$ภัาพการท(างานเท�ยบุเท5าก�บุการเข�ยนน$พจน�แบุบุยาวั
ต�วัอย5างโปีรแกรมท�� 4.1 แสดงปีระส$ทธ$ภัาพน$พจน�ท�ใช#ต�วัด(าเน$นการก(าหนดค5า#include <stdio .h>
/* project_loop//operatorl.c */main ( ){int a = 2 , = 4 ;printf ( “---------------------- \n\n ”) ;printf ( “ * operator *\n ”) ;printf ( “---------------------- \n\n”) ;printf ( a = -> %d \n “ , a ) ;
printf ( “ a = a + 1 -> %d \n\n ” , a ) ;printf (“ b = -> %d \n “ , b ) ;
b + = 1 ;
printf ( “ b + = 1 -> %d \n ” , b ) ;printf ( “---------------------- \n\n ”) ;}
a = a + 1 ;
---------------------------------------------------------------------- * Operator *---------------------------------------------------------------------- a = --> 2 a = a+1 --> 3 b = --> 4 b + = 1 --> 5--------------------------------------------------------------------
ร4ปีท�� 4.1 ผลืทดสอบุโปีรแกรมต�วัอย5างท�� 4.1
อธิ�บาย แสดงให#เห/นวั5าการเข�ยนน$พจน� a = a + 1 ; ก�บุ a + = 1 ;
ย5อมได#ผลืเหม อนก�น
ต�วอย�างโปรแกรมท�� 4.2 แสดงปีระส$ทธ$ภัาพน$พจน�ท��ใช#ต�วัด(าเน$นการเพ$�มค5า
#include <stdio .h>/* project_loop//operatorl.c */main ( ){int a = 2 , = 4 ;printf ( “---------------------- \n\n ”) ;printf ( “ * operator *\n ”) ;printf ( “---------------------- \n\n”) ;printf ( a = -> %d \n “ , a ) ;printf (“ b = -> %d \n “ , b ) ;printf (“ \n “) ;
printf (“ a = b + + \n “) ;printf ( “ a = %d \n ” , a ) ;printf ( “ b = %d \n ” , b ) ;printf (“ \n “) ;
printf (“ b = + + a \n “) ;printf ( “ a = %d \n ” , a ) ;printf ( “ b = %d \n ” , b ) ;printf ( “-------------------------------- \n\n ”) ;}
a = b ++ ;
b = ++a ;
---------------------------------------------------------------------- * Operator *---------------------------------------------------------------------- a = --> 2 b = --> 4 a = b ++ a = 4 b = 5
b = a ++
ร/ปท�� 4.2 ผลืการทดสอบุโปีรแกรมต�วัอย5างท�� 4.2
อธิ�บาย ค(าส��ง a = b ++ ; เปีร�ยบุได#ก�บุการเข�ยนค(าส��ง 2
บุรรท�ดด�งน�)a = b ; (น(าค5า b ไปีไวั#ในหน5วัยควัามจ(า a ด�งน�)น a
= 4)
a = b + 1 ; (น(าค5า 4 + 1 ค อ 5 ไปีไวั#ในหน5วัยควัามจ(า b ด�งน�)น b = 5)
อธิ�บาย ค(าส��ง b = ++ a ; ค อa = a + 1 ; ( ปี:จจ�บุ�น a ม�ค5า 4 จ*งน(าค5า 4 + 1 ด�ง
น�)น a = 5 )
a = b + 1 ; (น(าค5า a ไปีไวั#ในหน5วัยควัามจ(า b ด�งน�)น a
= 5 )
1.5 น�พจุน"ก�บการแปลุ่งชิน�ดขี�อม/ลุ่ โดยท��วัไปี ผลืการค(านวัณจากน$พจน�ระบุบุจะวั$เคราะห�แลืะเปีลื��ยนค5าให# โดยย*ดเกณฑ�เปีลื��ยนค5าไปีขอบุเขตข#อม4ลืท��ใหญ5กวั5า เร�ยกวั5าเปีลื��ยนค5าแบุบุ
---------------------------------------------------------------------- * Operator *---------------------------------------------------------------------- a = --> 2 b = --> 4 a = b ++ a = 4 b = 5
b = a ++
implicit type conversion
กรณ�ท��ต#องการเปีลื��ยนแปีลืงผลืการค(านวัณจากน$พจน�ไปีให#ชน$ดข#อม4ลืท��ต#องการ ต#องเข�ยนค(าส��งเพ$�มเต$มในน$พจน� เร�ยกวั5าการเปีลื��ยนแปีลืงค5าแบุบุ explicit type conversion
ต�วัอย5างโปีรแกรมท�� 4.3 แสดงปีระส$ทธ$ภัาพน$พจน�แปีลืงชน$ดข#อม4ลื
#include < stdio . h >/ * file name job6 */main ( )
{
Const char line [ 40 ] = “______________________________” ;printf ( “ % s \n\n “ , line) ;printf ( “ * Implicit type conversion * \n “) ;printf ( “ % s \n\n “ , line) ;
printf ( “ 10 + 3.17 = % . 2f \n\n “ , result1) ;printf ( “ % s \n\n “ , line) ;printf ( “ * Explict type conversion * \n “) ;printf ( “ % s \n\n “ , line) ;
printf ( “(int) (10 + 3.17 ) = % . 2d \n “ , result2 ) ;printf ( “ % s \n\n “ , line) ;}
Int value1 = 10 , result2 ; float value 2 = 3.17 , result ;
result 1 = value1 + value2 ;
result 2 = (int) ( value1 + value2 ) ;
-----------------------------------------------------------------------------------* Implicit type conversion * ----------------------------------------------------------------------------------10 + 3.17 =13.1710 / 3 = 3.00----------------------------------------------------------------------------------* Explict type conversion *<int > <10 + 3.17 > = 13----------------------------------------------------------------------------------Press any key to continue
ร/ปท�� 4.3 ผลืทดสอบุโปีรแกรมต�วัอย5าง ท� 4.3
อธิ�บาย
1. จากค(าส��งน$พจน� result 1 = value1 + value 2 ;
ระบุบุจะน(าค5า 10 + 3.17 ได# 13.17 แลื#วัเก/บุในหน5วัยควัามจ(า result 1 การแปีลืงชน$ดข#อม4ลื ระบุบุจะวั$เคราะห�แลืะเปีลื��ยนแปีลืงค5าให#อ�ตโนม�ต$ โดยย*ดเกณฑ�เปีลื��ยนค5าขอบุเขตข#อม4ลืท��ใหญ5กวั5า ด�งน�)นจ*งเปี;นทศน$ยม เพราะขอบุเขตกวั#างกวั5าจ(านวันเต/ม
2.จากค(าส��งน$พจน� result 1 = value / 3 ;
ระบุบุจะวั$เคราะห�แลืะเปีลื��ยนค5าให# โดยย*ดลื�กษณะเคร �องหมายน��นค อ หากจ(านวันใดก/ตามใช#เคร �องหมาย / แลืะส��งแสดงผลืด#วัยส�ญลื�กษณ�ควับุค�ม % .2f เคร �องหมายจะเปีลื��ยนเปี;นชน$ดทศน$ยม
3. จากค(าส��งน$พจน� result 2 = (int) ( value1 +
value2 ) ;
ระบุบุจะน(าค5า 10 + 3.17 ได# 13.17 แลื#วัถู4กค(าส��ง int ()
แปีลืงเปี;นจ(านวันเต/ม จ*งเก/บุค5า 13 ในหน5วัยควัามจ(า result 1
2. คำ�าสั่��งคำวบคำ�มวนซ้ำ��าแบบ for
ประสั่�ทธิ�ภาพคำ�าสั่��ง : ควับุค�มการท(างานวันซ้ำ()า ลื�กษณะท��ต#องแจ#งจ(านวันรอบุการท(างาน อาจปี<อนจ(านวันผ5านทางแปี<นพ$มพ�จ�ดเก/บุลืงต�วัแปีร หร อเข�ยนค(าส��งก(าหนดรอบุการท(างานคงท��ในโปีรแกรม ด�งน�)นในส5วันของค(าส��งต#องการค5า 3 ค5า ค อ ค5าเร$�มต#นน�บุรอบุ ค5าส$)นส�ดรอบุ แลืะอ�ตราเพ$�มแต5ลืะรอบุ
ข#อควัรจ(า : ต�วัแปีรท��ใช#ในค(าส��ง for ต#องเปี;นต�วัแปีรปีระเภัทจ(านนเต/มเท5าน�)น
2.1 ร/ปแบบคำ�าสั่��งแลุ่ะแนวทางการเขี�ยนผั�งงานคำ�าสั่��ง for
ร/ปแบบ การใช#ค(าส��ง for
ข#อควัรจ(า : กรณ�ม� 1 ค(าส��งในกระบุวันการวันซ้ำ()าไม5ต#อง {} ก�)นขอบุเขต
ร4ปีผ�งงานท�� 4.1 แนวัทางการเข�ยนผ�งงานค(าส��ง for
2.2 แนวทางการใชิ�คำ�าสั่��ง for กรณิ�ก�าหันดการวนซ้ำ��าเป2นคำ�าคำงท��
ว�ตถุ�ประสั่งคำ" จงเข�ยนงานวันซ้ำ()าจ(านวัน 5 รอบุ เพ �อปี<อนช �อน�กเร�ยนแต5ลืะรอบุให#ระบุบุพ$มพ�ลื(าด�บุรอบุอ�ตโนม�ต$ด#วัย
For ( ต�วัแปีร = ค5าเร$�มต#น ; น$พจน�ตรรกะ ; ค5าเพ$�มหร อค5าลืด ){
statemmnt ( s ) ;
}
ต�วอย�างโปรแกรมท�� 4.4 โปีรแกรมระบุบุงานใช#ค(าส��งควับุค�มการวันซ้ำ()า ด#วัยค(าส��ง for ก(าหนดรอบุการวันซ้ำ()าคงท��
ร4ปีท�� 4.4 ผลืทดสอบุโปีรแกรมต�วัอย5างท�� 4.4
อธิ�บาย 1. โปีรแกรมวันซ้ำ()าคงท��จ(านวัน 5 รอบุ จากการเข�ยนค(าส��งก(าหนดในโปีรแกรม
2. ลื(าด�บุท��แสดงอ�ตโนม�ต$ ใช#ปีระโยชน�จากค5า n ท��เพ$�มค5ารอบุลืะ 1
3. หากค5า n มากกวั5า 6 จะออกจากการวันซ้ำ()าไปีท(างานค(าส��งหลืงปี-กกาปี=ด
4. กระบุวันการด(าเนอนงานวันซ้ำ()าอย45ภัายใต#เคร �องหมาย {} 1
#include < stdio . h>/* project_loop // ex_for1.cpp */main ( ){char name [ 30 ] ; int n ;printf (“ Report Data \n “ ) ;Printf ( “ **************************************** \n\n “) ;
Printf ( “ **************************************** \n “ ) ;printf ( “ \n end program …………..\n “ ) ;}
for ( n = 1 ; n < 6 ; n++ ) { printf (“ No. => %d “ , n ) ; printf ( “ Name is = > “ ) ; scanf ( “ %s “ , name ) ; }
Report Data****************************************************NO. => 1 Name is => ANANNO. => 2 Name is => SOMJITNO. => 3 Name is => UILAINO. => 4 Name is => RUNGNO. => 5 Name is => TEERA****************************************************
End program ………………………….Press any key to continue
ANANSOMJITUILAIRUNGTEERA
ผ4#ใช#ระบุบุงานปี<อนข#อม4ลืจ(านวัน 5 ราย เพราะควับุค�มกรท(างานด#วัย
For ( n =1 ; n < 6 ; n ++)
For ( n = 1 ; n < 6 ; n++){
Printf ( No . => %d , n ) ;
เท5าน�)น ระบุบุตรวัจสอบุระบุบุเง �อนไขการท(างานท�� for น��น ค อ n ม�ค5าเปี;น 1 แต5ไม5เก$น 6 แลืะเพ$�มค5าอ�ตโนม�ต$ n = n+1
2.3 แนวทางการใชิ�คำ�าสั่��ง for กรณิ�ก�าหันดการวนซ้ำ��าเป2นต�วแปร
ว�ตถุ�ประสั่งคำ" จงเข�ยนงานวันซ้ำ()า เพ �อปี<อนช �อน�กเร�ยน ให#ผ4#ใช#ระบุบุก(าหนดจ(านวันรอบุเอง แต5 ลืะรอบุให#ระบุบุพ$มพ�ลื(าด�บุอ�ตโนม�ต$ด#วัย
ต�วัอย5างโปีรแกรมท�� 4.5 โปีรแกรมระบุบุงาน ใช#ค(าส��งควับุค�มวันซ้ำ()าด#วัย ค(าส��ง for ก(าหนดรอบุการวันซ้ำ()า โดยผ4#ใช#ระบุบุงาน
For ( n = 1 ; n < 6 ; n++){
Printf ( No . => %d , n ) ;
#include < stdio .h >/* project_loop // ex_for2_1.cpp */main ( ){char name [ 30 ] ;
int midterm , final ,score , n ,num ;printf ( “ key loop => “) ; scanf ( “%d” , & num) ;printf ( “ \n Report Score \n “ ) ;printf ( “ ***************************************** \n\n “ ) ;
Printf ( “ **************************************** \n “ ) ;printf ( “ \n end program …………..\n “ ) ;}
For ( n = 1 ; n <= num ; n++) { printf ( “ No. => %d “ , n) printf ( “ Name is => “ ) ; scanf ( “ %s” , name) ; }
Key loop => 3
Report Score****************************************************NO. => 1 Name is => ANANNO. => 2 Name is => SOMJITNO. => 3 Name is => UILAI
ผ4#ใช#ระบุบุงานระบุ�จ(านวันรอบุ
3
ร/ปท�� 4.5 ผลืกาทดสอบุโปีรแกรมต�วัอย5างท�� 4.5
อธิ�บาย 1. โปีรแกรมน�)ให#ผ4#ใช#ระบุบุงานปี<อนจ(านวันน�กเร�ยนหร อรอบุท(างาน
2. จากต�วัอย5างปี<อน 3 จ*งวันซ้ำ()าร�บุช �อน�กเร�ยน 3 ราย3. การเข�ยนค(าส��งควับุค�มการวันซ้ำ()าจากต�วัอย5างค อ
3. การคำวบคำ�มคำ�าสั่��งแบบวนซ้ำ��า while
ประสั่�ทธิ�ภาพคำ�าสั่��ง : ควับุค�มการท(างานวันซ้ำ()า กรณ�ระบุบุงานม�ลื�กษณะตรวัจสอบุเง �อนไข ก5อนเข#าส45ส5วันลื(าด�บุงานค(าส��งท��ก(าหนดไวั# การเข�ยนค(าส��ง while ต#องก(าหนดน$พจน�แบุบุตรรกะเปี;นเง �อนไขให#ระบุบุตรวัจสอบุวั5าเง �อนไขม�ค5าในหน5วัยควัามจ(าเปี;น 1 (ค5าจร$ง) หร อค5าท��ได#เปี;น 0 (ค5าเท/จ) กรณ�ค5าน$พจน�ตรรกะเปี;นจร$ง จ*งวันซ้ำ()ากลื�5มค(าส��งภัายในส�ญลื�กษณ� {
} ต5อจาก while เม �อน$พจน�ตรรกะได#ค5าเปี;นเท/จจะด(าเน$นงานค(าส��งหลื�งเคร �องหมายปี-กกาปี=ด { } ของค(าส��ง while
ขี�อคำวรจุ�า > ค อภัายในการวันซ้ำ()าแต5ลืะรอบุ ต#องม�ค(าส��งท��ส5งผลืให#เก$ดการเปีลื��ยนแปีลืงน$พจน�ให#เปี;นเท/จ เพ �อออกจากการวันซ้ำ()าได#
Key loop => 3
Report Score****************************************************NO. => 1 Name is => ANANNO. => 2 Name is => SOMJITNO. => 3 Name is => UILAI
ผ4#ใช#ระบุบุงานปี<อนข#อม4ลื จ(านวันตามท��ระบุ�รอบุ เพราะควับุค�มการท(างานด#วัย for ( n = 1 ; n < num ; n++)
SOMKITLINDAKITTI
Printf ( “ key loop => “ ) ; scanf ( “ %d “ , num)for ( n =1 ; n <= num ; n++){ printf ( “ No. => %d “ , n) printf ( “ Name is => “ ) ; scanf ( “ %s” , name) ; }
3.1 ร/ปแบบคำ�าสั่��งแลุ่ะแนวทางการเขี�ยนผั�งงานคำ�าสั่��ง while
ร/ปแบบ การใชิ�คำ�าสั่��ง while
ขี�อคำวรจุ�า > กรณิ� 1 คำ�าสั่��ง ในกระบวนการวนซ้ำ��า ไม�ต�องม� { } ก��นขีอบเขีต
ร/ปผั�งงานท�� 4.2 แนวทางการเขี�ยนผั�งงานคำ�าสั่��ง while
3.2 แนวทางการใชิ�คำ�าสั่��ง while วนซ้ำ��า กรณิ�ท��ก�าหันดการวนซ้ำ��าเป2นคำ�าคำงท��
ว�ตถุ�ประสั่งคำ" จงเข�ยนงานเพ �อวันซ้ำ()า ให#ผ4#ใช#ระบุบุปี<อนคะแนนน�กเร�ยน 5 ราย แต5ลืะรอบุให#ระบุบุพ$มพ�ลื(าด�บุรอบุอ�ตโนม�ต$ด#วัย
ต�วอย�างโปรแกรม โปีรแกรมระบุบุงาน ควับุค�มการวันซ้ำ()าด#วัยค(าส��ง while วันซ้ำ()าร�บุคะแนนน�กเร�ยน 5 ราย (แต5ม�ข#อผ$ดพลืาด วันไม5ร4 #จบุ)
อธิ�บาย 1. โปีรแกรมน�)ม�ข#อผ$ดพลืาดค อวันซ้ำ()าไปีเร �อย ๆ มากกวั5า 5
รอบุ (ต#องกดแปี<น Ctrl-Break)
2. ข#อผ$ดพลืาดค อ ก(าหนดเง �อนไขวั5าให#โปีรแกรมน�)วันซ้ำ()าเร �อย ๆ ตราบุท�� n <= 5 แต5ไม5ม�ค(าส��ง เปีลื��ยนแปีลืงค5า n ด�งน�)น n จ*งม�ค5า 1
ตลือดไปี
3.โปีรแกรมท��ถู4กต#องแสดงในต�วัอย5างต5อไปี
ต�วอย�างโปรแกรม โปีรแกรมระบุบุงาน ควับุค�มการวันซ้ำ()าด#วัยค(าส��ง while วันซ้ำ()าร�บุคะแนนน�กเร�ยน 5 ราย (แก#ไขจากต�วัอย5างเก5า)
อธิ�บาย 1. หลื�งปีระโยคค(าส��ง while ต#องเข�ยนน$พจน�ตรรกะควับุค�มการวันซ้ำ()า เช5น while
( n <= 5 )
2. ต#องม�ค(าส��งเปีลื��ยนแปีลืงเง �อนไขให#เปี;นเท/จ เพ �ออกจาการวันซ้ำ()าเช5น ค(าส��ง n = n+1 ;เม �อค5า n > 5 ส5งผลืตรรกะในค(าส��ง while ( n
<= 5 ) เปี;นเท/จจ*งออกจากการวันซ้ำ()า
3. ด�งน�)น โปีรแกรมน�)ส5วันควับุค�มการวันซ้ำ()าค อ
ผัลุ่การทดสั่อบโปรแกรมต�วอย�าง
3.3 แนวทางการใชิ�คำ�าสั่��ง while วนซ้ำ��า กรณิ�ก�าหันดการวนซ้ำ��าเป2นต�วแปร
ว�ตถุ�ประสั่งคำ" จงเข�ยนงานเพ �อวันซ้ำ()า เพ �อปี<อนคะแนนน�กเร�ยนจ(านวัน n ราย ให#ผ4#ใช#ระบุบุระบุ�จ(านวันน�กเร�ยนด#วัยตนเอง แต5ลืะรอบุให#ระบุบุพ$มพ�ลื(าด�บุรอบุอ�ตโนม�ต$ด#วัย
ต�วอย�างโปรแกรม โปีรแกรมระบุ�งานควับุค�มการวันซ้ำ()าด#วัยค(าส��ง while ร�บุคะแนน น�กเร�ยน n ราย
ผัลุ่ทดสั่อบโปรแกรมต�วอย�าง
อธิ�บาย 1. ผ4#ใช#ควับุค�มรอบุวันซ้ำ()าด#วัยการระบุ�ทางแปี<นพ$มพ� เช5น 2
หมายถู*งวันซ้ำ()า 2 รอบุ
2. ต#องระม�ดระวั�งต�วัแปีรท��เก��ยวัข#องก�บุการควับุค�มจ(านวันรอบุ ต#องเปี;นกลื�5ม จ(านวันเต/ม ในท��น�)ค อ n ใช#เปี;นต�วัน�บุรอบุ แลืะใช#ตรวัจสอบุเปีร�ยบุเท�ยบุก�บุค5า num ท��เก/บุค5าจ(านวันรอบุไวั#
4. คำ�าสั่��งคำวบคำ�มวนซ้ำ��าแบบ do-while
ประสั่�ทธิ�ภาพคำ�าสั่��ง : ควับุค�มการวันซ้ำ()า ลื�กษณะการท(างาน 1 รอบุก5อน แลื#วัจ*งตรวัจสอบุน$พจน�ตรรกะท��ก(าหนดเปี;นเง �อนไขก5อนวันซ้ำ()าในรอบุต5อไปี ท�)งน�)หากค5าน$พจน�ตรรกะ เปี;นจร$ง จะวันซ้ำ()า แต5หากค5าน$พจน� เปี;นเท/จ จะไม5วันซ้ำ()า
ขี�อคำวรจุ�า > ค อ ต#องตรวัจสอบุงานโปีรแกรมวั5าได#เข�ยนค(าส��งงาน เพ �อใช#แปีรเปีลื��ยนน$พจน�ให#เปี;นเท/จหร อไม5 อย5างไรม$ฉะน�)นโปีรแกรมอาจวันไม5ร4 #จบุ
4.1 ร/ปแบบคำ�าสั่��งแลุ่ะแนวทางการเขี�ยนผั�งงานคำ�าสั่��ง do – while
ร/ปแบบ การใช#ค(าส��ง do – while
แนวทางการเขี�ยนผั�งงานคำ�าสั่��ง do – while
4.2 แนวทางการใชิ�คำ�าสั่��ง do – while วนซ้ำ��า กรณิ� ก�าหันดการวนซ้ำ��าเป2นคำ�าคำงท��
ว�ตถุ�ประสั่งคำ" จงเข�ยนงานวันซ้ำ()า ให#ผ4#ใช#ระบุบุปี<อนคะแนนน�กเร�ยน 5
ราย แต5ลืะรอบุให#เปี;นระบุบุพ$มพ�ลื(าด�บุอ�ตโนม�ต$
ต�วอย�างโปรแกรม โปีรแกรมระบุบุงาน ควับุค�มการวันซ้ำ()าด#วัยค(าส��ง do – while ร�บุคะแนนน�กเร�ยน 5 ราย
ผัลุ่ทดสั่อบโปรแกรม
อธิ�บาย 1. โปีรแกรมลื�กษณะน�)จะท(างานระบุบุงานใน { } ก5อนตรวัจสอบุเง �อนไขเสมอ
2. เม �อระบุบุท(างาน 1 รอบุ แลื#วัจ*งตรวัจสอบุเง �อนไข while (n
<= 5) เพ �อ วั$เคราะห�การวันซ้ำ()าหากตราบุใดเง �อนไข เปี;นจร$ง จะวันซ้ำ()า หากเง �อนไข เปี;นเท/จ n > 5 จะเลื$กวันซ้ำ()า
3. ค(าส��ง n++ : ค อค(าส��ง n = n + 1 : ใช5เปีลื��ยนแปีลืงค5า n
เพ �อให#ค5า n > 5
4. กระบุวันการวันซ้ำ()า อย45ภัายใต#เคร �องหมาย { } จากต�วัอย5างค อ
4.3 แนวทางการใชิ�คำ�าสั่��ง do – while วนซ้ำ��า กรณิ�ก�าหันดการวนซ้ำ��าเป2นต�วแปร
ว�ตถุ�ประสั่งคำ" จงเข�ยนงานวันซ้ำ()าปี<อนคะแนนน�กเร�ยน ให#ผ4#ใช#ระบุบุจ(านวันน�กเร�ยนด#วัยตนเองแต5ลืะรอบุให#ระบุบุพ$มพ�ลื(าด�บุรอบุอ�ตโนม�ต$
ต�วอย�างโปรแกรม โปีรแกรมระบุบุงานควับุค�มการวันซ้ำ()าด#วัยค(าส��ง do
– while เพ �อวัน ซ้ำ()าร�บุคะแนนน�กเร�ยน n ราย
ผัลุ่ทดสั่อบโปรแกรม
5.กรณิ�ศ5กษาการใชิ�คำ�าสั่��งคำวบคำ�มวนซ้ำ��า
5.1 กรณ�ศ*กษา ข� )นตอนการสร#างโปีรแกรม ควับุค�มการวันซ้ำ()าด#วัยค(าส��ง for
ค(าส��ง For น�)นจะเปี;นลื4ปีแบุบุ pretest loop ท��ใช#น$พจน� 3 น$พจน� น$พจน�แรกเปี;นการก(าหนดค5า น$พจน�ท�� 2 เปี;นเง �อนไขในการตรวัจสอบุต�วัควับุค�มลื4ปี แลืะส5วันท�� 3 เปี;นการปีร�บุปีร�งค5าของต�วัควับุค�มลื4ปี จะพบุวั5าในต�วัของค(าส��ง for สามารถูม�ค(าส��งได#เพ�ยงหน*�งค(าส��งเท5าน�)นจะต#องใช#ช�ดค(าส��งแบุบุ compound statement แลืะจะพบุอ�กวั5าค(าส��ง for น��นม�การท(างานเหม อน while แต5ค(าส��ง for น�)นจะรวัมการกระท(าท�)งสามอย5างไวั#ในบุรรท�ดเด�ยวัก�นเลืย การเปีร�ยบุเท�ยบุการเข�ยนโปีรแกรมโดยใช#ค(าส��ง for แลืะค(าส��ง while โดยโจทย�ม�อย45วั5าให#ร�บุต�วัเลืขทางค�ย�บุอร�ด 20 ต�วั แลื#วัน(าต�วัเลืขท�)งหมาดมารวัมก�น ซ้ำ*�งจากโปีรแกรมข#างต#นด#านลื5างจะเห/นได#วั5า ค(าส��ง for จะช5วัยให#ผ4#ใช#เข�ยนโปีรแกรมได#ส� )นลืง
โจุทย" จงเข�ยนโปีรแกรมให#ผ4#ใช#ระบุบุก(าหนดรอบุการทงานก5อนแลื#วัจ*งปี<อนช �อน�กเร�ยน คะแนนกลืางภัาค แสดงผลืรวัมคะแนน จ(านวัน n ราย ท�)งน�)ให#ระบุบุพ$มพ�ลื(าด�บุอ�ตโนม�ต$ เม �อส$)นส�ดจ(านวันน�กศ*กษาท��ระบุ�ให#พ$มพ�คะแนนเฉลื��ยของน�กเร�ยนกลื�5มน�)
ก(าหนดการแสดงผลื ด�งน�)key loop =>……………Report Score****************************No. => ……………name is => …………..midterm is => …………..Final is => ……………* Score = ……………***************************** *Average Score is = ………….*****************************
ขี��นตอนการสั่ร�างโปรแกรมประย�กต"งาน
1.การวั$เคราะห�ระบุบุงานเบุ )องต#น
1.1 ส$�งท��ต#องการค อ ผลืรวัมคะแนน คะแนนเฉลื��ย
1.2 สมการค(านวัณ
ลื(าด�บุ = ลื(าด�บุ+1
ผลืรวัมคะแนน = คะแนนกลืางภัาค + ปีลืายภัาคคะแนนเฉลื��ย = คะแนนรวัมท�)งกลื�5ม / จ(านวันน�กศ*กษาคะแนนรวัมท�)งกลื�5ม =คะแนนรวัมท�)งกลื�5ม + ผลืรวัมคะแนน
1.3 ข#อม4ลืน(าเข#า จ(านวันน�กศ*กษา คะแนนกลืางภัาค คะแนนปีลืายภัาค
1.4 การแสดงผลืตามโจทย�ก(าหนด
1.5 การก(าหนดค�ณสมบุ�ต$ต�วัแปีร
ข#อม4ลื ช �อหน5วัยควัามจ(า
ชน$ดข#อม4ลื
จ(านวันน�กศ*กษา
num ต�วัเลืขจ(านวันเต/ม
ลื(าด�บุ n ต�วัเลืขจ(านวันเต/ม
ช �อน�กศ*กษา name กลื�5มอ�กขระคะแนนกลืาง
ภัาคmidterm ต�วัเลืข
จ(านวันเต/มคะแนนปีลืาย
ภัาคผลืfinal ต�วัเลืข
จ(านวันเต/มผลืรวัมคะแนน score ต�วัเลืข
จ(านวันเต/มคะแนนรวัมท�)ง
กลื�5มsum ต�วัเลืขทศน$ยม
คะแนนเฉลื��ย average ต�วัเลืขทศน$ยม
1.6 ข�)นตอนการท(างาน (action)
1) ปี<อนจ(านวันนน�กศ*กษา (num)
2) ควับุค�มวันซ้ำ()าด#วัยค(าส��ง for (n =1; n<=num ; n+
+)
หากเง �อนไข เปี;นจร$ง ให#ท(าข#อ 2.1-2.6 หากเง �อนไข เปี;นเท/จ ไปีท��ข#อ 3
2.1) พ$มพ�ลื(าด�บุท�� (n)
2.2) ปี<อนข#อม4ลืช �อน�กศ*กษา (name) คะแนนกลืางภัาค (midterm)คะแนนปีลืาย
ภัาค (final)
2.3) ค(านวัณผลืคะแนน (score) = midterm +
final
2.4) พ$มพ� score
2.5) ค(านวัณรวัมท�)งกลื�5ม (sum) = sum + score
2.6) วันซ้ำ()าไปีท(าท��ข#อ 2
3) ค(าน(าคะแนนเฉลื��ย (average) = sum / num
4) พ$มพ� average
5) จบุการท(างาน
2.ลื(าด�บุการท(างานด#วัยผ�งงานโปีรแกรม
start
ปี<อน num
For (n = 1 ; n <= num ; n++)
พ$มพ� n
ปี<อน name,midterm,final
Averge = sum / num
พ$มพ�
n > num
n <= num
3.ค(าส��งควับุค�มการท(างาน
#include <stdio.h>/* file name ex_for3.cpp*/main (){char name [30] ;int midterm = 0 , final = 0 , score = 0 ,n , num ;float sum = 0 , average = 0 ;printf (“ key loop => “) ; scanf (“%d “,&num) ;Printf (“\n Report Score \n”) ;printf(“*************************\n \n”) ;
for(n = 1;n <= num ; n++) { printf ({“No. => %d \n” , n) ; printf (“Name is => “) ; scanf (“%s”,name) ; printf (“midterm is => “) ; scanf (“%d”&midterm) ; printf (“final is => “) ; scanf (“%d”&final) ; score = midterm =+ final; printf ( “* score = %d\n”,score) ; sum = sum + score ; printf (“*****************\n”) ; }
ค(าส��งน�)ปีระกอบุด#วัย 3 ส5วันค อ 1.สั่�วนก�าหันดคำ�าเร��มต�นใหั�ก�บต�วแปร ส5วันน�)เปี;นการก(าหนดค5าเร$�มต#นให#ก�บุต�วัแปีรท��ต#องการใช#งานใน ลื4ปี โดยปีกต$เราจะใช#ต�วัแปีรน�)เปี;นต�วัควับุค�มลื4ปี 2.สั่�วนเง6�อนไขีท��ต�องการตรวจุสั่อบ เปี;นน$พจน�ตรรกะท��ใช#เปี;นเง �อนไขในการท(างานของลื4ปีโดยหากเง �อนไขน�)เปี;นจร$งก/ย�งคงท(างานในลื4ปีต5อไปี แต5หากเง �อนไขเปี;นเท/จจะออกจากการท(างานของลื4ปีไปีท(าค(าส��งท��อย45นอกลื4ปีต5อไปี 3.สั่�วนปร�บคำ�าขีองต�วแปร เปี;นส5วันท��ใช#ปีร�บุค5าของต�วัแปีรท��ใช#ในลื4ปี การท(างานของ for น�)น จะเร$�มจากส5วันแรกค อก(าหนดค5าเร$�มต#นให#ก�บุต�วัแปีรก5อน จากน�)นจะไปีตรวัจสอบุเง �อนไขในส5วันท�� 2 วั5าเปี;นจร$งหร อไม5 ถู#าเปี;นจร$งก/จะเข#าส45การท(างานของลื4ปี (ถู#าเปี;นเท/จจะไม5เข#าส45ลื4ปี แต5จะไปีท(าค(าส��งต5อไปีท��อย45ถู�ดจากลื4ปีเลืย) แลืะเม �อท(างานตามค(าส��งท�)งหมดท��อย45ภัายในลื4ปีแลื#วัก/จะเข#าไปีท(างานในส5วันท��3 ของค(าส��ง for เพ �อปีร�บุค5าของต�วัแปีร แลืะท(าการตรวัจสอบุเง �อนไขใหม5อ�กคร�)ง ซ้ำ*�งท5าเง �อนไขเปี;นจร$งก/ย�งคงอย45ใน ลื4ปีต5อไปี แลืะจะท(าอย5างน�)เร �อยๆจนกระท��งผลืการตรวัจสอบุเง �อนไขเปี;นเท/จจ*งค5อยออกจาก ลื4ปีไปีท(าค(าส��งท��อย45นอกลื4ปีต5อไปี
5.2 กรณ�ศ*กษา ข� )นตอนการสร#างโปีรแกรม ควับุค�มการวันซ้ำ()าด#วัยค(าส��ง while
#include <stdio.h>/* file name ex_for3.cpp*/main (){char name [30] ;int midterm = 0 , final = 0 , score = 0 ,n , num ;float sum = 0 , average = 0 ;printf (“ key loop => “) ; scanf (“%d “,&num) ;Printf (“\n Report Score \n”) ;printf(“*************************\n \n”) ;
for(n = 1;n <= num ; n++) { printf ({“No. => %d \n” , n) ; printf (“Name is => “) ; scanf (“%s”,name) ; printf (“midterm is => “) ; scanf (“%d”&midterm) ; printf (“final is => “) ; scanf (“%d”&final) ; score = midterm =+ final; printf ( “* score = %d\n”,score) ; sum = sum + score ; printf (“*****************\n”) ; }
เง �อนไข-เท/จ
ออกจากค(าส��ง while
ค(าส��งต5าง ๆ
เปีลื��ยนแปีลืงเง �อนไขในการท(าซ้ำ()า
จร$ง
ก(าหนดเง �อนไขในการท(าซ้ำ()า
while เปี;นค(าส��งท��ใช#ในโครงสร#างควับุค�มแบุบุวันซ้ำ()า (repetition
control structure) ค อ เปี;นค(าส��งให#ม�การท(าซ้ำ()าเปี;นรอบุ ๆ (loop)
ลื�กษณะการท(างานท(านองเด�ยวัก�บุค(าส��ง for แต5ต5างก�นตรงท��ไม5ทราบุจ(านวันรอบุท��แน5นอน เม �อเร$�มต#นจะม�การตรวัจเง �อนไข ถู#าเง �อนไขม�ค5าเปี;นจร$งจะท(าตามค(าส��งท��ม�ท��ม� 1 ค(าส��ง หร อ ช�ดของค(าส��ง แลื#วักลื�บุมาตรวัจสอบุเง �อนไขใหม5 ถู#าเง �อนไขท��เปี;นเท/จจะออกจากค(าส��ง while ในการใช#ค(าส��งน�)ต#องม�ค(าส��งเปีลื��ยนแปีลืงค5าของน$พจน�ท��ใช#เปี;นเง �อนไขให#สามารถูม�ค5าเปี;นเท/จได# หร อม$ค(าส��งให#หย�ดการวันซ้ำ()า ม$ฉะน�)นจะม�ปี:ญหาท��โปีรแกรมท(างานแบุบุวันซ้ำ()าแบุบุไม5ม�ท��ส$)นส�ด (endless loop) ซ้ำ*�งเปี;นการผ$ดพลืาดท��ร�นแรงเพราะจะไม5สามารถูท(าค(าส��งต5อ ๆ ไปีแลืะจบุการท(างานของโปีรแกรมไม5ได#
การท�าซ้ำ��าแบบ while อาจเข�ยนผ�งงาน ด�งร4ปี
คำ�าสั่��ง while ม�ร/ปแบบ ด�งน�)
while (น$พจน�ทดสอบุเง �อนไข) statement ; หร อ while
(น$พจน�ทดสอบุเง �อนไข)
{
ค(าส��งท��1;
ค(าส��งท��2;
...
ค(าส��งส�ดท#าย;
}
โดย while จะท(าการท(าซ้ำ()าต5อไปีเม �อน$พจน�ทดสอบุเง �อนไขให#ผลืลื�พธ�เปี;นจร$ง แลืะท(าต5อจนกระท��งผลืลื�พธ�ของน$พจน�ทดสอบุเง �อนไขเปี;นเท/จ
โจุทย" จงเข�ยนโปีรแกรมในลื�กษณะให#ระบุบุตรวัจสอบุเง �อนไขก5อนเข#าส45รอบุการท(างานวั5า หากรห�สน�กศ*กษาไม5ใช5เลืข 0 (ค5าตรรกะเปี;นจร$ง) ให#วันพ$มพ�ซ้ำ()าลื(าด�บุท�� ปี<อนช �อน�กเร�ยน คะแนนกลืางภัาค คะแนนปีลืายภัาค แสดงผลืรวัมคะแนน จ(านวัน n ราย หากรห�สน�กศ*กษาเปี;นเลืข 0 (ค5าตรรกะเปี;นเท/จ)ให#พ$มพ�คะแนนเฉลื��ยน�กศ*กษากลื�5มน�)
ก(าหนดการแสดงผลืด�งน�)
ขี��นตอนการสั่ร�างโปรแกรมประย�กต"งาน
1.การวั$เคราะห�ระบุบุงานเบุ )องต#น
Report Score===========================Student Id => ……………No. => …………….name is => …………..midterm is => …………..Final is => ……………* Score = ……………=========================== *Average Score is = ………….===========================
กดรห�สเปี;น 0 ออกจากการวันซ้ำ()า
1.1 ส$�งท��ต#องการค อ ผลืรวัมคะแนน คะแนนเฉลื��ย
1.2 สมการค(านวัณ
ลื(าด�บุ = ลื(าด�บุ+1
ผลืรวัมคะแนน = คะแนนกลืางภัาค + ปีลืายภัาคคะแนนเฉลื��ย = คะแนนรวัมท�)งกลื�5ม / (ลื(าด�บุส�ดท#าย –
1)
คะแนนรวัมท�)งกลื�5ม =คะแนนรวัมท�)งกลื�5ม + ผลืรวัมคะแนน
1.3 ข#อม4ลืน(าเข#า รห�สน�กศ*กษา จ(านวันน�กศ*กษา คะแนนกลืางภัาค คะแนนปีลืายภัาค
1.4 การแสดงผลืตามโจทย�ก(าหนด
1.5 การก(าหนดค�ณสมบุ�ต$ต�วัแปีร
ข#อม4ลื ช �อหน5วัยควัามจ(า
ชน$ดข#อม4ลื
รห�สน�กศ*กษา id ต�วัเลืขจ(านวันเต/ม
ลื(าด�บุ n ต�วัเลืขจ(านวันเต/ม
ช �อน�กศ*กษา name กลื�5มอ�กขระคะแนนกลืาง
ภัาคmidterm ต�วัเลืข
จ(านวันเต/มคะแนนปีลืาย
ภัาคผลืfinal ต�วัเลืข
จ(านวันเต/มผลืรวัมคะแนน score ต�วัเลืข
จ(านวันเต/ม
คะแนนรวัมท�)งกลื�5ม
sum ต�วัเลืขทศน$ยม
คะแนนเฉลื��ย average ต�วัเลืขทศน$ยม
1.6 ข�)นตอนการท(างาน (action)
1) ก(าหนดลื(าด�บุท�� (n) ม�ค5าเปี;น 12) ปี<อนรห�สน�กศ*กษา (id)
3) ควับุค�มวันซ้ำ()าด#วัยค(าส��ง while (id ! = 0)
หากเง �อนไข เปี;นจร$ง ให#ท(าข#อ 3.1-3.8 หากเง �อนไข เปี;นเท/จ ไปีท��ข#อ 4
3.1) พ$มพ�ลื(าด�บุท�� (n)
3.2) ปี<อนข#อม4ลืช �อน�กศ*กษา (name) คะแนนกลืางภัาค (midterm)คะแนนปีลืาย
ภัาค (final)
3.3) ค(านวัณผลืคะแนน (score) = midterm +
final
3.4) พ$มพ� score
3.5) ค(านวัณรวัมท�)งกลื�5ม (sum) = sum + score
3.6) ค(านวัณ n 3.7) ปี<อนรห�สน�กศ*กษา (id)
3.8) วันซ้ำ()าไปีท(าท��ข#อ
4) ค(าน(าคะแนนเฉลื��ย (average) = sum / (num-1)
5) พ$มพ� average
6) จบุการท(างาน
2.ลื(าด�บุการท(างานด#วัยผ�งงานโปีรแกรม
start
ปี<อน id
พ$มพ� n
ปี<อน name,midterm,final
Score = midterm + final
พ$มพ� score
Averge = sum / num (n-1)
พ$มพ� average
end
no
yes
n =1
While (id !=0)
3. ค(าส��งควับุค�มการท(างาน
n = n+1
ปี<อน id
#include <stdio.h>/* file name ex_while4.c*/main (){char name [30] ;int midterm = 0 , final = 0 , score = 0 ,n=1 , id ;float sum = 0 , average = 0 ;printf (“\n Report Score \n“) ; printf(“==========================\n \n”) ;Printf (“student id . => ”) ; scanf (“%d”,& id) ;
while (id ! =0) { printf ({“No. => %d \n” , n) ; printf (“Name is => “) ; scanf (“%s”,name) ; printf (“midterm is => “) ; scanf (“%d”&midterm) ; printf (“final is => “) ; scanf (“%d”&final) ; score = midterm =+ final; printf ( “* score = %d\n”,score) ; sum = sum + score ; printf (“============================\n”) ; printf (“student id . => ”) ; scanf (“%d”,& id) ; } average = sum / (n-1) ;printf end job….. \n” ,) ;printf (“======================\n) ;printf (“* Averge score is = %.2f \n” , averge) ;printf (“======================\n) ;
}
คำ�าอธิ�บาย
1. สาเหต�ท��ต#องเข�ยนสมการค5าเฉลื��ย (averge) = คะแนนรวัมท�)งหมด (sum) (จ(านวันนกศ*กษา (n)-1) ; n หมายถู*ง หน5วัยควัามจ(าเก/บุสะสมค5าจ(านวันน�กศ*กษา แต5ในกระบุวันการท(างานม�ข#อส�งเกตวั5า จากต�วัอย5าง n ม�ค5าเปี;น 3 บุวักเพ$�มไปี 1 ราย แต5ผ4#ใช#ระบุบุกดรห�สน�กศ*กษาเปี;น 0 หมายถู*งไม5วันซ้ำ()า ด�งน�)นจ(านวันข#อม4ลืน�กส*กษาท��แท#จร$งน�)นม� 2 รายเท5าน�)น จ*งต#องลืบุไปี 1 จากค5าท��ม�อย45 ท�)งน�)หากใช#สมการคะแนนเฉลื��ย = คะแนนรวัมท�)งกลื�5ม/ ลื(าด�บุส�ดท#าย ผลืลื�พธ ท��ได#จะผ$ด
2. สาเหต�ท��ต#องเข�ยน scanf (“%d”,& id) ; ในโปีรแกรม 2 แห5ง ค อ
เพราะเม �อวันซ้ำ()าไปีรอบุท�� 2 ระบุบุจะไปีท(างานต(าแหน5งบุรรท�ด while ด�งน�)นเพ �อให#การวันซ้ำ()ารอบุถู�ดไปีม��ค5ารห�สน�กศ*กษาไปีใช#ในการตรวัจสอบุเง �อนไข (id ! =0)
Printf (“student id . => ”) ; scanf (“%d”,& id) ;while (id ! =0) { printf ({“No. => %d \n” , n) ; ………. printf (“student id . => ”) ; scanf (“%d”,& id) ; }
ต�วอย�างเพ��มเต�ม
โปีรแกรมน�) เร$�มต#น ก(าหนดค5า num เปี;น 0 แลืะให# counter ม�ค5าเปี;น 3 แลื#วั จ*งเข#าส45การท(าซ้ำ()า แบุบุ while เร$�มต#นทดสอบุวั5าเง �อนไข ค อ counter <= 11 เปี;นจร$ง หร อไม5 ถู#าเปี;นจร$ง จะท(าตามค(าส��ง
#include <stdio.h>int counter , num;char word[20] = "Bodindecha";main(){ num = 0; counter = 3; while ( counter <= 11){ printf("\n\tcounter = %2d my school is %s print round %d. ",counter,word,++num); counter = counter + 2 ;
}getch();
}
ค(าส��งต5าง ๆ
จร$ง
ก(าหนดเง �อนไขในการท(าซ้ำ()า
printf("\n\tcounter = %2d my school is %s print round %d. ",counter,word,++num);
แลืะค(าส��ง counter = counter + 2 ซ้ำ*�งเปี;นการเพ$�มค5า ของ counter จากเด$ม แลื#วัตรวัจสอบุเง �อนไข ถู#าเปี;นจร$งก/ท(าต5อไปีซ้ำ()าก�นไปีเร �อยจนกระท��งน$พจน�เง �อนไข เปี;นเท/จ ค อ counter มากกวั5า 11 ซ้ำ*�งค อ เง �อนไข counter <= 11 ม�ค5าเปี;นเท/จ จ*งออกจากการท(าซ้ำ()า ในต�วัอย5างน�)ม�การท(าซ้ำ()า 5 รอบุ ได#ผลืด�งร4ปี
5.3 กรณ�ศ*กษา ข� )นตอนการสร#างโปีรแกรม ควับุค�มการวันซ้ำ()าด#วัยค(าส��ง do-while
do while เปี;นค(าส��งให#ม�การท(าซ้ำ()าเปี;นรอบุ ๆ (loop) ลื�กษณะการท(างานท(านองเด�ยวัก�บุค(าส��ง while แต5ต5างก�นตรงท��ค(าส��งน�)จะม�การท(างานตามค(าส��งไปี 1 รอบุ ก5อนท��จะทดสอบุเง �อนไข ถู#าเง �อนไขท��เปี;นจร$งจะท(างานต5อไปี ถู#าเง �อนไขเปี;นเท/จจ*งจะออกจากค(าส��ง do while ค(าส��งน�)ก/เช5นเด�ยวัก�นจะต#องก(าหนดให#ม�โอกาสท��เง �อนไขเปี;นเท/จได# ม$ฉะน�)นจะม�ปี:ญหาท��โปีรแกรมท(างานแบุบุวันซ้ำ()าแบุบุไม5ม�ท��ส$)นส�ด (endless loop)
กรณ�ท��เง �อนไขเปี;นเท/จเพ�ยงอย5างเด�ยวัจะม�การท(างาน 1 รอบุ ก5อนออกจากการท(าซ้ำ()า
การท�าซ้ำ��าแบบ do while อาจเข�ยนผ�งงาน ด�งร4ปี
คำ�าสั่��ง do while ม�ร/ปแบบ ด�งน�)
โดย do while จะท(าการท(าซ้ำ()าต5อไปีเม �อน$พจน�ทดสอบุเง �อนไขให#ผลืลื�พธ�เปี;นจร$ง แลืะท(าต5อจนกระท��งผลืลื�พธ�ของน$พจน�ทดสอบุเง �อนไขเปี;นเท/จ ก/จะออกจากการท(าซ้ำ()า
ต�วอย�าง
Do {
ค(าส��งท��1;
ค(าส��งท��2;
...
ค(าส��งส�ดท#าย;
} while (น$พจน�ทดสอบุเง �อนไข) ;
#include <stdio.h>int counter ,num ;char word[20] = "Bodindecha";main()
{ Num = 0;counter = 3;do /* start do while */{ printf("\n\tcounter = %2d my school is %s print round %d. ",counter,word,++num); counter = counter + 2 ;
โปีรแกรมน�)ก(าหนด เร$�มต#น ให# counter ม�ค5าเปี;น 3 แลื#วั จ*งเข#าส45การท(าซ้ำ()า แบุบุ do while ท(าตามค(าส��ง printf("\n\tcounter =
%2d my school is %s print round %d. ",counter,word,+
+num); แลืะ counter = counter + 2; ไปีก5อน 1 คร�)ง แลื#วัจ*งทดสอบุวั5าเง �อนไข ค อ counter < 11 เปี;นจร$ง หร อไม5 ถู#าเง �อนไขเปี;นจร$งก/จะท(าซ้ำ()ารอบุต5อไปี เปี;นในลื�กษณะน�)จนกระท��งเง �อนไขเปี;นเท/จ ค อ เม �อ counter เปี;น 13 ผลืการท(างานของโปีรแกรม /* example4_17.c
*/ เปี;นด�งร4ปี
ซ้ำ*�งจะเปี;นได#วั5าผลืการท(างานของโปีรแกรมเหม อนก�บุโปีรแกรมท��ใช#ค(าส��งวันซ้ำ()า while
โจุทย" จงเข�ยนโปีรแกรมในลื�กษณะท(างาน พ$มพ�ลื(าด�บุท�� ปี<อนช �อน�กเร�ยน คะแนนกลืางภัาค คะแนนปีลืายภัาค แสดงผลืรวัมคะแนน แลื#วัสอบุถูามควัามต#องการผ4#ใช#วั5าต#องการวันวั()าหร อไม5 หากค(าตอบุไม5ใช5 (ค5าตรรกะเปี;นจร$ง) ให#วันซ้ำ()า หากค5าตรรกะเปี;นเท/จให#เลื$กวันซ้ำ()าแลืะพ$มพ�คะแนนเฉลื��ยน�กศ*กษากลื�5มน�)
#include <stdio.h>int counter ,num ;char word[20] = "Bodindecha";main()
{ Num = 0;counter = 3;do /* start do while */{ printf("\n\tcounter = %2d my school is %s print round %d. ",counter,word,++num); counter = counter + 2 ;
ก(าหนดการแสดงผลืด�งน�)
ขี��นตอนการสั่ร�างโปรแกรมประย�กต"งาน
1.การวั$เคราะห�ระบุบุงานเบุ )องต#น
1.1 ส$�งท��ต#องการค อ ผลืรวัมคะแนน คะแนนเฉลื��ย
1.2 สมการค(านวัณ
ลื(าด�บุ = ลื(าด�บุ+1
ผลืรวัมคะแนน = คะแนนกลืางภัาค + ปีลืายภัาคคะแนนเฉลื��ย = คะแนนรวัมท�)งกลื�5ม / (ลื(าด�บุส�ดท#าย –
1)
ผลืรวัมคะแนน = คะแนนกลืางภัาค + คะแนนปีลืายภัาคคะแนนรวัมท�)งกลื�5ม =คะแนนรวัมท�)งกลื�5ม + ผลืรวัมคะแนน
1.3 ข#อม4ลืน(าเข#า รห�สน�กศ*กษา จ(านวันน�กศ*กษา คะแนนกลืางภัาค คะแนนปีลืายภัาค ควัามต#องการ–
วันซ้ำ()า
Report Score===========================No. => …………….name is => …………..midterm is => …………..Final is => ……………* Score = ……………=========================== calculate again y/n => ………….=========================== *Average Score is = ………….===========================
ระบุ�ควัามต#องการวันซ้ำ()า y/n
1.4 การแสดงผลืตามโจทย�ก(าหนด
1.5 การก(าหนดค�ณสมบุ�ต$ต�วัแปีร
ข#อม4ลื ช �อหน5วัยควัามจ(า
ชน$ดข#อม4ลื
ควัามต#องการวันซ้ำ()า
ans อ�กขระ
ลื(าด�บุ n ต�วัเลืขจ(านวันเต/ม
ช �อน�กศ*กษา name กลื�5มอ�กขระคะแนนกลืาง
ภัาคmidterm ต�วัเลืข
จ(านวันเต/มคะแนนปีลืาย
ภัาคผลืfinal ต�วัเลืข
จ(านวันเต/มผลืรวัมคะแนน score ต�วัเลืข
จ(านวันเต/มคะแนนรวัมท�)ง
กลื�5มsum ต�วัเลืขทศน$ยม
คะแนนเฉลื��ย average ต�วัเลืขทศน$ยม
1.6 ข�)นตอนการท(างาน (action)
1) ก(าหนดลื(าด�บุท�� (n) ม�ค5าเปี;น 12) ควับุค�มวันซ้ำ()าด#วัยค(าส��ง do
2.1) พ$มพ�ลื(าด�บุท�� (n)
2.2) ปี<อนข#อม4ลืช �อน�กศ*กษา (name) คะแนนกลืางภัาค (midterm)คะแนนปีลืาย
ภัาค (final)
2.3) ค(านวัณผลืคะแนน (score) = midterm +
final
2.4) พ$มพ� score
2.5) ค(านวัณรวัมท�)งกลื�5ม (sum) = sum + score
2.6) ค(านวัณ n = n+1
2.7) ปี<อนควัามต#องการวันซ้ำ()า (ans)
2.8) ตรวัจสอบุค(าส��ง while (ans!=’n’)
หากเง �อนไข เปี;นจร$ง ให#ท(าข#อ 2 หากเง �อนไข เปี;นเท/จ ไปีท��ข#อ 3
3) ค(านวัณคะแนนเฉลื��ย (average) = sum / (n-1)
4) พ$มพ� average
5) จบุการท(างาน
2.ลื(าด�บุการท(างานด#วัยผ�งงานโปีรแกรมstart
พ$มพ� n
ปี<อน name,midterm,final
Score = midterm + final
พ$มพ� score
sum = sum + score
yes
n =1
While (ans!=’n’)
n = n+1
ปี<อน ans
do
3. ค(าส��งควับุค�มการท(างาน
Averge = sum / num (n-1)
พ$มพ� average
end
#include <stdio.h>/* file name ex_do5.c*/main (){char ans ;char name [30] ;int midterm = 0 , final = 0 , score = 0 ,n=1 , id ;float sum = 0 , average = 0 ;printf (“\n Report Score \n“) ; printf(“==========================\n \n”) ;
do { printf (“\n”) printf ({“No. => %d \n” , n) ; printf (“Name is => “) ; scanf (“%s”,name) ; printf (“midterm is => “) ; scanf (“%d”&midterm) ; printf (“final is => “) ; scanf (“%d”&final) ; score = midterm =+ final; printf ( “* score = %d\n”,score) ; sum = sum + score ; n = n+ 1 printf (“============================\n”) ; printf (“\n calculate again y/n = > “ ) ; ans = getche ( ) ; } while (ans ! = “n”) ; average = sum / (n-1) ;printf (“\n”,) ;printf (“======================\n) ;printf (“* Averge score is = %.2f \n” , averge) ;printf (“======================\n) ; printf end job….. \n” ,) ;
}
อธิ�บาย
1. โปีรแกรมน�)ควับุค�มการวันซ้ำ()าด#วัยเง �อนไข
2. ใช#ปีระโยคค(าส��ง ans = getche ( ) ; ร�บุข#อม4ลืแบุบุอ�กขระแลื#วัน(าไปีเก/บุไวั#ในหน5วัยควัามจ(าต�วัแปีร ans
3. น(าค5าในหน5วัยควัามจ(า ans ไปีตรวัจสอบุเง �อนไขจากปีระโยค} while
(ans ! = “n”) ;
หากตราบุใดท��ย�งไม5ปี<อนค5า n หมายถู*งปีระโยคเง �อนไขเปี;นจร$ง โปีรแกรมน�)จะวันซ้ำ()าไปีเร �อย
do { …………………… ans = getche ( ) ; } while (ans ! = “n”) ;
สั่ร�ปเน6�อหัา
การสร#างโปีรแกรมปีระย�กต�งานโดยใช#ค(าส��งให#โปีรแกรมท(างานเปี;นลื�กษณะวันซ้ำ()าน�)น เปี;นการใช#งานโดยใช#ปีระโยชน�จากปีระส$ทธ$ภัาพทางตรรกะของระบุบุคอมพ$วัเตอร� ด�งน�)นจ*งต#องใช#ควัามร4 #ควัามสามารถูในเร �องการเข�ยนน$พจน�ทางตรรกะท��เคยศ*กษาจากบุทท��ผ5านมา ส(าหร�บุภัาษาซ้ำ�ม�ค(าส��งให#เลื อกใช#ควับุค�มงานลื�กษณะวันซ้ำ()า 3 แบุบุ ค อ ค(าส��ง for ค(าส��ง while แลืะค(าส��ง do-while
คำ�าสั่��ง for
เหมาะก�บุระบุบุงานท��ระบุ�รอบุการท(างานช�ดเจน การระบุ�รอบุน�)นอาจระบุ�โดยการเข�ยนค(าส��งก(าหนดเปี;นค5าคงท��ในโปีรแกรมหร อก(าหนดผ5านทางการท(างานของต�วัแปีร เพ �อท(างานในร4ปีแบุบุย ดหย�5นให#ผ4#ใช#ระบุบุงานเปี;นผ4#ปี<อนจ(านวันรอบุการท(างานด#วัยตนเอง เม �อระบุบุตรวัจสอบุวั5าครบุจ(านวันรอบุตามท��ก(าหนดแลื#วัจ*งออกจากการวันซ้ำ()า ท�)งน�)ระบุบุจะเพ$�มค5าน�บุรอบุโดยอ�ตโนม�ต$
คำ�าสั่��ง while
ใช#ก�บุระบุบุงานท��ต#องการตรวัจสอบุน$พจน�ตรรกะ ก5อนเข#าส�5กระบุวันการวันซ้ำ()าในเคร �องหมาย { } หากค5าตรรกะท��ได#เปี;นค5าจร$ง จะท(างานวันซ้ำ()าในส5วันควับุค�มวันรอบุ { } หากตรวัจสอบุค5าตรรกะได#ค5าเปี;นเท/จเม �อใด จะไม5เข#าส45กระบุวันการวันซ้ำ()า ท�)งน�)ต#องระม�ดระวั�งวั5าต#องม�ค(าส��งท��สามารถูท(าให#น$พจน�ตรรกะน�)นม�โอกาสเปีลื��ยนแปีลืงค5าเปี;นเท/จได# ม$ฉะน�)นจะเก$ดข#อผ$ดพลืาดออกจากการวันซ้ำ()าไม5ได#
คำ�าสั่��ง do – while
ใช#ก�บุระบุบุงานกรณ�ท��ให#เข#าไปีท(างานวันซ้ำ()าในเคร �องหมาย { } 1
รอบุก5อนแลื#วัจ*งตรวัจน$พจน�ตรรกะ หากค5าตรรกะท��ได#เปี;นค5าจร$ง จะวันซ้ำ()าการท(างานต5อไปี หากค5าตรรกะเปี;นค5าเท/จ จะออกจากการวันซ้ำ()า ม�ข#อควัรระวั�งเช5นเด�ยวัก�บุค(าส��ง while ค อจ�ต#องระม�ดระวั�งวั5าม�ค(าส��งท��สามารถูท(าให#น$พจน�ตรรกะน�)นม�โอกาสเปีลื��ยนแปีลืงค5าเปี;นเท/จได# ม$ฉะน�)นจะเก$ดข#อผ$ดพลืาดออกจากการวันซ้ำ()าไม5ได#
อ�กปีระการหน*�งหากต#องการใช#ต�วัแปีรน�บุรอบุการท(างานเปี;นปีระโยคค(าส��งควับุค�มการวันซ้ำ()า จะต#องจ(าไวั#เสมอวั5าต#องก(าหนดชน$ดต�วัแปีรเปี;นกลื�5มจ(านวันเต/ม
คำ�าถุาม (กลุ่��ม 4)
เร6�องการเขี�ยนคำ�าสั่��งคำวบคำ�มแบบวนซ้ำ��า
1.สั่�ญลุ่�กษณิ" “ ++ ” หัมายถุ5งอะไร
ก.เพ$�มค5าคร�)งลืะ 2 ข.เพ$�มค5าคร�)งลื5ะ 1
ค.ลืดค5าท��ลืะ 1 ง.บุวักเพ$�ม 1 ข*)นไปี
2.การประมวลุ่ผัลุ่ขีองน�พจุน"คำณิ�ตศาสั่ตร"จุะท�าการประมวลุ่ผัลุ่ในสั่�วนใดเป2นสั่�วนแรก
ก.ต�วัแรกเสมอ ข.ต�วัใดก/ได#
ค.ส5วันของวังเลื/บุ ง.นอกวังเลื/บุ
3.ขี�อคำวามสั่��งโดยใชิ� for ใชิ�ในกรณิ�ท��เราต�องการท�าซ้ำ��าโดยต�องทราบอะไร
ก.จ(านวันคร�)ง ข.จ(าวันต�วัอ�กษร
ค.จ(านวันภัาพ ง.ไม5ม�ข#อใดถู4ก
4.คำ�าสั่��ง while จุะตรวจุสั่อบเง6�อนไขีก�อน ถุ�าพบว�าเง6�อนไขีเป2นจุร�งจุะเป2นอย�างไรต�อไป
ก.จะท(าค(าส��งท��อย45ภัายในลื4ปี(loop) หลื�งจากน�)นจ*งกลื�บุมาตรวัจสอบุเง �อนไขอ�กคร�)ง วันซ้ำ()าเช5นน�)ไปีเร �อยๆ จนกวั5าเง �อนไขจะเปี;นเท/จ
ข.จะไม5ท(าค(าส��งท��อย45ภัายในลื4ปี(loop) แต5จะวันลื4ปี (loop) เม �อเปี;นเท/จ
ค.จะท(าตามค(าส��งท��อย45ภัายในลื4ปี(loop)แต5จะไม5วันลื4ปี(loop)
ง.จะไม5ท(าตามค(าส��งท��อย45ในลื4ปี(loop)แลืะไม5วันตามลื4ปี(loop)
5.คำ�าสั่��ง while แตกต�างจุากคำ�าสั่��ง for อย�างไร
ก.ไม5แตกต5าง
ข.การวันซ้ำ()า
ค.การท(างานหลื�งจากพบุวั5าเปี;นเท/จ
ง.ต5างจากค(าส��ง for เลื/กน#อยตรงท��การวันซ้ำ()าแบุบุน�)ไม5จ(าเปี;นต#องบุอกถู*งจ(านวันรอบุของการวันซ้ำ()า แต5จะวันซ้ำ()าไปีเร �อย ๆ จนกวั5าเง �อนไขจะเปี;นเท/จ
6.สั่�ญลุ่�กษณิ" “ - - ” หัมายถุ5งอะไร
ก.เพ$�มค5าคร�)งลืะ 2 ข.เพ$�มค5าคร�)งลื5ะ 1
ค.ลืดค5าท��ลืะ 1 ง..ลืดค5าท��ลืะ 2
ก(าหนด a = 3 , b= 2 จงตอบุค(าถูามต5อไปีน�)ข#อ 7-8
7. a /=b ; หัมายถุ5งอะไร แลุ่ะ คำ�าตอบ a ม�คำ�าเท�าใด
ก. หมายถู*ง (a=a/b) ค(าตอบุ a ม�ค5า 1ข. หมายถู*ง (a=a * b) ค(าตอบุ a ม�ค5า 1ค. หมายถู*ง (a=a-b) ค(าตอบุ a ม�ค5า 1ง. หมายถู*ง (a=a+ b)ค(าตอบุ a ม�ค5า 5
8. a - =b ; หัมายถุ5งอะไร แลุ่ะ คำ�าตอบ a ม�คำ�าเท�าใด
ก. หมายถู*ง (a=a/b) ค(าตอบุ a ม�ค5า 1ข. หมายถู*ง (a=a * b) ค(าตอบุ a ม�ค5า 1ค. หมายถู*ง (a=a-b) ค(าตอบุ a ม�ค5า 1ง. หมายถู*ง (a=a+ b) ค(าตอบุ a ม�ค5า 5
9. คำ�าสั่��งคำวบคำ�มวนซ้ำ��าแบบ for ในสั่�วนขีองคำ�าสั่��งต�องการคำ�า ก��คำ�า
ก. 5 ข. 4
ค. 2 ง. 3
10. ขี�อไม�ใชิ�คำ�าสั่��งคำวบคำ�มวนซ้ำ��าแบบ for ในสั่�วนขีองคำ�าสั่��งต�องการคำ�า
ก.ค5าเร$�มต#น ข. น$พจน�ตรรกะค.ค5าส$)นส�ดง. ค5าเพ$�มหร อค5าลืด