26
การทางานแบบลาดบ

3.8 การทำงานแบบลำดับ

  • Upload
    -

  • View
    47

  • Download
    3

Embed Size (px)

Citation preview

Page 1: 3.8 การทำงานแบบลำดับ

การท างานแบบล าดับ

Page 2: 3.8 การทำงานแบบลำดับ

การท างานแบบล าดับ

ในการเขียนโปรแกรมนั้น หลังจากที่ผ่านขั้นตอนการวิเคราะห์ปัญหา

มาแล้ว ขั้นตอนต่อไปคือการเขียนผังงานและซูโดโค้ดอธิบาย

หลักการแก้ไขปัญหา ผู้ที่เขียนโปรแกรมจะต้องเปลี่ยนผังงานให้เป็น

การอธิบายขั้นตอนการท างานในลักษณะข้อความก่อน จากนั้นจึง

เปลี่ยนข้อความนั้น ๆ ให้เป็นซูโดโค้ดแล้วจึงเขียนเป็นโปรแกรม

คอมพิวเตอร์ล าดับต่อไป รูปแบบของโปรแกรมนั้นมีหลายรูปแบบ

ส าหรับหัวข้อนี้จะกล่าวถึงรายละเอียดและตัวอย่างการท างานแบบ

ล าดับซึ่งถือว่าเป็นพื้นฐานในการเขียนโปรแกรมทั่ว ๆ ไป ลักษณะ

การท างานของโปรแกรมแบบล าดับนี้จะกระท าตามล าดับกิจกรรม

ก่อนหลัง โดยไม่มีการเปลี่ยนแปลงทิศทางไปในลักษณะอื่น

Page 3: 3.8 การทำงานแบบลำดับ

START

READ Base, HIGH

ANS = 0.5*Base*high

WRITE ANS

END

รูปแสดงตัวอยา่งผังงานการหาพื้นทีส่ามเหลีย่ม

Page 4: 3.8 การทำงานแบบลำดับ

2006

2007

2008

2009

จากผังงานในรูปเป็นการท างานแบบล าดับ ถ้าหากเขียนเป็นค าอธิบาย

โปรแกรมในลักษณะของข้อความภาษาไทยจะเขียนได้ดังนี้

หาพื้นที่สามเหลี่ยม

เริ่มต้น

1. รบัค่าฐาน Base, รบัค่าส่วนสูง High

2. ค านวณหาพื้นที่โดยใช้ตัวแปร ANS เท่ากับ 0.5*Base*High

3. แสดงค่าพื้นที่ ANS

จบ

Page 5: 3.8 การทำงานแบบลำดับ

ซึ่งจะเห็นว่าการท างานจะท างานเป็นล าดับต่อเนื่องกันไป ถ้าหากต้องการให้ค่า

ฐานของสามเหลี่ยมและส่วนสูงเป็นเลขจ านวนเต็ม จะเขียนเป็นซูโดโค้ดที่ใช้ค า

ภาษาองักฤษได้ดังนี้

START

INT Base, High : INTEGER

INT ANS : REAL

READ Base, High

ANS = 0.5*Base*High

WRITE ANS

END

และจากซูโดโค้ดที่ได้นี้จะท าให้สามารถเขียนเป็นโปรแกรมคอมพิวเตอร์ได้ง่าย โดย

เปลี่ยนซูโดโค้ดแต่ละบรรทัดให้เป็นไปตามหลักการเขียนโปนแกรมภาษานั้น ๆ ตาม

ตัวอย่างต่อไป

Page 6: 3.8 การทำงานแบบลำดับ

#include<stdio.h>

#<conio.h>

main()

{

int Base, High; /*ประกาศตัวแปร Base และ High เป็นเลขจ านวนเต็ม*/

float ANS; /*ประกาศตัวแปร ANS เป็นเลขทศนิยม*/

printf(“Input Base”);

scanf(“%d”,&Base); /*รับค่าความยาวฐาน*/

printf(“Input Base”);

scanf(“%d”,&Base); /*รับค่าความสูง*/

ANS = 0.5*Base*High; /*ค านวณหาพื้นที่สามเหลี่ยม*/

printf(“ANS : %.2f\n”,ANS); /*แสดงผลออกทางจอภาพเป็นทศนิยมสองต าแหน่ง*/

getch ();

return 0;

}

Page 7: 3.8 การทำงานแบบลำดับ

เมื่อคีย์โปรแกรมลงในโปรแกรม DEV – C++ แล้วทดลองแล้วรันโปรแกรมผลลัพธ์ที่

ได้จะเป็นดังรูป โดยคอมพิวเตอร์จะให้ป้อนค่าฐานและความสูงของสามเหลี่ยมเข้าไปทางอินพุต

จากนั้นจะแสดงผลเป็นพื้นที่ของสามเหลี่ยมออกมา โดยในตัวอย่างจะป้อนความยาวฐานเท่ากับ

17 และส่วนสูงเท่ากับ 12

ป้อนความยาวฐาน

และความสูง

Page 8: 3.8 การทำงานแบบลำดับ

วิธที า จากที่โจทย์ก าหนดสามารถวิเคราะห์ปัญหาได้หลายแบบ เช่น

ข้อมูลอินพุต ก าหนดค่าข้อมูลโดยตรงหรือรบัจากคีย์บอร์ด

ข้อมูลเอาต์พตุ ต้องเป็นเลขจ านวนเต็มเนื่องจากข้อมูลทั้งสี่ค่าเป็นจ านวนเต็ม

วิธีการประมวลผล ประกาศตวัแปรข้ึนมา 4 ตวั ส าหรับเก็บจ านวนเต็ม

เก็บตวัเลขในตวัแปร

น าตัวเลขทั้งสี่ค่ามารวมกันแล้วเก็บไว้ในตัวแปร

จากโจทย์ถ้าหากมีการรับข้อมูลก็ต้องประกาศตัวแปรส าหรับเก็บข้อมูล

และโจทย์บอกว่าหาผลรวมของเลขจ านวนเต็ม ดังนั้นตัวแปรควรเป็นตัวแปรที่

เก็บเลขจ านวนเต็ม

จงเขียนโปรแกรมหา

ค่าผลรวมของตัวเลข

จ านวนเต็ม 4 ค่า

Page 9: 3.8 การทำงานแบบลำดับ

วิธีที่ 1 ถ้าหากเป็นการก าหนดค่าข้อมูลโดยตรงจะเขยีนผงังานและโปรแกรมภาษาซีได้ดังนี้

#include<stdio.h>

#include<conio.h>

main()

{

int x1, x2, x3, x4, SUM;

x1 = 32;

x2 = 14;

x3 = 25;

x4 = 10;

SUM = x1 + x2 + x3 + x4;

printf(“SUM = %d\n”,SUM);

getch ();

return 0;

}

รูปแสดงเปรียบเทยีบผงังานและโปรแกรมภาษาซี

START

x1 = 32

x2 = 14

x3 = 25

x4 = 10

SUM = x1 + x2 + x3 + x4

WRITE SUM

END

ประกาศตวัแปร

เก็บจ านวนเต็ม

และผลรวม

สญัลักษณ์ของผัง

งานแสดงข้อมูล

ทางจอภาพ

Page 10: 3.8 การทำงานแบบลำดับ

วิธีที่ 2 ถ้าหากต้องการให้ก าหนดข้อมูลเพื่อหาผลรวมทันทีก็ท าได้โดยไม่ต้องประกาศตัวแปร สามารถ

เขียนผังงานและโปรแกรมได้ดังรูปด้านล่าง วิธีนี้จะท าให้โปรแกรมใช้หน่วยความจ าของคอมพิวเตอร์

น้อยลงด้วย เนื่องจากการประกาศตัวแปรหนึ่งตัวส าหรับเก็บเลขจ านวนเต็มคอมพิวเตอร์ต้องจอง

หน่วยความจ าให้กับตัวแปรนั้นจ านวน 4 ไบต์ (ส าหรบั DEV-C++)

#include<stdio.h>

#include<conio.h>

main()

{

int SUM;

SUM = x1 + x2 + x3 + x4;

printf(“SUM = %d\n”,SUM);

getch ();

return 0;

}

รูปแสดงการประมวลผลข้อมูลโดยตรงโดยไม่ตอ้งมีตวัแปรทุกตัว

START

SUM = x1 + x2 + x3 + x4

END

WRITE SUM

Page 11: 3.8 การทำงานแบบลำดับ

วิธีที่ 3 ถ้าหากต้องการรับข้อมูลทางแป้นพิมพ์ทีละตวัก็ท าได้ โดยจะต้องประกาศตวัแปรส าหรับรับข้อมูล

ทางแป้นพิมพ์ด้วย และการรับข้อมูลตัวเลขแต่ละตัวจะต้องใช้ฟังก์ชัน scanf() ดังผังงานและโปรแกรม

ในรูป #include<stdio.h>

#include<conio.h>

main()

{

int x1, x2, x3, x4, SUM;

scanf(“%d”&x1);

scanf(“%d”&x1);

scanf(“%d”&x1);

scanf(“%d”&x1);

SUM = x1 + x2 + x3 + x4;

printf(“SUM = %d\n”,SUM);

getch ();

return 0;

}

รูปแสดงผงังานและโปรแกรมส าหรับรับข้อมลูเข้าไปทลีะคา่

WRITE SUM

START

SUM = x1 + x2 + x3 + x4

END

READ x1

READ x2

READ x3

READ x4

สญัลักษณ์การรบั

ข้อมูลทางคีย์บอรด์

Page 12: 3.8 การทำงานแบบลำดับ

การแสดงล าดับการประมวลผลทางคณิตศาสตร์ของนิพจน์ต่างๆ

#include<stdio.h>

#include<conio.h>

int main ()

{

int a, b, c, d, e;

a = (3+4)*5;

b = 3 + 4 *5;

c = (2 + 7)*4%10;

d = 2 + 7*4%10;

e = 10 + 2 *8/4*3-5;

printf(“3+4)*5=%d\n”,a);

printf(“3 + 4 *5 =%d\n”,b);

Page 13: 3.8 การทำงานแบบลำดับ

ผลลัพธ์ที่ได้

Page 14: 3.8 การทำงานแบบลำดับ

โปรแกรมค านวณหาผลลัพธ์จากการหาร

#include<stdio.h>

#include<conio.h>

int main ()

{

int a, b;

float c;

a = 20;

b = 6;

c = 6;

printf(“20/6 = %d\n”,a/b); /*หารเอาเฉพาะส่วน*/

printf(“20%6 = %d\n”,a%b); /*หารเอาเฉพาะเศษ*/

Page 15: 3.8 การทำงานแบบลำดับ

printf(“20/6 = %f\n”,a/c); /*หารเอาทั้งเศษและส่วน*/

printf(“20%6 = %15f\n”,a%c); /*แสดงผลโดยจองพื้นที่ 15 ช่อง*/

printf(“20%6 = %.2f\n”,a%c); /*แสดงผลทศนิยม 2 ต าแหน่ง*/

getch ();

return 0;

}

Page 16: 3.8 การทำงานแบบลำดับ

ผลลัพธ์ที่ได้

Page 17: 3.8 การทำงานแบบลำดับ

ร้านขายผลไมแ้ห่งหนึง่ หากยอดซื้อเกิน 200 บาทจะลดราคาให้ 5% และถ้ายอดขายเกิน 400

บาท จะลดราคาให้ 10 % จงเขียนโปรแกรมให้ผู้ใช้ป้อนน้ าหนักของผลไม้ที่ซื้อเป็นกิโลกรัม

จากนั้นให้โปรแกรมแจ้งราคาที่ต้องช าระออกมา

#include<stdio.h>

#include<conio.h>

int main ()

{

int Price;

int Sale;

printf("Enter Price= ");

scanf("%d",&Price);

if(Price <= 200)

{

Sale = Price;

printf ("\n\nSale = %d", Sale);

}

Page 18: 3.8 การทำงานแบบลำดับ

else

if(Price <= 400)

{

Sale = (Price * 95)/100;

printf ("\n\nSale = %d", Sale);

}

else

if (Price > 400)

{

Sale = (Price * 90)/100;

printf ("\n\nSale = %d", Sale);

}

getch ();

return 0;

}

Page 19: 3.8 การทำงานแบบลำดับ

ผลลัพธ์ที่ได้

เมื่อซือ้สินคา้ 200 บาท

Page 20: 3.8 การทำงานแบบลำดับ

เมื่อซือ้สินคา้เกิน 200 บาท จะลดราคาให ้5%

Page 21: 3.8 การทำงานแบบลำดับ

ตั้งใจ

เรียน

กัน

หน่อย

เมื่อซือ้สินคา้เกิน 400 บาท จะลดราคาให ้10%

Page 22: 3.8 การทำงานแบบลำดับ

โปรแกรมค านวณค่าโทรศัพท์

ถ้าคิดค่าโทรศัพท์ดังนี้

นาทีแรก 3 บาท

นาทีที่ 2 – 2.50 บาท

นาทีที่ 3 – 1.50 บาท

นาทีที่ 4 – 1 บาท

นาทีที่ 5 เป็นต้นไป – 0.25 บาท

ถ้าโทรศัพท์ 7 นาทีจะเสียค่าโทรเป็นเงินกี่บาท

#include<stdio.h>

#include<conio.h>

int main ()

{

float Price;

int Minute;

printf("Enter Minute= ");

scanf("%d",&Minute);

Page 23: 3.8 การทำงานแบบลำดับ

if(Minute <= 1)

{

Price = 3;

printf ("\n\nPrice = %f", Price);

}

else

if(Minute <= 2)

{

Price = 5.50;

printf ("\n\nPrice = %f", Price);

}

else

if(Minute <= 3)

{

Price = 7;

printf ("\n\nPrice = %f", Price);

}

else

Page 24: 3.8 การทำงานแบบลำดับ

if(Minute <= 4)

{

Price = 8;

printf ("\n\nPrice = %f", Price);

}

else

if(Minute > 5)

{

Price = ((Minute - 4) * 0.25) + 8;

printf ("\n\nPrice = %f", Price);

}

getch ();

return 0;

}

Page 25: 3.8 การทำงานแบบลำดับ

ผลลัพธ์ที่ได้ เมื่อโทรศัพท์เป็นเวลา 7 นาที

Page 26: 3.8 การทำงานแบบลำดับ

ที่มา : คู่มืออบรมครูวิทยาศาสตร์ คณิตศาสตร์ คอมพิวเตอร์ โลก ดาราศาสตร์ และอวกาศ ระดับมัธยมศึกษาตอนปลาย

หนังสือเรียนรายวิชาเพิ่มเติม การเขียนโปรแกรมเบื้องต้นด้วยภาษา C บริษทซัคเซสมีเดีย

คู่มือเรียนเขียนโปรแกรมภาษา ส านักพิมพ์ IDC PREMIER