การท้าซ้้าmathcom.uru.ac.th/~beebrain/slide/4121305a/%a1%d2%c3%b7...โปรแกรมหาผลรวม...
TRANSCRIPT
Pisit Nakjai
การท้าซ้้า
สาเหตุที่ต้องมกีารทา้ซ้้า
• เหตุการณ์ที่เกดิขึ้นหลายรอบเช่น โปรแกรมแสดง ชื่อ 20 ครั้ง
• เหตุการณ์ที่เกดิขึ้นหลายรอบ โดยมีการเปลี่ยนแปลงค่า หรือมีเงื่อนไขเช่น แสดงผลเลข 0, 1, 2, … , 10
แสดงผลรวมของ 1,3,5,7, … , 99
แสดง ชื่อ ไปเรื่อย ๆ จนกว่าค่า X จะมากกว่า 30
ทดลองเขยีนโปรแกรม
จงเขียนผังงานและโปรแกรมเพื่อแสดงตัวเลข 0 - 10 ออกทางหน้าจอ • Output Analysis
แสดงผลเลข 0, 1, 2, … , 10
• Input Analysisไม่มี
• Process Analysisโปรแกรมแสดงผลเลข 0, 1, 2, … ,10
• Variable Defineไม่ใช้ (หรือใช้ count เพื่อเพิ่มค่า)
#include<stdio.h>#include<conio.h>int main(){
printf ("0\t");printf ("1\t");printf ("2\t");printf ("3\t");printf ("4\t");......printf ("10\t");return 0;
}
#include<stdio.h>#include<conio.h>int main(){
int count = 0;printf ("%d\t",count++);printf ("%d\t",count++);printf ("%d\t",count++);printf ("%d\t",count++);printf ("%d\t",count++);......printf ("%d\t",count++);return 0;
}
#include<stdio.h>#include<conio.h>int main(){
int count = 0;while (count < 10){printf ("%d\t",count++);
}
return 0;}
ค้าสัง่ในการวนซ้้าในภาษาซี
• While
• Do while
• For
7
5.1 ค้าสัง่ while
while (expression){statement-1.1;statement-1.2;...statement-1.n;
}
while (expression)statement-1.1;
8
โปรแกรม แสดงผลตัวเลข 1 ถึงค่าทีก่้าหนด | while
จงเขียนผังงานและโปรแกรมที่มีการควบคุมทิศทางแบบวนรอบโดยใช้ค้าสั่ง while เพื่อให้โปรแกรมท้าการบวกเลขจ้านวนเต็มตั้งแต่ 1 จนถึงค่าที่ผู้ใช้งานก้าหนด
• Output Analysisผลลัพธ์การบวกเลขจ้านวนเต็ม ตั้งแต่ 1 ถึงค่าที่ผู้ใช้ก้าหนด
• Input Analysisค่าที่ผู้ใช้งานป้อนเข้ามา
9
โปรแกรม แสดงผลตัวเลข 1 ถึงค่าทีก่้าหนด | while
• Process Analysisโปรแกรมถามว่าผู้ใช้งานต้องการบวกเลขตั้งแต่ 1 ถึงเลขใดวนรอบแบบ while เพื่อบวกค่าแสดงผลลัพธ์ที่ได้
• Variable Definesum = 0 ผลรวมของการบวก โดยเริ่มต้นมีค่าเท่ากับ 0i = 1 ค่าที่น้าเข้าไปบวกกับ sum ในแต่ละรอบ โดยรอบแรกค่า i
มีค่าเท่ากับ 1 และมีค่าเพิ่มขึน้รอบละ 1final เพื่อรับค่าจากผู้ใช้ และก้าหนดจุดสิ้นสุดของค่า i
10
START
i=1,final,sum=0
i<=final True
False i++sum
END
final
sum = sum + i
11
โปรแกรมแสดงผลตัวเลข 1 ถึงค่าทีก่้าหนด | while
int main(){
int i = 1, final, sum=0;printf ("Enter final number : ");scanf ("%d",&final);while (i<=final){
sum = sum + i;i++;
}printf ("Sum = %d",sum);return 0;
}
12
5.3 ค้าสัง่ do-while
do{statement-1.1;statement-1.2;...statement-1.n;
}while (expression);
dostatement-1.1;
while (expression);
13
โปรแกรม หาผลรวม 1 ถึง 100 | do-while
จงเขียนผังงานและโปรแกรมส้าหรับรวมเลขจ้านวนเต็ม
ตั้งแต่ 1 – 100 โดยใช้ค้าสั่ง do-while
• Output Analysisผลรวมของเลขจ้านวนเต็ม ตั้งแต่ 1 - 100
• Input Analysisไม่มี
14
โปรแกรม หาผลรวม 1 ถึง 100 | do-while
• Process Analysisโปรแกรมท้าการบวกค่าเก็บไว้ในตัวแปรผลลัพธ์ แล้วเพิ่มค่าจนถึง 100
• Variable Definecount เป็นตัวแปรชนิดจ้านวนเต็มเพ่ือนับจ้านวน
sum เป็นจ้านวนเต็มเพ่ือเก็บค่าผลรวม
15
START
count=1, sum=0
count<=100True
False
count++
sum
END
sum=sum+count
16
โปรแกรม หาผลรวม 1 ถึง 100 | do-while
int main(){
int count=1,sum=0;do{
sum = sum + count;count++;
}while(count<=100);printf ("Summation of 1 to 100 = %d",sum);return 0;
}
17
5.4 ค้าสัง่ for
• initial เป็นส่วนที่ใช้ก้าหนดค่าเริ่มต้นให้กับตัวแปร• condition เป็นเงื่อนไขเพื่อพิจารณา• change เป็นส่วนที่เปลี่ยนแปลงค่าตัวแปร• statement-1, 2, ... , n เป็นค้าสั่งที่จะท้างานเมื่อเงื่อนไขเป็นจริง
for (initial; expression; change){
statement-1.1;statement-1.2;...
statement-1.n;}
18
รูปแบบการใช้ค้าสัง่ for
19
โปรแกรม หาผลรวม 1 ถึง 100 | for (2)
• Process Analysis– โปรแกรมท้าการบวกค่าเก็บไว้ในตัวแปรผลลัพธ์ แล้วเพิ่มค่าจนถึง 100
• Variable Definecount เป็นตัวแปรชนิดจ้านวนเต็มเพ่ือนับจ้านวน
sum เป็นจ้านวนเต็มเพ่ือเก็บค่าผลรวม
20
START
sum=0
count<=100
True
False
count++sum
END
sum=sum+count
count=1
21
โปรแกรม หาผลรวม 1 ถึง 100 | for
#include<stdio.h>int main(){
int sum=0, count;for (count=1; count<=100; count++){
sum = sum + count ;}
printf ("Summation of 1 to 100 = %d",sum);return 0;
}
22
โปรแกรม แสดงผล a – z | for
จงเขียนผังงานและโปรแกรมส้าหรับแสดงผลอักษร a – z ออกทางจอภาพ โดยใช้ค้าสั่ง for
• Output Analysisแสดงผล a – z ทางจอภาพ
• Input Analysisไม่มี
a b c d e f g h i j k l m n o p q r s t u v w x y z
23
โปรแกรม5.5 แสดงผล a – z | for (2)
• Process Analysisโปรแกรมท้าการวนรอบเพื่อแสดงผลอักษรตั้งแต่ a – z โดยการเพิ่มค่าตัวแปรขึ้นครั้งละ
1 (ดูตาราง ASCII Code)
• Variable Defineletter เป็นตัวแปรชนิดอักขระ
printf ("%c\n",'a'); // printf ("%c\n",97);
printf ("%c\n",'a'+1); // printf ("%c\n",98);
printf ("%c\n",'a'+2); // printf ("%c\n",98);
a
b
c
ASCII Table
25
START
letter
letter<='z' True
Falseletter++
letter
END
letter='a'
26
โปรแกรม แสดงผล a – z | for (4)
#include<stdio.h>int main(){
char letter;for (letter='a'; letter<='z'; letter++){
printf ("%c ",letter);}return 0;
}
แบบฝึกหัด
• จงเขียนโปรแกรม เพื่อแสดงตารางสูตรคูณ ตามที่ผู้ใช้ก้าหนด
• จงเขียนโปรแกรม เพื่อแสดงตัวเลข 100 ถึง 50
• จงเขียนโปรแกรม เพื่อแสดงเฉพาะเลขคู่ตั้งแต่ 1 – 30
28
โปรแกรม แสดงผลรปูสี่เหลีย่ม | for (1)
จงเขียนผังงานและโปรแกรมแสดงผลรูปสี่เหลี่ยมขนาด n x n โดยโปรแกรมจะรอรับจ้านวนเต็มจากผู้ใช้งาน ดังตัวอย่าง
Please enter number : 4Output****************
Please enter number : 9Output*********************************************************************************
29
โปรแกรม แสดงผลรปูสี่เหลีย่ม | for (2)
• Output Analysis– ผลตัวเลข เป็นรูปสี่เหลี่ยมจัตุรัสขนาดเท่ากับจ้านวนตัวเลขที่รับเข้ามา
• Input Analysis– เลขจ้านวนเต็มท่ีผู้ใช้ป้อนเข้ามา
• Process Analysis– โปรแกรมรอรับค่าจ้านวนเต็มจากผู้ใช้งาน– โปรแกรมวนรอบเพื่อท้าการแสดง '*' เป็นรูปสี่เหลี่ยมจัตุรัส
30
โปรแกรม แสดงผลรปูสี่เหลีย่ม | for (3)
บรรทัดที่ 1 แสดงผล '\n' แล้วแสดงผล '*' จ้านวนเท่ากับค่าที่รับมา
บรรทัดที่ 2 แสดงผล '\n' แล้วแสดงผล '*' จ้านวนเท่ากับค่าที่รับมา
…
บรรทัดที่ n แสดงผล '\n' แล้วแสดงผล '*' จ้านวนเท่ากับค่าที่รับมา
• Variable Definenum เป็นจ้านวนเต็มเพ่ือใช้เก็บค่าตัวเลขที่ผู้ใช้ป้อน
i เป็นจ้านวนเต็มเพ่ือใช้นับจ้านวนบรรทัด
j เป็นจ้านวนเต็มเพ่ือใช้นับจ้านวน '*'
31
START
num, i, j
i<=num True
False
'\n'
END
i=1
num
i++
j<=num
j=1
j++
'*'TrueFalse
32
โปรแกรมแสดงผลรปูสี่เหลีย่ม | for ()
int main(){
int num,i,j;printf ("Enter number : ");scanf ("%d",&num);for (i=1; i<=num; i++){
printf ("\n");for (j=1; j<=num; j++){
printf ("*");}
}
return 0;}
33
โจทย์ : โปรแกรมคิดดอกเบี้ย
• จงเขียนผังงาน และโปรแกรมค้านวณดอกเบี้ย โดยโปรแกรมรับ เงินต้น (บาท) และดอกเบ้ียต่อปี (%) จ้านวนเงินที่ผ่อนช้าระต่อเดือน แล้วแสดงผลว่าต้องใช้เวลาก่ีปีในการผ่อนช้าระ และจ่ายดอกเบ้ียทั้งหมดคิดเป็นเท่าใด
5.4 ค้าถามท้ายบท
1. จงเขียนโปรแกรมแสดงรหัสแอสกี ตั้งแต่ 33 ถึง 55
Decimal ASCII
33 !
34 “
35 #
. . .
. . .
55 7
34
ค้าถามท้ายบท
2. จงเขียนโปรแกรมรับตัวเลขเพื่อมาค้านวณหาผลบวกก้าลังสอง จนกระทัง่ตัวเลขที่รับเข้ามามีค่าเป็น 0
Enter a number : 2
Enter a number : -5
Enter a number : 0
Result : 29
35
ค้าถามท้ายบท
3. ข้อใดเป็นโปรแกรมที่รันไม่รู้จบ (Infinite loop)
เมื่อก้าหนด int i=0;
3.1 for(i=0; i>0; i++) printf("%d",i);
3.2 for(i=0; i%2!=0; i += 2) puts("a");
3.3 while(i<7) printf("%d",i--);
3.4 do {
i+=3;
} while(i%3==0);
36
Quiz