Upload
others
View
1
Download
0
Embed Size (px)
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