วันอังคารที่ 19 มีนาคม พ.ศ. 2556

pseudocode

คำสั่งเทียม (Pseudo-Code)

posted on 10 Jul 2011 21:10 by maiiamz
คำสั่งเทียม (Pseudo-Code) คำสั่งเทียมเป็นอีกเทคนิคหนึ่งที่ใช้ช่วยในการเขียนขั้นตอนการทำงาน
ของโปรแกรมอย่างมีโครงสร้าง ซึ่งแบ่งออกเป็น 3 ประเภทคือ

     
  1. โครงสร้างลำดับ (Sequential Structure or Straight-line) เป็นขั้นตอน
    คำสั่งที่มีลำดับการทำงานจากบนลงล่าง

    ตัวอย่างที่ 2.3 แสดงการวิเคราะห์ปัญหาการหาพื้นที่ของรูปสามเหลี่ยม

    โจทย์/ปัญหา : ให้หาพื้นที่สามเหลี่ยม
    ข้อมูลเข้า : ความยาวของส่วนสูง และฐาน
    ผลลัพธ์ : พื้นที่สามเหลี่ยมเป็นตัวเลขที่มีทศนิยม
    ขบวนการทำงานเฉพาะ : สูตรพื้นที่สามเหลี่ยม = 1/2 x ฐาน x สูง
    ตัวอย่างที่ 2.4 จงแสดงการวิเคราะห์ปัญหาการหาปริมาตรทรงกระบอก

    ข้อมูลเข้า : รัศมี (r) หรือเส้นผ่าศูนย์กลาง (d) และความสูง (h)
    ผลลัพธ์ : พื้นที่สามเหลี่ยว
    ขบวนการทำงานเฉพาะ : สูตรปริมาตรทรงกระบอก = Pi x r2 x h หรือ Pi x d2/4 x h


    1. สูตรการหาปริมาตรทรงกระบอก
      ปริมาตร = pi x รัศมี2 x ความสูง หรือ ปริมาตร = pi x (เส้นผ่าศูนย์กลาง/2)2 x ความสูง
    2. ใช้ตัวแปรหรือชื่อย่อแทน
      v = pi x r2 x h หรือ v = pi x (d/2)2 x h
    3. ผังงาน

  2. โครงสร้างแบบทางเลือก (Decision or Selection or Branching
    Structure) เป็นขั้นตอน คำสั่งที่มีการเปรียบเทียบ เพื่อให้กำหนดทาง
    เลือกให้ตัดสินใจทำหรือไม่ทำหรือทำอย่างใดอย่างหนึ่ง

    1. กรณีมี 1 ทางเลือก ใช้ IF..THEN.. structure
      ตัวอย่าง

      IF X = 4 THEN X = X + 1
    2. กรณีมี 2 ทางเลือก ใช้ IF..THEN..ELSE structure
      ตัวอย่าง

      IF X = 4 THEN X = X + 1 ELSE X = X + 2
    3. กรณีมีมากกว่า 2 ทางเลือก ใช้ Case structure
      ตัวอย่าง

      CASE n OF 4 : x = x + 1
      5 : x = x + 2
      6 : x = x + 3
      ELSE x = x + 0 END
      ตัวอย่างที่ 2.5 โครงสร้างที่มีทางเลือกหรือการตัดสินใจ (Decision or
      Selection Structure)


      โจทย์/ปัญหา : หาค่าของตัวแปร X ในสมการ Polynomial
      ข้อมูลเข้า : ค่าที่กำหนดเพื่อหาค่า X คือ a, b, c
      ผลลัพธ์ : ค่าของตัวแปร X ที่เป็นไปได้จำนวน 2 ค่า
      ขบวนการทำงาน :
      ผังงานแสดงขั้นตอนการทำงานที่ 1

      Refinement

      • ถ้าค่า a มีค่าเป็น 0 ทำให้ตัวหารเป็น 0 ไม่สามารถหาผลลัพธ์ได้
        ดังนั้น วิธีแก้คือนำค่า a แทนค่าในสมการจะได้ว่า

      • ถ้า b2-4ac มีค่าเป็นลบ ( < 0 ) เมื่อถอดรากจะได้ค่าเชิงซ้อน
      • ค่า + - ไม่สามารถเก็บลงตัวแปรตัวเดียวได้ ต้องแยกเป็น 2
        คำสั่งเก็บลงตัวแปร 2 ตัว

      ใน Flowchart มีการคำนวณ b2-4ac หลายครั้ง จึงควรจะคำนวณเก็บเป็น
      ตัวแปรไว้ก่อน แล้วจึงนำค่าตัวแปรนั้นไปใช้ในหลาย ๆ ที่ของโปรแกรมได้

      ผังงานแสดงการทำงานที่ได้รับการปรับปรุง


  3. โครงสร้างวนรอบ (Looping or Repetition or Iterative Structure) เป็น
    ขั้นตอนคำสั่งแสดงการทำงานซ้ำๆกับตามจำนวนครั้งที่กำหนดรอบที่
    จำกัด แบ่งออกเป็น 3 ประเภท ดังนี้

       
    1. FOR..DO เป็นคำสั่งทำงานซ้ำๆ กันตามจำนวนครั้งที่กำหนด
      Pseudo-code
      FOR < var > = < first value > TO < last value > STEP < step size > DO

      Procedure;
      var : ตัวแปรที่ใช้เป็นตัวนับ (Counter)
      first value : ค่าเริ่มต้น
      last value : ค่าสุดท้าย
      step size : ส่วนเพิ่ม
      Procedure : ประกอบด้วยคำสั่งอย่างน้อย 1 คำสั่ง
      จำนวนรอบในการทำงาน = (< last value > - < first value >) / < step size > + 1
      ค่าตัวแปร < var > ในรอบที่ K th = < first value > + < K-1 > x < step size >
      ตัวอย่าง

      FOR I := 2 TO N STEP 2 DO มีจำนวนรอบ = N-2/2 + 1 = N/2 รอบ
      ค่าของ I ในรอบที่ 5th = 2+(5-1)*2 = 10
      ตัวอย่าง

      FOR J = 200 TO 101 STEP -1 DO
      มีจำนวนรอบ = (101 - 200) / (-1) +1

      = (-99) / (-1) + 1

      = 100 รอบ
      ค่าของ J ในรอบที่ 75th = 200 + (75-1) x (-1)

      = 200-74

      = 126
      ตัวอย่างที่ 2.6 โจทย์ จงหาค่าเฉลี่ยของตัวเลข 1 ถึง 100
      ขั้นตอนการทำงาน

      คำสั่งเทียม ความหมาย
      Set Sum to 0 กำหนดค่าผลรวมเริ่มต้นเป็นศูนย์
      For I = 1 to 100 do ทำซ้ำตั้งแต่ I = 1 ถึง 100
      Sum = Sum + I ผลรวม = ผลรวม + I
      Mean = Sum/100 คำนวณค่าเฉลี่ย Mean = SUM/100
      ผังงาน


    2. WHILE..DO คำสั่งที่ทำงานซ้ำๆ แบบมีการตรวจสอบเงื่อนไขก่อน ถ้า
      เงื่อนไขเป็นจริงจึงจะทำคำสั่งที่อยู่ในวงรอบนั้น และจะกระทำไปจนกระทั่ง
      เงื่อนไขเป็นเท็จ จึงจะออกจากวงรอบการทำงาน และทำคำสั่งถัดไป
      ตัวอย่าง

      Total = 0
      Count = 0
      WHILE Count <= 100 do
      BEGIN
      Total = Total+Count
      Count = Count+2
      ENDDO
      ตัวอย่างที่ 2.7 โจทย์ ให้หาค่าของผลรวมของตัวเลขจำนวน N ตัว โดย
      ตัวเลขแต่ละตัวจะถูกป้อนให้คอมพิวเตอร์อย่างต่อเนื่องจนกระทั่งตัวเลข
      สุดท้ายคือ -999 จะเป็นตัวเลขที่แสดงการสิ้นสุดข้อมูล(-999 ต้องไม่
      ถูกนำไปหาผลรวม)


      คำสั่งเทียม ความหมาย
      Set Counter to 0 ตั้งค่าตัวนับเป็นศูนย์
      Set SUM to 0 ตั้งค่าผลลัพธ์เป็นศูนย์
      Input Number N อ่านข้อมูล
      While Number <> -999 do ในขณะที่ข้อมูลไม่เท่ากับ -999
      begin
      add Number to SUM บวกข้อมูลลงในผลลัพธ์
      Input Number อ่านข้อมูลใหม่
      end
      Display SUM แสดงข้อมูลผลลัพธ์
      ผังการทำงาน


    3. DO..UNTIL หรือ REPEAT..UNTIL คำสั่งที่ทำงานซ้ำๆ แบบตรวจสอบ
      เงื่อนไขหลังจากทำงานคำสั่งในวนรอบ โดยทำขบวนการก่อนในครั้งแรก
      จึงตรวจสอบเงื่อนไข และจะทำคำสั่งที่อยู่ในวงรอบนั้นจนกระทั่ง เงื่อนไข
      เป็นจริง จึงจะออกจากวงรอบการทำงาน
      ตัวอย่างที่ 2.8 โจทย์ จงแสดงผลลัพธ์ของการวนสุ่มตัวเลขและแสดงผล
      แล้วตั้งคำถามรอรับการกดคีย์ ถ้าผู้ใช้กด 'Y' จะทำการสุ่มตัวเลขใหม่
      ถ้ากด 'N' จะจบโปรแกรม ถ้ากดปุ่มอื่นๆจะวนตั้งคำถามใหม่


      Repeat Set RANDOM NUMBER to N
      Disply N
      repeat
      Display 'Do you want to continue'
      Get Key Until Key = 'Y' OR 'N' Until Key = 'N'
      ผังการทำงาน


    ตัวอย่างที่ 2.9 คำสั่งเทียมแสดงกระบวนการหาค่าเฉลี่ยของคะแนน
    (Averaging algorithm)
    คำสั่งเทียม ความหมาย
    START
    set the running total to 0 กำหนดค่ายอดรวมเป็น 0
    set the score counter to 0 กำหนดค่าตัวนับเป็น 0
    while there are still scores to process do ขณะที่ยังมีคะแนนประมวลผลทำดังนี้
    read a single score อ่านคะแนนทีละคะแนน
    add that score to running total บวกคะแนนเข้าในยอดรวม
    increment score counter by 1 เพิ่มค่าตัวนับขึ้นอีก 1
    end of the while loop
    if score counter is 0 then ถ้าตัวนับเป็น 0 (แสดงว่าไม่มีข้อมูล)
    write a message that แสดงข้อความว่า
    there were no scores "ไม่มีคะแนน"
    else มิฉะนั้น
    set average to running total ค่าเฉลี่ย = ยอดรวม/ตัวนับ
    divided by score counter
    write out the average พิมพ์ค่าเฉลี่ยเป็นผลลัพธ์
    endif
    STOP สิ้นสุดการทำงาน
    END OF THE ALGORITHM
    ตัวอย่างที่ 2.10 หาค่าตัวเลขที่อยู่ตรงกลางของกลุ่ม ดังตัวอย่างต่อไปนี้
    ถ้าข้อมูลมีจำนวนเป็นเลขคี่ เช่น 85, 53, 98, 86, 42 เมื่อจัดเรียงตัว
    เลขจากน้อยไปมากแล้วจะได้เป็น 42, 53, 85, 86, 98 ดังนั้นตัวเลขที่
    อยู่ตรงกลางคือ 85

    ถ้าข้อมูลมีจำนวนเป็นเลขคู่ เช่น 62, 86, 97, 84, 98, 56 เมื่อจัดเรียง
    แล้ว จะได้เป็น 56, 62, 84, 86, 97, 98 ดังนั้น ตัวเลขที่อยู่ตรงกลาง
    คือค่าเฉลี่ยของ 84 + 86 / 2 = 85


    คำสั่งเทียม ความหมาย
    1. Input number of numeric N 1. รับจำนวนตัวเลข N
    and numeric I(1), I(2),....I(n) และตัวเลขที่จะหา median
    2. Sort data in ascending order 2. จัดเรียงจากน้อยไปมาก
    3. Compute the median 3. หา median
    If N is odd ถ้า N เป็นเลขคี่ (1,3,5..)
    Median is in position (N+1)/2 ตำแหน่ง median คือ (N+1)/2
    If N is even ถ้า N เป็นเลขคู่ (2,4,6..)
    Median is average of numeric median คือ ค่าเฉลี่ยของตัวเลข ณ.
    in position N/2 and (N/2)+1 ตำแหน่ง N/2 และ (N/2)+1
    4. Display the value of N and median 4. ผลลัพธ์คือ ค่าของ N และ median
    ตัวอย่าง 2.11 หาผลรวมของตัวเลขจำนวนเต็มบวกที่เป็นเลขคี่
    1+2+3+...+n

    ข้อมูลเข้า ตัวเลขจำนวนเต็มบวกตัวสุดท้ายที่จะนำไปรวม (n)
    ข้อมูลออก ค่าของผลรวม (Sum)




    อ้างอิงจาก
    http://maiiamz.exteen.com/20110710/pseudo-code   

ไม่มีความคิดเห็น:

แสดงความคิดเห็น