แสดงบทความที่มีป้ายกำกับ วิชาโครงสร้างข้อมูล แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ วิชาโครงสร้างข้อมูล แสดงบทความทั้งหมด

วันพฤหัสบดีที่ 30 มิถุนายน พ.ศ. 2554

ARRAY

 - โครงสร้างข้อมูลแบ่งออกเป็น 2 ประเภทใหญ่ๆ คือ

      - โครงสร้างข้อมูลแบบเชิงเส้น (Linear Lists) มีรูปแบบเป็นรายการต่อเนื่อง ข้อมูลที่จัดเก็บจะมีลักษณะเป็นแถวลำดับต่อเนื่อง เช่น อาร์เรย์(Array) สแต็ก(Stacks) และคิว(Queues) เป็นต้น
      - โครงสร้างข้อมูลแบบไม่เป็นเชิงเส้น (Non-Linear Lists) โครงสร้างข้อมูลชนิดนี้จะต้องข้ามกับแบบแรก เช่น ทรี(Trees) และกราฟ(Graphs) เป็นต้น  

-โครงสร้างข้อมูลแบบอาร์เรย์(Array) 
        - อาร์เรย์ คือ การรวมกลุ่มของตัวแปรที่สามารถใช้ตัวแปรชื่อเดียวแทนข้อมูลสมาชิกได้หลายๆ ตัวด้วยการใช้ดรรชนี(Index) หรือซับสคริปต์(Subscript) เป็นตัวอ้างอิงตำแหน่ง

- คุณสมบัติสำคัญของอาร์เรย์

      - อาร์เรย์เป็นตัวแทนของกลุ่มที่มีความสัมพันธ์กันเช่น 12 เดือน ซึ่งประกอบด้วยเดือนมกราคมถึงเดือนธันวาคม ราคาหุ้นในรอบ 30 วัน เป็นต้น
      -  มีชนิดข้อมูลเหมือนกันทั้งหมด เช่น ชนิดข้อมูลของตัวแปร
      -  อาร์เรย์มีขนาดคงที่
      -  ผู้ใช้สามารถอ้างอิงเพื่อเข้าถึงข้อมูลที่ต้องการได้ทันที

- การอ้างอิงตำแหน่งสมาชิกในอาร์เรย์ 
     - ต้องเริ่มต้นด้วยชื่ออาร์เรย์และตามด้วยเลขลำดับกำกับไว้ด้วย
     - เลขลำดับ สามารถเรียกได้หลายชื่อ เช่น ซัขสคริปต์ หรือเลขดัชนี
     - เลขดัชนีอยู่ภายในเครื่อง ( ) หรือ [ ] ก็ได้ ขึ้นอยู่กับภาษาคอมพิวเตอร์แต่ละภาษา

- ขอบเขตของอาร์เรย์ (Bounds)
     - เลขดัชนี ในอาร์เรย์ประกอบด้วยช่วงขอบเขตของค่า ซึ่งประกแบด้วยขอบเขตล่างสุด และขอบเขตบนสุด
- การคำนวณจำนวนสามาชิกของอาร์เรย์ 1 มิติ

     - จำนวนสมาชิก  = U + L + 1

- การคำนวณจำนวนสามาชิกของอาร์เรย์ 2 มิติ

     - จำนวนสมาชิก = (U1 – L1 + 1) x (U2 – L2 + 1)

- การคำนวณจำนวนสามาชิกของอาร์เรย์ 3 มิติ

     - จำนวนสมาชิก = (U1 – L1 + 1) x (U2 – L2 + 1) x (U3 – L3 + 1)

 -การจัดเก็บอาร์เรย์ในหน่วยความจำ

     - อาร์เลย์จัดเก็บอยู่ในหน่วยความจำคอมพิวเตอร์จะมีลักษณะเป็นลำดับต่อเนื่องกัน
     - ใช้เนื้อที่ในการจัดเก็บข้อมูลสมาชิกของแต่ลัตัวในขนาดเท่าๆกัน
     - สมาชิกในอาร์เลย์ทุกตัวต้องเป็นข้อมูลชนิดเดียวกัน

- อาร์เรย์ 1 มิติ  รูปแบบโครงสร้างข้อมูลอาร์เรย์ 1 มิติ คือ

     - ArrayName [ L : U ]  

-สูตรการคำนวณเพื่อค้นหาตำแหน่งแอดแดรสในหน่วยความจำของอาร์เรย์ 1 มิติ 

     - LOC(a[ i ])  = B + W(i + L)

 - อาร์เรย์ 2 มิติ รูปแบบโครงสร้างข้อมูลอาร์เรย์ 2 มิติ คือ 

     - ArrayName [ L1 : U1, L2 : U2 ] 

- สูตรการคำนวณเพื่อค้นหาตำแหน่งแอดแดรสในหน่วยความจำของอาร์เรย์ 2 มิติ  

     - รูปแบบการเรียงแถวเป็นหลัก

     -  LOC(K[ i,j ] ) = B + W[C(i – L1) + (j – L2) ]

โดยที่ R คือจำนวนคอลัมน์ของแถวลำดับ (R x C)

     - รูปแบบการเรียงคอลัมน์เป็นหลัก

     - LOC(K[ i,j ] ) = B + W[R(j – L2)]+ (i – L1) ]

โดยที่ R คือจำนวนแถวของแถวลำดับ (R x C)

- อาร์เรย์ 3 มิติ รูปแบบโครงสร้างข้อมูลอาร์เรย์ 3 มิติ คือ 

     - ArrayName [ L1 : U1, L2 : U2, L3 : U3 ]  

- สูตรการคำนวณเพื่อค้นหาตำแหน่งแอดแดรสในหน่วยความจำของอาร์เรย์ 3 มิติ  

      - รูปแบบการเรียงแถวเป็นหลัก

      - LOC(S[ i,j,k ]  = B + [W x R x C(i – L1)]
                            + [W x C(j – L2)]
                            + [W(k - L3)] 

     - รูปแบบการเรียงคอลัมน์เป็นหลัก

     - LOC(S[ i,j,k ]  = B + [W x K x R x C(j – L2)]
                            + [W x K x R(i– L1)]
                            + [k - L3]  

วันพุธที่ 22 มิถุนายน พ.ศ. 2554

การพัฒนาโปรแกรม

บทที่  1. ขั้นตอนการพัฒนาโปรแกรม

1.ขั้นตอนการกำหนดปัญหา ( Define the Program)
  • Input
  • Outputs
  • Processing
2.ร่างรายละเอียดแก้ไขปัญหา (Outline the Solution)
  • แตกงานให้เป็นช้นย่อยๆหรือเป็นขั้นเป็นตอน(หลังจากกำหนดปัญหา)
  • การร่างรายละเอียดแนวทางการแก้ไขปัญหาต่างๆประกอบด้วย
  • ขั้นตอนการประเมณผลส่วนหลักๆ
  • ส่วนหลักของงานที่ได้มีการแตกย่อย(Subtask)
  • ส่วนความสัมพันธ์กับผู้ใช้งาน
  • โครงสร้างที่ใช้ควบคุม เช่น การวนซ้ำ หรือการกำหนดทางเลือก
  • ตัวแปรและโครงสร้างของเรคอร์ด
  • ตรรกะโปรแกรม(Logic) 
3.พัฒนาอัลกอลิทึ่ม (Develop and Algorithm)
  • ขั้นตอนที่ใช้อธิบายลำดับการทำงาน และหากได้ปฏิบัติตามขั้นตอนของอัลกิริทึมที่ออกมา
  • ซูโดโค้ดเป็นตัวแทนอัลกอริทึมเพื่อใช้แก้ไขปัญาหาทางคอมพิวเตอร์
4. ตรวจสอบความถูกต้องอัลกอลิทึ่ม (Test the Algorithm for Correctness)
  • เป็นขั้นตอนที่สำคัญที่สุด
  • ตรวจสอบทั้งตรรกะของอัลกอริทึมตัวแปรหลักและการนำข้อมูลทดสอบเข้าไปประมวลผลในแต่ละขั้นตอน
5. เขียนโปรแกรม (Programming)
  • นำอัลกอริทึมที่ได้รับการออกแบบอย่างสมบูรณ์มาพัฒนาด้วยการเขียนโปรแกรม(ชุดคำสั่ง)
  • เลือกใช้ภาษาระดับสูงเพื่อใช้เขียนโปรแกรม เช่น c,PASCAL เป็นต้น
6. ทดสอบโปรแกรม (Testing)
  • นำข้อมูลป้อนเข้าไปเพื่อทดสอบบนเครื่องกับโปรแกรมที่ได้เขียนขึ้นว่าถูกต้องหรือไม่
  • การตรวจสอบ
  • รูปแบบชุดคำสั่ง(Syntax Errors)
  • โปรแกรม(Logic Errors)
  • ข้อมูลทดสอบต้องมีความแตกต่างกันออกไปตามแต่ละสภาพแวดล้อม
7. จัดทำเอกสารและบำรุงโปรแกรม(Document and Maintain the Program)
  • การจัดทำเอกสารประกอบโปรแกรมจะต้องจัดทำขึ้นตั้งแต่ขั้นตอน การกำหนดปัญหาจนถึงขั้นตอน
    สุดท้าย คือการทดสอบผลลัพธ์
  • เอกสารประกอบโปรแกรมประกอบด้วย
  • เอกสารภายนอก(External document) เช่น ผังโครงสร้างอัลกอริทึมที่ใช้แก้ปัญหาและผลของการทดสอบข้อมูล
  • เอกสารภายใน(Internal document) คือ ชุดคำสั่งในโปรมแกรม
  • การบำรุงรักษาโปรแกรมจะเกี่ยวข้องกับการดูแลและปรับปรุงโปรแกรม
วิธีการออกแบบโปรแกรม
  • การออกแบบโปรแกรมแบบ Procedure-Driven
    แนวความคิด>>มีกระบวนการ(Processes)หรือฟังก์ชัน(Function)
  • การออกแบบโปรแกรมแบบ Event-Driven
    แนวความคิด>>เหตุการณ์หรือโต้ตอบจากภยนอกเป็นสำคัญ ที่ส่งผลต่อ
    โปรแกรมในด้านของการเปลี่ยนแปลงในแต่ละสถานะ
  • การออกแบบโปรแกรมแบบ Data-Driven
    แนวความคิด>>ข้อมูลในโปรแกรมมมากกว่ากระบวนการ โดยเริ่มต้นจากการวิเคราะห์ข้อมูล
    และความสัมพันธ์ระหว่างข้อมูล มีการกำหนดโครงสร้างข้อมูลเบื้องต้นและเมื่อโครงสร้างข้อมูล
    ได้ถูกกำหนดขึ้น ความต้องการในผลลัพธ์ของข้อมูลก็จะถูกพิจารณาในลำดับถัดไปว่า
    มีกระบวนการใดที่ทำการแปลงข้อมูลนำเข้าเพื่อไปสู่ผลลัพธ์หรือเอาต์พุตที่ต้องการ
การเขียนโปรแกรมแบบ Procedural และ Object-Oriented
  • การเขียนโปรแกรมแบบบนลงล่าง(Top-Down Development)
  • การออกแบบโปรแกรมในลักษณะโมดูล (Modular Design)
  • การโปรแกรมเชิงวัตถุ (Object-Oriented Programming)
วัตถุประสงค์ของการใช้เทคนิคการออกแบบโครงสร้างโปรแกรม
(Objective of Structured Program  Design Techniques)
  • ต้องการให้โปรแกรมมีคุณภาพและคาดหมายพฤติกรรมการทำงานของโปรแกรมได้ว่าจะเกิดผลลัพธ์อะไรขึ้นในเงื่อนไขกรณีต่างๆ
  • โปรแกรมสามารถที่จะแก้ไข ปรับปรุง หรือดัดแปลงได้ง่ายในอนาคต
  • ทำให้ขั้นตอนของการเขียนโปรแกรมเป็นไปอย่างมีระบบ มีความสะดวกและง่ายขึ้น
  • ลดเวลาในการพัฒนาโปรแกรม
ความรู้เบื้องต้นเกี่ยวกับอัลกอริทึมและซูโดโค้ด(Introduction to Algorithm and Pseud Code)
อัลกอริทึม (Algorithm) คือ กลุ่มของขั้นตอนหรือกฎเกณฑ์ที่จะนำพาไปสู่การแก้ไขปัญหาได้ หรือขั้นตอนวิธีซึ่งจะใช้อธิบายว่างานนั้นทำงานอย่างไร เมื่อได้ปฏิบัติตามขั้นตอนจนครบก็จะได้ผลลัพธ์ที่ถูกต้องตามต้องการ
คุณสมบัติของอัลกอริทึมที่ดีในการแก้ปัญหาทางคอมพิวเตอร์
  • ไม่กำกวม อ่านแล้วเข้าใจง่าย
  • ต้องมีความถูกต้องในผลลัพธ์ที่ใช้แก้ไขปัญหาในกรณีต่างๆ
  • กระบวนการหรือขั้นตอนที่ระบุไว้ในอัลกอริทึมต้องมีความเรียบง่ายเพียงพอต่อการดำเนินงานเพื่อประมวลผลในคอมพิวเตอร์ได้
  • อัลกอลิทึมต้องมีจุดสิ้นสุด
หลักวิธีการเขียนซูโดโค้ด
  • ถ้อยคำที่ใช้เขียน ใช้ภาษาอังกฤษที่เข้าใจง่าย
  • ในหนึ่งบรรทัด ให้มีเพียงหนึ่งประโยคคำสั่ง
  • ใช้ย่อหน้าให้เป็นประโยชน์ ในการแสดงการควบคุมอย่างเป็นสัดส่วน
  • แต่ละประโยคคำสั่งให้เขียนจากบนลงล่าง และมีทางออกทางเดียว
  • กลุ่มของประโยคคำสั่งอาจรวมเป็นหมวดหมู่แล้วเรียกใช้เป็นโมดูล
Six Basic Computer Operations
รับข้อมูลได้ (input device)
  • อุปกรณ์รับข้อมูล เช่น เทอร์มินัล คีย์บอร์ด หรือรับข้อมูลจากการอ่านไฟล์ข้อมูลบนสื่อจัดเก็บ ข้อมูล  เช่น ดิสก์ หรือเทป
  • ในการอ่านข้อมูลจะใช้ read และ get เพื่อใช้ในการเขียนซูโดโค้ด
    -read ใช้เมื่อมีการรับหรืออ่านเรคคอร์ดจากไฟล์ข้อมูล
    -get ใช้สำหรับรบข้อมูลจากแป้นคีย์บอร์ด
คอมพิวเตอร์สามารถแสดงผลลัพธ์ได้
การแสดงผลลัพธ์จะใช้คำกิริยา
  •      -print ใช้สำหรับการส่งผลลัพธ์ออกทางแป้นพิมพ์
  •      -write ใช้สำหรับการส่งออกเอาต์พุตเพื่อเก็บบันทึกลงในไฟล์
  •     -put,output หรือ display ใช้สำหรับการส่งเอาต์พุตออกไปแสดงผลทางจอภาพ
คอมพิวเตอร์สามารถคำนวณได้
สัญลักษณ์ที่ใช้ในการคำนวณ
          +   ใช้แทนการบวก (Add)
          -    ใช้แทนการลบ (subtract)
          *     ใช้แทนการคูณ (multiply)
          /     ใช้แทนการหาร (divide)
         ()     ใช้แทนเครื่องหมายวงเล็บเปิด/ปิด
คอมพิวเตอร์สามารถกำหนดค่าตัวแปรได้
ทำได้ 3 รูปแบบ 
  • ใช้คำกริยา initialize หรือคำว่า set เพือกำหนดค่าเริ่มต้นให้กับตัวแปร
  • ใช้สัญลักษณ์เครื่องหมาย = หรือเครื่องหมาย ←เพื่อกำหนดค่าให้กับตัวแปร
  • ใช้คำกริยา store ในการจัดเก็บข้อมูลให้กับตัวแปร
คอมพิวเตอร์สามารถเปรียบเทียบ และ เลือกการทำงานได้
  • ใช้คำ if…then…else และจบด้วย end if เสมอ
คอมพิวเตอร์สามารถทำงานซ้ำๆได้
  • ใช้คำ dowhile…enddo หรือ repeat..until
The Three Basic Control Structures
  • The Three Basic Control Structures
    แบบเรียงลำดับ (Sequence) ทำงานตามชุดคำสั่งแบบลำดับ จากบนลงล่าง
  • แบบเลือกการทำงาน (Selection)
    เปรียบเทียบเงื่อนไขโดยใช้คำสั่ง
    if…
    then….
    else ….
    end if
  • แบบทำงานซ้ำ (Repetition)
    dowhile จะทำงานซ้ำไปเรื่อยๆ เมื่อตรงกับเงื่อนไข
    จนกระทั่งเงื่อนไขเป็นเท็จ ก็จะหลุดออกจากลูป
    dowhile condition p is true
    statement block
    end do
    ส่วน repeat …. until จะทำการ execute statement
    ก่อนเช็คเงื่อนไข
    repeat
    statement
    statement
    until condition is true

    บทที่ 2 Review C Language

    1.Review C Language
    • คำสั่งพื้นฐานต่างๆ
            เช่น printf( “abc” );
                   printf( “%s”, ”abc” );
            เช่น scanf( “%d”,&x);
    • Format Code ใช้ในการแสดงผลที่นิยมใช้ ได้แก่
           %d   ใช้กับข้อมูลแบบ integer
           %c    ใช้กับข้อมูลแบบ character
           %f     ใช้กับข้อมูลแบบ floating
           %s    ใช้กับข้อมูลแบบ string
    2.Operator
    แบ่งออกเป็น 3 ชนิด คือ
    • Arithmetic Operators ได้แก่  +, - , *, /, % , -- , ++
    • Relational and Equality Operators ได้แก่ < , > , <= , >= , == , !=
    •    - Logical Operators ได้แก่ ! , && , ||
    3.selection/Condition
    • if statement
    • if - else statement
    • if - else statement (Nested if)
    • switch statement
    4.Repetition/Loop
    • while statement
    Format :
        while (expression) {                   statement-1;                   statement-2;                        ……                   statement-n;      }
    • for statement
      Format :
      for (expression -1; expression-2; expression-3 ) {                 statement -1 ;                 statement -2 ;                      …..                 statement -n ;   }
    • do-while statement
      Format :
             do {                 statement -1 ;                 statement -2 ;                   …..                  statement -n ;             } while (expression);
    5.Function ข้อดี
    • เขียนโค้ดครั้งเดียว แต่สามารถเรียกใช้ได้หลายครั้ง
      สามารถนำหลับมาใช้ใหม่ในโปรแกรมอื่นได้
      ถ้าต้องการเปลี่ยนแปลงแก้ไขเพียงที่เดียว
      ทำให้โปรแกรมมีความเป็นโครงสร้าง 
    • สามารถแบ่งเป็นโมดูลย่อยๆได้
      ฟังก์ชันแบ่งเป็น 2 ประเภท คือ

    • Library Function
      Format :
      #include<file-name>
      ตัวอย่าง   #include<stdio.h>   #include<conio.h >   etc. 
    วิธีเรียกใช้งาน Library Function

    • เรียกชื่อของฟังก์ชันที่ต้องการใช้งาน
    • เอาค่าที่จะส่งไปทำงานในฟังก์ชัน ใส่ลงในวงเล็บตามหลังชื่อฟังก์ชันนั้น
      ตัวอย่าง Library Function strcpy () –อยู่ในแฟ้มข้อมูล string.h   ทำหน้าที่ : คัดลอกข้อมูลจาก string หนึ่งไปยัง string หนึ่ง
      Format : 
      strcpy (str1, str2);

    6.User Defined Function
    คือ ฟังก์ชันที่ผู้เขียนโปรแกรมสามารถเขียนฟังค์ชันขึ้นใช้เอง โดยฟังก์ชันนี้อาจจะรวมอยู่กับโปรแกรมหลักเป็นแฟ้มเดียวกัน หรือยกฟังก์ชันเหล่านี้ไว้คนละแฟ้มข้อมูลก็ได้
    การสร้างฟังก์ชัน ประกอบด้วย
    • Function Definition
    • Function Prototype
    • Invocation
    Function Definition หรือนิยามฟังก์ชัน คือ รายละเอียดในการทำงานของฟังก์ชัน Format :
    clip_image001/*…………..*/  >> heading comment
      data-type function-name(type argument )    {       declaration;       statement;     return(value); }
    Function Prototype  เป็นตัวบอกให้ Compiler ทราบว่าการประกาศฟังก์ชันขึ้นและฟังก์ชันนั้นมีค่าที่ส่งกลับเป็นอะไร มีการรับพารามิเตอร์อะไรบ้าง มีประโยชน์ในการตรวจสอบข้อผิดพลาดระหว่างการเรียกใช้ฟังก์ชัน
    Invocation คือการเรียกใช้ฟังก์ชัน
    ลักษณะของฟังก์ชัน
    •  ฟังก์ชันที่ไม่มีการส่งค่ากลับ การเรียกใช้ทำได้โดยอ้างถึงชื่อฟังก์ชัน
                 ...........
        Print_banner () ;
    • ฟังก์ชันที่มีการส่งค่ากลับ การเรียกใช้ทำได้เหมือนแบบแรก แต่ต้องมีตัวแปรมารับค่าที่จะต้องส่งกลับด้วย
    int main(void) {
    int k, j;
       j = prompt ()
       k = prompt ();
    printf(“j = %d and k = %d”, j, k);
    • ฟังก์ชันที่มีการรับค่า argument
    การเรียกใช้ฟังก์ชันทำได้โดยอ้างถึงชื่อของฟังก์ชัน พร้อมทั้งส่งค่าของตัวแปร(parameter)ไปด้วย โดยจะ ต้องมีชนิดสอดคล้องกับ argument ของฟังก์ชัน ที่เรียกใช้
    • การผ่านค่า argument ให้ฟังก์ชัน ทำได้ 2 แบบ คือ
    Pass by Value คือ การส่งค่าไปยังฟังก์ชันที่ถูกเรียกใช้โดยส่งค่าของตัวแปรหรือค่าที่ส่งไปโดย ค่าคงที่ผ่านให้กับค่าฟังก์ชันจะถูกคัดลอกส่งให้กับ ฟังก์ชันและจะถูกเลี่ยนแปลงเฉพาะภายในฟังก์ชัน โดยค่าของ argumentในโปรแกรมที่เรียกใช้จะไม่เปลี่ยนแปลง   ตัวอย่าง :
    void swap(int num1, int num2) {
            int tmp;
    tmp = num1;
    num1 = num2;
    num2 = tmp;
    print(“A is %d B is %d\n”, num1, num2);
    }
    Pass by Reference
    คือ การส่งค่าไปยังฟังก์ชันที่ถูกเรียกใช้โดยส่งเป็นตำแหน่งที่อยู่ของตัวแปรไป ซึ่งหากภายในฟังก์ชันมีการเปลี่ยนแปลงค่าของ argument ที่ส่งไป ก็จะมีผลทำให้ค่าของ argument นั้นใน โปรแกรมที่เรียกใช้เปลี่ยนไปด้วย ตัวอย่าง :
    void swap(int * num1, int * num2) {
           int tmp;
    tmp = *num1;
    *num1 =* num2;
    *num2 = tmp;
    }