โครงสร้างข้อมูลและอัลกอริธึม

Download Report

Transcript โครงสร้างข้อมูลและอัลกอริธึม

อัลกอริธึมและการวิเคราะห์ ปัญหา
วัตถุประสงค์ การเรียนรู้
…M e N u…
2
1
• แบบทดสอบก่อนเรี ยน
2
• นิยามอัลกอริ ธึม
3
• การวิเคราะห์ปัญหา
.
3 • การออกแบบอัลกอริ ธึม
4 • โครงสร้างพื้นฐาน
5
• แบบทดสอบหลังเรี ยน
แบบทดสอบก่ อนเรียน
3
จงนาตัวอักษรหน้าข้อความเติมลงในช่องว่างให้ถูกต้อง
......... 1. ผังงาน
......... 2. อัลกอริธึม
......... 3. Input
......... 4. Output
......... 5. Pseudo Code
A. ลาดับขั้นตอนวิธีในการทางาน
ของโปรแกรม
B. การนาเข้ า ป้ อนเข้ าระบบ
C. เป็ น Flow Diagram ชนิดหนึ่ง
สาหรับใช้ อธิบายขั้นตอนการทางาน
D. การนาข้ อมูลออกจากระบบ
E. รหัสเทียม
MENU
นิยามอัลกอริธึม
4
 อัลกอริธึม (Algorithm) หมายถึง ลาดับขั้นตอนวิธีในการทางานของโปรแกรมเพื่อ
แก้ปัญหาใดปั ญหาหนึ่ ง ซึ่ งถ้าปฏิบตั ิตามขั้นตอนอย่างถูกต้องแล้ว จะต้องสามารถช่วย
แก้ปัญหาหรื อประมวลผลตามความต้องการได้สาเร็ จ
 ในการเขียนอธิ บายอัลกอริ ธึมนั้น เราสามารถคิดอัลกอริ ธึมเพื่อมาแก้ปัญหาได้หลาย
แบบ
ตัวอย่ าง
5
การต้ มไข่ ไก่
 วัตถุดิบ : ไข่ไก่ ผลลัพธ์ : ไข่ตม้ สุ ก
Algorithm 1
• ต้มน้ าให้เดือด
• ใส่ ไข่
• รอ 10 นาที
• ดับไฟ / ปิ ดเตา
• ปอกไข่
Algorithm 2
• ต้มน้ าให้เดือด
• ใส่ ไข่
• รอ 5 นาที
• ดับไฟ / ปิ ดเตา
Algotithm 1 Vs Algotithm 2
6
 ผลที่ได้เหมือนกันคือ ไข่ตม้
 ผลลัพธ์อลั กอริ ธึม 1 สามารถทานได้เลย ส่ วนอัลกอริ ธึม 2 ต้องปอกก่อนทาน
 สรุ ปคือ เราได้ผลลัพธ์ตามที่โจทย์ตอ้ งการคือ ไข่ตม้
Algotithm 3
7
การต้ มไข่ ไก่ทาน
 วัตถุดิบ : ไข่ ไก่ ผลลัพธ์ : ไข่ ต้มสุ ก
 Algorithm
 ต้มน้ าให้เดือด
 รอ 10 นาที
 ดับไฟ / ปิ ดเตา
 ปอกไข่
What’s up?
Algotithm 3
8
การต้ มไข่ ไก่ทาน
 วัตถุดิบ : ไข่ไก่ ผลลัพธ์ : ไข่ตม้ สุ ก
 Algorithm
 ต้มน้ าให้เดือด
 รอ 10 นาที
 ดับไฟ /
ปิ ดเตา
Algorithm นีจ้ ะไม่ ได้ ไข่ ต้ม
เพราะ....???
 ปอกไข่
MENU
การวิเคราะห์ ปัญหา
9
 กระบวนการทางานของคอมพิวเตอร์
Input
Process
Output
องค์ประกอบของงาน
 Input , Process , Output
การพิจารณา

ขั้นตอนการทางานเป็ นการนาเข้า ป้ อนเข้าระบบ ถือเป็ น Input
 ขั้นตอนเกี่ยวกับการกระทา(กริ ยา) ถือเป็ น Process
 ขั้นตอนการนาข้อมูลออกจากระบบ แสดงผล ถือเป็ น Output

Example
10
 เราลองนาขั้นตอนการต้มไข่มาวิเคราะห์
 ต้มน้ าให้เดือด
 ใส่ ไข่
 รอ 10 นาที
 ดับไฟ
 ปอกไข่
 ผลลัพธ์
=>
=>
=>
=>
=>
=>
การกระทา(Process)
การป้ อนข้อมูล(Input)
การกระทา(Process)
การกระทา(Process)
การกระทา(Process)
ไข่ตม้ สุ ก (Output)
การวิเคราะห์ ปัญหา
11
 การวิเคราะห์ปัญหา
วิเคราะห์ผลลัพธ์
(Output)
ข้อมูลที่นาเข้าสู่ ระบบคอมพิวเตอร์
ประกอบด้วยอะไรบ้าง
วิเคราะห์
Input
Process
เขียนขั้นตอนการแก้ปัญหา
Example
12
การโยนเหรี ยญเสี่ ยงทายเพื่อตัดสิ นใจว่าจะกินขนมปั งหรื อผลไม้ โดยมี
เงื่อนไขว่า ถ้าออกหัวกินขนมปั ง ถ้าออกก้อยกินผลไม้
 วัตถุดิบ : ผลการโยน
ผลลัพธ์ : กินอะไร(ผลไม้/ขนมปั ง)

1.
2.
3.
4.
5.
6.
7.
โยนเหรี ยญ
ดูเหรี ยญ
ถ้าออกหัว
ถ้าออกก้อย
กินขนมปั ง
กินผลไม้
หยุด
=>
=>
=>
=>
=>
=>
การกระทา (Process)
รับข้อมูล (Input)
ไปขั้นตอนที่ 5
ไปขั้นตอนที่ 6
ไปขั้นตอนที่ 7
ไปขั้นตอนที่ 7
MENU
การออกแบบอัลกอริธึม
13
 ในการเขียนอธิ บายอัลกอริ ธึมนั้น เราสามารถคิดอัลกอริ ธึมเพื่อมาแก้ปัญหาได้
หลายแบบ ซึ่ งในแต่ละแบบเครื่ องคอมพิวเตอร์ กจ็ ะใช้ในหน่วยความจา และ
เวลาในการประมวลผลไม่เท่ากัน ดังนั้น การจะเปรี ยบเทียบว่าโปรแกรม
คอมพิวเตอร์ ใครเก่งกว่ากันนั้นจึงใช้การเปรี ยบเทียบและประสิ ทธิ ภาพของ
อัลกอริ ธึมนัน่ เอง
 อัลกอริ ธึมของใครใช้เวลาในการประมวลผลและหน่วยความจาน้อยกว่า ถือว่า
อัลกอริ ธึมนั้นฉลาดกว่า
ประสิ ทธิภาพของอัลกอริธึม
14
 จะพิจารณาอยู่ 2 ส่ วนหลักๆ ดังนี้
 หน่วยความจา(memory)ที่จะต้องใช้ในการประมวลผล
 เวลา(time)ที่ใช้ในการประมวลผล
อัลกอริธึมต้ มมาม่ า
15
5
5
อัลกอริธึมทีด่ จี ะประกอบด้ วยคุณสมบัตติ ่ างๆดังนี้
16
 อัลกอริ ธึมที่ดีตอ้ งมีความถูกต้อง (correctness)
 อัลกอริ ธึมที่ดีตอ้ งง่ายต่อการอ่าน(readability)
 อัลกอริ ธึมที่ดีตอ้ งสามารถปรับปรุ งได้ง่ายต่ออนาคต(ease of modification)
 อัลกอริ ธึมที่ดีสามารถนากลับมาใช้ใหม่ได้(Reusability)
 อัลกอริ ธึมที่ดีตอ้ งมีประสิ ทธิ ภาพ (efficiency)
การควบคุมการทางานของโปรแกรม (Program Control Flow)
17
การควบคุมการทางานของโปรแกรม เป็ นเครื่ องมือที่ผพู้ ฒั นาโปรแกรมใช้ในการ
แสดงลาดับการทางานของโปรแกรมหรื อใช้อธิบายอัลกอริ ธึม ให้เป็ นระบบและ
ง่ายต่อความเข้าใจ โดยโครงสร้างอาจจะอยูใ่ นรู ปแบบดังนี้คือ
1. ผังงาน (Flowchart) ซึ่ งเป็ น Flow Diagram ชนิดหนึ่งสาหรับใช้อธิบายขั้นตอน
การทางานของโปรแกรมในลักษณะรู ปภาพ
2. ชุ ดคาสั่ งเทียม (Pseudocode) จะมีสัญลักษณ์คล้ายกับภาษาอังกฤษ ก้ ากึ่งระหว่าง
ภาษาอังกฤษกับภาษาคอมพิวเตอร์ ใช้ในการอธิ บายลักษณะโครงสร้างข้อมูล และ
การทางานของอัลกอริ ธึมที่เราเขียนขึ้น
Flow Chart และ Pseudo Code
18
Algorithm Summation
1. Sum = 0
2. Input (value1)
3. Input (value2)
4. Input (value3)
5. Sum = value1 + value2 + value3
6. Output (sum)
End .
การเขียนอัลกอริ ธึมการบวกเลข 3 ตัว ในรู ปแบบ
Pseudo Code
สั ญลักษณ์ ในผังงาน (Flow Chart)
สั ญลักษณ์ ในผังงาน (Flow Chart)
สั ญลักษณ์ ในผังงาน
ตัวอย่ างการเขียนผังงาน
22
 จงเขียนผังงานแสดงการเขียนและส่ งจดหมาย
ตัวอย่ างผังงานการทานยา
23
 จงเขียนผังงานแสดงรับประทานยา
วิธีการเขียนผังงานทีด่ ี
24
1. ใช้สัญลักษณ์ตามที่กาหนดไว้
2. ใช้ลกู ศรแสดงทิศทางการไหลของข้อมูลจากบนลงล่าง หรื อจากซ้ายไปขวา
3. คาอธิ บายในภาพสัญลักษณ์ผงั งานควรสั้นกะทัดรัด และเข้าใจง่าย
4. ทุกแผนภาพต้องมีลกู ศรแสดงทิศทางเข้า - ออก
5. ไม่ควรโยงเส้นเชื่อมผังงานที่อยูไ่ กลมาก ๆ ควรใช้สัญลักษณ์จุดเชื่อมต่อแทน
6. ผังงานควรมีการทดสอบความถูกต้องของการทางานก่อนนาไปเขียนโปรแกรม
จริ ง
MENU
โครงสร้ างพืน้ ฐานทีใ่ ช้ ในการเขียนโปรแกรม
25
1. โครงสร้ างแบบลาดับ (Sequence Structure)
2. โครงสร้ างแบบเลือก (Selection Structure)
3. โครงสร้ างแบบทาซ้าหรือวนรอบ (Repetition or Looping
Structure)
1. โครงสร้ างแบบลาดับ (Sequence Structure)
26
 ทางานตามลาดับ
 ทางานจากบนลงล่าง (จุดเริ่ มต้นถึงสิ้ นสุ ด)
 มีจุดเริ่ มต้นจุดเดียว – จุดสิ้ นสุ ดจุดเดียว
 อาจเรี ยกใช้โมดูลอื่นได้
ผังงานโปรแกรมโครงสร้ างแบบลาดับ
27
START
คำสัง่ 1
คำสัง่ 2
คำสัง่ 3
STOP
2. โครงสร้ างแบบเลือก (Selection Structure)
28
 มีเงื่อนไขที่ตอ้ งตัดสิ นใจเลือกการทางาน
 ผลลัพธ์ของเงื่อนไขคือ จริ ง หรื อ เท็จ เท่านั้น
2.1 Flowchart แบบหนึ่งทางเลือก
29
 แบบ 1 ทางเลือก หรือ โครงสร้ าง IF….THEN
 เป็ นโครงสร้างที่ทดสอบเงื่อนไข แล้วเลือกว่าจะทาหรื อไม่ทา ก่อนที่จะ
ไปทางานอื่นต่อไป
เงื่อนไข
ไม่ใช่
งานต่อไป
ใช่
งานที่ตอ้ งทา
2.1 Flowchart แบบหนึ่งทางเลือก
30
 ตัวอย่าง โครงสร้าง IF….THEN
 แม่ถามว่าหิ วข้าวหรื อไม่ ถ้าหิ วก็ให้กิน ถ้าไม่หิวไม่ตอ
้ งกิน แล้วจึง เดินงานไป
โรงเรี ยน (งานต่อไป)
หิวใช่ไหม?
ใช่
ไม่ใช่
เดินทางมาเรี ยน
กินข้าว
2.2 Flowchart แบบสองทางเลือก
31
แบบ 2 ทางเลือก หรือ โครงสร้ าง IF…THEN...ELSE
ไม่ใช่
งาน 2
เงื่อนไข
ใช่
งาน 1
2.2 Flowchart แบบสองทางเลือก
32
แบบ 2 ทางเลือก หรือ โครงสร้ าง IF…THEN...ELSE
เท็จ/FALSE
คำสัง่ A
รหัสเทียม
IF
……………..
THEN …..(คำสั่งB)…..
ELSE ..…(คำสั่งA)...…
END IF
เงือ่ นไข
จริง/TRUE
คำสัง่ B
2.2 Flowchart แบบหลายทางเลือก
33
เริ่ มต้น
แบบหลายทางเลือก หรือ โครงสร้ าง ELSE…IF
รหัสเทียม
IF
…เงื่อนไข 1…..
THEN …คำสั่ งเมื่อเป็ นจริ ง..
ELSE IF …เงื่อนไข 2…..
THEN …คำสั่ งเมื่อเป็ นจริ ง..
….
….
ELSE …เมื่อไม่เข้าเงื่อนไขใดๆ
ใช่
คาสั่งเมื่อเป็ นจริ ง
เงื่อนไข 1
ไม่ใช่
เงื่อนไข 2
ใช่
คาสั่งเมื่อเป็ นจริ ง
ไม่ใช่
เงื่อนไข 3
จบงาน
33
ตัวอย่ าง โปรแกรมประมวลผลการเรียน
34
เงื่อนไข
-คะแนนสอบสู งกว่ า 80 คะแนน ได้ เกรด A
-คะแนนสอบ 70-79 คะแนนขึน้ ไป ได้ เกรด B
-คะแนนสอบ 60-69 คะแนนขึน้ ไป ได้ เกรด C
-คะแนนสอบ 50-59 คะแนนขึน้ ไป ได้ เกรด D
-คะแนนสอบต่ากว่ า 50 คะแนน ได้ เกรด F
START
ตัวอย่ำง
Read Score
Y
35
Score>=80
N
Y
Grade = ‘A’
N
Score>=70
Y
Grade = ‘B’
Grade = ‘C’
Score>=60
Y
Grade = ‘D’
Write Grade
STOP
N
Score>=50
N
Grade = ‘F’
ตัวอย่ าง โปรแกรมประมวลผลการเรียน
36
อัลกอริธึม
1. เริ่มต้ นทางาน
2. รับค่ า คะแนนสอบ (Score)
3. เปรียบเทียบคะแนนสอบ>=80 ถ้ าเป็ นจริง ให้ ทา
นิพจน์ Grade=‘A’ ถ้ าเป็ นเท็จ ให้ เปรียบเทียบ
คะแนนสอบ >=70 ถ้ าเป็ นจริง ให้ ทานิพจน์
Grade=‘B’ ถ้ าเป็ นเท็จ ให้ เปรียบเทียบคะแนน
สอบ >=60 ถ้ าเป็ นจริง ให้ ทานิพจน์ Grade=‘C’
ถ้ าเป็ นเท็จ ให้ เปรียบเทียบคะแนนสอบ >=50 ถ้ า
เป็ นจริง ให้ ทานิพจน์ Grade=‘D’ ถ้ าเป็ นเท็จ ให้
ให้ ทานิพจน์ Grade=‘F’
4. แสดงผล เกรด (Grade)
5. จบการทางาน
รหัสเทียม (Pseudo Code)
Begin
READ Score
IF Score >= 80
THEN Grade = ‘A’
ELSE IF Score >=70
THEN Grade = ‘B’
ELSE IF Score >=60
THEN Grade = ‘C’
ELSE IF Score >=50
THEN Grade = ‘D’
ELSE Grade = ‘F’
WRITE Grade
End
3. โครงสร้ างแบบทาซ้าหรือวนรอบ (Repetition or Looping Structure)
37
1. การวนซ้าแบบทดสอบเงื่อนไขก่ อน
2. การวนซ้าแบบทดสอบเงื่อนไขทีหลัง
3. การวนซ้าแบบวนซ้าแน่ นอน
3. โครงสร้ างแบบทาซ้าหรือวนรอบ (Repetition or Looping Structure)
38
3.1 การวนซ้าแบบทดสอบเงื่อนไขก่ อน หรือ While
 ลูปแบบ While ในการทางานครั้งแรกจะตรวจสอบเงือ่ นไขก่ อนทุกครั้ง ก่ อนจะเข้ า
ลูปการทางาน แต่ เมือ่ พบว่ าเงือ่ นไขเป็ นเท็จจะออกจากลูปทันที
While จริ ง
(เงื่อนไข)
เท็จ
ออกจากวนรอบ(ลูป)
กลุ่มคาสัง่ ที่
ต้องทาซ้ า
ตัวอย่ าง โปรแกรมแสดงเลข 1-5
39
1.
2.
3.
4.
อัลกอริธึม
เริ่มต้ นทางาน
กาหนดค่ าเริ่มต้ นตัวเลข
Number=1
ถ้ า Number ยังน้ อยกว่ าหรือ
เท่ ากับ 5 ให้ พมิ พ์ค่าของ
Number และให้ เพิม่ ค่ า Number
ครั้งละ 1 ค่ า แต่ ถ้าเป็ นเท็จให้ ออก
จากการทางาน
จบการทางาน
รหัสเทียม (Pseudo Code)
Begin
Number = 1
While Number <= 5
{
Write Number
Number=Number+1
}
End
3.1 Flowchart แบบวนลูป ชนิด While Loop
40
START
ตัวอย่าง โปรแกรมบวกเลข 1 ถึง 5
Sum = 1+2+3+4+5
number = 1 , Sum=0
NO
เงือ่ นไขในการหยุด ?
While number <= 5
YES
Sum = Sum+number
number = number+1
Print Sum
END
ตัวอย่ าง โปรแกรมแสดงผลบวกเลข 1-5
41
1.
2.
3.
4.
5.
อัลกอริธึม
เริ่มต้ นทางาน
กาหนดค่ าเริ่มต้ นตัวเลข
Number=1 และผลรวม Sum=0
ถ้ า Number ยังน้ อยกว่ าหรือ
เท่ ากับ 5 ให้ บวกค่ าของ Number
เก็บไว้ ที่ Sum วนรอบจนกว่ า
เงือ่ นไขเป็ นเท็จให้ ออกจากการ
ทางาน
แสดงผลการบวก
จบการทางาน
รหัสเทียม (Pseudo Code)
Begin
End
3.2 Flowchart แบบวนลูป ชนิด Do-While
42
3.2 การวนซ้าแบบทดสอบเงื่อนไขทีหลัง หรือ ชนิด Do-While
 ลูปแบบ Do-While การทางานครั้งแรกจะไม่ มกี ารตรวจสอบเงือ่ นไขแต่ จะเข้ าไปทางาน
ในลูปอย่ างน้ อย 1 ครั้ง แล้ วจึงไปตรวจสอบเงือ่ นไข
กลุ่มคาสั่ งทีต่ ้ องการวนซ้า
Do-While
เงือ่ นไข
No
Yes
DO WHILE
43
 มีเงือ่ นไขในการหยุดการทางาน
 ได้ ทางานอย่ างน้ อย 1 ครั้ง
 หลังจากนั้นในแต่ ละครั้งจะมีตรวจสอบเงือ่ นไข
ถ้ าเงือ่ นไขเป็ นจริงก็จะวนรอบทางานต่ อ
ถ้ าเป็ นเท็จจะออกจากลูป
3.3 Flowchart แบบวนลูป ชนิด For
44
3.3 การวนซ้าแบบวนซ้าแน่ นอน หรือ For
 ลูปแบบ For จะไม่ มเี งือ่ นไขในการทางาน แต่ จะหยุดทางานเมือ่ วนลูปครบตาม
จานวนที่ต้องการ
จริ ง
For
(เงื่อนไข)
เท็จ
ออกจากวนรอบ(ลูป)
กลุ่มคาสัง่ ที่
ต้องทาซ้ า
3.3 Flowchart แบบวนลูป ชนิด For
45
ตัวอย่ าง จงเขียนผังงานแสดงการทางานของการแสดงค่ าตัวเลข
ตั้งแต่ เลข 1 ถึงเลข 10
วิเคราะห์
 จานวนรอบ
10 รอบ
 ผลลัพธ์ คือ แสดงตัวเลข 10 จานวน ตั้งแต่ เลข 1 ถึงเลข 10
 ข้ อมูลเข้ า คือ การกาหนดค่ าเริ่มต้ นให้ ตวั แปรนับรอบใช้ ตวั แปรเป็ น i
 การประมวลผล คือ ทาการวนรอบแสดงตัวเลข 10 รอบ
แสดงตัวเลข ตั้งแต่ เลข 1 ถึงเลข 10
3.3 Flowchart แบบวนลูป ชนิด For
46
ตัวอย่าง แสดงการทางานของการแสดง
ค่ าตัวเลข
ตั้งแต่ เลข 1 ถึงเลข 10
ถ้ าแสดงตัวเลขครบแล้วให้ แสดง
ข้ อความว่ า “Very Good”
START
i=1
for i <= 10
YES
Display i
i = i+1
END
NO
Print “Very
Good”
ตัวอย่ าง โปรแกรมแสดงผลบวก 1-10
47
1.
2.
3.
4.
5.
6.
อัลกอริธึม
เริ่มต้ นทางาน
กาหนดค่ าเริ่มต้ นตัวเลข i=1
ถ้ า i ยังน้ อยกว่ าหรือเท่ ากับ 10
ให้ พมิ พ์ค่า i และเพิม่ ค่ า i ทีละ 1
ค่ า i=i+1
ทาข้ อ 3 ไปเรื่อยๆ จนกว่ าค่ าของ
i จะเป็ นเท็จ
พิมพ์ข้อความ “Very Good”
จบการทางาน
รหัสเทียม (Pseudo Code)
Begin
i=1
for i<=10
{
Write i
i=i+1
}
Write “Very Good”
End
ประโยชน์ ของผังงาน
48
1. ลาดับขั้นตอนการทางานของโปรแกรม และสามารถนาไปเขียนโปรแกรมได้
โดยไม่สับสน
2. ตรวจสอบความถูกต้อง และแก้ไขโปรแกรมได้ง่าย เมื่อเกิดข้อผิดพลาด
3. การปรับปรุ ง เปลี่ยนแปลง แก้ไข ทาได้อย่างสะดวกและรวดเร็ ว
4. ทาให้ผอู ้ ื่นสามารถศึกษาการทางานของโปรแกรมได้อย่างง่าย และรวดเร็ วมาก
ขึ้น
แบบฝึ กหัด
49
จงเขียน ผังงาน ขั้นตอนการรับประทานยา
1. โปรแกรมแสดงขนาดของการใช้ ยาตามอายุของผู้ใช้
อายุมากกว่า 10 ปี แสดงข้อความรับประทานครั้งละ 3 ช้อนชา
อายุ
6-10 ปี แสดงข้อความรับประทานครั้งละ 2 ช้อนชา
อายุ
2-5 ปี แสดงข้อความรับประทานครั้งละ 1 ช้อนชา
เด็กอายุต่ากว่า 1 ปี ห้ามรับประทาน
แบบฝึ กหัด
50
จงเขียน ผังงาน ขั้นตอนการทาไข่ เจียว
o เริ่ มต้น
o เตรี ยมอุปกรณ์ให้พร้อม
o ตั้งกระทะ
o ตีไข่ใส่ ถว้ ย
o ใส่ น้ ามัน
o ตรวจดูวา่ ร้อนหรื อไม่
• ถ้าร้อน ให้ ใส่ ไข่ลงไป
• ถ้าไม่ร้อน ให้ไปทาข้อ 6.
o ตรวจดูวา่ สุ กหรื อไม่
ถ้าสุ ก ให้ ทาข้อ 8.
ถ้าไม่สุก ทาข้อ 7.
o ตักใส่ จาน
o สิ้ นสุ ด
MENU