fahzaza

วันอาทิตย์ที่ 21 สิงหาคม พ.ศ. 2554

โครงสร้างของอะเรย์

จะเป็นโครงสร้างข้อมูลชนิดเชิงเส้นพื้นฐานที่สุด มีสมาชิกที่เป็นข้อมูลประเภทเดียวกัน มี จำนวนจำกัดแน่นอน ต้องเรียงลำดับกันไป การอ้างถึงจะอ้างถึงโดยการ ใช้ดรรชนีกำกับ (subscript)จำนวน ดรรชนี กำกับเรียกว่า มิติ(dimention) การกำหนดอะเรย์จะต้องมีการกำหนดชื่อของอะเรย์ และขนาดของอะเรย์ ชนิดของอะเรย์

อะเรย์ 1 มิติ

มีดรรชนีกำกับเพียงตัวเดียว การกำหนดโครงสร้างของอะเรย์ จะหมายถึงการอ้างถึง ตำแหน่งของความจำ ที่มีตำแหน่งต่อเนื่องกัน โดยใช้ตัวแปรชุดเดียวกันนั่นเอง โดยทั่วๆไปดรรชนีกำกับของอะเรย์ จะมีการเริ่มต้นจาก 0 หรือ 1 ซึ่งจะแทนขอบเขตล่าง (lower bound ) ของอะเรย์ อะเรย์แต่ละช่องจะมีขนาดเท่า ๆกัน หมายถึงสมาชิกแต่ละตัวของอะเรย์ จะต้องมีการใช้เนื้อที่เท่ากัน ถ้าสมาชิกของอะเรย์มี สมาชิก เท่ากับ n ตัว ก็จะต้องใช้หน่วยความจำทั้งหมด n คำ

สูตรแสดงการหาตำแหน่งที่ อยู่ของสมาชิกอะเรย์ สามารถคำนวนได้ดังนี้

loc(A[i] = l0 + c(i-1)

โดย l0 (l ศูนย์) คือ ตำแหน่งข้อมูลที่เก็บที่อยู่ของสมาชิกตัวแรก
c คือ เนื้อที่ในการจัดเก็บแต่ละตัว = 1 คำ
A[i] คือตำแหน่งที่อยู่ของสมาชิก ตัวที่ i ของ อะเรย์ A ใด ๆ
ในกรณีที่ ขอบเขตล่างของอะเรย์ ไม่ได้เริ่มต้นจาก 1 แต่เริ่มต้นที่ค่า b ก็จะใช้ การลบด้วยค่า b แทนการลบด้วย1 โดย การแทนเข้าสูตร ส่วนสมาชิกที่อยู่ในลำดับสุดท้ายของอะเรย์ คือ ขอบเขตบน (upper bound) ของอะเรย์

ขนาดของอะเรย์สามารถคำนวณได้จากสูตร

ขนาดของอะเรย์ = ขนาดของขอบเขตบน - ขนาดของขอบเขตล่าง

การประยุกต์ใช้อะเรย์ 1 มิติ

อะเรย์ 1 มิติ มักจะใช้ในการเก็บข้อมูลชนิดมาก ๆ และข้อมูลที่มีลักษณะเดียวกัน เช่นใช้ในการเรียงลำดับข้อมูล โดยการเก็บข้อมูลไว้ในอะเรย์

อะเรย์ 2 มิติ

อะเรย์ 2 มิติ มีดรรชนีในการกำกับ 2 ตัว โดยการจินตนาการว่า อะเรย์ 2 มิติ ประกอบด้วย แถว และคอลัมภ์ การหาจำนวนสมาชิก จะหาได้โดย นำจำนวนแถว คูณ กับจำนวนหลักการแทนอะเรย์ 2 มิติในหน่วยความจำ จะแทนด้วยอะเรย์ 1 มิติที่สมนัยกัน ตำแหน่งของอะเรย์ สามารถคำนวณ ได้ดังนี้
loc(A[ij] = L0 +(j-1) * n+(i -1 )



ในการเก็บข้อมูลของอะเรย์ ในหลาย ๆ ภาษา สามารถเก็บได้ ทั้ง แบบ คอลัมภ์เป็นหลัก (column - major order ) และแบบ แถวเป็นหลัก (row - major order) ในการคำนวณ จากสูตร n อาจแทนด้วย m หรือ r ก็ตามแต่ว่าเราจะเก็บ แบบแถวหรือ คอลัมภ์เป็นหลัก

การประยุกต์ใช้อะเรย์ 2 มิติ

การประยุกต์ใช้งาน มักจะใช้กับงานที่มีลักษณะ งานที่มี ลักษณะเป็นแถวและคอลัมภ์ หรือตาราง 2 มิติ เช่น เมตริกซ์ อะเรย์ 3 มิติ และอะเรย์ 3 มิติขึ้นไป
อะเรย์ 3 มิติ จะมีดรรชนีกำกับ 3 ตัว การจินตนาการ จะจินตนาการว่า เป็นอะเรย์ 2 มิติ ที่มีหลายระนาบการเก็บ อะเรย์ 3 มิติ ในหน่วยความจำ เราจะแทนอะเรย์ 3 มิติ ด้วยอะเรย์ 1 มิติ ที่สมนัย

วันพฤหัสบดีที่ 4 สิงหาคม พ.ศ. 2554

คำสั่งวน loop

ความหมายของลูป (loop)
ลูป (loop) ในที่นี้มีความหมายว่า การวนซ้ำซึ่งการวนซ้ำในทางภาษาคอมพิวเตอร์
คือ การทำคำสั่งหรือชุดคำสั่งนั้นซ้ำกันหลายๆครั้ง
ในการตรวจสอบว่าจะให้ลูปนั้นจบการทำงานเมื่อไรนั้น จะมีรูปแบบของการตรวจสอบเงือนไขอยู่ 2 แบบ
1.Pretest Loop ลูปประเภทนี้จะทำการตรวจสอบเงื่อนไขก่อนว่าเป็นจริง หรือเป็นเท็จถ้าเป็นจริงก็ให้เข้าไปทำคำสั่งหรือชุดคำส่งต่อไป
และเมื่อทำคำสั่งหรือชุดคำสั่งเสร็จแล้วก็จะกลับมาทำการตรวจสอบเงื่อนไขอีกครั้ง
และจะทำเช่นนี้ไปเรื่อยๆจนกว่าเงื่อนไขจะเป็นเท็จ ก็จบการทำงานของลูป
2.post-Test loop ลูปประเภทนี้จะทำคำสั่งหรือชุดคำสั่งก่อน เมื่อเสร็จแล้วถึงจะมาตรวจสอบเงื่อนไขว่าเป็นจริงหรือเป็นเท็จ
ถ้าเป็นจริงก็จะกลับไปทำคำสั่งหรือชุดคำสั่งเดิมอีกครั้งแลดะจะทำจนกว่าเงื่อนไขจะเป็นเท็จเช่นเดียวกัน
ลูปทั้งสองแบบนั้นจะต่างกันตรงที่จำนวนการทำคำสั่งหรือชุดคำสั่งนั้นจะไม่เท่ากัน จะเห็นได้ว่าลูปแบบ pretest นั้นโอกาสการทำคำสั่งหรือชุดคำสั่งที่น้อยที่สุดจะเท่ากับ 0
คือ เมื่อทำการตรวจสอบเงื่อนไขครั้งแรกแล้วเป็นเท็จก็จะออกจากลูป แต่ลูปแบบ post-test นั้นโอกาสที่น้อยที่สุดจะเท่ากับ 0 คือ
เมื่อเข้าจะทำคำสั่งหรือชุดคำสั่งก่อน 1 ครั้งและเมื่อตรวจสอบเงื่อนไขครั้งแรกแล้วจะเป็นเท็จ
ก็จะออกจากลูป
การกำหนดและปรับปรุง
ในการใช้ลูป จะมีการกระทำที่สำคัญอยู่ 2 อย่าง ที่จะขาดไม่ได้เลยซึ่งถ้าขาดไปจะทำให้ลูปนั้นไม่ทำงาน หรือลูปทำงานแบบไม่มีวันจบ
1. การกำหนดค่า ก่อนที่เริ่มใช้ลูปจะต้องมีการกำหนดค่าที่นะใช้เป็นตัวควบคุมลูปก่อนซึ่งตัวควบคุมนี้จะทำหน้าที่ในการตรวจอบว่าลูปนั้นได้ทำงานจนจบ
2. การปรับปรุง หลังจากที่ทำคำสั่งหรือชุดคำสั่งไปแล้วไม่มีการปับปรุงค่าของตัวควบคุมลูป
ก็จะทำให้ลูปนั้นกลายเป็นลูปไม่มีวันจบได้เพราะฉะนั้นจะต้องทำการปรับปรุงค่าของตัวควบคุมลูปทุกครั้งเพื่อจะได้นำค่าของตัวควบคุมไปตรวจสอบกับเงื่อนไขเพื่อจบการทำงานของลูป

       ความแตกต่างระหว่าง Pretest Loop และ Post – Test Loop
        
Pretest Loop
Post-Test loop
                         การกระทำ 
               การกำหนดค่า 1                              
     จำนวนครั้งในการตรวจสอบ n+1
        จำนวนครั้งในการทำคำสั่ง n 
         จำนวนครั้งในการปรับปรุง n
    จำนวนครั้งที่น้อยที่สุดในการวน 0
                       การกระทำ
                       การกำหนดค่า 1
                       จำนวนครั้งในการตรวจสอบ n
                       จำนวนครั้งในการทำคำสั่ง n
                       จำนวนครั้งในการปรับปรุง n
n คือ จำนวนของการวนซ้ำ
คำสั่งวนลูปในภาษา C
คำสั่งลูปในภาษา C นั้นจะมีอยู่ 3 คำสั่ง คือ คำสั่ง While คำสั่ง for และคำสั่ง do…while
ซึ่งสองคำสั่งแรกเป็นลูปแบบ Pretest loop ส่วนคำสั่งสุดท้ายจะเป็นแบบ Post-test loop


ในการเขียนโปรแกรม บางครั้งจะต้องให้คอมพิวเตอร์ ทำบางคำสั่งมากกว่า 1 ครั้ง การทำงานซ้ำคำสั่งเดิม เป็นลักษณะการทำงานแบบ วนลูป (loop) ซึ่งในภาษา คอมพิวเตอร์ทุกภาษา จะต้องมีคำสั่งเพื่อบังคับ ให้คอมพิวเตอร์ ทำงานในลักษณะวนลูป สำหรับ ในภาษา C หรือ C++ คำสั่งวนลูปได้แก่ for, while และ do
1. คำสัง for
คำสั่ง for มีรูปแบบดังนี้
for(v=i; condition test; increment or decrement){
statement1;
statement2;
:
:
:
statementn;
}
การทำงานของคำสั่ง for จะเริ่มโดยการกำหนดค่าเริ่มแรก (i) ให้กับตัวแปรควบคุมลูป (Loop control variable) v แล้วจึงทดสอบว่าเงื่อนไข เป็นจริงหรือไม่ ถ้าเป็นจริงจะทำคำสัง่ต่างๆ ที่อยู่ระหว่าง { และ } จากนั้นจะเพิ่มหรือลดค่าของตัวแปร ควบคุม ลูป แล้วจึงทดสอบเงื่อนไข การทำงานจะวนซ้ำจนกระทั่ง เงื่อนไขเป็นจริง การวนลูป จึงจะสิ้นสุดลง หลักจากนั้นจึงจะมาทำคำสั่งที่อยู่ถัดจากเครื่องหมาย }

แผนผังการทำงานของคำสั่ง for

ตัวอย่าง โปรแกรมที่ 1
#include "stdio.h"
#include "conio.h"
main()
{
int i;;
clrscr();
for(i=1;i<=10;++i){
printf("%d\n",i);
}
printf("End of loop\n");
}

ผลลัพธ์
1