2110101 : การทําโปรแกรมคอมพ ิวเตอร...
TRANSCRIPT
2110101 : การทาโปรแกรมคอมพวเตอร
ประเภทของขอมล ตวแปร และตวปฏบตการพนฐาน
ภาควชาวศวกรรมคอมพวเตอรจฬาลงกรณมหาวทยาลย
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 2
หวขอ
• สงทตองรกอนทาโปรแกรม• ประเภทขอมล
– จานวนเตม– จานวนจรง
• ตวแปร– การประกาศ– กฏการตงชอ
• ตวปฏบตการ + – * / %• นพจน
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 3
การศกษาภาษาการทาโปรแกรม
• ไวยากรณของภาษา– เขยนอยางไร ใหถกกฏ ตวแปลภาษาเขาใจ
• คาสง– มอะไรใหใช ใหนามาประกอบกน (ตามไวยากรณ) เพอแกไขปญหาทตองการ
• ประเภทขอมล– เลอกใชประเภทขอมลใหเหมาะสมกบงานเพอประสทธภาพ และความถกตองในการทางาน
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 4
ไวยากรณของภาษาการทาโปรแกรม
• ไมซบซอน• ไมกากวม• แตผดนดผดหนอยไมได (ตองเขยนถก 100%)
public class Hello1
Public static void main(String [] a)
system.out.println('Hello 2110101')
public class Hello1
Public static void main(String [] a)
system.out.println('Hello 2110101')
compiler จะแจงตาแหนงและสาเหตของความผดพลาด
ตวใหญ
ตวเลก
เกน " "ม ;
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 5
คาสงและคลงคาสงของจาวา
• keywords : มทงสน 47 ตว (เชน do,while, if, else, switch, ...)
• operators : มวธปฏบตการทางคณตศาสตรและตรรกศาสตรทงสน 40 วธ (เชน +, –, *, /, %, +=, ...)
• library : มคลงคาสงขนาดใหญมโหฬารใหเรยกใชไดเปนหมน (เชน sqrt, cos, sort, clone, getTimeZone, getLocale, getWordInstance, ...)
60%
1%
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 6
ประเภทขอมล
• ประเภทพนฐาน– ม 8 ประเภท
• จานวนเตม : byte, short, int, long• จานวนจรง : float, double• อกขระ : char• ตรรกะ : boolean
– ออกแบบเพมเตมไมได
• ประเภท class– มแบบมาตรฐานเกอบสามพนแบบ
• เชน String, Text, Rectangle, ...
– ออกแบบเองเพมเตมได
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 7
ประเภทขอมล : วตถประสงค
• ระบบใชเนอทหนวยความจาอยางเหมาะสม– byte (1 ไบต), short (2 ไบต), int (4 ไบต),long (8 ไบต), float (4 ไบต), double (8 ไบต),char (2 ไบต)
• ระบบประมวลผลอยางมประสทธภาพ(เชน ประมวลผลจานวนเตมแบบ int ไมชากวาแบบ long)
• compiler ตรวจสอบความถกตองของโปรแกรมได• ผเขยนบอกจดประสงคของการใชขอมล• คนอนอานเขาใจโปรแกรมไดงาย
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 8
ประเภทจานวนเตม (integer)
• จานวนเตม (ไมมจดทศนยม)เชน 1023, 76289, 0, –10, +67392
• มสขนาด ขนกบชวงของจานวนทใช– byte (-128 ถง 127)– short (-32678 ถง 32767)– int (-2147483648 ถง 2147483647)– long (-263 ถง 263 - 1)
โดยทวไปใช intโดยทวไปใช int
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 9
ประเภทจานวนจรง (real number)
• จานวนทมจดทศนยมไดเชน 102.0, 3.14159, 0.0, -10.8, +0.3333
• จาวาเกบจานวนจรงแบบ floating point10000000 เกบ 0.1x108 , 0.0000012 เกบ 0.12x10-5
• มสองขนาด ขนกบความละเอยดของจานวนทเกบ– float เกบประมาณ 6-9 ตาแหนงหลงจดทศนยมในชวง
( -3.4x1038 ถง -1.4x10-45 ศนย และ 1.4x10-45 ถง 3.4x1038)– double เกบประมาณ 15-17 ตาแหนงหลงจดทศนยมในชวง
( -1.8x10308 ถง -4.9x10-324 ศนย และ 4.9x10-324 ถง 1.8x10308)
โดยทวไปใช doubleโดยทวไปใช double
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 10
ทาไมตองมจานวนเตม จานวนจรงนาจะพอ ?
• float เกบขอมลในชวงทกวางกวา int มากๆ• int เกบขอมลไดทกๆ ตวทเปนไปไดในชวง• float เกบไดบางตวเทานน (เพราะเกบจานวนตวเลขหลงจดทศนยมไดจากด)
• ตวอยาง– int เกบคา 2147483647 ได– float เกบคา 2147483647 ไมได
ถายดเยยดให จะเกบเปน 2.14748365 x 109
ประเภทขอมลพนฐาน ประมวลผลไดเรวมาก เพราะมขนาดจากด และฮารดแวรรองรบการทางานโดยตรงประเภทขอมลพนฐาน ประมวลผลไดเรวมาก เพราะมขนาดจากด และฮารดแวรรองรบการทางานโดยตรง
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 11
ประเภทอกขระ (character)
• ขอมลแบบ char คอตวอกขระหนงตว• อกขระ (character) คอ
– ตวอกษร (ในภาษาตางๆ )เชน 'a', 'b', 'A', 'B', 'Ω', 'Ж', 'ก', 'ข'
– ตวเลข 0-9 (ในภาษาตางๆ )เชน '1', '2', '๑', '๒'
– สญลกษณพเศษ (ในภาษาตางๆ )เชน '#', '$', '฿', '๛'
– รหสควบคมอปกรณเชน '\n' ตวขนบรรทดใหม '\t' ตว tab
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 12
ประเภทสายอกขระ (String)
• String คอลาดบของ char จานวนศนยตวขนไป– "engineering"– "[email protected]"– "วศวกรรมศาสตร"– "Hello How are you?" – ""
"1004" ไมเหมอนกบ 1004"1004" ไมเหมอนกบ 1004
"" มความหมาย แต '' ไมม"" มความหมาย แต '' ไมม
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 13
ประเภทตรรกะ (boolean)
• boolean
• มไดแคสองคาคอ true และ false เทานน• 1 ไมไดแทน true 0 ไมไดแทน false
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 14
ตวแปร (Variable)
• ตวแปรเปนทเกบขอมลชวคราวของโปรแกรม• ตวแปรทกตวมชอและประเภทขอมลกากบ• ตองประกาศตวแปรกอนทจะนามาใช
public class Zombie
public static void main(final String[] args ) int counter = 0;double radius = 5.225;boolean success = false;String name = "somchai";
...
public class Zombie
public static void main(final String[] args ) int counter = 0;double radius = 5.225;boolean success = false;String name = "somchai";
...
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 15
ตวแปร
• ตวแปรเปนทเกบขอมลชวคราว• การนาขอมลทเกบในตวแปรมาใช ไมทาใหขอมลทเกบในตวแปรสญหาย
• การนาขอมลใหมเกบใสตวแปร เปนการแทนทขอมลเดม (ระบบไมเกบสาเนาขอมลเดมไว)
int numCircles = 27, k;
System.out.println( numCircles );System.out.println( numCircles );
k = 35;numCircles = k;
27int numCircles
??int k
35int numCircles
35int k
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 16
การประกาศตวแปร
int counter = 0;double radius = 5.225;boolean success = false;char korKai = 'ก';String name = "somchai";
int counter = 0;double radius = 5.225;boolean success = false;char korKai = 'ก';String name = "somchai";
ประเภทขอมล ชอตวแปร คาเรมตนของขอมลทเกบในตวแปร
int i = 100, j = 200;double x0, y0, z0;double x1, y1 = 4.5, z1 = 7.8;
int i = 100, j = 200;double x0, y0, z0;double x1, y1 = 4.5, z1 = 7.8;
ประกาศบรรทดละหลายตว หรอจะไมใสคาเรมตนกได
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 17
ตวอยางการประกาศตวแปรทผด
int counter = 0.75;double radius = "15.25";boolean success = 1;
int counter = 0.75;double radius = "15.25";boolean success = 1;
integer counter;doublE radius = "15.25";string title = ”WWW";
integer counter;doublE radius = "15.25";string title = ”WWW";
ใสคาเรมตนทผดประเภท
นยามประเภทขอมลทไมรจก
int boolean;double public = 12.7;String 12X = ”WWW";
int boolean;double public = 12.7;String 12X = ”WWW";
ตงชอตวแปรผดกฏ
int counterint counter
ไมไดปดทายบรรทดดวย ;
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 18
กฎการตงชอ
• ชอประกอบดวยตวอกษร ตวเลข ตว $ หรอ _ กได• ชอหามขนตนดวยตวเลข• ชอยาวๆ ไดไมเปนไร• ตวอกษรตวใหญไมเหมอนตวเลก• ตองไมซากบคาสงวนของภาษาจาวา• ตองไมซากบชออนๆ ของโปรแกรม (เชน ชอ class )
ตวอยางถก
int17 butterCup Public int2String day_of_weekint17 butterCup Public int2String day_of_week
ตวอยางผด
7zean I.love.you public ohOH! ed-edd-n-eddy7zean I.love.you public ohOH! ed-edd-n-eddy
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 19
คาสงวนในภาษาจาวา
abstract assert boolean break bytecase catch char class constcontinue default do double elseextends false final finally floatfor goto if implements importinstanceof int interface long nativenew null package private protectedpublic return short static strictfpsuper switch synchronized this throwthrows transient true try voidvolatile while
หามนาคาสงวนมาตงเปนชอตวแปร
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 20
ธรรมเนยมนยมในการตงชอ
• ตวแปร : ขนตนดวยตวอกษรตวเลก• class : ขนตนดวยตวอกษรตวใหญ• หลกเลยงการใช _ และ $• สอความหมาย• ถาชอประกอบดวยคาหลายคา เขยนแบบ "หลงอฐ"
numStudents dayOfWeek imageBuffer
tvChannel customerID initialVelocity
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 21
ตวปฏบตการพนฐาน : จานวนเตม
• บวก ลบ คณ หาร และเศษเหลอจากการหาร( + – * / % )
int i=1, j=2, k;
k = i + j;
i = k * j;
j = i / 2;
k = i % 2;
i = (j + k) * 3;
1
int i int j int k
2 ?
1 2 3
6 2 3
6 3 3
6 3 0
9 3 0
ทาเปนลาดบจากบนลงลาง
การเปลยนแปลง
คาของตวแปร
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 22
ตวปฏบตการพนฐาน : จานวนจรง
• บวก ลบ คณ หาร และเศษเหลอจากการหาร( + – * / % )
double x=1.0, y=2.0;
x = y + 5.0;
y = x / 2.0;
x = y % 3.0;
y = (x * 3.0) + 2.0;
x = -0.5 - y;
1.0
double x double y
2.0
7.0 2.0
7.0 3.5
0.5 7.0
0.5 3.5
- 4.0 3.5
ทาเปนลาดบจากบนลงลาง
การเปลยนแปลง
คาของตวแปร
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 23
การใหคาตวแปร (Assignment)
• ใชเครองหมาย =
ตวแปร = นพจน ;ตวแปร = นพจน ;
ชอตวแปรทรบคา นพจน ทใหเปนผลลพธซงมประเภทขอมลเดยวกบตวแปรทรบคา
x = (-b + Math.sqrt(b*b - 4*a*c)) / (2.0*a);x = (-b + Math.sqrt(b*b - 4*a*c)) / (2.0*a);
2.5
3.6
1.0
double a
double b
double c
-0.376
double x
aacbb
242 −+−-0.376
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 24
นพจน (Expression)
• คาคงตว ตวแปร ฟงกชน (หรอ method) หรอ• การรวมกนของคาคงตว ตวแปร ฟงกชน นพจนยอย ดวยตวปฏบตการ และเครองหมายวงเลบปดเปด ทสามารถคานวณคาได
(-b + Math.sqrt(b*b - 4.0*a*c)) / (2.0*a)(-b + Math.sqrt(b*b - 4.0*a*c)) / (2.0*a)
โดยทวไปจะเตมชองวางเพอใหอานงาย และเตมวงเลบเพอกาจดความกากวม
3259
+c
aacbb
242 −+−
((9.0 * c) / 5.0) + 32.0
(((9.0) * (c)) / (5.0)) + (32.0)
9.0*c/5.0+32.0
((9.0 * c) / 5.0) + 32.0
(((9.0) * (c)) / (5.0)) + (32.0)
9.0*c/5.0+32.0
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 25
ตวอยาง
i = j;i = j; นาคาของตวแปร j ไปใสในตวแปร i
i = i + j;i = i + j; นาคาของตวแปร i และ j มาบวกกนแลวนาผลบวกทไดไปใสในตวแปร i
int i=1, j=2;
i = i + j;
j = j + j + j;
1 2
3 2
3 6
int i int j
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 26
ตวอยาง
x = -x;
f = ((9.0 * c) / 5.0) + 32.0;
c = 5 * (f - 32.0) / 9.0;
d = Math.sqrt(dx*dx + dy*dy);
x = -x;
f = ((9.0 * c) / 5.0) + 32.0;
c = 5 * (f - 32.0) / 9.0;
d = Math.sqrt(dx*dx + dy*dy);
3259
+←cf
xx −←
9)32(5 −
←fc
22 yxd ∆+∆←
yyxxd ∆∆+∆∆← )(
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 27
กฎการพจารณาลาดบการคานวณ
• ทาภายในวงเลบทากอน• ในกรณมตวปฏบตการหลายตว ทาตามลาดบดงน
– การเรยกใช method– unary – +– * / %– + –– =
• ทาจากซายไปขวา (ในกรณท operator มศกดศรเทากน)
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 28
วงเลบกาหนดลาดบการคานวณ
x = ((9.0 * c) / 5.0) + 32.0x = ((9.0 * c) / 5.0) + 32.0
*
/
+
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 29
ตวปฏบตการกาหนดลาดบการคานวณ
x = (-b + Math.sqrt(b*b - 4.0*a*c)) / (2.0*a)x = (-b + Math.sqrt(b*b - 4.0*a*c)) / (2.0*a)
* *
*
-
*-
Math.sqrt()
+
/
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 30
ตวอยางผดๆ
int i, k = 9;
double x = 1.0;
k = i; // i is uninitialized
i = x; // assign double to int
i = 3k; // no operator
3.0 * x + 5.78; // not a complete statement
i = 3--k; // should be i = 3 - (-k)
i = (k + 5; // incomplete parentheses
int i, k = 9;
double x = 1.0;
k = i; // i is uninitialized
i = x; // assign double to int
i = 3k; // no operator
3.0 * x + 5.78; // not a complete statement
i = 3--k; // should be i = 3 - (-k)
i = (k + 5; // incomplete parentheses
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 31
โปรแกรมแปลงหนวยเรเดยนเปนองศา
• Requirement– โปรแกรมรบมมหนวยเปนเรเดยนแลวแปลงเปนองศา
• Analysis– รบมม x เปนจานวนจรงผานทางแปนพมพ– x เรเดยนมคาเทากบ องศา
– แสดงมมหนวยเปนองศาทหาไดทางจอภาพ
• Design– เขยนผงงาน
• Implementation– เขยนโปรแกรม
xx 296.572
360≈
π
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 32
ผงงาน โปรแกรม และการทดสอบ
จบการทางาน
เรมการทางาน
รบมม (radian)เกบใสตวแปร x
57.296 * x
import jlab.JLabIO;
public class Radian2Degree
public static void main(String[] args) double x, d;x = JLabIO.readDouble("input radian : ");d = 57.296 * x;System.out.println(d);
import jlab.JLabIO;
public class Radian2Degree
public static void main(String[] args) double x, d;x = JLabIO.readDouble("input radian : ");d = 57.296 * x;System.out.println(d);
JLab>java Radian2Degree
input radian : 3171.888JLab>
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 33
โปรแกรมแปลงหนวยเรเดยนเปนองศา
import jlab.JLabIO;
public class Radian2Degree
public static void main(String[] args) double x, d;x = JLabIO.readDouble("input radian : ");d = 180.0 * x / Math.PI;System.out.println( x + " radians = " + d + " degrees");
import jlab.JLabIO;
public class Radian2Degree
public static void main(String[] args) double x, d;x = JLabIO.readDouble("input radian : ");d = 180.0 * x / Math.PI;System.out.println( x + " radians = " + d + " degrees");
JLab>java Radian2Degree
input radian : 33.0 radians = 171.88733853924697 degreesJLab>
π• ในจาวามคา ใหใช• Math.PI = 3.14159265358979323846
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 34
โปรแกรมหา R จากการตอ R 3 ตวแบบขนาน
• Requirement– โปรแกรมหาความตานรวมจากการตอความตานทาน 3 ตวแบบขนาน
• Analysis– รบคาความตานทาน (K ohms) 3 ตวจากแปนพมพ
– แสดงคาความตานทานรวม ทางจอภาพ
• Design– เขยนผงงาน
• Implementation– เขยนโปรแกรม
321
1111
rrr++
r1
r2
r3
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 35
ผงงาน โปรแกรม และการทดสอบ
จบการทางาน
เรมการทางาน
รบ r1 r2 และ r3
import jlab.JLabIO;
public class ParallelResistance
public static void main(String[] args) double r1, r2, r3, r;r1 = JLabIO.readDouble("r1 (Kohms) = ");r2 = JLabIO.readDouble("r2 (Kohms) = ");r3 = JLabIO.readDouble("r3 (Kohms) = ");r = 1.0 / (1.0/r1 + 1.0/r2 + 1.0/r3);System.out.println("R (parallel) = "
+ r + " Kohms");
import jlab.JLabIO;
public class ParallelResistance
public static void main(String[] args) double r1, r2, r3, r;r1 = JLabIO.readDouble("r1 (Kohms) = ");r2 = JLabIO.readDouble("r2 (Kohms) = ");r3 = JLabIO.readDouble("r3 (Kohms) = ");r = 1.0 / (1.0/r1 + 1.0/r2 + 1.0/r3);System.out.println("R (parallel) = "
+ r + " Kohms");
JLab>java ParallelResistancer1 (Kohms) = 22r2 (Kohms) = 33r3 (Kohms) = 100R (parallel) = 11.660777385159012 KohmsJLab>
321
1111
rrr++
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 36
โปรแกรมหารากของสมการกาลงสอง
• Requirement– โปรแกรมหารากของสมการ
• Analysis– รบจานวนจรง a b และ c ผานทางแปนพมพ
– คานวณรากสองรากจากสตร
– แสดงรากทงสองทหาไดทางจอภาพ
• Design– เขยนผงงาน
• Implementation– เขยนโปรแกรม
02 =++ cbxax
aacbbx
242 −±−
=
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 37
ผงงาน
จบการทางาน
เรมการทางาน
รบคา a b และ c
x1, x2
aacbbx
241
2 −+−=
aacbbx
242
2 −−−=
2110101 วศวกรรมคอมพวเตอร จฬา สมชาย ประสทธจตระกล (2545) 38
โปรแกรมและการทดสอบ
import jlab.JLabIO;
public class QRoot public static void main(String[] args)
double a, b, c, x1, x2;
a = JLabIO.readDouble("a = ");b = JLabIO.readDouble("b = ");c = JLabIO.readDouble("c = ");
double t = Math.sqrt(b * b - 4.0 * a * c);x1 = (-b + t) / (2.0 * a);x2 = (-b - t) / 2.0 / a;System.out.println("x1 = " + x1);System.out.println("x2 = " + x2);
import jlab.JLabIO;
public class QRoot public static void main(String[] args)
double a, b, c, x1, x2;
a = JLabIO.readDouble("a = ");b = JLabIO.readDouble("b = ");c = JLabIO.readDouble("c = ");
double t = Math.sqrt(b * b - 4.0 * a * c);x1 = (-b + t) / (2.0 * a);x2 = (-b - t) / 2.0 / a;System.out.println("x1 = " + x1);System.out.println("x2 = " + x2);
JLab>java QRoota = 1b = 4c = 3x1 = -1.0x2 = -3.0JLab>
aacbbx
242 −±−
=