Repeat Until กับตัวแปรแบบ boolean
ตัวแปรแบบ boolean เป็นตัวแปรชนิดหนึ่ง
เช่นเดียวกับ byte integer string real ฯลฯ
แต่จะสามารถเก็บค่า ได้เพียง 2 อย่างคือ true กับ false
ในโปรแกรมนี้จะแสดงตัวอย่างการใช้ตัวแปรแบบ boolean
uses crt;
var
exit : boolean;
s : char;
i : byte;
begin
clrscr ;
exit := false;
i := 0;
repeat
i := i+1;
writeln;
writeln ( 'This is loop ', i );
write ( 'Will you Exit ?' );
textcolor ( 12 );
write ( 'y/n ' );
textcolor ( 7 ); readln( s );
case s of
'y' : exit := true;
'n' : exit := false;
else
writeln ( 'please insert just y or n' );
end;
until exit=true;
readln;
end.
|
This is loop 1
Will you Exit ? y/n
หาก พิมพ์ y
ทำให้ exit มีค่าเป็น TRUE
โปรแกรมจะหยุดทำงาน
หาก พิมพ์ n
ทำให้ exit มีค่าเป็น FALSE
โปรแกรมจะทำการวนซ้ำคำสั่ง
หากพิมพ์ตัวอักษรอื่นๆ
โปรแกรมก็จะวนซ้ำเช่นกัน
เพราะว่า exit ถูกกำหนด
ค่าเริ่มต้นเป็น FALSE
และยังคงมีค่าเป็น FALSE อยู่
|
คุณจำลักษณะตัวแปรชนิด char ได้ไหมครับ?
ในโปรแกรมนี้ประกาศ s เป็นตัวแปรชนิด char ทำให้ ตัวแปร s
สามารถเก็บค่าได้เพียงตัวอักษรตัวเดียว พูดง่ายๆ ว่าแม้เราพิมพ์ ว่า nobita
ตัวแปรก็จะเก็บไว้ได้แค่ตัวแรก เท่านั้น คือ n เพียงตัวเดียว
บางคน จะคิดว่าตัวเองยังไม่เข้าใจ ตัวแปรชนิด boolean
และอาจจะเข้าใจไปว่า บทต่อๆ ไปจะยากกว่านี้อีก
ไม่เป็นความจริงครับ ในบางเนื้อหาเป็นเรื่อง ทั่วๆไปเราสามารถเข้าใจได้ง่ายในเวลาสั้นๆ ( ถ้าคำอธิบายชัดเจนด้วยนะ )
แต่บางเรื่องเป็นเนื้อหาที่ ไม่ตายตัว แต่สามารถนำมาปรับใช้ได้ในหลายรูปแบบ ( abstact )
จึงไม่มีคำอธิบายที่ ละเอียดครบถ้วน แต่จำเป็นต้องมีตัวอย่างมากๆ หน่อย
และทักษะในการแก้ปัญหา เพื่อที่เราจะสามารถใช้เป็น และมาปรับใช้กับโปรแกรมของเราได้
นอกจากนี้เราสามารถกำหนดค่าให้กับตัวแปรแบบ boolean ได้
โดยกำหนดค่าเป็นเงื่อนไข
var
boo1,boo2:boolean;
x,y:byte;
begin
x:=50;
y:=120;
boo1:=(x>0) and (x<=100);
boo2:=(y<=200);
if boo1 and boo2 then
write('all boolean is true')
else
write('all or some is false');
readln;
end.
มารู้จัก Constant กัน
constant คือค่าคงที่
เราจะกำหนดค่าคงที่ หากว่า เราใช้ตัวแปรนั้นโดย ไม่มีการเปลี่ยนแปลงค่าเลยตลอดทั้งโปรแกรม
หากเรามีค่าที่ใช้บ่อยๆ ในโปรแกรม และไม่ต้องการเปลี่ยนแปลงค่า ของตัวแปรนั้นอีก
การประกาศค่าคงที่จะทำให้ แก้ไขโปรแกรมได้ง่ายขึ้น เพราะค่าคงที่ จะถูกประกาศไว้เห็นได้ชัดเจน
|
การประกาศค่าคงที่
|
const
ชื่อตัวแปร = ค่าคงที่ ;
begin
...
...
end.
|
การประกาศค่าคงที่ก็ไม่มีอะไรมากครับ
ตำแหน่งของค่าคงที่จะต้องอยู่ก่อน begin - end.
การประกาศค่าคงที่ มี 2 แบบ
|
- ชื่อตัวแปร = ค่าคงที่ ;
myNumConst = 900 ;
myStringConst = 'OK i am fine ' ;
- ชื่อตัวแปร : ชนิดของตัวแปร = ค่าคงที่ ;
myNumConst : byte = 30 ;
myStringConst : string = 'this is a cat' ;
ปกติเราจะใช้แบบแรก ส่วนหากต้องการจะเปลี่ยนแปลง
ค่าคงที่ภายในโปรแกรมได้ด้วย จะใช้แบบที่สอง
.. การประกาศค่าคงที่ ก็ทำคล้ายๆ กับประกาศตัวแปร
แต่จะใช้เครื่องหมาย = แทน : ครับ
|
การหารแบบต่างๆ
|
* mod คือหารเพื่อหาเศษ เช่น 30 mod 2 จะได้คำตอบ 0 และ 10 mod 3 ได้คำตอบ 1
* div เป็นการหารแบบตัดเศษทิ้ง เช่น 31 div 10 ได้คำตอบ 3 และ 25 div 10 ได้คำตอบ 2
* / เป็นการหารแบบมีทศนิยม โดยจะใช้กับตัวแปรชนิด real
|
ตัวอย่าง การใช้ตัวแปร ที่ประกาศเป็นค่าคงที่
uses crt ;
var
money : integer ;
divMoney : integer ;
exit : boolean ;
const
people = 3 ;
begin
clrscr ;
exit := false ;
repeat
writeln ( 'please give money to ', people, ' people' ) ;
write ( 'give money=' ) ; readln ( money ) ;
if (money mod people) = 0 then
begin
divMoney := money div people ;
writeln (' each people get ', divMoney ) ;
exit := true ;
end
else
begin
writeln (' That Money can not divide by ', people ) ;
exit := false ;
end ;
until exit=true ;
readln ;
end.
|
please give money to 3 people
give money=
หากคุณ ให้จำนวนเงินที่ หาร 3 ไม่ลงตัว
คุณจะได้พบกับคำว่า
That Money can not divide by 3
และโปรแกรมก็จะย้อนไป รับค่า give money=
แต่หากว่า ให้เงินที่หาร 3 ลงตัวเช่น 99
คุณจะได้พบคำว่า
each people get 33
จากนั้นโปรแกรมก็จะหยุดการวนซ้ำ
และออกจากการทำงาน
|
ต่อไปเป็นตัวอย่าง การใช้ case of
ที่ผมได้ไปรู้จากเว็บ tutor ภาษาอังกฤษมาครับ
คือการรอรับค่า จาก keyboard 1ครั้งและทำงานในทันที
การรับค่าจาก keyboard และทำงานในทันทีจะใช้ ฟังชั่น readkey ;
ฟังค์ชั่นนี้ อยู่ในยูนิต crt ดังนั้นก่อนจะใช้ต้องเรียก ยูนิต crt ก่อน
program test_readkey;
uses crt;
var
c : char;
begin
clrscr;
c:=readkey;
case c of
#8 : writeln('You presses backspace');
#9 : writeln('You presses tab');
#13: writeln('You presses enter');
#27: writeln('You presses escape');
#32: writeln('You presses space');
else writeln('You presses other key');
end;
end.
|
code from CodeTeacher
|
ตัวอย่างต่อไปนี้ คือโปรแกรมหา keyboard code
program trap_key;
uses crt;
var
c : char;
begin
c:=#0;
while c<>#27 do
begin
c:=readkey;
if c=#0 then { If extended codes, }
begin
c:=readkey; { read the code once more }
writeln('Extended : ',ord(c));
end
else writeln(ord(c));
end;
end.
|
code from CodeTeacher
|
while.. do เป็น loop ชนิดหนึ่งจะกล่าวถึงในภายหลัง
ord( ) ; เป็นฟังชั่นที่รับค่าจากคีร์บอร์ดและให้ผลลัพธ์เป็น keyboard code
#0 เป็นรหัสแทนค่า keyboard code ส่วนพิเศษ เช่น ปุ่ม ลูกศร ปุ่ม enter ปุ่ม F1-F12 ลฯล
#27 เป็นรหัสของ ปุ่ม esc
การใช้ readkey เพื่อเลือก เมนู
uses crt ;
var
c : char ;
i, k : integer ;
exit : boolean ;
begin
clrscr ;
exit := false ;
repeat
writeln;
writeln(' Press a go to Addition-program' );
writeln(' Press m go to Multiplication-program' );
writeln(' Press q to Exit' );
c := readkey ;
case c of
'a' : begin
writeln(' Add-program ');
write(' insert i ='); readln( i );
write(' insert k ='); readln( k );
write(' i+k =', i+k );
readln;
end;
'm' : begin
writeln(' Multi-program ') ;
write(' insert i ='); readln( i );
write(' insert k ='); readln( k );
write(' i*k =', i*k );
readln;
end;
'q' : exit := true ;
end;
until exit = true;
end.
|
|
หากคุณต้องการศึกษา การเขียนโปรแกรมด้วยเทอร์โบปาสคาล
คุณสามารถไปเว็บ tutor ภาษาอังกฤษ
http://www.oocities.org/codeteacher
รับรองว่าไม่ผิดหวัง ผมเคยได้ไปศึกษามาแล้ว
เขาใช้สำนวนที่ไม่ยากมาก
นอกจากนั้นยังมีบทเรียนมากมายทีเดียว
ผมยังไม่เลิก update หรอกนะครับ
แต่ก็ไม่ทราบว่าจะมีโอกาส update เมื่อใด..อาจจะช้าหรือเร็วไม่แน่นอน
ผมแนะนำเว็บ tutor นี้ เพื่อคุณจะได้มี โอกาสศึกษาเพิ่มเติม
แม้ว่าเนื้อหาที่ผมทำยังไม่ครบถ้วนก็ตาม
แล้วพบกันครับโอกาสหน้าครับ..
|
|