Friday, May 13, 2011

33. การใช้งาน Function

ฟังก์ชั่น เป็นกลุ่มคำสั่งคล้ายๆ โพซิเยอร์ แต่ต่างกันตรงที่ฟังก์ชั่นมีการส่งค่ากลับ จะต้องมีตัวแปรมาเก็บที่ได้จากฟังก์ชั่น
1) การประกาศ Function

function power(B,E:Integer):integer; # ค่าส่งกลับ
var count,temp:integer
Begin
Temp:=B;
for count:=1 to E-1 do
temp := temp*B;
power := temp;#ส่งค่ากลับด้วยการกำหนดค่าให้ชื่อฟังก์ชั่น
End;

 
2) การเรียกใช้ Function
my_answer := power(2,5);
writeln(my_answer);
หรือ
writeln(power(2,10));

32. การใช้งาน procedure 2 (Procedure 2)

ที่กล่าวไปในหัวข้อที่แล้วเป็น procedure ที่มีการส่งค่า แต่ในหัวข้อนี้จะกล่าวถึง procedure ที่ไม่มีการส่งค่าให้ procedure

1) ส่วนประกาศ Procedure
procedure drawline;
var count:byte;
begin
for count:=1 to 30 do
write('*');
writeln;
end;

2) ส่วนเรียกใช้ Procedure
drawline;

31. ตัวอย่าง Procedure (Procedure Example)


Program testProcedure;
uses crt;
procedure drawStar(num:integer);
var i:integer;
begin
for i:=1 to num do
write('*');
writeln;
end ;
BEGIN
drawStar(5);
drawStar(10);
END;

30. การใช้งาน Procedure

เป็นกลุ่มของคำสั่งที่ต้องการเรียกใช้หลายๆ รอบเพื่อไม่ต้องมาเสียเวลาเขียนใหม่หลายๆรอบ โดยจะเรียกใช้ผ่านชื่อโพซิเยอร์
1) การประกาศ Procedure


procedure ชื่อโพซิเยอร์(พารามิเตอร์1,พารามิเตอร์2,...,พารามิเตอร์n);
#ส่วนหัวของ Procedure
Begin
#ส่วนตัวของ Procedure
End;

 
เราจะประกาศ Procedure ไว้บนส่วนหัวของโปรแกรม และสามารถเรียกใช้ได้จากส่วนตัวของโปรแกรม

29. ตัวแปร Pointer

เป็นตัวแปรที่ใช้เก็บที่อยู่ของตัวแปรอื่น
การประกาศ Pointer
var my_pointer:^ชนิดข้อมูล;
เช่น
var my_pt:^Integer;

การกำหนดค่าให้กับ Pointer
my_pointer = Addr(ตัวแปรอื่น);
เช่น
my_pt = my_number;

การอ้างถึงข้อมูลในที่อยู่ที่ Pointer ชี้อยู่
my_pointer^;
เช่น
writeln(my_pointer^);
#สมมุติ
#มี x = 123;
#my_pt = addr(x);
# my_pt^ จะเป็น 123
#ซึ่งค่าที่ x เก็บไว้อยู่

28. ตัวอย่างการสร้าง record


type student = record
name : string[100];
age : byte;
grade: byte;
end;
เวลาใช้ต้องประกาศตัวแปร
var Anna:Student;
การอ้างถึง
Anna.name := 'Natali';
readln(Anna.age);
writeln(Anna.grade);

27. ตัวแปรเรคคอร์ด (Record)

เป็นข้อมูลชนิดใหม่ที่ผู้ใช้สามารถกำหนดขึ้นมาใช้เองได้
รูปแบบการสร้างเรคคอร์ด
Type ชื่อเรคคอร์ด = record
ตัวแปร1:ชนิดข้อมูล1;
ตัวแปร2:ชนิดข้อมูล2;
ตัวแปร3:ชนิดข้อมูล3;
end;
*ตัวแปรเรคคอร์ดคล้ายๆ กับกลุ่มก้อนของตัวแปร

26. คำสั่ง Repeat (Repeat Looping)

เป็นคำสั่งวนซ้ำคล้ายๆ while แต่ repeat จะทำคำสั่งภายใน repeat ก่อนแล้วค่อยเปรียบเทียบเงื่อนไขทีหลัง จะทำคำสั่งเมื่อตรวจสอบเงื่อนแล้วเป็น False เท่านั้น

รูปแบบการใช้งาน
Repeat
คำสั่ง1;
คำสั่ง2;
คำสั่งปรับเปลี่ยนค่า;
until เงื่อนไข;
#จะทำซ้ำไปจนกว่าเงื่อนไขจะเป็น True

25. การใช้ while แทน for (for with while)

ในบางโอกาสเราอาจจะต้องใช้ while แทน for เนื่องจาก for เป็นคำสั่งที่นับเพิ่มขึ้นทีละหนึ่ง แต่เราต้องการนับด้วยจำนวนรอบที่แน่นอนแต่ไม่ได้นับทีละหนึ่ง จึงควรใช้ while
รูปแบบการใช้งาน
คำสั่งกำหนดค่าเริ่มต้น;
while เงื่อนไข do begin
คำสั่ง1;
คำสั่ง2;
...
คำสั่งเปลี่ยนแปลงค่า;
end;

ตัวอย่าง
count:=0;
while count<=20 do begin
writeln(count);
count:=count+2;
end;

24. คำสั่ง while

เป็นคำสั่งวนรอบที่ใช้เมื่อไม่รู้จำนวนรอบที่แน่นอน มีการวนรอบไปเรื่อยๆ จนกว่าเงื่อนไขจะเป็น False
รูปแบบการใช้งาน
while เงื่อนไข do begin
คำสั่ง1;
คำสั่ง2;
...
end;
*ไม่ต้องใส่ begin กับ end; ก็ได้หากมีเพียงคำสั่งเดียว

ตัวอย่าง
while num<>0 do begin
write('Insert Number : ');
readln(num);
end;
#จากตัวอย่างจะวนรับค่าตัวเลข
#เช่นนี้ไปเรื่อยๆจนกว่าจะกรอก 0

23.คำสั่ง for-downto (for-downto statement);

คำสั่ง for-to เป็นคำสั่งวนรอบแบบนับขึ้นจากน้อยไปมาก ส่วน for-downto จะนับจากมากลงมาน้อย
รูปแบบการใช้งาน
for ตัวนับ:=จุดเริ่มต้น downto จุดสิ้นสุด do
begin
คำสั่ง1;
คำสั่ง2;
คำสั่ง3;
end;
* หากมีเพียงคำสั่งเดียวก็ไม่ต้องใส่ begin กับ end; ก็ได้
ตัวอย่าง
for count:=10 downto 1 do
writeln(count);

22. ตัวอย่าง for-to (for-to example)

1) หากต้องการพิมพ์ข้อความออกทางหน้าจอ 5 ครั้งใช้คำสั่งดังนี้
program forto1;
var count:Integer;
BEGIN
for count:=1 to 5 do
writeln('Hello World!');
readln;
END.

2) หากต้องการแสดงตัวเลขที่วนรอบ
program forto2;
var count:Integer;
BEGIN
for count:=2 to 6 do
writeln(count);
readln;
END.

21. คำสั่ง for-to (for-to loop)

เป็นคำสั่งที่มีการวนซ้ำการทำงานหลายๆรอบโดยรู้จำนวนรอบที่แน่นอนว่าจะวนซ้ำกี่รอบ
for ตัวนับ:=จุดเริ่มต้น to จุดสิ้นสุด do
begin
คำสั่ง1;
คำสั่ง2;
คำสั่ง3;
end;
* หากมีเพียงคำสั่งเดียวก็ไม่ต้องใส่ begin กับ end; ก็ได้

20. เพิ่มเติมคำสั่ง case (more about case)

นอกจากที่กล่าวไปในหัวข้อที่แล้ว เรายังสามารถใช้ case ในรูปแบบดังต่อไปนี้
1) ใช้ comma (,) คั้น เพื่อใช้ให้ทำคำสั่งเดียวกันแต่คนละเงื่อนไข
ตัวอย่าง
case grade of
'A','a':
writeln('Your Score is 100-80');
'B','b':
writeln('Your Score is 79-70');
'C','c':
writeln('Your Score is 69-60');
end

2) ใช้จุดสองจุด(..)เพื่อระบุช่วงข้อมูล
ตัวอย่าง
case score of
80..100:
writeln('Your grade is A');
70..79:
writeln('Your grade is B');
60..69:
writeln('Your grade is C');
end
*ข้อควรระวัง คือ ด้านซ้าย ของ จุดสองจุด (..) จะน้อยกว่า ด้านขวา

19. การใช้คำสั่ง case (case statement)

เป็นคำสั่งเลือกทำอีกรูปแบบหนึ่ง แต่ต่างกันคือใชัวตัวแปรหนึ่งตัวในการตรวจสอบเปรียบเทียบ และใช้ค่าคงที่หลายๆ ตัวในการเปรียบเทียบถ้าตรงกับค่าคงที่ใดก็จะทำตามคำสั่งหลังค่าคงที่นั้น
case ตัวแปร of
ค่าคงที่1:
คำสั่ง1;
ค่าคงที่2:
คำสั่ง2;
ค่าคงที่3:
คำสั่ง3;
....
ค่าคงที่n:
คำสั่งn;
else
คำสั่งให้ทำเมื่อไม่ตรงกับค่าใดๆ;
end;

18. ตัวอย่างคำสั่ง if-then-else (if-then-else Example)


program ifthenelse;
uses crt;
var num:Integer;
BEGIN
ClrScr;
write('Insert Number : ');
readln(num);
if num>=0 then
writeln('Number is Positive')
else
writeln('Number is Nagative');
readln;
END;

17. คำสั่ง if-then-else (if-then-else statement)

บางโอกาสเราอาจใช้การเลือกทำแต่ถ้าไม่เป็นตามเงื่อนไขก็ให้ทำอีกคำสั่งหนึ่ง
If เงื่อนไข Then
คำสั่ง1
else
คำสั่ง2;
*ข้อสังเกตุ คำสั่งหลัง Then ไม่มี semicolon (;)
หรือเมื่อมีการให้ทำหลายๆคำสั่ง
if เงื่อนไข Then
Begin
คำสั่ง1;
คำสั่ง2;
..
end else
Begin
คำสั่ง3;
คำสั่ง4;
..
End;
*ข้อสังเกตุ endตัวแรกไม่มี semicolon (;)

16. ตัวอย่างการใช้งาน if-Then (if-else Example)


program ifthen;
uses crt;
var age:integer;
BEGIN
ClrScr;
Write('Insert your age : ');
readln(age);
if age<=15 then
writeln('You are little boy/girl');
readln;
END.
* End. สุดท้ายจะต้องมีจุดทศนิยมด้วย

15. คำสั่ง if-then (if-then statement)

เป็นคำสั่งแบบเลือกทำ ถ้าเงื่อนไขที่กำหนดเป็น True จะทำตามคำสั่งหลังThen แต่ ถ้าเป็น False ก็จะถ้าคำสั่งหลัง Then ไปเลย
รูปแบบการใช้งาน
If เงื่อนไข Then
คำสั่งที่ต้องทำ
หรือ กรณีให้ทำหลายคำสั่ง
If เงื่อนไข Then
begin
คำสั่ง1
คำสั่ง2
คำสั่ง...
end;

14. ตัวแปรแถวลำดับ (Array)

ตัวแปรอาร์เรย์เป็นตัวแปรชุดที่เรียงติดต่อกันภายใต้ และมีตัวเลขระบุอินเด็กซ์เพื่ออ้างถึงตัวแปรแต่ละตัว

var name:array[m..n] of data_type;
var คำสั่งประกาศตัวแปร
name ชื่อตัวแปรอาร์เรย์
m ระบุตำแหน่งอินเด็กซ์เริ่มต้น
n ระบุตำแหน่งอินเด็กซ์ปลายทาง
data_type ชนิดของข้อมูลแต่ละตัวในอารเรย์

ตัวอย่าง
var my_friends:array[0..10] of string[50];

var my_number:array[3..8] of real;
สำหรับ my_number จะได้
my_number[3]
my_number[4]
my_number[5]
my_number[6]
my_number[7]
my_number[8]

13) แสดงข้อมูลออกจากจอภาพ (Screen Output)

เมื่อรับข้อมูลเข้ามาประมวลผลจนได้ผลลัพธ์แล้ว ลำดับต่อไปก็คือการแสดงผลออกทางจอภาพ
1) คำสั่ง write
เป็นคำสั่งที่ใช้ในการการแสดงข้อมูล
write('Hello World!');
write('Hello',your_name);
2) คำสั่ง writeln
เป็นคำสั่งคล้ายๆกับ write แต่จะทำการขึ้นบรรทัดใหม่(เหมือนการกดEnter) ให้ด้วย
writeln('A=',A,'B=',B,'C=',C);

12. การรับข้อมูลทางคีย์บอร์ด (Keyboard Input)

บางครั้งเราอาจจะต้องรับข้อมูลเข้ามาทางคีย์บอร์ดเพื่อนำมาประมวลผล
ในภาษา Pascal มี 3 คำสั่งที่น่าสนใจในการรับค่าทางคีย์บอร์ด ดังนี้
1) คำสั่ง read()
ตัวอย่าง
read(num1,num2,num3);
#เป็นการรับตัวแปร
#เข้ามา3ตัว
#โดยในการกรอก
#จะต้องเว้นวรรค
#เพื่อแยกแต่ละตัว

2) คำสั่ง readln()
ตัวอย่าง
readln(name);
#เป็นการรับค่าข้อมูล
#มาทั้งบรรทัด
#กด <Enter> หรือ \n
#เมื่อสิ้นสุดการกรอก

3) คำสั่ง readkey
ตัวอย่าง
variable := readkey;
#เป็นการรับค่าอักขระ
#เข้ามาหนึ่งตัว
#สามารถเก็บในตัวแปรที่กำหนด

11. ลำดับของเครื่องหมายในการคำนวณ (Priority)

ในบางครั้งหากไม่ใส่เครื่องหมายวงเล็บ () เพื่อให้เจาะจงลำดับการทำงาน เราควรศึกษาลำดับการทำงานซึ่งจะเป็นดังนี้
1
( ) (เครื่องหมายวงเล็บ)
2
-a (เครื่องหมายติดลบ)
3
not
4
* , / , div , mod , and
5
+ , - , or
6
= , < , <= , > , >= , <>

10. นิพจน์ในภาษาปาสคาล (Pascal Statement)

ในการเขียนโปรแกรมจะเป็นการแปลงนิพจน์ทางคณิตศาสตร์ให้อยู่ในรูปแบบของภาษาโปรแกรมเพื่อสั่งงานภาษา Pascal ให้ทำงานอย่างที่เราต้องการ
เมื่อต้องการคำนวณเราจะเขียนคำสั่งในรูปคณิตศาสตร์พื้นฐานและตัวดำเนินการที่กล่าวมาแล้วข้างต้น
ตัวอย่างการแปลงนิพจน์
นิพจน์คณิตศาสตร์
นิพจน์ Pascal
aπr2
2*3.14*r*r
a2+2ab+b2
a*a+2*a*b+b*b
2
sqr(2)
|3-x|
abs(3-x)
*หมายเหตุ
ค่า PI ประมาณได้ 3.14
ฟังก์ชั่น sqr() เป็นฟังกชั่นจากยูนิต Math
ฟังก์ชั่น abs() เป็นฟังกชั่นจากยูนิต Math

9. ตัวดำเนินการเปรียบเทียบความสัมพันธ์ (Relational Operator)

เราเปรียบเทียบเพื่อให้ได้ค่าเท็จจริง True/False หรือค่าข้อมูลที่เป็น boolean ส่วนมาจะเอาไปใช้เป็นเงื่อนไขของโปรแกรม ส่วนมากจะใช้ร่วมกับตัวเปรียบเทียบทางตรรกะ
เครื่องหมาย
ความหมาย
ตัวอย่าง
==
เท่ากับ
2=3
ได้ False
<>
ไม่เท่ากับ
3<>5
ได้ True
>
มากกว่า
3>1
ได้ True
<
น้อยกว่า
3<1
ได้ False
>=
มากกว่าเท่ากับ
3>=10
ได้ False
<=
น้อยกว่าเท่ากับ
2<=2
ได้ True

8. ตัวดำเนินการทางตรรกะ (Logical Operator)

เป็นตัวเปรียบเทียบที่ยึดหลักการทางตรรกศาตร์ ผลลัพธ์ที่ได้ คือค่าความจริง True และ False หรือพูดง่ายๆคือได้ออกมาเป็นข้อมูลชนิด boolean นั่นเอง

ตัวดำเนินการทางตรรกะมี 3 ตัวดังนี้
1) ตัวดำเนินการ and
x
y
x and y
True
True
True
True
False
False
False
True
False
False
False
False
* ข้อสังเกตุ True and True ได้ True นอกนั้นเป็น False
2) ตัวดำเนินการ or
x
y
x or y
True
True
True
True
False
True
False
True
True
False
False
False
* ข้อสังเกตุ False or False ได้ False นอกนั้นเป็น True
3) ตัวดำเนินการ not
x
not
True
False
False
True
* ข้อสังเกตุ not จะได้ค่าความจริงตรงข้าม

7. ตัวดำเนินการทางคณิตศาตร์ (Math Operator)

เป็นเครื่องหมายดำเนินการที่ Pascal เตรียมไว้สำหรับคำนวณทางคณิตศาสตร์มีดังนี้
เครื่องหมาย
ความหมาย
ตัวอย่าง
+
บวก
(7+3) ได้ 10
-
ลบ
(5-2) ได้ 3
*
คูณ
(5*5) ได้ 25
/
หาร
(5/2) ได้ 2.5
div
หารไม่เอาเศษ
(5 div 2) ได้ 2
mod
หารเอาเศษ
(5 mod 2) ได้ 1