การเขียนโปรแกรมคอมพิวเตอร์ 1

64

Upload: mrwatcharin-phongpugdee

Post on 22-Mar-2016

216 views

Category:

Documents


3 download

DESCRIPTION

เนื้อหาสาระการเีรียนรู้การเขียนโปรแกรมคอมพิวเตอร์ 1 (ภาษาปาสคาล)

TRANSCRIPT

Page 1: การเขียนโปรแกรมคอมพิวเตอร์ 1
Page 2: การเขียนโปรแกรมคอมพิวเตอร์ 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)

Page 3: การเขียนโปรแกรมคอมพิวเตอร์ 1

สวนหวโปรแกรม จะเรมตนดวยคาวา 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)

Page 4: การเขียนโปรแกรมคอมพิวเตอร์ 1

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)

Page 5: การเขียนโปรแกรมคอมพิวเตอร์ 1

การกาหนดชอ (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

Page 6: การเขียนโปรแกรมคอมพิวเตอร์ 1

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

Page 7: การเขียนโปรแกรมคอมพิวเตอร์ 1

ขอมลเลขจานวนจรง (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;

Page 8: การเขียนโปรแกรมคอมพิวเตอร์ 1

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 ;

Page 9: การเขียนโปรแกรมคอมพิวเตอร์ 1

ตวอยาง

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

ทเปนตวแปร หรอคาคงททเปนตวเลข หรอนพจนทางคณตศาสตรหรอตรรกศาสตร ซงเชอมกนดวย

Page 10: การเขียนโปรแกรมคอมพิวเตอร์ 1

ตวอยางนพจนทางตรรกศาสตร

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;

Page 11: การเขียนโปรแกรมคอมพิวเตอร์ 1

คาสงการเปรยบเทยบเงอนไข (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)

เปนคาสงใหเปลยนลาดบการปฏบตการไปทางานทคาสงอน โดยไมมการตรวจสอบเงอนไขใด ๆ

Page 12: การเขียนโปรแกรมคอมพิวเตอร์ 1

ตวอยางเชน

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) เปนโพรซ

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

ซงจะสามารถทาการแกไขหรอเปลยนแปลงไดเองตามตองการ

Page 13: การเขียนโปรแกรมคอมพิวเตอร์ 1

ชนดของขอมลพนฐาน แบงออกไดเปน 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

ขอสงเกต ตวกระทาหาร (/) จะใหผลลพธเปนจานวนจรง แมวาตวถกกระทาจะเปนจานวนเตม แตไมม

ตวกระทาทเปนการยกกาลง

Page 14: การเขียนโปรแกรมคอมพิวเตอร์ 1

ขอกาหนด

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) จะตองมตวเลขอยหนาจดทศนยม และหลงจด

ทศนยมดวย นอกจากนยงสามารถเขยนอยในรปของเลขยกกาลง ไดอกดวย

Page 15: การเขียนโปรแกรมคอมพิวเตอร์ 1

สญลกษณทางคณตศาสตรของเลขจานวนจรง

การคานวณ สญลกษณ ตวอยาง ชนดขอมล 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' , '%' เปนตน

Page 16: การเขียนโปรแกรมคอมพิวเตอร์ 1

5. ขอมลชนดตรรกศาสตร (Boolean - Type Data)

เปนขอมลทแสดงคาความจรงอยางใดอยางหนง จะมคาความจรงของขอมล 2 แบบ ไดแก ขอมล

จรง (true) และ ขอมลเทจ (false) ซงโดยทวไป จะใชในการเปรยบเทยบนพจนทางตรรกศาสตร สามารถ

แบงนพจนทางตรรกศาสตรออกเปน 2 แบบ ดงน

1. นพจนทางตรรกศาสตรทใชสญลกษณแสดงความสมพนธเปนตวเชอม

2. นพจนทางตรรกศาสตรทใชสญลกษณทางตรรกศาสตรเปนตวเชอม

5.1 นพจนทางตรรกศาสตรทใชสญลกษณแสดงความสมพนธเปนตวเชอม

เปนนพจนทประกอบดวยสวนของ Operand เชอมกนดวย Operator ซงเปนเครองหมายทแสดง

ความสมพนธ (Relational Operators) หรอการเปรยบเทยบ

ตารางแสดงความสมพนธ

ความหมาย สญลกษณ

เทากบ =

มากกวา >

นอยกวา <

มากกวาหรอเทากบ >=

นอยกวาหรอเทากบ <=

ไมเทากบ <>

ตวอยางเชน 2>3 คาเปน false

Page 17: การเขียนโปรแกรมคอมพิวเตอร์ 1

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

Page 18: การเขียนโปรแกรมคอมพิวเตอร์ 1

ลาดบการคานวณทางคณตศาสตรของนพจนทางคณตศาสตร

ในการสงใหคอมพวเตอรคานวณหาคานพจนทางเลขคณตใด ๆ กตาม คอมพวเตอรจะมการ

คานวณตามลาดบขนตอน โดยการพจารณาดวา จะคานวณอะไรกอนหลง นนคอดจากลาดบของ Operators

นนเอง

ลาดบขนตอนการคานวณมดงน

(1) ทาในวงเลบกอน

(2) ทาเลขยกกาลง

(3) ทาคณหรอหาร ขนอยกบวาตวใดมากอน ตวใดมาหลง

(4) ทาบวกหรอลบ ขนอยกบวา ตวใดมากอนหลง

ตวอยางการคานวณ

(1) x := 5+6*3 คาตอบ x = 23

(2) x := (5+6)*3 คาตอบ x = 33

Page 19: การเขียนโปรแกรมคอมพิวเตอร์ 1

ขอมลตวเลข

ขอมลแบบเลขจานวนเตม

ชนดขอมล เนอทในหนวยความจา

(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

Page 20: การเขียนโปรแกรมคอมพิวเตอร์ 1

ภาษา 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) อาจจะมคณสมบตดงตอไปน

Page 21: การเขียนโปรแกรมคอมพิวเตอร์ 1

เปนสตรง (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

การแสดงผลทจอภาพ

(ตาแหนงเคอรเซอร)

การกาหนดตาแหนงแสดงขอมลทจอภาพ

จากโปรแกรมทผานมาจะเหนไดวา คอมพวเตอรจะแสดงขอมลเรมจากทางดานซายสดของ

จอภาพและเรยงลาดบไปทางขวาเสมอ ในกรณทเราตองการจดตาแหนงแสดงขอมลใหแตกตาง ไปจากน

สามารถทาได โดยปาสคาลกาหนดรปแบบไวดงน

Page 22: การเขียนโปรแกรมคอมพิวเตอร์ 1

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 นบจากทางซาย

Page 23: การเขียนโปรแกรมคอมพิวเตอร์ 1

เลข 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. การคานวณทมเครองหมายทมลาดบเทากนอยดวยกนจะมการคานวณจากทางซายไป

ทางขวาตามลาดบ

Page 24: การเขียนโปรแกรมคอมพิวเตอร์ 1

ตวอยาง แสดงผลของการคานวณจากโจทย 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.

Page 25: การเขียนโปรแกรมคอมพิวเตอร์ 1

ซงจะไดผลลพธดงน

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 ไบตใชสาหรบเกบขอมลชนดตวเลขทไมมทศนยม

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

คาตวเลขทไมมทศนยม

Page 26: การเขียนโปรแกรมคอมพิวเตอร์ 1

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)

Page 27: การเขียนโปรแกรมคอมพิวเตอร์ 1

รปแบบของ 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

Page 28: การเขียนโปรแกรมคอมพิวเตอร์ 1

กดคย 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

Page 29: การเขียนโปรแกรมคอมพิวเตอร์ 1

ภาษา 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) แลวแตกรณของลปแตละแบบ

Page 30: การเขียนโปรแกรมคอมพิวเตอร์ 1

คาของเงอนไขทเปนจรงหรอเทจนไดมาจากการกระทา 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

Page 31: การเขียนโปรแกรมคอมพิวเตอร์ 1

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 จะทางานตามคาสงจานวนหนงไปจนกระทงเงอนไขเปนจรงแลวจงเลกทา แตถา

เงอนไขเปนเทจจะทางานตามคาสงจานวนนนซาอก

Page 32: การเขียนโปรแกรมคอมพิวเตอร์ 1

รปแบบของ 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

Page 33: การเขียนโปรแกรมคอมพิวเตอร์ 1

ผลทไดคอ

Repeat Counter

1

2

3

4

5

6

7

8

9

ลปแบบ Repeat ซอนกน (Nested Repeat)

คาสงททางานเปนลปอาจจะตองนามาซอนกนเพอใหสามารถทางานทมลกษณะเปนลปซอนกนได Repeat

ทเปนลปซอนกนได Repeat ทเปนลปซอนกนมโครงสรางดงน

Repeat

คาสง;

....

Repeat

End.

Page 34: การเขียนโปรแกรมคอมพิวเตอร์ 1

คาสง;

....

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

Page 35: การเขียนโปรแกรมคอมพิวเตอร์ 1

ภาษา 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

Page 36: การเขียนโปรแกรมคอมพิวเตอร์ 1

คาสง; ..... คาสง; 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;

Page 37: การเขียนโปรแกรมคอมพิวเตอร์ 1

โดยในสวนคาสงอาจจะเปนคาสงเดยว หรอคาสงผสมกได ตวอยาง ในโปรแกรมทตองการแสดงผลในลกษณะตาราง อาจจะตองใชคาสง 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.

Page 38: การเขียนโปรแกรมคอมพิวเตอร์ 1

ภาษา 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.

Page 39: การเขียนโปรแกรมคอมพิวเตอร์ 1

ผลทไดคอ 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

Page 40: การเขียนโปรแกรมคอมพิวเตอร์ 1

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 ขอมลจะถกบนทกเขาในดสก

Page 41: การเขียนโปรแกรมคอมพิวเตอร์ 1

ถาเราเลอก N จะไมมการบนทกขอมล

การใหเลอกวาจะใชโปรแกรมนนตอหรอไม คอ

CONTINUE (Y/N)

ถาเราเลอก Y โปรแกรมจะทางานตอไป

ถาเราเลอก N โปรแกรมหยดทางาน

ลกษณะการเลอกทาแบบ IF

IF

เงอนไขเปนจรง

ใหเปนคาสง 1

เงอนไขเปนเทจ

ใหเปนคาสง 2

IF

เงอนไขเปนจรง

ใหเปนคาสง 1

เงอนไขเปนเทจ

ใหเปนคาสง 2

IF เงอนไขเปนจรง THEN คาสง 1

ELSE (เงอนไขเปนเทจ) คาสง 2

Page 42: การเขียนโปรแกรมคอมพิวเตอร์ 1

ตวอยางการเลอกทาแบบ 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คาสง

Page 43: การเขียนโปรแกรมคอมพิวเตอร์ 1

จานวนครงของการเลอกทาซามไดมากเทาทตองการ สาหรบ 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

Page 44: การเขียนโปรแกรมคอมพิวเตอร์ 1

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

Page 45: การเขียนโปรแกรมคอมพิวเตอร์ 1

คาของคาคงทจะตองเปนขอมลชนดเดยวกนกบตวแปร สาหรบ [, คาคงท] คาคงท.. คาคงท และ 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.

Page 46: การเขียนโปรแกรมคอมพิวเตอร์ 1

การเลอกทาแบบ 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;

Page 47: การเขียนโปรแกรมคอมพิวเตอร์ 1

การเรยกใช 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.

Page 48: การเขียนโปรแกรมคอมพิวเตอร์ 1

ฟงกชน (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 สวนมากเปนการสรางคาเพอใชในการคานวณทซบซอน หรอเปนคาทใชกาหนดเงอนไขในการดาเนนการตาง ๆ ภายในโครงสรางของโปรแกรมใหญทงหมด

Page 49: การเขียนโปรแกรมคอมพิวเตอร์ 1

ตวอยาง 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 จะถกเรยกใชเหมอนคาสง ๆ หนง แตฟงกชนจะถกเรยกใชในรปของนพจนหรอเปนสวนหนงของคาสงอน ๆ

Page 50: การเขียนโปรแกรมคอมพิวเตอร์ 1

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 ----------------------------------------------- -----------------------------------------------

Page 51: การเขียนโปรแกรมคอมพิวเตอร์ 1

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 ************************************* *************************************

Page 52: การเขียนโปรแกรมคอมพิวเตอร์ 1

ตวอยาง

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

Page 53: การเขียนโปรแกรมคอมพิวเตอร์ 1

‘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;

Page 54: การเขียนโปรแกรมคอมพิวเตอร์ 1

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) หมายถง คาใด ๆ ทเรากาหนดไวในสวนขอกาหนดของโปรแกรมหลก คาใดกตามไมวาจะเปนตวแปร คาคงท ชอแบบขอมล หรอโปรแกรมยอย ทกาหนดไวในสวนของขอกาหนดของโปรแกรมหลก ถอเปนสวนกลาง นาไปใชไดทงโปรแกรมหลกและโปรแกรมยอย

Page 55: การเขียนโปรแกรมคอมพิวเตอร์ 1

โลคอล (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

Page 56: การเขียนโปรแกรมคอมพิวเตอร์ 1

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 ตว และตองการ

Page 57: การเขียนโปรแกรมคอมพิวเตอร์ 1

อารเรย เปนขอมลแบบโครงสรางชนดหนง ซงประกอบขนจากขอมลหลายๆ ตวรวมเขาดวยกนเปนกลม โดยขอมลแตละตวในกลมถกเรยกวาเอลเมนต (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

Page 58: การเขียนโปรแกรมคอมพิวเตอร์ 1

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

Page 59: การเขียนโปรแกรมคอมพิวเตอร์ 1

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.

Page 60: การเขียนโปรแกรมคอมพิวเตอร์ 1

การรบขอมลและแสดงผลตวแปรชนดอารเรย คาสง 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;

การอางถงตวแปรอารเรยทงตว ทมการใชในคาสงบางลกษณะ ไดแก

Page 61: การเขียนโปรแกรมคอมพิวเตอร์ 1

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;

Page 62: การเขียนโปรแกรมคอมพิวเตอร์ 1

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;

Page 63: การเขียนโปรแกรมคอมพิวเตอร์ 1

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;

Page 64: การเขียนโปรแกรมคอมพิวเตอร์ 1

TYPE PressureDataTable=ARRAY[1..Times,1..Locations] OF real; VAR PressureTable : PressureDataTable;

ในการอางถงตวขอมลนนสามารถอางไดดงตวอยางเชน ถาตองการอางถงขอมลของแรงดนทวดไดจากการอานครงท 5 ตาแหนงท 2 จะเปนดงน PressureTable[5,2]

จากตวอยางในการกาหนดตวแปรอารเรยทเปน 2 และ 3 มต ทผานมาคงพอจะทาใหเกด ความเขาใจในการกาหนดตวแปรอารเรยชนดหลายมตไดถาหากตองการทจะเพมมตใหกบตวแปรอกกสามารถทาไดโดยเพมจานวนดชนดงตวอยางของอารเรย 2 และ 3 มต และจานวนตวแปรทงหมดท เกดขนจะเทากบผลคณของจานวนเอลเมนตในแตละมต