Download - การเขียนโปรแกรมคอมพิวเตอร์ 1
ภาษา Pascal : ประวตของภาษา Pascal ปาสคาล (Pascal) เปนชอทไดรบสมญานามมาจาก "Blaise Pascal" นกวทยาศาสตรและนก
คณตศาสตรชาวฝรงเศส ผซงมชอเสยงในการประดษฐเครองจกรทใชในการคานวณ ซงเปนตนแบบของคอมพวเตอรในปจจบน ภาษา Pascal ถกพฒนาขนครงแรก เมอตนป ค.ศ. 1970 โดย Niklaus Wirth ทมหาวทยาลยดานเทคนค ในเมองซรค ประเทศสวสเซอรแลนด วตถประสงคครงแรก เพอพฒนาภาษาขนสงทมกฎเกณฑ เพอการสอนการเขยนโปรแกรมแบบโครงสราง ภาษาท Wirth พฒนาขนเรยกวา ปาสคาลมาตรฐาน (Standard Pascal) หรอปาสคาลมาตรฐานตามแบบของ Jensen และ Wirth อยางไรกตาม "ปาสคาลมาตรฐาน" ยงกากวมอย เนองจากในปจจบนมหลายมาตรฐาน ในประเทศสหรฐอเมรกา มการประกาศปาสคาลมาตรฐานชอ ANSI Pascal ซงกาหนดมาตรฐานโดย ANSI (American National Standards Institute) และ IEEE (Institute of Electrical and Electronics Engineers)
ในป ค.ศ. 1983 บอรแลนด อนเตอรเนชนแนล ซงเปนบรษทซอฟตแวรสาหรบคอมพวเตอรขนาดเลก ไดเรมทาตลาดคอมไพเลอรปาสคาลราคาถก ทเรยกวา เทอรโบปาสคาล (Turbo Pascal) สาหรบใชกบคอมพวเตอรสวนบคคล เทอรโบปาสคาลประสบความสาเรจเรอยมา เนองจากราคาถกและใชงานงาย ตอมาจงมการพฒนาเครองมอสาหรบพฒนาโปรแกรม ไดแก Editor และตว Debugger แบบโตตอบ ปจจบน Turbo Pascal เปนภาษาปาสคาลทครองตลาดผใช ไมรโครคอมพวเตอรสวนใหญ มการนามาประยกตใชงานทงในดานเปนภาษาในการเรยนการสอน และภาษาในการสรางงานประยกตตาง ๆ
ภาษา Pascal:คณลกษณะของภาษา Pascal ภาษา Pascal จดเปนภาษาระดบสง (High-Level language) อกภาษาหนง ทไดรบความนยมใน
การนามาใชในวงการศกษา เพราะเปนภาษาทมลกษณะเดนอยหลายดาน เชน 1. รปแบบของคาสงเปนภาษา English 2. คาสงมความงายตอการทาความจดจา เชนคาวา Begin , End , Read , Write หรอคาสงอน ๆ 3. ลกษณะการทางานของโปรแกรมจะเปนการทางานทมโครงสราง 4. มการแปลคาสงแบบ Compile ทาใหสามารถทางานไดอยางรวดเรว 5. เหมาะกบงานทกประเภท ไมวาจะเปนงานทางดานวทยาศาสตรทมการคานวณ หรองานทางดาน
ธรกจ แมแตงานทางดานกราฟกกสามารถใชได
ภาษา Pascal:โครงสรางของภาษา Pascal ประกอบไปดวย 3 สวนคอ
สวนหวโปรแกรม (Program Heading) สวนของการประกาศการใชงาน (Declarations) สวนของคาสง(Executable Statement)
สวนหวโปรแกรม จะเรมตนดวยคาวา Program ........ และตามดวยชอโปรแกรม เชน Program Test_Work1; หมายเหต
ชอของโปรแกรมตองตงชอเปนภาษาองกฤษเทานน หามขนตนดวยตวเลข แตสามารถตามหลงภาษาองกฤษดวยตวเลขได หามเวนวรรค และหามใชสญลกษณพเศษอนใด ยกเวน Underscore (_) หามซากบคาสงวน
สวนประกาศการใชงาน ซงไดแกการประกาศคาตาง ๆ ดงน เลเบล (Labels), คาคงท (Constants), การนยามประเภท (Type Definitions), ตวแปร (Variable),
โพรซเจอรและฟงกชน (Procedure and Function) สวนของคาสง สวนนนบวาเปนสวนทสาคญทสดในการทใหคอมพวเตอรทางานตามทผเขยนโปรแกรมออกแบบไว
ยกตวอยางคาสงเชน Write, Writeln, Read, Readln เปนตน
ภาษา Pascal:องคประกอบพนฐานของภาษา Pascal แบงออกไดเปน 10 ประเภท ดงน
1. ตวอกษร (Character Set)
2. ชอ (Identifiers)
3. คาสงวน (Reserved Words)
4. ชอมาตรฐาน (Standard Identifier)
5. ขอมลแบบพนฐาน (Simple Types Data)
6. คาคงท (Constants)
7. ตวแปร (Variables)
8. นพจน (Expressions)
9. ประโยคคาสง (Statements)
10. โพรซเจอรและฟงกชน (Procedure and Function)
1. ตวอกษร (Character Set) หมายถง สญลกษณตาง ๆ ทไมสามารถนาไปคานวณได แบง
ออกเปน 3 ประเภท ไดแก
1.1 ตวเลข (Numeric) ไดแก เลขฐาน 10 คอ 0 - 9
1.2 ตวอกษร (Alphabetic) ไดแก ตวอกษรภาษาองกฤษ A - Z (ทงตวพมพเลกและตวพมพ
ใหญ) และตวอกษรภาษาอน ๆ
1.3 สญลกษณพเศษ (Special Symbol) ไดแกสญลกษณพเศษตาง ๆ เชน + , - เปนตน
2. ชอ (Identifiers)
ประกอบไปดวย รายการดงตอไปน
คาคงท (Constants)
ฟลดใน Record (Field in Record)
ตวแปร (Variable)
ฟงกชน (Function)
ชอโปรแกรม (Program Name)
ประเภทขอมล (Types)
ยนต (Units)
ชอมาตรฐาน (Standard Identifier)
การกาหนดชอ (Identifier) มกฎเกณฑดงน
1. ประกอบไปดวยตวอกษร A-Z ทงตวพมพเลกและตวพมพใหญ และตวเลข 0-9
2. เรมตนดวยภาษา English (หามเปนตวเลข) สวนตวอกษรถดไปจะเปนตวเลขหรอตวอกษรกได
3. หามเวนวรรค
4. หามมสญลกษณพเศษอนใด ยกเวน Underscore (_)
5. ตวอกษรตวพมพใหญหรอวาตวพมพเลก ถอวาเปนตวอกษรตวเดยวกน
6. หามซากบคาสงวน
7. คาสงวน (Reserved Words)
8. เปนคาเฉพาะทภาษา Pascal กาหนดขน เพอใชในภาษาโดยเฉพาะ ซงผเขยนโปรแกรมไมสามารถนาไป
ตงเปนชอ (Identifier) ได ตวอยางเชน AND END BEGIN เปนตน
3. คาสงวน (Reserved Words) คาสงวนเปนตว ระบ (identifier) ไดแก PROGRAM WHILE หรอ
PROCEDURE ซงมความหมายพเศษในปาสกาล ดงนนโปรแกรมเมอรจงไมสามารถใชตวระบเหลาน ไปตง
ชอสงอนๆ ไดแก ชอตวแปร ตวคงท ชอโปรแกรมหรอชอฟงกชนในโปรแกรม รายชอของตวระบม ดงน
ABSOLUTE END INLINE PROCEDURE TYPE
AND EXTERNAL INTERFACE PROGRAM UNIT
ARRAY FILE INTERRUPT RECORD UNTIL
BEGIN FOR LABEL REPEAT USES
CASE FORWORD MOD SET VAR
CONST FUNCTION NIL
SHL WHILE
DIV GOTO NOT SHR WITH
DO IF OF STRING XOR
DOWNTO IMPLEMENTATION OR THEN FAR INTERRUPT
ELSE IN PACKED TO PRIVATE
CONSTRUCTOR DESTUCTOR OBJECT VIRTUAL
ASSEMBLER EXTERNAL FORWARD NEAR
4. ชอมาตรฐาน (Standard Identifier) เปนคาเฉพาะทภาษา Pascal ใชสรางขนมา เพอใชใน
ภาษาเฉพาะ หรออาจเปนฟงกชนยอยทภาษา Pascal สรางขนมา และสามารถเรยกใชไดเลย ตวอยางเชน
read write integer เปนตน
*** Standard Identifier สามารถกาหนดความหมายใหมได โดยนกเขยนโปรแกรม ซงแตกตางจาก
Reserved Words ทไมสามารถกาหนดขนมาใหมได แตวาในความเปนจรง Standard Identifier ควรใชงาน
เหมอนกบ Reserved Words
5. ขอมลแบบพนฐาน (Simple Types Data) ซงประกอบไปดวยขอมลพนฐานดงตอไปน
ขอมลเลขจานวนเตม (Integer)
ขอมลเลขจานวนจรง (Real)
ขอมลตวอกขระ (Character)
ขอมลแบบสตรง (String)
ขอมลแบบตรรกศาสตร (Boolean)
ขอมลเลขจานวนเตม (Integer) หมายถง จานวนตวเลขทไมมจดทศนยม มคาเปนเลขจานวนเตม
ประกอบไปดวย จานวนเตมบวก จานวนเตมลบ และจานวนเตมศนย ซงมคาตงแต -32768 ถง 32767
ยกตวอยางเชน 0, 1, -5, 119
ขอมลเลขจานวนจรง (Real) หมายถง จานวนตวเลขทมจดศนยมหรอเลขชกาลง ซงจะตอง
ประกอบไปดวย ตวเลขหนาจดทศนยม จดทศนยม และตวเลขหลงจดทศนยม เชน 0.01 หรอ 1.19 เปนตน
โดยมคาอยระหวาง 1*10-38 ถง 1*1038 ในการเขยนเลขยกกาลง (Exponent) จะใชสญลกษณตว E แสดง
ดงน 2.5*1015 เขยนเปน 2.5E+15 เปนตน
ขอมลตวอกขระ (Character) หมายถง ตวอกษรเพยง 1 ตว ทอยภายใตเครองหมาย Single
Quote หรอ Apostrophes (' ') ซงประกอบไปดวย
ตวอกษร (Letter)
ตวเลข (Digit)
สญลกษณพเศษตาง ๆ (Special Symbols) ซงสงตาง ๆ ทกลาวถงน ไมสามารถนาไปคานวณได
ตวอยางเชน ‘A’, ‘2’,'%' เปนตน
ขอมลแบบสตรง (String) หมายถง กลมของตวอกขระทนามาเขยนอยภายใตเครองหมาย Single
Quote (' ') ไมสามารถนาไปคานวณได ซงจะมความยาวถง 255 ตวอกขระ เชน 'THIS IS MY PASCAL'
หมายเหต String ทไมมอกขระใด อยเลย (' ') เรยกวา Null String
ขอมลแบบตรรกศาสตร (Boolean) หมายถง ขอมลทแสดงการตดสนใจ วาขอความหรอนพจน
(Expression) นนจรงหรอเทจ (True or False) โดยปกตขอมลแบบ Boolean จะมคาความจรงอย 2 แบบ
ไดแก True และ False
6. คาคงท (Constants) หมายถง คาทไมมการเปลยนแปลงอก ในระหวางปฏบตการของโปรแกรม
อาจจะเปนคา Number, Character, String หรอ Boolean กไดประโยชนของคาคงท
ในกรณทตองมการใชคาคงท บอย ๆ การประกาศใชชอคาคงท จะสนและกะทดรดกวาการ
เขยนดวยคาคงทจรง ๆ ในโปรแกรม ทาใหงายตอการแกไข และมขอผดพลาดนอย เพราะตองแกไขเพยง
จดเดยวของโปรแกรม และเรยกใชไดตลอด
การเรยกใชงานคาคงท
รปแบบ CONST identifier = Constant;
Identifier หมายถง ชอคาคงท
Constant หมายถง คาคงททกาหนด ตวอยาง
Constant
Pi = 3.14159;
Title = 'Pascal'
Flag = true;
7. ตวแปร (Variables) เปน Identifier สาหรบใชเกบ คาทไมคงท ทสามารถเปลยนแปลงได
ตลอดเวลาในระหวางการทางานของโปรแกรม การเรยกใชตวแปร จะเปนการจองเนอทในหนวยความจา
ของเครอง เพอเปนตวบอกตาแหนงทอยของขอมลนนเองการเรยกใชงานตวแปร กอนการเรยกใชงานตว
แปร ตองมการประกาศตวแปรทกตว และกาหนดประเภทของตวแปรไว ซงแตกตางจากการนยามคาคงท
และประเภทของขอมลคาคงท ขนอยกบรายการขอมลทกาหนดใหคาคงทนนมรปแบบการประกาศดงน
รปแบบ
VAR identifier = type;
Identifier หมายถง ชอตวแปร (Variable name) ทมการเรยกใชงานในโปรแกรม
Type หมายถง ชนดของขอมลตวแปรนน อาจจะเปน integer, real หรอ string กได
หมายเหต ชนดของขอมลทเกบอยในตวแปรแตละตว ตองสมพนธกบชนดของตวแปรทประกาศไวในสวน
ของ VAR ดวย
ในกรณทมตวแปรหลายตว ทมชนดของขอมลแบบเดยวกน สามารถประกาศตวแปรไดอกแบบดงน
VAR indentifier1, indentifier2, indentifier3,... : type ;
ตวอยาง
VAR
Radius, high: real;
Value : integer;
title : string;
flag : char;
answer : char;
8. นพจน (Expressions)
คอกลมของขอมล ซงประกอบไปดวยคาคงท 1 ตว หรอมากกวา และตวแปร 1 ตวหรอมากกวา ซง
เชอมกนดวยสญลกษณทางคานวณ หรอเปรยบเทยบ สามารถเรยกกลมของขอมลอนไดแก คาคงท หรอตว
แปรวา โอเปอแรนด(Operand) และเรยกสญลกษณทางการคานวณหรอการเปรยบเทยบวา โอเปอเรเตอร
สามารถแบงออกไดเปนดงน
นพจนทางคณตศาสตร
นพจนทางตรรกศาสตร
นพจนทางคณตศาสตร เปนนพจนทประกอบดวย Operand ทเปนตวแปร หรอคาคงท ทเปน
ตวเลข ซงเชอมกนดวย Operator อนไดแกสญลกษณทางการคานวณทางคณตศาสตร + , - , * , /
ตวอยางนพจนทางคณตศาสตร
(b*b-4*a*c)/(2*a) เรยก a , b, c, 4 วา Operand เรยก * , - , / วา Operator
นพจนทางตรรกศาสตร (Boolean or Logical Expression) เปนนพจนทประกอบดวย Operand
ทเปนตวแปร หรอคาคงททเปนตวเลข หรอนพจนทางคณตศาสตรหรอตรรกศาสตร ซงเชอมกนดวย
ตวอยางนพจนทางตรรกศาสตร
Pay < 100.00
นพจนทกนพจนจะตองปฏบตตามกฎเกณฑตอไปน
ตวกระทา 2 ตว อยตดกนไมได ถาจาเปนตองม ใหใชวงเลบ
นพจนอาจจะประกอบไปดวย Identifier เดยว หรอใชแทนคาคงทหรอตวแปรได
ชอฟงกชน สามารถเขยนแทนท Identifier คาคงท หรอตวแปรภายในนพจนได
9. ประโยคคาสง (Statements)
เปนคาสงในโปรแกรมคอมพวเตอร ทสงใหคอมพวเตอรปฏบตการอยางใดอยางหนง สามารถแบงออกได
ดงน
คาสงกาหนดคาใหกบตวแปร (Assignment Statement)
คาสงการเปรยบเทยบเงอนไข (Conditional Statement)
คาสงการทาซาหรอวนลป (Repetitive Statement or Looping)
คาสงลาดบการทางานของโปรแกรม (GOTO Statement)
คาสงกาหนดคาใหกบตวแปร (Assignment Statement)
ตวอยาง เชน
itemcost := 100.00;
tax := 0.7 * itemcost;
คาสงการเปรยบเทยบเงอนไข (Conditional Statement)
หมายถงคาสงเปรยบเทยบเงอนไขทางตรรกศาสตร เพอตดสนใจเลอกการปฏบตอยางใดอยางหนง
ตวอยางเชน
IF pay < 100.00 THEN a := 100 ELSE b := 200;
คาสงการทาซาหรอวนลป (Repetitive Statement or Looping)
เปนคาสงทใหมการปฏบตซากบคาสงตาง ๆ ภายในลป ตามเงอนไขหรอตามจานวนทระบ
ตวอยางเชน
count := 0;
WHILE count <= 100 DO
BEGIN
count := count + 1;
writeln(count)
END;
หรอสามารถใชลป FOR เขยนไดดงน
FOR count := 1 to 100 DO writeln(count)
คาสงลาดบการทางานของโปรแกรม (GOTO Statement)
เปนคาสงใหเปลยนลาดบการปฏบตการไปทางานทคาสงอน โดยไมมการตรวจสอบเงอนไขใด ๆ
ตวอยางเชน
GOTO 100
เปนคาสงทใหไปทาคาสงถดไป ณ คาสงทม label เปน 100 ซงจะตองมการประกาศ label ไวทตนโปรแกรม
ดวย
10. โพรซเจอรและฟงกชน (Procedure and Function)
เรยกไดอกอยางหนงวา โมดล (Module) เปนโปรแกรมทมการเขยนแยกไวตางหากจาก
โปรแกรมหลก ซงโปรแกรมอน สามารถทจะเรยกใชงานไดอยางอสระ แบงออกไดเปน 2 ประเภท คอ
1. โพรซเจอรและฟงกชนมาตรฐาน (Standard Procedure and Function)
2. โพรซเจอรและฟงกชนทสรางขนเอง (Users-Defined Procedure and Function)
โพรซเจอรและฟงกชนมาตรฐาน (Standard Procedure and Function) เปน Procedure หรอ
Function ทภาษาปาสคาลสรางขนมาใหแลว ผเขยนโปรแกรมสามารถทจะนาไปใชในโปรแกรมไดทนท แต
ไมสามารถทาการแกไขหรอเปลยนแปลงได
ตวอยาง Standard Procedure เชน
read (a,b,c);
writeln(a,b,c);
ตวอยาง Standard Function เชน
area := 3.14159 * sqr(radius)
sqr() ยอมาจาก Squared คอคายกกาลงสอง
โพรซเจอรและฟงกชนทสรางขนเอง (Users-Defined Procedure and Function) เปนโพรซ
เจอรหรอฟงกชนมาตรฐานทผเขยนโปรแกรมสรางขนมาเอง เพออานวยความสะดวกในการทางานบางอยาง
ซงจะสามารถทาการแกไขหรอเปลยนแปลงไดเองตามตองการ
ชนดของขอมลพนฐาน แบงออกไดเปน 5 ประเภท ไดแก
1. ขอมลชนดจานวนเตม (Integer - Type Data)
2. ขอมลเลขจานวนจรง (Real - Type Data)
3. ขอมลชนด String (String - Type Data)
4. ขอมลชนดอกขระ (Character -Type Data)
5. ขอมลชนดตรรกศาสตร (Boolean - Type Data)
1. ขอมลชนดจานวนเตม (Integer - Type Data)
เปนขอมลตวเลขทไมมจดทศนยม สามารถนามาใชเปนสวนประกอบของคาคงท (Constant) ตว
แปร (Variable) ฟงกชนและนพจนได
สญลกษณทางคณตศาสตรของเลขจานวนเตม
การคานวณ สญลกษณ ตวอยาง ชนดขอมล Operand ชนดขอมล-ผลลพธ
บวก + A + B Integer Integer
ลบ - A - B Integer Integer
คณ * A * B Integer Integer
หาร / A / B Integer Real
เศษ MOD A MOD B Integer Integer
หารตดเศษ DIV A DIV B Integer Integer
ขอสงเกต ตวกระทาหาร (/) จะใหผลลพธเปนจานวนจรง แมวาตวถกกระทาจะเปนจานวนเตม แตไมม
ตวกระทาทเปนการยกกาลง
ขอกาหนด
1) ชนดขอมล Operand หมายถง ชนดของขอมลตวแปร A และ B ซงในทนเปน Integer ทงค
2) แปรทใชเกบผลลพธทไดจากการคานวณ จะตองมการประกาศชนดของตวแปรใหสมพนธกบรปแบบของ
ผลลพธทไดดวย
หมายเหต
1) การหารแบบตดเศษ (DIV) เปนการหารทเกบคาผลลพธเฉพาะจานวนเตมไว โดยไมสนใจเศษทได ซง
ทงตวตงและตวหารจะตองเปนเลขจานวนเตมเทานน เชน 15 DIV 2 = 7, 26 DIV 8 = 3
2) การหาเศษจากการหาร (MOD) จะแสดงคาเศษทเหลอจากการหาร โดยททงตวตงและตวหาร ตองเปน
เลขจานวนเตม เชน 15 MOD 2 = 1, 26 MOD 7 = 5
3) ปาสคาลจะไมมสญลกษณการยกกาลง (Exponentiation) แตจะสามารถเรยกใชฟงกชนมาตรฐาน คอ
SQR เพอคานวณการยกกาลงสอง ได เชน
a := sqr(4) a = 16 นนเอง (a:= 4*4)
4) คาสงการหาร เชน / ,DIV ,และ MOD คาของ Operand ตวทสอง หรอตวหารตองไมมคาเปน 0
2. ขอมลเลขจานวนจรง (Real - Type Data)
เปนขอมลตวเลขทมทศนยม (Decimal Number) จะตองมตวเลขอยหนาจดทศนยม และหลงจด
ทศนยมดวย นอกจากนยงสามารถเขยนอยในรปของเลขยกกาลง ไดอกดวย
สญลกษณทางคณตศาสตรของเลขจานวนจรง
การคานวณ สญลกษณ ตวอยาง ชนดขอมล Operand ชนดขอมล-ผลลพธ
บวก + A + B Real real
ลบ - A - B Real real
คณ * A * B Real real
หาร / A / B Real real
ขอกาหนด
1) ชนดขอมล operand หมายถง ชนดของขอมลและตวแปร A และ B ซงในทนเปน real ทงค
2) ตวแปรทจะเกบผลลพธจากการคานวณ ตองมชนดของตวแปรทสมพนธกบรปแบบของผลลพธทไดดวย
3) ไมสามารถใชสญลกษณ DIV และ MOD สาหรบตวแปรชนด real ได
4) ในการหาร (/) ขอมล real ใด ๆ operand ตวท 2 หรอตวหาร จะตองไมเปน 0
3. ขอมลชนด String (String - Type Data)
หมายถง กลมของตวอกขระทนามาเขยนอยภายใตเครองหมาย Single Quote (' ') ไมสามารถ
นาไปคานวณได ซงจะมความยาวถง 255 ตวอกขระ เชน 'THIS IS MY PASCAL'
หมายเหต String ทไมมอกขระใด อยเลย (' ') เรยกวา Null String
4. ขอมลชนดอกขระ (Character -Type Data)
ไดแกตวอกษรเพยง 1 ตว ทอยภายใตเครองหมาย Single Quote หรอ Apostrophes (' ') ซงอาจ
เปนตวอกษร ตวเลข หรอสญลกษณพเศษตาง ๆ และไมสามารถนามาคานวณได
ตวอยางเชน 'A' , '2' , '%' เปนตน
5. ขอมลชนดตรรกศาสตร (Boolean - Type Data)
เปนขอมลทแสดงคาความจรงอยางใดอยางหนง จะมคาความจรงของขอมล 2 แบบ ไดแก ขอมล
จรง (true) และ ขอมลเทจ (false) ซงโดยทวไป จะใชในการเปรยบเทยบนพจนทางตรรกศาสตร สามารถ
แบงนพจนทางตรรกศาสตรออกเปน 2 แบบ ดงน
1. นพจนทางตรรกศาสตรทใชสญลกษณแสดงความสมพนธเปนตวเชอม
2. นพจนทางตรรกศาสตรทใชสญลกษณทางตรรกศาสตรเปนตวเชอม
5.1 นพจนทางตรรกศาสตรทใชสญลกษณแสดงความสมพนธเปนตวเชอม
เปนนพจนทประกอบดวยสวนของ Operand เชอมกนดวย Operator ซงเปนเครองหมายทแสดง
ความสมพนธ (Relational Operators) หรอการเปรยบเทยบ
ตารางแสดงความสมพนธ
ความหมาย สญลกษณ
เทากบ =
มากกวา >
นอยกวา <
มากกวาหรอเทากบ >=
นอยกวาหรอเทากบ <=
ไมเทากบ <>
ตวอยางเชน 2>3 คาเปน false
5.2 นพจนทางตรรกศาสตรทใชสญลกษณทางตรรกศาสตรเปนตวเชอม
เปนนพจนทประกอบดวยสวนของ Operand ทาง ตรรกศาสตร และ Operator หรอสญลกษณทาง
ตรรกศาสตร (logical Operator)
ตารางแสดงสญลกษณทางตรรกศาสตร (Logic Operator)
สญลกษ
ณ ความหมาย
AND ใชเชอม Operand ตงแต 2 ตวขนไป ซงนพจนจะเปนจรงกตอเมอทก Operand จะตองเปนจรง
OR ใชเชอม Operand ตงแต 2 Operand ขนไป ซงนพจนจะเปนจรงกตอเมอ Operand ตวใดตว
หนงหรอทกตวเปนจรง
NOT ใชนาหนา Operand ถานาหนา Operand ทเปนจรงจะทาใหนพจนเปนเทจ แตถานาหนา
Operand ทเปนเทจ จะทาใหนพจนเปนจรง
ตวอยางการใชงาน
(n > 0) AND (n < 20 ) คานพจนเปน true
(n < 0) OR (n > 20 ) คานพจนเปน false
นพจนของคณตศาสตรในภาษาปาสคาล
ในการเขยนนพจนทางคณตศาสตร โดยทวไปจะประกอบไปดวยสวนของ Operands ซงไดแก
ตวเลขหรอตวแปร ซงอาจมหลายตว และเชอมกนดวย Operators อนไดแกสญลกษณทางคณตศาสตร ซงก
อาจจะมหลายตวดวยเชนกน
ในการเขยนโปรแกรมเพอใหคอมพวเตอรคานวณหานพจนทางคณตศาสตรใด ๆ ออกมา จะตองม
การเขยนนพจนใหอยในรปแบบทคอมพวเตอรสามารถเขาใจได โดยมการใชสญลกษณทางคณตศาสตร
ตามรปแบบทกาหนดเทานน ไดแก + , - , * , / , MOD , DIV เปนตน ตวอยางนพจนทางคณตศาสตร
a+b*c/d sqr(x)+2*x-5 x := b+sqr(sqr(b)-4*a*c)/2*a
ลาดบการคานวณทางคณตศาสตรของนพจนทางคณตศาสตร
ในการสงใหคอมพวเตอรคานวณหาคานพจนทางเลขคณตใด ๆ กตาม คอมพวเตอรจะมการ
คานวณตามลาดบขนตอน โดยการพจารณาดวา จะคานวณอะไรกอนหลง นนคอดจากลาดบของ Operators
นนเอง
ลาดบขนตอนการคานวณมดงน
(1) ทาในวงเลบกอน
(2) ทาเลขยกกาลง
(3) ทาคณหรอหาร ขนอยกบวาตวใดมากอน ตวใดมาหลง
(4) ทาบวกหรอลบ ขนอยกบวา ตวใดมากอนหลง
ตวอยางการคานวณ
(1) x := 5+6*3 คาตอบ x = 23
(2) x := (5+6)*3 คาตอบ x = 33
ขอมลตวเลข
ขอมลแบบเลขจานวนเตม
ชนดขอมล เนอทในหนวยความจา
(Byte) ชวงการเกบขอมล ชนดตวแปรทใช
ไบต (Byte) 1 0 ถง 256 Byte
จานวนเตมสน
(Short Integer) 1 -128 ถง 127 ShortInt
เวรด (Word) 2 -0 ถง 65535 Word
จานวนเตม
(Integer) 2 -32768 ถง 32767 Integer
จานวนเตมยาว
(Long Integer) 4
-2,147,483,648 ถง
2,147,483,647 LongInt
ขอมลแบบเลขจานวนจรง
ชนดขอมล เนอทในหนวยความจา (Byte) จานวนหลก ชวงการเกบขอมล
Single 4 7 - 8 1.5*10-45 ถง 3.5*1038
Real 6 11 - 12 2.9*10-39 ถง 1.7*1038
Comp 8 19 - 20 -263+ 1 ถง 263- 1
Double 8 15 - 16 5.0*10-324 ถง 1.7*103.8
Extended 10 19 - 20 3.4*10-4932 ถง 1.1*104932
ภาษา Pascal:การนาขอมลออก(Write, WriteLn Statement) หลกการนาขอมลออกของคอมพวเตอร
ในการประมวลผลขอมลของคอมพวเตอร จะมการนาขอมลเขาไปในหนวยความจากอน
ตอจากนนจะมการเคลอนยายขอมลเขาและออกระหวางหนวยความจากบหนวยประมวลผลกลาง (CPU)
เพอทาการประมวลผลตามคาสงจากโปรแกรม ขอมลและผลลพธทไดจะคงถกเกบอยในหนวยความจา
เชนเดม ขอมลเหลานจะหายไปเมอคอมพวเตอรหยดทางาน หรอเมอมโปรแกรมอนเขามาแทน ตามปกต
โปรแกรมสวนใหญมกจะมการสงใหนาขอมลออกจากหนวยความจาเสมอ ซงอาจจะเพอแสดงทจอภาพ
พมพทเครองพมพ บนทกไวในดสก สงเสยงทลาโพง เปนตน
ในภาษาปาสคาล มวธนาขอมลออกจากหนวยความจาโดยใชคาสง Write หรอ WirteLn
(Wirte-Line)
รปแบบของ Write และ WriteLn
Write(OUTPUT, item1, item2,…..,itemN)
WriteLn(OUTPUT, item1, item2,…..,itemN)
คาสง Write และ WirteLn มรปแบบดงน
จากรปแบบขางตนมความหมายดงตอไปน
1. OUTPUT หมายถง ตวแปรทเปนชอของอปกรณเอาตพตของคอมพวเตอรซงอาจจะเปนจอภาพ
เครองพมพ พลอตเตอร ดสก ลาโพง หรออน ๆ ถาสวนนไมระบตวแปรเอาไว แสดงวาใหแสดงทจอภาพ
2. Item1, …… , itemN คอขอมลตาง ๆ ทนาออกตงแตรายการท 1 ถงรายการท N แตละรายการจะคน
ดวยเครองหมาย , ขอมลแตละรายการจะถกนาออกเรยงตามลาดบจากรายการแรกถงรายการสดทาย ถา
เปนการแสดงทจอภาพ รายการขอมลจะเรยงอยในแถวเดยวกน
3. ขอมลแตละรายการ (item) อาจจะมคณสมบตดงตอไปน
เปนสตรง (string) คอขอมลทอยในเครองหมาย ' ' เชน 'HI' '4+5 = '
เปนตวแปร เชน CarnName TotalAmount Done
เปนการคานวณ เชน 4 + 5 (ซงจะไดผลลพธเปน 9) Value1 + Value2 (จะไดผลลพธเทากบผลบวกของคาทอย
ใน Value1 และ Value2 )
4. สาหรบทจอภาพ WriteLn เมอแสดงขอมลทมใน ( ) หมดแลว เคอรเซอรจะเลอนลงมาอยทคอลมนท 1 ของ
แถวลางทอยถดลงมา สวน Write เคอรเซอรจะอยตอนทายของแถวเดม
ตวอยางท 1 คาสง Write (' 4 + 5 = ', 4 +5 )
การแสดงผลทจอภาพ 4 + 5 = 9 (ตาแหนงเคอรเซอร)
ตวอยางท 2 คาสง WriteLn (' 4 + 5 = ', 4 +5 )
การแสดงผลทจอภาพ 4 + 5 = 9
(ตาแหนงเคอรเซอร)
5. สาหรบ WriteLn ทไมม ( ) ตอทาย หมายถง การเลอนเคอรเซอรลงมาอยทคอลมนท 1 ของลางทอยถดลง
มา โดยไมมการแสดงขอใด ๆ
ตวอยางท 3 คาสง WriteLn
การแสดงผลทจอภาพ
(ตาแหนงเคอรเซอร)
การกาหนดตาแหนงแสดงขอมลทจอภาพ
จากโปรแกรมทผานมาจะเหนไดวา คอมพวเตอรจะแสดงขอมลเรมจากทางดานซายสดของ
จอภาพและเรยงลาดบไปทางขวาเสมอ ในกรณทเราตองการจดตาแหนงแสดงขอมลใหแตกตาง ไปจากน
สามารถทาได โดยปาสคาลกาหนดรปแบบไวดงน
Write(item : คาความยาวของ item, item2,…..,itemN)
WriteLn(item : คาความยาวของ item, item2,…..,itemN)
ขอมลทไมมทศนยม มรปแบบดงน
ตวอยาง WriteLn ('Pascal' : 20);
สตรง Pascal ถกกาหนดใหมความยาว 20 ตวอกษร ซงจานวนทแทจรงคอ 6 ตวอกษร ดงนน
คอมพวเตอรจะเตมเครองหมายวรรคเขาขางหนาคา Pascal อก 14 ตวเพอใหครบ 20 ตวอกษร แลวแสดง
ขอมลโดยกาหนดตาแหนงตาง ๆ ดงน
อกษร l อยตาแหนง 20 นบจากทางซายของจอภาพ
a อยตาแหนง 19 นบจากทางซายของจอภาพ
c อยตาแหนง 18 นบจากทางซายของจอภาพ
P อยตาแหนง 15 นบจากทางซายของจอภาพ
Write(item : คาความยาวของ item : จานวนตาแหนงทศนยม, item2,….., itemN)
WriteLn(item : คาความยาวของ item : จานวนตาแหนงทศนยม, item2,….., itemN)
ขอมลทมทศนยม มรปแบบดงน
ตวอยาง WriteLn(123.456789 :9:2);
ในทนกาหนดให 123.456789 มความยาวเปน 9 ตวอกษร (รวมจดทศนยม 1 อกษรดวย) และ
กาหนดใหมเลขหลงจดทศนยม 2 ตาแหนง
คอมพวเตอร จะแสดงทจอภาพดงน 123.46
โดยเลข 6 อยทตาแหนง 9 นบจากทางซาย
เลข 4 อยทตาแหนง 8 นบจากทางซาย
เลข 1 อยทตาแหนง 4 นบจากทางซาย
จดทศนยม อยทตาแหนง 7 นบจากทางซาย
การคานวณเลขคณต (Arithmatic Expression)
การคานวณคาทางเลขคณต ปาสคาลมการกระทาหรอโอเปอเรชน (operation) รวม 6 รายการ
แตละรายการมเครองหมายหรอโอเปอเรเตอร (operator) ดงตารางตอไปน
โอเปอเรชน โอเปอเรเตอร ตวอยาง
บวก + Year + 1
ลบ - Year - 1
คณ * Price * Quantity
หาร อนทเจอร DIV 8 DIV 3 { ไดคาเปน 2 }
หาร / 8/3 { ไดคาเปน 2.666}
modulue MOD 17 MOD 12 { ไดคาเปน 5}
ลาดบการคานวณ (Precedence)
ในกรณทการคานวณประกอบดวยโอเปอรเรเตอรหลายตว จะมลาดบการคานวณดงน
1. การคานวณทอยในเครองหมายวงเลบ ( ) จะมการกระทาเปนลาดบแรก
2. เครองหมาย * / DIV MOD มลาดบการคานวณกอน + และ -
3. การคานวณทมเครองหมายทมลาดบเทากนอยดวยกนจะมการคานวณจากทางซายไป
ทางขวาตามลาดบ
ตวอยาง แสดงผลของการคานวณจากโจทย 5*10+2*5 เมอกาหนดการคานวณใหมลาดบแตกตางกน
ProgramCalc;
Begin
WriteLn('5*10+2*5 = ',5*10+2*5);
WriteLn('5*(10+2)*5 = ', 5*(10+2)*5);
WriteLn('(5*10)+(2*5)= ', (5*10)+(2*5));
WriteLn('((5*10)+2)*5= ', ((5*10)+2)*5);
WriteLn('5*(10+(2*5))= ', 5*(10+(2*5)));
End.
ซงจะไดผลลพธดงน
5*10+2*5 = 60
5*(10+2)*5 = 300
(5*10)+(2*5) = 60
((5*10)+2)*5 = 260
5*(10+(2*5)) = 100
การแสดงคาจากตวแปร
ตวแปรเปนชอของหนวยความจาทใชสาหรบเกบขอมล
ตวอยาง สมมตมการตงชอดงน
VAR Inches : Real;
Weight : Integer;
สามารถสรางเปนภาพความคดไดดงน
หนวยความจาชอ Inches มขนาด 6 ไบต ใชสาหรบเกบขอมลชนดตวเลขทมทศนยม
หนวยความจาชอ Weight มขนาด 2 ไบตใชสาหรบเกบขอมลชนดตวเลขทไมมทศนยม
ตวอยางท โปรแกรมแสดงการสราง กาหนดคา และแสดงคาจากตวแปรชนดอนทรเจอรซงใชสาหรบเกบ
คาตวเลขทไมมทศนยม
ProgramExInte;
Var
A, B, C : Integer;
Begin
A := 15; B := 10; C:= 20;
WriteLn(A*B+C );
WriteLn(A*(B+C) );
WriteLn((A*B)+C );
End.
ภาษา Pascal:การรบขอมลเขา (Read, ReadLn Statement) หลกการรบขอมล
เพอใหโปรแกรมใชงานไดอยางกวางขวางและสะดวกในโปรแกรมสวนใหญจงไมกาหนดคาของ ตวแปรไวในโปรแกรม แตจะใชวธการรบคาเขาไปตอนโปรแกรมทางาน คอมพวเตอรจะรบขอมลเขามาในหนวยความจาโดยผานทางอปกรณอนพต (Input devices) เชน คยบอรด (keyboard) ดสกไดรฟ (disk drive) เมาส (mouse) ซงปาสคาลจะรบขอมลดวยคาสง Read และ ReadLn (Read-Line)
รปแบบของ Read และ ReadLn
Read(INPUT, Var1, Var2,…..,VarN)
ReadLn(INPUT, Var1, Var2,…..,VarN)
คาสง Read และ ReadLn มรปแบบดงน จากรปแบบขางตนมความหมายดงตอไปน
1. Input หมายถง ตวแปรทเปนชออปกรณอนพตของคอมพวเตอร ซงอาจจะเปนคยบอรด ดสก เมาส หรออน ๆ ถาสวนนไมระบตวแปรเอาไว แสดงวาวางใหรบขอมลจากคยบอรด
2. Var1,…VarN คอตวแปรสาหรบเกบขอมลแตละรายการทรบเขามา ตงแตรายการท 1 ถงรายการท N แตละรายการจะคนดวยเครองหมาย , เวลาปอนขอมลจะตองคนแตละรายการดวยเครองหมายวรรค หรอกดคย Enter ขอมลทรบเขามาจะถกนาไปเกบในตวแปรแตละตวเรยงตามลาดบจากซายไปขวา
3 ตวแปรแตละตวจะรบขอมลไดเฉพาะทเปนชนดเดยวกนถาปอนขอมลผดชนดเชน Var Year : integer; ถาเราปอนขอมลเปน 12.50 จะเกดความผดพลาดประเภท Run time Error ขนซงจะมผลใหโปรแกรมหยดการทางานทนท 4. สาหรบจอภาพ ReadLn เมอรบขอมลครบตามจานวนตวแปรทมใน ( ) แลวเคอรเซอรจะเลอนลงมาอยททคอลมนท 1 ของแถวลางทอยถดลงมา สวน Read เคอรเซอรจะอยตอนทายของแถวเดม ตวอยางท 1 คาสง Read(Name,Age)
ปอนขอมล Bamrung 50 กดคย Enter แสดงทจอ Bamrung 50 (ตาแหนงเคอรเซอร)
ตวอยางท 2 คาสง ReadLn(Name,Age) ปอนขอมล Bamrung 50 กดคย Enter แสดงทจอ Bamrung 50
(ตาแหนงเคอรเซอร) 5. สาหรบ ReadLn ทไมม ( ) ตอทาย หมายถงการหยดรอรบการกดคย Enter เมอคย Enter ถก
กด โปรแกรมจะทาตามคาสงทอยตอมา ตวอยาง คาสง Write ('Press Enter'); ReadLn;
แสดงทจอ Press Enter
กดคย Enter แสดงทจอ (ตาแหนงเคอรเซอร)
คาสงตามตวอยางน นยมใชในกรณทตองการใหโปรแกรมหยดการทางานชวคราว และเมอกดแปน Enter โปรแกรมจะทางานตอไป ตวอยางคาสง Read และ ReadLn
Program HiName;
Var
Name : String[50];
Begin
Write('Input your Name ');
ReadLn(Name);
WriteLn('Hi',Name');
End. ตวอยาง โปรแกรม แสดงการรบขอมลสตรงทเปนชอคน เมอปอนขอมลแลวคอมพวเตอรจะแสดงขอความ Hi (ชอ)
โปรแกรมแสดงผลดงน Input your Name
พมพชอ CHAIYA กดคย Enter ทหนวยความจา Name มขอมลดงน Name CHAIYA
ทจอภาพจะเปนดงน Hi CHAIYA
ภาษา Pascal : ลปแบบ Repeat การทาซา สมมตวาตองการใชคอมพวเตอรแสดงขอความตอไปน
I am a MEDIA INTELLIGENCE TECHNOLOGY .
I am a MEDIA INTELLIGENCE TECHNOLOGY .
I am a MEDIA INTELLIGENCE TECHNOLOGY .
I am a MEDIA INTELLIGENCE TECHNOLOGY .
I am a MEDIA INTELLIGENCE TECHNOLOGY .
นกเรยนมวธการเขยนโปรแกรมได 2 วธคอ
1. เขยนทกคาสง ดงน
WriteLn(‘I am a MEDIA INTELLIGENCE TECHNOLOGY . ’);
WriteLn(‘I am a MEDIA INTELLIGENCE TECHNOLOGY . ’);
WriteLn(‘I am a MEDIA INTELLIGENCE TECHNOLOGY . ’);
WriteLn(‘I am a MEDIA INTELLIGENCE TECHNOLOGY . ’);
WriteLn(‘I am a MEDIA INTELLIGENCE TECHNOLOGY . ’);
วธการนอาจจะไมสะดวกถาคาสงมจานวนมาก ๆ
2. โปรแกรมคอมพวเตอรมวธการเฉพาะสาหรบดาเนนการกบงานทตองทาซา ๆ เรยกวาการ
ทางานในลกษณะลป (Loop) ในภาษาปาสคาลมอย 3 แบบ คอ Repeat While และ For
หลกการทางานของโปรแกรมในลกษณะลปกคอ โปรแกรมจะทางานตามคาสงในคาสงชดเดม
ซา ๆ กน จนกระทงสอดคลองกบเงอนไขทเปนจรง (True) หรอเทจ (False) แลวแตกรณของลปแตละแบบ
คาของเงอนไขทเปนจรงหรอเทจนไดมาจากการกระทา 2 ประเภท คอ การเปรยบเทยบ
(Relational expression) และการหาคาบลน (Boolean expression)
การเปรยบเทยบ
การเปรยบเทยบ หรอรเลชนนอลเอกซเพรสชน หมายถง การหาคาตอบวาเมอนาคาทอยทาง
ดานซายและทางขวาของโอเปอเรเตอรเปรยบเทยบ มาเปรยบเทยบกนแลวจะไดผลเปนจรงหรอเทจ
การเปรยบเทยบม 6 กรณ แตละกรณจะไดผลเปนจรงหรอเทจ อยางใดอยางหนงเพยงอยาง
เดยว ดงตาราง
โอเปอเรชน โอเปอเรเตอร ชนดของขอมลทใชได (Y)
เทากบ = ซมเปล สตรง เซต พอยน
เตอร
เรคอรด
ไมเทากบ < > Y Y Y Y Y
นอยกวา < Y Y
มากกวา > Y Y
นอยกวาหรอ
เทากบ
<= Y Y
มากกวาหรอ
เทากบ
>= Y Y
ตารางแสดงการเปรยบเทยบของโอเปอเรเตอรแบบตาง ๆ
ตวอยาง
ถา A มคาเปน 5 B มคาเปน 5 และ C มคาเปน 4
A = B Ture A <> B False
A < B False A > B False
A > C Ture C <= A Ture
C >= B False
การหาคาบลน การหาคาบลนหรอบลนเอกเพรสชน เปนการหาผลลพธจากบลนโอเปอเรเตอรตามหลกของ
คณตศาสตรบลน บลนโอเปอเรเตอรมหลายตว แตนามาใชบอย ๆ ในการเขยนโปรแกรมม 4 ตว ไดแก
NOT AND OR และ XOR ผลลพธทไดจากการหาคาบลนกคอ true หรอ false อยางใดอยางหนง
ตวอยาง เมอกาหนดให a และ b เปน true และ false ในกรณตาง ๆ ทเปนไปได คาบลนทไดจาก
โอเปอเรเตอร NOT AND OR และ XOR จะเปนดงตาราง
A b NOT a a AND b a OR b a XOR b
true true false true true false
true false false false true true
false true true false true true
false false true false false false
ลกษณะลปแบบ Repeat
ลปแบบ repeat จะทางานตามคาสงจานวนหนงไปจนกระทงเงอนไขเปนจรงแลวจงเลกทา แตถา
เงอนไขเปนเทจจะทางานตามคาสงจานวนนนซาอก
รปแบบของ Repeat
คาสง Repeat มรปแบบดงน
Repeat
คาสง ;
...
คาสง ;
Until เงอนไขเปนจรง
ตวอยางโปรแกรมลปแบบ Repeat
ตวอยาง โปรแกรมใชแสดงตวเลขตงแต 1 ถง 9 โดยวธใหโปรแกรมทางานซาท คาสงชดเดมแบบ Repeat
ProgramExRepeat;
Var Counter : Integer;
Begin
WriteLn('Repeat Counter ');
Counter := 1; {กาหนดคาเรมตนเปน1}
Repeat
WriteLn(Counter);
Counter := Counter+1;{เพมคาCounterขนอก1}
Until Counter>9; {เลกทาเมอCounterมากกวา9}
ReadLn
ผลทไดคอ
Repeat Counter
1
2
3
4
5
6
7
8
9
ลปแบบ Repeat ซอนกน (Nested Repeat)
คาสงททางานเปนลปอาจจะตองนามาซอนกนเพอใหสามารถทางานทมลกษณะเปนลปซอนกนได Repeat
ทเปนลปซอนกนได Repeat ทเปนลปซอนกนมโครงสรางดงน
Repeat
คาสง;
....
Repeat
End.
คาสง;
....
Until เงอนไขเปนจรง
คาสง;
....
Until เงอนไขเปนจรง
ตวอยางท 1 ในโปรแกรมทตองการแสดงผลในลกษณะตาราง อาจจะตองใชคาสง Repeat ซอนกน เชนโปรแกรมแสดงตารางสตรคณ ซงตองการใหแสดงผลเปนตารางดงน
2 x 1 = 2 3 x 1 = 3 ... 9 x 1 = 9
2 x 2 = 4 3 x 2 = 6 ... 9 x 2 = 18
.... ... ….
2 x 10 = 20 3 x 10 = 30 ... 9 x 10 = 90
โปรแกรมแสดงตารางสตรคณดงกลาวขางตน มตวอยางดงโปรแกรมท 8
ProgramNeatedRepeat;
Const MaxColumn = 9;
MaxRow =10;
Var Row, Column : integer;
Begin
Row := 1;
Repeat
ภาษา Pascal:ลปแบบ WHILE
Column := 2;
Repeat
Write(Column, 'x',Row:2,'=',Column * Row:2,' ');
Column := Column + 1;
Until Column := MaxColumn;
WriteLn;
Row := Row +1;
Until Roe>MaxRow;
ReadLn;
End.
ลกษณะลปแบบ While ลปแบบ While จะเรมดวยการตรวจสอบเงอนไขกอน ถาเงอนไขเปนจรงจะทางานตามคาสงจานวนหนงไปจนกระทงเงอนไขเปนเทจแลวจงเลกทา
รปแบบของ While คาสง While มรปแบบดงน [1] While เงอนไขเปนจรง Do คาสง [2] While เงอนไขเปนจรง Do Begin
คาสง; ..... คาสง; End. รปแบบในขอ [1] เปนรปแบบทมคาสงเดยว สวนรปแบบในขอ [2] เปนรปแบบผสม คาสงทอยระหวาง Begin และ End จะทางานดวยกน ตวอยางโปรแกรมลปแบบ While ตวอยาง การแสดงขอความ I am a MEDIA INTELLIGENCE ซากนหลายครง โดยโปรแกรมทมการทางานเปนลปแบบ While แสดงในโปรแกรม Program ExWhile; Var Count : Integer; Begin Count := 1; While Count<= 5 Do Begin {เรมคาสงผสม} WriteLn('I am aMEDIAINTELLIGENCE .'); Count := Count + 1; End;{จบคาสงผสม} ReadLn End. ลปแบบ While ซอนกน (Nested While)
คาสงททางานเปนลปอาจจะตองนามาซอนกนเพอใหสามารถทางานทมลกษณะเปนลปซอนกนได While ทเปนลปซอนกนมโครงสรางดงน While เงอนไขเปนจรง Do Begin คาสง; While เงอนไขเปนจรง DO Begin คาสง; End; คาสง; End;
โดยในสวนคาสงอาจจะเปนคาสงเดยว หรอคาสงผสมกได ตวอยาง ในโปรแกรมทตองการแสดงผลในลกษณะตาราง อาจจะตองใชคาสง While ซอนกน เชน โปรแกรมแสดงสตรคณ ซงตองการใหแสดงผลเปนตารางดงน
2 x 2 = 2 3 x 1 = 3 ... 9 x 1 = 9 2 x 2 = 4 3 x 2 = 6 ... 9 x 2 = 18 ... ... 2 x 10 = 20 3 x 10 = 30 ... 9 x 10 = 90
โปรแกรมแสดงตารางสตรคณดงกลาวน มตวอยางดงโปรแกรม ProgramExWhile2; CONST MaxColumn=9; MaxRow =10; Var Row,Column :Integer; Begin Row := 1; While Row<= MaxRow Do Begin Column := 2; While Column<= MaxColumn DO Begin While(Column, 'x',Row:2 '=' Column*row:2,''); Column := Column +1; End; WriteLn; Row := Row + 1; End; ReadLn; End.
ภาษา Pascal : ลปแบบ FOR ลกษณะลปแบบ For
ลปแบบ For จะควบคมการทางานของคาสงใหครบตามจานวนทกาหนดแลวจงเลกทา แสดงลกษณะไดดงตอไปน For จากคาเรมตน จนถงคาสดทาย ใหทาคาสง คาสงจะเปนคาสงเดยวหรอผสมคาสงกได รปแบบของ For คาสง For มรปแบบดงน [1] For ตวแปร := คาเรมตน To คาสดทาย Do คาสง [2] For ตวแปร := คาเรมตน Downto คาสดทาย Do คาสง รปแบบในขอ [1] และขอ [2] ตางกนท To และ Downto จานวนครงของการทางานขนอยกบ ตวแปร (ซงมชอวาตวแปรควบคม Control variable) ถาเลอกใช To คาของตวแปรจะเพมขนจากคาเรมตนครงละ 1 ถาเลอกใช Downto คาของตวแปรจะลดลงจากคาเรมตนครงละ 1 หลงจากทางานตามคาสงแลว ในกรณ For....To ถาคาเรมตนมคามากกวาคาสดทาย เครองจะไมทางานตามคาสง สวนในกรณ For....Downto ถาคาเรมตนมคานอยกวาคาสดทายเครองจะไมทางานตามคาสงเชนกน คาสงจะเปนคาสงเดยวหรอผสมคาสงกได ตวอยางโปรแกรมลปแบบ For ตวอยาง โปรแกรมใชแสดงตวเลขตงแต 1 ถง 9 โดยวธใหโปรแกรมทางานซา คาสงเดมแบบ For....To
ProgramForCoun; Var Counter : Integer; Begin WriteLn('For Counter'); For Counter := 1 To 9 Do WriteLn(Counter);{คาสงเดยว} ReadLn End.
ผลทไดคอ For Counter 1 2 3 4 5 6 7 8 9 ลปแบบ For ซอนกน (Nested For) คาสงททางานเปนลปอาจจะตองนามาซอนกนเพอใหสามารถทางานทมลกษณะเปนลปซอนกนได For ทเปนลปซอนกนมโครงสรางดงน For จากคาเรมตนจนถงคาสดทายใหทาคาสง For จากคาเรมตนจนถงคาสดทายใหทาคาสง โดยคาสงอาจจะเปนคาสงเดยวหรอผสมคาสงกได ตวอยาง โปรแกรมทตองการแสดงผลในลกษณะตาราง อาจจะตองใชคาสง For ซอนกน เชน โปรแกรมแสดงสตรคณซงตองการใหแสดงผลเปนตารางดงน
2 x 2 = 2 3 x 1 = 3 ... 9 x 1 = 9 2 x 2 = 4 3 x 2 = 6 ... 9 x 2 = 18 ... ... 2 x 10 = 20 3 x 10 = 30 ... 9 x 10 = 90
ProgramExFor; CONST MaxColumn = 9; MazRow =10; Var Row,Column : Integer; Begin For Row := 1 TO MaxRow Do Begin For Column :=2 To MaxColumn Do Write(Column,'x',Row:2,'=',Column*Row:2,' '); WriteLn; End; ReadLn; End. ขอสงเกตสาหรบ While, Repeat, และ For 5.1 While ควรใชในกรณทจะตองมการตรวจสอบเงอนไข กอนการทาซาอยางนอย 1 ครง 5.2 Repeat ควรใชในกรณทจะตองมการทางานดวยคาสงในลปอยางนอย 1 ครง กอนการตรวจสอบเงอนไข 5.3 For ควรใชในกรณทเราทราบหรอโปรแกรมสามารถคานวณจานวนครงทตองทาลวงหนากอนได
ภาษา Pascal:การเลอกทาแบบ IF
การเลอกทา
การเลอกทาหมายถงการกาหนดใหโปรแกรมทางานอยางหนงเมอเงอนไขเปนจรงและทางานอกอยางหนง
เมอ เงอนไขเปนเทจ ตวอยางการเลอกทาทอาจพบไดบอย เชน การเตอนใหเลอกบนทกขอมลไวในดสก
คอ
SAVE (Y/N)
ถาเราเลอก Y ขอมลจะถกบนทกเขาในดสก
ถาเราเลอก N จะไมมการบนทกขอมล
การใหเลอกวาจะใชโปรแกรมนนตอหรอไม คอ
CONTINUE (Y/N)
ถาเราเลอก Y โปรแกรมจะทางานตอไป
ถาเราเลอก N โปรแกรมหยดทางาน
ลกษณะการเลอกทาแบบ IF
IF
เงอนไขเปนจรง
ใหเปนคาสง 1
เงอนไขเปนเทจ
ใหเปนคาสง 2
IF
เงอนไขเปนจรง
ใหเปนคาสง 1
เงอนไขเปนเทจ
ใหเปนคาสง 2
IF เงอนไขเปนจรง THEN คาสง 1
ELSE (เงอนไขเปนเทจ) คาสง 2
ตวอยางการเลอกทาแบบ IF
ตวอยาง โปรแกรมรบอายเขาไปเปรยบเทยบ ถาอายมากกวา 55 คอมพวเตอรจะแสดงขอความ “คณเปน
คนสงอาย”และถาอายตงแต 55 ลงมาคอมพวเตอรจะแสดงขอความ“คณเปนวยรน”
PROGRAM YoungOld;
VAR
Age : Real;
BEGIN
Write( ‘Your Age = ‘);
ReadLn(Age);
IF Age > 55 THEN WriteLn( ‘You are Old’)
ELSE WriteLn( ‘You are Young’);
ReadLn
END.
การเลอกทาแบบ IF ซอนกน (Nested IF)
การเลอกทาแบบ IF ในบางโปรแกรมจะตองทาซากน ลกษณะโครงสรางของการเลอกทาแบบ IF
ซอนกนเปนดงน
IFเงอนไขเปนจรงTHENคาสง
IFเงอนไขเปนจรงTHENคาสง
จานวนครงของการเลอกทาซามไดมากเทาทตองการ สาหรบ ELSE จะมหรอไมกได
ตวอยาง การหาป ค.ศ. ใดทเดอนกมภาพนธม 29 วน มหลกการดงน
ถา ป มากกวา 0
ถา ป หารดวย 100 ลงตว
และหารดวย 400 ลงตว นน กมภาพนธม 29 วน
มฉะนน ตองหารดวย 4 ลงตว กมภาพนธ จะตองม 29 วน
โปรแกรม จะรบขอมลป ค.ศ. จากคยบอรดเขาไป แลวตรวจดวาเปนปทเดอนกมภาพนธม 29 วน (leap
year) หรอไม และแสดงผลการตรวจสอบทจอภาพ
Program LeapYearOrNot;
VAR
LeapYear : Boolean;
Year : integer;
Begin
WriteLn('Leap Year or Not ?');
REPEAT
WriteLn;
Write('Enter Year (0=End)');
ReadLn(Year);
IF Year > 0 THEN
Begin
IF Year MOD 100 = 0
THEN LeapYear := (Year MOD 400)=0
ELSE LeapYear := (Year MOD 4)=0;
IF LeapYear
THEN WriteLn(Year,' is a Leap year')
ELSE WriteLn(Year,' is not a Leap year');
END
UNTIL Year=0
END.
ภาษา Pascal:การเลอกทาแบบ CASE ทางเลอกทมจานวนมาก ในกรณทการเลอกทามรายการใหเลอกมากไป การเลอกทาแบบ IF กอาจจะมผลใหโปรแกรมม
ความยาวเกนความจาเปน และทาใหอานเขาใจยาก ลกษณะของการเลอกทาแบบ CASE การเลอกทาแบบ CASE มลกษณะดงตอไปน
CASE ตวแปร มคา เทากบ คาคงท : ทา คาสง ก. เทากบ คาคงท 1 หรอคาคงท 2 : ทา คาสง ข. อยในชวงของ คาสง A ถงคาคงท N : ทา คาสง ค. ELSE ทา คาสง ง. END
รปแบบของการเลอกทาแบบ CASE การเลอกทาแบบ CASE มรปแบบดงตอไปน
CASE คาของตวแปร OF คาคงท [, คาคงท] : คาสง คาคงท .. คาคงท : คาสง ELSE END
คาของคาคงทจะตองเปนขอมลชนดเดยวกนกบตวแปร สาหรบ [, คาคงท] คาคงท.. คาคงท และ ELSE จะมหรอไมมกได สวนคาสงจะเปนคาสงเดยวหรอผสมคาสงกได คอมพวเตอรจะทางานตามเงอนไขทสอดคลองกนระหวางตวแปรกบคาคงท โดยถาคาของตวแปรเทากบคาคงทคาใดแลว โปรแกรมจะทางานตามคาสงทอยตอจากเครองหมาย : แตถาไมมเงอนไขทสอดคลองกน โปรแกรมจะทางานตามคาสงทอยตอจาก ELSE ตวอยางโปรแกรมปรบปรงจากโปรแกรมเดม โดยเปลยนการเลอกทาจาก IF เปน CASE แตการทางานของโปรแกรมยงคงเหมอนเดม คอ แสดงอกษรยอของสใหเลอก เมอเลอกอกษรตวหนงแลว โปรแกรมจะแสดงชอเตมของสนนทจอภาพ ขอใหสงเกตการใช CASE ซงทาใหโปรแกรมสนลง และอานเขาใจงายขน PROGRAM CaseColor; VAR Choice : Char; UserQuits : Boolean; BEGIN
WriteLn( 'What is Color ? '); UserQuits := False; REPEAT Write( 'Select B G O P R Y or Q.uit '); ReadLn( Choice ); CASE Choice OF 'B', 'b' : WriteLn( 'B is Blue'); { B หรอ b } 'G', 'g' : WriteLn( 'G is Green'); 'O', 'o' : WriteLn( 'O is Orange'); 'P', 'p' : WriteLn( 'P is Purple'); 'R', 'r' : WriteLn( 'R is Red'); 'Y', 'y' : WriteLn( 'Y is Yellow'); 'Q', 'q' : UserQuits := True; ELSE WriteLn( 'Error : Try again ') End UNTIL UserQuits
END.
การเลอกทาแบบ CASE ซอนกน ในบางกรณการเลอกทาแบบ CASE จะตองใชซอนกน ซงมโครงสรางดงน CASE คาของ ตวแปร OF { CASE 1 } คาคงท : CASE คาของตวแปร OF { CASE 2 } คาคงท : คาสง ELSE คาสง END { CASE 2 } คาคงท : คาสง ELSE คาสง END { CASE 1 }
ภาษา Pascal:โปรแกรมยอย (Procedure) และฟงกชน (Function) ภาษาปาสคาล เรยกโปรแกรมยอยวา Procedure ซงเปนโปรแกรมเลก ๆ ภายในโปรแกรมใหญทงหมด แตโปรแกรมหลกจะมความเปนอสระในตวเอง สวน Procedure จะเปนอสระและจบในตวเอง แตจะถกเรยกใชจากโปรแกรมหลก หรอ Procedure อน ๆ โปรแกรมยอย (Procedure) วตถประสงคของการสรางโปรแกรมยอย
1. เปนสวนโปรแกรมทใชซากนในหลาย ๆ แหง และจะแยกออกมาทาเปนโปรแกรมยอย 2. เปนคาทสรางขนใหม เพอเกบไวใชตอไป 3. เมอตองการเขยนโปรแกรมเปน โมดล จดประสงคของการเขยนโปรแกรมเปน โมดล กเพอ
ตรวจหาทผดไดงาย ดงนน โปรแกรมยอยหนง ๆ กคอ โมดล ๆ หนง 4. เพอสนองความตองการของการเขยนโปรแกรมจากบนลงลาง
รปแบบของ Procedure PROCEDURE ชอ Procedure (argument);
VAR ชอตวแปรทจะใชใน Procedure; BEGIN
คาสง; END;
การเรยกใช Procedure จากโปรแกรมหลก ทาไดโดยการเรยกชอของ Procedure โดยถอวา Procedure เปนคาสง ๆ หนง เชน ถาโปรแกรมใหญม Procedure yyy; ในโปรแกรมหลกจะเรยกใช Procedure ไดโดยใชคาสงภายในโปรแกรมหลกวา yyy; ตวอยาง
PROGRAM EXAM16; VAR I:INTEGER; PROCEDURE MMM; BEGIN WRITELN(‘THIS IS MMM PROCEDURE’); END; PROCEDURE NNN; VAR J:INTEGER; BEGIN FOR J:=1 TO I DO
WRITELN(‘THIS IS NNN PROCEDURE’); WRITELN(‘END OF NNN LOOP’); WRITELN(‘NOW CALL MMM FROM NNN’); MMM;
END; BEGIN {MAIN}
WRITELN(‘THIS IS MAIN PROGRAM’); WRITELN(‘ENTER NUMBER’); READLN(I); WRITELN; WRITELN(‘NOW CALL NNN FROM MAIN’); NNN; WRITELN; WRITELN(‘NOW CALL MMM FROM MAIN’); MMM; READLN;
END.
ฟงกชน (Function)
ภาษาปาสคาลจดใหฟงกชนเปนรปแบบหนงของโปรแกรมยอย เทยบเทา Procedure ดงนน Function และ Procedure จงมลกษณะคลายกน คอ เปนสวนหนงของ program ใหญ ทเขยนแยกออกไปจากโปรแกรมหลก มความสมบรณในตวเอง และสามารถสงผานคาของตวแปรระหวางโปรแกรมหลกกบ Function หรอระหวาง Procedure กบ Function รปแบบ
FUNCTION ชอฟงกชน (อากวเมนต) : Type; VAR ชอตวแปรทใชเฉพาะในฟงกชน
BEGIN คาสงตาง ๆ ; END; เปรยบเทยบ FUNCTION กบ PROCEDURE
1. ชวยใหการเขยนโปรแกรมแบบ top-down design งายและสะดวก 2. ชวยใหหนวยยอย ๆ ของโปรแกรมเปนอสระตอกน 3. สามารถเรยกใชสวนของโปรแกรมททางานซา ๆ กนไดโดยไมตองเขยนโปรแกรมสวนนนซา ๆ
กนหลายครง 4. เพอชวยใหตรวจสอบจดตางๆ ภายในโปรแกรม หรอทาใหการคานวณทใชสตรตาง ๆ ภายใน
โปรแกรมงายขน 5. เพอชวยใหเกดคาสงใหม ๆ (Function) และสวนของ program (Procedure) ทสามารถนาไปใช
กบโปรแกรมอน ๆ ได 6. Procedure จะเปนสวนของโปรแกรมใหญทเขยนขนเพอทางานเฉพาะอยาง สวน Function จะ
เปนโปรแกรมยอยเหมอนเปนการสรางคาใหมขนมา 7. Procedure จะถกเรยกใชจากโปรแกรมหลกหรอจาก Procedure อน ๆ ดวยกนไดโดยทแตละ
Procedure ทางานเปนอสระตอกน สวน Function จะถกใชทางานภายในโปรแกรมหลกหรอภายใน Procedure สวนมากเปนการสรางคาเพอใชในการคานวณทซบซอน หรอเปนคาทใชกาหนดเงอนไขในการดาเนนการตาง ๆ ภายในโครงสรางของโปรแกรมใหญทงหมด
ตวอยาง PROGRAM EX17;
USES CRT; VAR X,Y,Z:INTEGER; PROCEDURE SW (VAR N1,N2:INTEGER); VAR T:INTEGER;
BEGIN T:=N1; N2:T;
END; FUNCTION MAX (N1,N2:INTEGER):INTEGER; BEGIN
IF N1>N2 THEN MAX:=N1 ELSE MAX:=N2;
END; BEGIN {MAIN PROGRAM} WRITE(‘ENTER TWO NUMBER :’); READLN(X,Y); SW(X,Y); WRITELN(‘X= ‘,X,’Y= ‘,Y); Z:=MAX(X,Y); WRITELN(‘MAX VALUE BETWEEN X AND Y= ‘,Z); END.
อธบาย 1. รปแบบของ Procedure ตางจาก Function คอ Procedure SW จะระบคาอารกวเมนต 2 ตวแปร
คอ N1 และ N2 เปนตวแบบจานวนเตม เพอรบคาพารามเตอร X,Y แตฟงกชน MAX จะระบอารกวเมนต 2 ตวแปร คอ N1 และ N2 เหมอนกน เปนแบบจานวนเตม เพอรบคาพารามเตอร X,Y และระบวาผลลพธของ MAX เปนจานวนเตม คอผลลพธของคาสงสดเทากบ X หรอ Y
2. ฟงกชน MAX จะถกอางองภายใน Begin…End; จากตวอยางของฟงกชน ใชคานวณคาของ MAX และสงกลบไปยง Main Program ทเรยกใชฟงกชนนอย
3. การเรยกใช Procedure แล Function ตางกนคอ ชอของ Procedure จะถกเรยกใชเหมอนคาสง ๆ หนง แตฟงกชนจะถกเรยกใชในรปของนพจนหรอเปนสวนหนงของคาสงอน ๆ
4. การสงผานคาพารามเตอร X,Y ไปยง Procedure SW คอเมอสงคา X,Y ไปแลวคา X,Y จะถกสลบคา ได X,Y ใหมมาในโปรแกรมหลก แตการสงผานคา parameter X,Y ไปยงฟงกชน MAX จะไมมการเปลยนคา X,Y (N1 และ N2) เพยงแตนาเอาไปคานวณหาคา MAX ซงจะไดผลลพธ 1 คา คอ ชอของฟงกชน MAX ทกลบมาเปนคาของตวแปร Z ในโปรแกรมหลก สวนตวแปร X,Y ในโปรแกรมหลกมคาเทาเดม ตวอยาง
PROGRAM EXAM17; USES CRT; VAR Y:INTEGER; PROCEDURE HEAD1(N:INTEGER); VAR I:INTEGER;
BEGIN WRITELN(‘BANGNA COMMERCIAL COLLEGE’); FOR I:=1 TO N DO WRITELN(‘------------------------------------------------‘);
END; BEGIN {MAIN PROGRAM}
CLRSCR; WRITELN(‘CALL PROCEDURE FIRST TIME’); HEAD1(2); WRITELN(‘CALL PROCEDURE SECOND TIME’); Y:=3; HEAD1(Y); WRITELN(‘END PROGRAM’);
END. ผลลพธ CALL PROCEDURE FIRST TIME BANGNA COMMERCIAL COLLEGE ----------------------------------------------- -----------------------------------------------
CALL PROCEDURE SECOND TIME BANGNA COMMERCIAL COLLEGE ----------------------------------------------- ----------------------------------------------- ----------------------------------------------- END PROGRAM ตวอยาง PROGRAM EXAM18; USES CRT; VAR A,B:INTEGER;
PROCEDURE HEAD2(M,N:INTEGER); VAR I:INTEGER; BEGIN
FOR I:=1 TO M DO WRITELN(‘**********************************’); WRITELN(BANGNA COMMERCIAL COLLEGE’); FOR I:=1 TO N DO WRITELN(‘**********************************’);
END; BEGIN {MAIN PROGRAM}
CLRSCR; HEAD2(3,2);
END. ผลลพธ ************************************* ************************************* ************************************* BANGNA COMMERCIAL COLLEGE ************************************* *************************************
ตวอยาง
PROGRAM EXAM; USES CRT; VAR ANS:CHAR; I:INTEGER; NAME,CODE:ARRAY[1..20] OF STRING;
TEST,MID,FINAL:ARRAY[1..20] OF INTEGER; PROCEDURE ENTERDATA; BEGIN
CLRSCR; FOR I:=1 TO 20 DO BEGIN
WRITE(‘ENTER CODE :’);READLN(CODE[I]); WRITE(‘ENTER NAME :’);READLN(NAME[I]); WRITE(‘ENTER TEST :’);READLN(TEST[I]); WRITE(‘ENTER MIDTERM :’);READLN(MID[I]); WRITE(‘ENTER FINAL :’);READLN(FINAL[I]); END;
END; PROCEDURE MENU; BEGIN
CLRSCR; WRITELN;WRITELN;WRITELN;WRITELN;WRITELN; WRITELN(‘MAIN MENU’:30); WRITELN(‘***************’:30); WRITELN(‘1.TEST’:30); WRITELN(‘2.MIDTERM’:30); WRITELN(’3.FINAL’:30); WRITELN(‘4.QUIT’:30); WRITELN; WRITELN; WRITELN(‘ENTER YOUR CHOICE:’);READLN(ANS);
CASE ANS OF
‘1’ : BEGIN CLRSCR; WRITELN; WRITELN; WRITELN; WRITELN(‘CODE NAME TEST’:45); FOR I:=1 TO 3 DO BEGIN WRITELN(CODE[I]:25,NAME[I]:10,TEST[I]:10); END; WRITELN; WRITELN; WRITELN; WRITELN(‘…PRESS ENDTER…’:45);READLN; END; ‘2’ : BEGIN CLRSCR; WRITELN; WRITELN; WRITELN; WRITELN(‘CODE NAME MIDTERM’:45); FOR I:=1 TO 3 DO BEGIN WRITELN(CODE[I]:25,NAME[I]:10,MID[I]:10); END; WRITELN; WRITELN; WRITELN; WRITELN(‘…PRESS ENDTER…’:45);READLN; END; ‘3’ : BEGIN
CLRSCR; WRITELN; WRITELN; WRITELN; WRITELN(‘CODE NAME FINAL’:45);
FOR I:=1 TO 3 DO BEGIN
WRITELN(CODE[I]:25,NAME[I]:10,FINAL[I]:10); END; WRITELN; WRITELN; WRITELN; WRITELN(‘…PRESS ENDTER…’:45);READLN;
END; ‘4’ : CLRSCR;END;
END;
BEGIN ENTERDATA; MENU; MENU; MENU; MENU; END.
คาสง GOTOXY เปนคาสงตง cursor ทตาแหนงบนหนาจอ รปแบบ
GOTOXY(Row,Column) ตวอยาง PROGRAM EXAM19;
USES CRT; VAR A,B,D:INTEGER;
BEGIN CLRSCR; GOTOXY(15,5); WRITELN(‘ENTER TWO NUMBER’); GOTOXY(15,7); READ(A,B); D:=A+B; GOTOXY(15,10); WRITELN(‘SUM OF A AND B = ‘,D); END. โกลบอลและโลคอล (Global and Local) โกลบอล (Global) หมายถง คาใด ๆ ทเรากาหนดไวในสวนขอกาหนดของโปรแกรมหลก คาใดกตามไมวาจะเปนตวแปร คาคงท ชอแบบขอมล หรอโปรแกรมยอย ทกาหนดไวในสวนของขอกาหนดของโปรแกรมหลก ถอเปนสวนกลาง นาไปใชไดทงโปรแกรมหลกและโปรแกรมยอย
โลคอล (Local) หมายถง คาใด ๆ ทเรากาหนดไวสวนขอกาหนดของโปรแกรมยอย รวมทงทกาหนดในสวนหว คอ จะใชไดในโปรแกรมยอยนนหรอโปรแกรมยอยรองลงไปของโปรแกรมยอยนนเทานน สวนโปรแกรมหลกและโปรแกรมยอยอนจะนาไปใชไมได ตวอยาง แสดงโกลบอลและโลคอล PROGRAM AA; VAR NUM:INTEGER; PROCEDURE A; BEGIN NUM:=NUM*10; WRITELN(‘NUM*10 = ‘,NUM); END;
VAR ANY:INTEGER; PROCEDURE B;
VAR NUM,CNTR:INTEGER; BEGIN NUM:=124; WRITELN(‘NUM = ‘,NUM); CNTR:=122; WRITELN(‘CNTR =’,CNTR); END; BEGIN {MAIN PROGRAM} NUM:=5; WRITELN(‘IN MAIN’,’NUM = ‘,NUM); A; B; WRITELN(‘BACK TO MAIN NUM = ‘,NUM); END. ผลทไดจาการ RUN NUM*10 = 50 NUM = 124
CNTR = 122 BACK TO MAIN NUM = 50 อธบาย
- NUM ทกาหนดในโปรแกรมหลกเปนโกบอล คอใหคาและ output ในโปรแกรมหลกและใหคาและ output ใน program ยอย A
- NUM, cntr ทกาหนดใน program ยอย B เปนโลคอล B ซงโปรแกรมหลกหรอโปรแกรมยอยอน ๆ จะนาไปใชไมได แตชอ NUM ซากบ NUM ในโปรแกรมหลก จงถอวาเปนคนละ NUM กน ทโปรแกรมหลก NUM=5 แตพอถง A นามาคณ 10 ได 50 เมอถง B ใหคาใหมเปน 124 เมอกลบมาโปรแกรมหลกกเปน 124 แตยงเปน 50 เพราะเปน NUM คนละตวกน
-กอน Procedure B ไดกาหนดตวแปร ANY ซงเปนโกบอล แตใชใน procedure A ไมไดใชไดใน procedure B และโปรแกรมหลก
- เพราะฉะนน B เรยกใช A แต A เรยกใช B ไมได และทง A,B เรยกใช AA ไมได เพราะเปนโปรแกรมหลก
ภาษา Pascal:อารเรย (Array) จากเนอหาทผานมาไดแนะนาการกาหนดตวแปรเพอใชในการเกบขอมล ซงตวแปรเหลานนม
ลกษณะเปนขอมลเดยว (Simple data type) ซงมความหมายวาตวแปรหนงตวจะสามารถเกบขอมลไดเพยงขอมลเดยว เชน VAR X : integer;
จะมความหมายวา ตวแปร X เปนตวแปรทเกบขอมลเลขจานวนเตม ซง X จะสามารถเกบเลขจานวนเตมไดคาเดยว ถาหากเราตองการทจะเกบ ขอมลทเปนชนดเดยวกนหลายๆ จานวน เรากจาเปนจะตองจองตวแปรชนดเดยวกนเปนจานวนหลายๆ ตวใหเทากบจานวนทตองการดวย ซงตวแปรแตละตวกจาเปนจะตองมชอทแตกตางกนดวยเชน ถาตองการจองตวแปรชนด เลขจานวนเตมเปนจานวน 10 ตว โดยใชวธดงทกลาวมาจะตองทาดงน VAR X1, X2, X3, X4, X5, X6, X7, X8, X9, X10 : integer;
จะเหนวาวาวธการจองตวแปรแบบนเปนวธทไมสะดวก เพราะถาหากมตวแปรเพมขนมากๆ เชน 100 ตวกจะตองพมพชอตวแปรไปเรอยๆ จนครบจานวน 100 ตวเชนกน และถาหากสงเกตใหดแลวการจองตวแปรในลกษณะนจะกอใหเกดความยงยากในการเขยนโปรแกรมดวย
ตวแปรขอมลชนดโครงสราง (Structured data type) ซงลกษณะตวแปรขอมลประเภทนเกดจากการนาเอาขอมลชนดพนฐานหลายตวมาประกอบรวมกนตามแตทผใชจะกาหนด เชน ขอมลชนดอารเรย ขอมลชนดเรคอรด ขอมลชนดเซต และขอมลชนดไฟล เปนตน ซงการนาขอมลหลายๆตวมารวมกนจะสามารถแกไขความยงยากทเกดขนจากการมตวแปรปรมาณมาก ๆ ได คอ มตวแปรทงสน 100 ตว และตองการ
อารเรย เปนขอมลแบบโครงสรางชนดหนง ซงประกอบขนจากขอมลหลายๆ ตวรวมเขาดวยกนเปนกลม โดยขอมลแตละตวในกลมถกเรยกวาเอลเมนต (Element) และแตละเอลเมนตจะตองเปนขอมลชนดเดยวกน การอางถงขอมลจะใชตวแปรชอเดยว ซงจะหมายถงชอของกลม และสามารถอางถงขอมลแตละเอลเมนตในกลมไดโดยใชดชน (Index) ตอทายหลงชอตวแปรของกลม ดชนนจะเปนตวบงบอกถงลาดบทของเอลเมนต ลกษณะของดชนทเราสามารถเขาใจไดงายทสดกคอ ตวเลข การประกาศและอางถงขอมลชนดอารเรย
จากสวนประกาศตวแปรในการจองตวแปรจานวน 10 ตวเพอใชในการเกบขอมลทเปนเลขจานวนเตม ตามตวอยางทผานมานน เราจองตวแปร X1,X2,X3,X4,X5,X6,X7,X8,X9,X10 เปนตวแปรชนดจานวนเตม ซงถาหากเราเปลยนมาใชตวแปรชนดโครงสรางทเปนอารเรยกสามารถทาไดดงตอไปน VAR X : ARRAY [1..10] OF integer;
จากสวนประกาศตวแปรขางบนพบวาตวแปร X เปนตวแปรแทนกลมขอมลชนดเลขจานวนเตม โดยจานวนของเอลเมนตใหดจากดชน ซงการกาหนดดชนของขอมลตามตวอยางถกกาหนดใหอยในรปของชวงยอย (Subrange) โดยชวงยอยนประกอบดวย คาเรมตน เครองหมาย ".." และคาสนสด ทงหมดนจะอยภายในเครองหมาย "[" และ "]" ในทนคอ[1..10] ซงมความหมายวา ดชนของตวแปรอารเรย X เรมตนจากเลข 1จนถงเลข 10 รวมจานวนทงสน 10 ตว และเราสามารถอางถงขอมลแตละเอลเมนตไดดงน X[1] ,X[2] ,X[3] ,X[4] ,X[5] ,X[6] ,X[7] ,X[8] ,X[9] ,X[10]
ภาพแสดงลกษณะโครงสรางของตวแปร X ซงเปน อารเรย ของเลขจานวนเตม VAR X : ARRAY [0..99] OF real; n : integer; BEGIN {main program} FOR n := 0 TO 99 DO X[n] := n+1; END.
จากตวอยางจะพบวา X เปนตวแปรโครงสรางชนดอารเรยของ เลขจานวนจรง โดยม ดชนเรมตนจาก 0 ถง 99 รวมทงสนเปนเลขจานวนเตมทงหมด 100 จานวน ซงทาใหเราทราบวาดชนของขอมลไมจาเปนทจะตองเรมตนดวย 1 ซงในทนเรมตนดวย 0 และจากสวนของ main program ซงทาการกาหนดคาขอมล ตงแต 1 ถง 100 ใหกบตวแปร X ตงแต ดชน ท 0 ถงดชนท 99 จะเหนวาเราสามารถใชตวแปร n เปนดชนเพอทาการชตาแหนงเอลเมนตของตวแปร X
TYPE lettertype = ARRAY ['A'..'Z'] OF Integer; VAR letter : lettertype; index : 'A'..'Z'; BEGIN {main program} FOR cindex := 'A' TO 'Z' DO letter[cindex] := 0; END.
จากตวอยางทาใหเราทราบวาดชนของอารเรยอาจจะเปนชนดขอมลอสระ กได ซงในทนดชนของตวแปรอารเรยทชอวา letter นกคอ ตวอกษร 'A' ถง 'Z' TYPE DayOfWeek = (sun, mon, tue, wed, thu, fri, sat); day = ARRAY [DayOfWeek] OF integer; VAR day : Dday;
จากตวอยาง จากสวนประกาศจะพบวาเราสามารถกาหนดชนดขอมล ขนมาใหมมลกษณะเปนแบบแจงนบ (enumerated data type) และใชชนดของขอมลใหมนเปนดชนของอารเรยได ซงจะทาใหเกดเอลเมนตดงตอไปน day[sun],day[mon],day[tue],day[wed], day[thu],day[fri],day[sat] TYPE ArrayOfChar = ARRAY [BYTE] OF char; VAR Message : ArrayOfChar;
ในตวอยางพบวาสามารถใชชนดของตวแปร บางชนดในการกาหนดดชนของตวแปรอารเรยไดชนดขอมลทใชกาหนดเปน ดชนของขอมลชนดอารเรยไดจะตองเปนขอมลแบบเรยงลาดบ (Ordinal Type) เทานน จากตวอยาง เราไดตวแปรทชอ message เปนอารเรยของตวอกษร โดยมจานวนตวอกษรหรอเอลเมนตทงหมด 256 ตวอกษร
ชนดขอมลทกาหนดใหกบเอลเมนตในอารเรยจะเปนขอมลชนดใดกไดเชน ขอมลชนดพนฐาน ขอมลชนดโครงสรางอนๆ รวมทงขอมลชนดอารเรยเอง แตทกเอลเมนตในอารเรยเดยวกนจะตองมชนดเหมอนกนเชน TYPE Complex_number = RECORD
real_val : real; imag_val : real; END; Sample = (HCL,CO1,SO2); Sampling_result = ARRAY [ sample ] OF real; Testing_mode =(burnt_test,shock_test,prev_maintenance,overall); Testing_set = ARRAY [Testing_mode] OF Sampling_result; VAR X : ARRAY [1..20} OF Complex_number; Experiment_Result : ARRAY [1..10] OF Sampling_result; Monthly_Operation : ARRAY [1..31] OF Testing_set; การใชขอมลอารเรยเบองตน
ตวแปรทมชนดขอมลอารเรยนน เมอเรานามาใชงานสวนใหญแลวผใชจะตองการอางเขาไปถง เอลเมนตแตละตวของอารเรย โดยใชดชนเปนตวชวยอางถงตาแหนงเอลเมนตทตองการ หากตองการใชหรออางถงทกๆ เอลเมนต หรอชวงใดชวงหรอชวงหนงของอารเรย เราสามารถทาไดโดยใชคาสงวนรอบเพอเขาถงเอลเมนตทละเอลเมนตจนครบทกเอลเมนตตามทตองการ ในหวขอนจะกลาวถงวธการเขยนโปรแกรมเพอเขาถงเอลเมนตตางๆ ในตวแปรอารเรย การกาหนดคาเรมตนใหแกชนดขอมลอารเรย
การตงคาขอมลเรมตนใหแกทกเอลเมนตใหมขอมลคาเดยวกนเขยนไดดง CONST max_samp = 100; VAR Score : ARRAY [ 1.. max_samp] OF real; IDX : integer; BEGIN FOR IDX := 1 TO max_samp DO Score[IDX] := 0.0; END.
การรบขอมลและแสดงผลตวแปรชนดอารเรย คาสง READ, READLN, WRITE, WRITELN ซงเปนคาสงรบขอมล และแสดงผลของภาษา
ปาสคาล ไมสามารถใชรบขอมลหรอแสดงผลตวแปรอารเรยไดทงตว ตองสงใหแสดงผลทละ เอลเมนตไป ตวอยางในการรบขอมลและแสดงผลตวแปรอารเรย แสดงในตวอยาง PROGRAM Ex_Result (Input,Output); CONST Max_Samp = 100; VAR Exp_Result : ARRAY [1.. Max_Samp] OF real; ExNo : integer; Max_Exp : integer; BEGIN REPEAT Write('Enter no. OF sampling : '); Readln(Max_Exp); UNTIL (Max_Exp <= max_samp) and (max_exp > 0); FOR ExNo := 1 TO Max_Exp DO BEGIN Write('Result No.',ExNo:4':'); Readln('Exp_Result[ExNo]); END; FOR ExNo := 1 TO Max_Exp DO Writeln('Result no.',ExNo:4,' :',Exp_Result[ExNo]); END. การอางถงตวแปรอารเรยในรปแบบตาง ๆ
การใชตวแปรอารเรยในคาสงตางๆ ตองอางถงเอลเมนตของอารเรย โดยระบดชน เชน RESULT[I] := SCORE [ I ] / 100; SUMMARY[1] := SUM_SCORE / NUM_SCORE; SUMMARY[2] := NUM_SCORE; STEP_VALUE[STEP_NO+1] := STEP_VALUE[STEP_NO] + STEP_INC;
การอางถงตวแปรอารเรยทงตว ทมการใชในคาสงบางลกษณะ ไดแก
1. คาสงกาหนดคาตวแปรใหอารเรยตวหนงๆ (ทกๆ เอลเมนต) มขอมลเหมอนตวแปรอารเรยอกตวหนงมขอจากดวา ตวแปรอารเรยทงสองตวจะตองประกาศดวยชนดขอมลอารเรยทเหมอนกนเทานน ดงตวอยาง TYPE Result_Array = ARRAY [1..100] OF real; VAR First_result, Second_Result : Result_Array; BEGIN Second_Result := First_Result; END.
2. เปนพารามเตอรของโพรซเยอร หรอฟงกชนทกาหนดชนดพารามเตอรเปนอารเรยหากม โพรซเยอร หรอฟงกชนทตองสงผานอารเรยทงตวเปนพารามเตอร กสามารถใชชนดขอมลอารเรยเปนชนดของพารามเตอรไดแตตองประกาศชนดโดยใชสวนประกาศชนด (Type) สรางชอชนดใหมทเปนอารเรยทมจานวน และชนดของเอลเมนตตามทตองการ จงนาชอชนดนนไปใชเปนชอชนดของพารามเตอรไดในการเรยกใชโพรซเยอรหรอฟงกชน ตวแปรทจะสงไปเปนพารามเตอรกตองใชชนดเดยวกนกบชอชนดของการกาหนดพารามเตอรในการประกาศโพรซเยอรหรอฟงกชนดวย ดงตวอยาง TYPE Result_Array = ARRAY [1..100] OF real; VAR First_Result : Result_Array; Frist_count : integer; First_arg : real; FUNCTION Result_avg(Result_A:Result_Array;Res_no:INTEGER):real; VAR R_SUM : real; IDX : integer; BEGIN R_SUM := 0.0; FOR IDX := 1 TO Res_no DO R_SUM := R_SUM + Result_A[IDX]; Result_avg := R_Sum/Res_no; END;
PROCEDURE Print_Result(Result_A:Result_Array; Res_no:integer); VAR IDX : integer; BEGIN FOR IDX := 1 TO Res_no DO Writeln(LST,'Result no.',IDX:4':',Result_A[IDX]:10:4); END; BEGIN First_avg := Result_avg(First_Result,First_count); Print_Result(First_Result,First_count); END.
ประโยชนของการใชอารเรย มกใชเกบขอมลทเปนชด ในบางครงอาจตองมการคนหาขอมล ทเกบอยในอารเรยเพอใหไดขอมลทตองการ เชน ตองการขอมลทมคาสงสด ตาสด ตองการขอมลทมคาตากวาตวแรกทพบในชดขอมลทมขอความนาหนาดวยอกษร "S" หรออาจตองการรบขอมลเขาสตวแปรอารเรย แลวนาไปจดเรยงลาดบคามากนอย หรอเรยงลาดบตวอกษรของขอความ เพอนาไปแสดงผล หรอเกบบนทกใหสามารถนาไปใชตอ ในหวขอนจะยกตวอยางการเขยนโปรแกรมเพอคนหา และจดเรยงลาดบขอมลทมอยในอารเรย
โปรแกรมนจะทาการรบคาจานวนของนกเรยน และรบคาคะแนนของนกเรยนแตละคน หลงจากนนจะทาการหาผลรวมของคะแนนทงหมด และหาคาเฉลยเลขคณตของคะแนนทงหมด PROGRAM LinAver; USES CRT; VAR score : ARRAY[1..100] OF real; avg, sum : real; i, num : integer; BEGIN Clrscr; REPEAT Write('Enter number OF student: '); Readln(num); UNTIL num in [1..100]; Writeln;
sum := 0; FOR i := 1 TO num DO BEGIN Write('Enter score OF student number ',i,' : '); Readln(score[i]); sum := sum + score[i]; END; avg := sum/num; Writeln; Writeln('Summation OF all scores is ',sum:0:2); Writeln('The average OF all scores is ',avg:0:2); Readln; END. การประกาศและอางถงชนดขอมลอารเรย
ในสวนทผานมาเราไดแนะนาถงอารเรยชนดหนงมต ซงจะเหนวาในการกาหนดอารเรยชนดนจะมดชนซงมลกษณะเปนชวงเพยงชดเดยว ขอมลทเปนอารเรยหนงมตจะมลกษณะเหมอนการนาเอาขอมลชนดเดยวกนมาเรยงตอกนเปนเสนตรงคลายกบการเขาแถว
ในโปรแกรมภาษาปาสคาลสามารถสรางและใชอารเรยหลายมตไดสาหรบอารเรยสองมตเราสามารถเปรยบเทยบไดกบลกษณะของตารางซงประกอบดวยแกนแนวตงและแกนแนวนอน แกนแตละแกนนกคอดชนในแตละมตนนเอง การประกาศอารเรยหลายมตนนสามารถทาไดโดยทาการกาหนดดชนซงมลกษณะเปนชวงเชนเดยวกบดชนของอารเรยหนงมตจานวนหลายๆ ชดโดยแตละตวจะคนดวยเครองหมาย ","
ตวอยาง เชน VAR M_array : ARRAY [1..10,1..3] OF char;
มปญหาอยหลายอยางทจาเปนจะตองเกบขอมลใหอยในรปของตารางตวอยางเชน ถาหากเราตองการจดบนทกคาของแรงดนภายในทอนาตามตาแหนงตางๆ ทงหมด 4 ตาแหนงดวยกนโดย ในหนงวนจะทาการจดบนทกทงหมด 5 ครง คาของแรงดนทอานไดสามารถบนทกลงในตารางไดดงน
จากตารางทสรางขนจะพบวา ความดนในทอนา 4 คาทอานไดในหนงครงนนอยในแนวนอน และจานวนครงทอานทงหมด 5 ครงอยในแนวตงรวมจานวนขอมลทงหมด 20 ตว เราสามารถกาหนดตวแปรเพอสาหรบใชในการเกบขอมลชดนไดดงน CONST Times = 5; Locations = 4;
TYPE PressureDataTable=ARRAY[1..Times,1..Locations] OF real; VAR PressureTable : PressureDataTable;
ในการอางถงตวขอมลนนสามารถอางไดดงตวอยางเชน ถาตองการอางถงขอมลของแรงดนทวดไดจากการอานครงท 5 ตาแหนงท 2 จะเปนดงน PressureTable[5,2]
จากตวอยางในการกาหนดตวแปรอารเรยทเปน 2 และ 3 มต ทผานมาคงพอจะทาใหเกด ความเขาใจในการกาหนดตวแปรอารเรยชนดหลายมตไดถาหากตองการทจะเพมมตใหกบตวแปรอกกสามารถทาไดโดยเพมจานวนดชนดงตวอยางของอารเรย 2 และ 3 มต และจานวนตวแปรทงหมดท เกดขนจะเทากบผลคณของจานวนเอลเมนตในแตละมต