พื้นฐานปาสคาลพื้นฐาน rapidqเว็บภาษาไทยเว็บภาษาอังกฤษ

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

  1. ชื่อตัวแปร = ค่าคงที่ ;
    myNumConst = 900 ;
    myStringConst = 'OK i am fine ' ;

  2. ชื่อตัวแปร : ชนิดของตัวแปร = ค่าคงที่ ;
    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 นี้ เพื่อคุณจะได้มี โอกาสศึกษาเพิ่มเติม
แม้ว่าเนื้อหาที่ผมทำยังไม่ครบถ้วนก็ตาม
แล้วพบกันครับโอกาสหน้าครับ..


best view with ie 5.0++, screen 600x800