นิพจน์ - Ttime.in.th 4.pdf · Algorithm...

Preview:

Citation preview

นพจน

(Expression)

ดร.ธระยทธ ทองเครอ

ภาควชาวทยาการคอมพวเตอร คณะวทยาศาสตร

มหาวทยาลยขอนแกน

บทท 4

Algorithm ของโปรแกรมหาคาเฉลยจากตวเลข 3 ตว

2

4. หาคาผลรวมsum = a + b + c

5. หาคาเฉลยaverage = sum/3

Enter first value: 15

Enter second value: 20

Enter third value: 23

Average = 19.3333

1. รบคาแรกเกบในตวแปร a

2. รบคาทสองเกบในตวแปร b

3. รบคาทสามเกบในตวแปร c

Input Output

Processing

6. แสดงคาเฉลยจากตวแปร average

3

GET a

sum = a + b + c

Start

End

GET b

GET c

average = sum/3

PUT average

4. หาคาผลรวม

5. หาคาเฉลย

6. แสดงคาเฉลย

1. รบคาแรกเกบในตวแปร a

2. รบคาทสองเกบในตวแปร b

3. รบคาทสามเกบในตวแปร c

Algorithm ของโปรแกรมหาคาเฉลยจากตวเลข 3 ตว

สญลกษณ Flowchartชอ สญลกษณ

Flowchart บน RAPTORสญลกษณ

Flowchart ทวไป

เรมตน / สนสด

รบ Input

ประมวลผล(Processing)

แสดง output

4

EndStart

PUT "Hello"

GET name

x = x+1

โคดโปรแกรมหาคาเฉลยจากตวเลข 3 ตว

5

1 #include <stdio.h>23 void main() {45 int a, b, c;67 // 1. Input8 printf("Enter 3 values separate by space: ");9 scanf("%d %d %d", &a, &b, &c);1011 // 2. Processing12 float sum = a + b + c;13 float average = sum/3;1415 // 3. Output16 printf("Average = %f", average);17 }

GET a

sum = a + b + c

Start

End

GET b

GET c

average = sum/3

PUT average

นพจน คออะไรนพจน หรอ Expression คอ ประโยคทน าตวแปร หรอคาคงท มา

เชอมดวยตวด าเนนการ (Operator) เพอค านวณหรอประมวลผล

6

นพจนคณตศาสตร นพจนภาษาซ

𝑎 + 𝑏

𝑐𝑑(a + b) / (c * d)

10x + 3xy + 10y2 10 * x + 3 * x * y + 10 * y * y

ตวด าเนนการ (Operator)ตวด าเนนการทางคณตศาสตร (Arithmetic Operator)

ตวด าเนนการแบบสน (Shorthand Assignment Operator)

ตวด าเนนการยนาร (Unary Operator)

7

Operator ทางคณตศาสตร

8

ตวด าเนนการ ความหมาย ตวอยาง ผลลพธ+ การบวก 6+2 8- การลบ 6-2 4* การคณ 6*2 12/ การหาร 6/2 3

% การหารเอาเศษ(Modulo หรอ Modulus)

6%2 0

ล าดบความส าคญของ Operator

9

อนดบความส าคญ ตวด าเนนการ ล าดบการท างาน

1 ( ) วงเลบมล าดบการท างานเปนอนดบแรกหากมวงเลบซอนวงเลบ จะท าวงเลบในสดกอน

2 * หรอ / หรอ % ถามหลาย operator ใน Expression เดยวกน จะท าจากซายไปขวา

3 + หรอ - ถามหลาย operator ใน Expression เดยวกน จะท าจากซายไปขวา

3 * 4 % 6 / 2 + 5 3 * (4 % (6 / 2)) + 5

12 % 6 / 2 + 5

0 / 2 + 5

0 + 5

5

3 * (4 % 3 ) + 5

3 * 1 + 5

3 + 5

8

กจกรรมจงหาผลลพธจากนพจนตอไปน1. 15 * 2 / 3 + 2 % 2 2. (6 - 1) * 3 - 4 + 9 % 23. 6 - 1 * 3 - 4 + 9 % 24. 14 % 6 / 2 - 1 + 1 * 35. 14 % 6 / 2 - (1 + 1 * 3)

10

Operator แบบสน

11

ตวด าเนนการ ตวอยาง การประมวลผล

*= total *= 1.25 total = total * 1.25/= sum /= 3 sum = sum/3%= day %= 3 day = day%3+= count += 1 count = count + 1-= adjust -= 0.5 adjust = adjust - 0.5

ตวอยาง

12

#include <stdio.h>

void main() {

int a, b;a = 15;a += 2;printf("%d\n", a);

b = 15;b /= 5;printf("%d\n", b);

}

Unary Operator

13

ตวด าเนนการ ความหมาย รปแบบ ตวอยาง การท างาน ขอสงเกต

++ เพมคาหนงคาใหกบตวแปร

Postfix x = a++; x = aa = a + 1

ก าหนดคาใหตวแปร x กอนเพมคาใหตวแปร a

Prefix x = ++a; a = a + 1x = a

เพมคาใหตวแปร a กอนก าหนดคาใหตวแปร x

-- ลดคาหนงคาใหกบตวแปร

Postfix x = a--; x = aa = a – 1

ก าหนดคาใหตวแปร x กอนลดคาใหตวแปร a

Prefix x = --a; a = a - 1x = a

ลดคาใหตวแปร a กอนก าหนดคาใหตวแปร x

ตวอยาง

14

#include <stdio.h>

void main() {

int x,y;

x = 10;

++x;

printf("%d", x);

}

#include <stdio.h>

void main() {

int x,y;

x = 10;

x++;

printf("%d", x);

}

x = x+1 x = x+1

Output: 11 Output: 11

1

2

3

4

5

6

7

1

2

3

4

5

6

7

ตวอยาง

15

#include <stdio.h>

void main() {

int x,y;

x = 10;

y = ++x;

printf("%d", y);

}

#include <stdio.h>

void main() {

int x,y;

x = 10;

y = x++;

printf("%d", y);

}

x = x+1 y = x

Output: 11 Output: 10

1

2

3

4

5

6

7

1

2

3

4

5

6

7

y = x x = x+1

กจกรรมจงหา output ของโปรแกรม

16

# include <stdio.h>void main() {

int i, j;int x, y;i = j = 1;x = i-- + 1;y = --j + 1;printf("i = %d and j = %d \n",i,j);printf("x = %d and y = %d \n",x,y);

}

การแปลงชนดขอมลการแปลงขอมลแบบอตโนมต (Implicit Type Conversion)

การแปลงขอมลดวยตนเอง (Explicit Type Conversion)

17

ตวอยาง

18

นพจนภาษาซของ 1

𝑡𝑖𝑚𝑒+3𝑚𝑎𝑠𝑠

#include <stdio.h>

void main() {float time, mass;// 1. inputprintf("Time = ");scanf("%f", &time);

printf("Mass = ");scanf("%f", &mass);

// 2. processingfloat result;result = 1/(time + (3*mass));

// 3. outputprintf("Result = %f", result);

}

การแปลงชนดขอมลแบบอตโนมตการท างานของ Expression อาจมการค านวณกบชนดขอมลท

หลากหลาย เชน 15 / 5.2ชนดขอมลทมนยส าคญต ากวาจะถกแปลงไปเปนชนดขอมลทม

นยส าคญสงกวาเสมอCompiler จะเปนผแปลงชนดขอมลแบบอตโนมตผลลพธทไดจะเปนชนดขอมลทมนยส าคญสงทสดเรยกการแปลงนวา "Implicit Type Conversion"

19

นยส าคญของชนดขอมล

20

ชนดขอมล ความหมาย นยส าคญ

char ตวอกขระint เลขจ านวนเตม รวมเครองหมายunsigned int เลขจ านวนเตม ไมรวมเครองหมายlong int เลขจ านวนเตมแบบยาว รวมเครองหมายfloat เลขจ านวนจรง (มทศนยม)double เลขจ านวนจรง 2 เทา

ต าสด

สงสด

ตวอยาง

นพจน การแปลงชนดขอมล ชนดขอมลของผลลพธ

int – float แปลง int ไปเปน float float

float * double แปลง float ไปเปน double double

int / double แปลง int ไปเปน double double

(int + float) / double แปลง intไปเปน float (ท าในวงเลบกอน)จากนนแปลงคาทไดจากการบวกในวงเลบจากชนด float ไปเปน double

double

21

ตวอยาง

22

1. #include <stdio.h>

2. void main() {

3. int baht = 50;

4. int rate = 30;

5. float dollar = baht / rate;

6. printf("%d Thai Baht equals %.2f US Dollar", baht, dollar);

7. }

1. #include <stdio.h>

2. void main() {

3. int baht = 50;

4. float rate = 30;

5. float dollar = baht / rate;

6. printf("%d Thai Baht equals %.2f US Dollar", baht, dollar);

7. }

Output

Output

การแปลงชนดขอมลดวยตนเองนกพฒนาจะบงคบใหตวแปรนนเปนชนดขอมลทตองการดวย

การใสวงเลบหนาตวแปร ดงน

เรยกการแปลงนวา การท า Casting หรอ Explicit Type Conversion

23

(ชนดขอมลปลายทาง) ชอตวแปร

ตวอยางก าหนดให

1. ตวแปร a และ b เปนชนด integer2. ตวแปร c เปนชนด floating-point

(float) a แปลงจาก int ไปเปนขอมลชนด float

(float)(a-b) ท า a-b กอน แลวแปลงผลลพธไปเปนขอมลชนด float

(float)a/b แปลงตวแปร a ไปเปนชนด float จากนนคอยน าไปหารกบ b

24

ตวอยาง

25

1. #include <stdio.h>

2. void main() {

3. int baht = 50;

4. int rate = 30;

5. float dollar = baht / rate;

6. printf("%d Thai Baht equals %.2f US Dollar", baht, dollar);

7. }

1. #include <stdio.h>

2. void main() {

3. int baht = 50;

4. int rate = 30;

5. float dollar = baht / (float)rate;

6. printf("%d Thai Baht equals %.2f US Dollar", baht, dollar);

7. }

Output

Output

กจกรรมโปรแกรมหาพนทสามเหลยมตอไปนม Output ถกตองหรอไม

หากไมถกควรแกไขอยางไรใหผลลพธถกตอง

26

1 #include <stdio.h>23 void main() {4 float area;5 int base=5, height=7;67 area = 1 / 2 * base * height;8 printf("Area is %f", area);9 }

กจกรรม

1 / (float)2 * base * height

27

1 / 2 * (float)base * height

ผลลพธจากนพจนตอไปน ผลลพธทไดมความแตกตางกนหรอไม

ตวอยาง

28

โปรแกรมแปลงคานาท เปนคาชวโมงและนาททเหลอ โดยรบคานาทจากผใช และแสดงผลลพธออกทางหนาจอ

Enter minutes: 65

1 hour(s) 5 minutes

ตวอยางหนาจอโปรแกรม

ตวอยาง

29

Start

End

remainMinute = minute - (hour*60)

GET minute

PUT hour + " hour(s) " + remainMinute + "minutes"

#include <stdio.h>

void main() {

int minute;

// 1. Inputprintf("Enter minutes: ");scanf("%d", &minute);

// 2. Processingint hour = minute/60;int remainMinute = minute - (hour*60);

// 3. Outputprintf("%d hour(s) %d minutes", hour, remainMinute);

}

hour = minute/60

Flowchart และภาษาซชอ สญลกษณ

Flowchart ทวไปสญลกษณ

Flowchart บน RAPTORภาษาซ

เรมตน หรอ สนสด

void main() {}

รบ Input scanf("%c", &grade);

แสดง outputprintf("Hello %s", name);

ประมวลผล num = num + 1;

30

EndStart

PUT "Hello " + name

GET grade

num = num+1

กจกรรมจากโคดภาษาซดานลางนมขอผดพลาดอย จงแกไขใหถกตอง

31

ผลลพธ

#include <studio.h>

void main()

int k = 5.7

int v = 2;

printf ("k=%f v=%d" k v);

printf("Result = ", k*v)

}

กจกรรมจงเขยนโปรแกรมแปลงคา พ.ศ. (Buddhist Era) เปน ค.ศ.

(Christian Era) โดยรบคา พ.ศ. จากผใชTest case:

32

Enter year in Buddhist Era: 2557

Year in Christian Era: 2014

ตวอยางการท างาน

กจกรรมจงเขยนโปรแกรมหาพนทสเหลยมคางหม โดยรบคาทสตรตองการ

จากผใช และคาพนททค านวณไดออกทางหนาจอ

33

พนทสเหลยมคางหม =1

2× ผลบวกของดานคขนาน × สง

Test case: Input Output

ดานแรก = 2ดานทสอง = 3สง = 5

12.50

ดานแรก = 5.1ดานทสอง = 1.5สง = 3.7

12.21

กจกรรมจงเขยนโปรแกรมเพอหาผลลพธของนพจนตอไปน

3 + 4𝑥

5−

10 𝑦 − 5 𝑎 + 𝑏 + 𝑐

𝑥+ 9(

4

𝑥+9 + 𝑥

𝑦)

ก าหนดใหรบคา x, y, a, b, และ cTest case:

34

Input Output

x = 15

y = 3

a = 20

b = 6

c = 95

248.333328

x = 2

y = 1

a = 6

b = 19

c = -3

559.200012

Assignment#2ขอ 1. จงเขยนโปรแกรมแปลงหนวยความยาวจากเซนตเมตรเปนหนวยฟตและนว (1 นว = 2.54 เซนตเมตร และ 12 นว เทากบ 1 ฟต) โดยแสดงผลลพธตาม Test case ดงน

Test case:

35

Input Output

Input centimeters: 258.5 258.5 centimeters is 8 feet 5.77 inches

Input centimeters:478.942 478.9 centimeters is 15 feet 8.56 inches

Assignment#2ขอ 2. จงเขยนโปรแกรมแสดงจ านวนธนบตรและเหรยญทตองจายใหกบลกคา โดยรบจ านวนเงนจากผใช แลวค านวณหาจ านวนธนบตรและเหรยญแสดงผลออกทางหนาจอก าหนดใหมธนบตรชนด 1000, 500, 100, 50, 20 บาท และเหรยญชนด 10, 5, 1 บาทTest case:

36

Enter your money: 594

1000 : 0

500 : 1

100 : 0

50 : 1

20 : 2

coin-10 : 0

coin-5 : 0

coin-1 : 4 ตวอยางการท างาน

Enter your money: 10563

1000 : 10

500 : 1

100 : 0

50 : 1

20 : 0

coin-10 : 1

coin-5 : 0

coin-1 : 3 ตวอยางการท างาน

ค าสงจงออกแบบ Algorithm ดวยโปรแกรม Raptor ทดสอบใหไดผลลพธตาม Test case และบนทกไฟลสง โดยใหตงชอไฟลดงน

ขอ 1: Prob1_รหสนกศกษา.rapขอ 2: Prob2_รหสนกศกษา.rap

หลงจากนนสรางเปน Software โดยใชค าสงในภาษาซ เขยนตาม Algorithm ทออกแบบใน Raptor ทดสอบการท างานตาม Test case และบนทกไฟลสง โดยใหตงชอไฟลดงน (น าไฟล main.c มาเปลยนชอ ไมตองสงทง Project)

ขอ 1: Prob1_รหสนกศกษา.cขอ 2: Prob2_รหสนกศกษา.c

37

ก าหนดสงภาคปกต สงวนจนทรท 29 ส.ค. 59 เวลา 23.00 น.

ภาคสมทบ สงวนพธท 31 ส.ค. 59 เวลา 23.00 น.

38

Recommended