Top Banner
หน่วยที่ 2 โครงสร้างข้อมูล OUTLINE อาร์เรย์ (Array) 1 มิติ และ 2 มิติ เรคอร์ด (Record) เซท (Set)
57

หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา ปาโจด ม.5

Jun 23, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

หนวยท 2โครงสรางขอมล

• OUTLINE

–อารเรย (Array)

•1 มต และ 2 มต

– เรคอรด (Record)

– เซท (Set)

Page 2: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

อารเรย (Array)

• อารเรย หรอ แถวล าดบ

เปนโครงสรางขอมลทประกอบดวยจ านวนสมาชกทมขนาด และ ประเภทขอมลเหมอนกน โดยทกตวในแถวล าดบใชชอเดยวกน ดงนนจงตองอาศยตวช (Index) ก ากบชออารเรยเพอระบถงสมาชกแตละตว

• อารเรยมตงแต 1มต ถงหลายมต

Page 3: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

อารเรย

• อารเรย ชวยใหการเขยนโปรแกรมสนและประหยดเนอทตวแปร

• การใช อารเรย ตองก าหนดชนดและขนาดของอารเรย เพอเปนการจองเนอทในหนวยความจ า

• ตองมตวแปรทใชเปน Index

Page 4: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การก าหนดแบบอารเรย 1 มต

ก าหนดผาน TYPEType matrix = array[1..100] of integer;

VAR number:matrix;

หรอ ก าหนดตรงผาน VAR

VAR number: array[1..100] of integer;

Page 5: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การก าหนดแบบอารเรย 1 มต

– ตวอยาง

TYPE matrix = array[1..100] of integer;

letter = array[‘A’..’Z’] of real;

VAR number : matrix; index: integer;

scale : letter;

chindex : ‘A’..’Z’;

Page 6: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การอานคาเกบไวในอารเรย

• การอานคาเกบไวในอารเรย ตองอาศยลปในการน าคาเขาไปเกบไวในสมาชกแตละตว

• for index := 1 to 100 do

– read(number[index]);

• for chindex := ‘A’ to ‘Z’ do– scale[chindex] := ‘ ‘;

Page 7: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การอานคาเกบไวในอารเรย

• การน าคาจากอารเรย A ไปไวในอารเรย B

program array1;

uses Wincrt;

type arraynum = array['a'..'z'] of integer;

var a,b: arraynum;

i:'a'..'z';

Page 8: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การอานคาเกบไวในอารเรย

(* program put asiic code of character a-z into array A and copy to B*)

begin

for i:= 'a' to 'z' do

a[i] := ord(i);

for i:= 'a' to 'z' do

b[i] := a[i];

for i:='z' downto 'a' do

writeln(a[i],' and ',b[i]);

end.

หมายเหต

ภาษาปาลคาลใหใช b:= a ไดถาอารเรยทง2เหมอนกน

Page 9: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การคนหาคาสงสดต าสด

• การคนหาคาสงสดต าสด ของเลขจ านวนเตมบวก

• หลกการน าคาทงหมดเกบในอารเรย

• ก าหนดใหคาแรกในอารเรยเปนทงคาสงสด และ ต าสด

• จากนงจงท าการเปรยบเทยบคา

Page 10: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การคนหาคาสงสดต าสด

program maxmin;

uses wincrt;

const n_array = 5;

type number = array[1..5] of byte;

var x: integer;

num: number;

Page 11: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

procedure readnum; {read data into array}

var i : integer;

begin

for i:= 1 to n_array do

begin

write('Enter positive number: ');

readln (num[i])

end;

end;

การคนหาคาสงสดต าสด

Page 12: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การคนหาคาสงสดต าสด

procedure find_max_min;

var max,min,i:integer;

begin

i:=1;

max:= num[i];

min:= num[i];

Page 13: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การคนหาคาสงสดต าสด

for i:=1 to n_array do

begin

if num[i] > max then

max := num[i];

if num[i] < min then

min := num[i];

end;

writeln('-----------------------------');

writeln('Max is = ',max,' Min is = ',min);

end;

Page 14: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การคนหาคาสงสดต าสด

begin {min}

readnum;

find_max_min;

end.

Page 15: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การหาความถ

ต าบลแหงหนงมผสมครเขาแขงขน อบต. จ านวน 3 คน เขยนโปรแกรมหาคะแนนเสยงของผแขงขนแตละคน

program freq;

uses wincrt;

const max = 3;

type arr = array [1..3] of integer;

var score : arr;

Page 16: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การหาความถ

procedure init;

var i: integer;

begin

for i:= 1 to max do

score[i] := 0;

end;

Page 17: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การหาความถ

procedure enternum;

var num : integer;

begin

write('Enter number you want to select 1-3 or -1

to end :');

readln (num);

Page 18: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การหาความถ

while num <> -1 do

begin

case num of

1 : score[num] := score[num] + 1;

2 : score[num] := score[num] + 1;

3 : score[num] := score[num] + 1;

else

Page 19: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การหาความถ

Writeln(' You enter a wrong number.');

end;{end case}

write('Enter number you want to select 1-3 or -1to end :');

readln (num);

end;{end while}

end;

Page 20: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การหาความถ

procedure write_score;

var i:integer;

begin

for i:= 1 to max do

writeln('Member number ',i,' is ',score[i]);

end;

Page 21: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การหาความถ

begin {main}

init;

enternum;

write_score;

end.

Page 22: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การคนหาแบบเสนตรง

• การคนหาขอมลแบบเสนตรง สามารถท าไดโดยการคนหาขอมลแตละตวตงแตตวแรกจนถงสมาชกตวสดทาย

• การคนหาสสดเมอพบขอมล หรอ หมดจ านวนสมาชกทจะคนหา(คอไมพบ)

Page 23: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การคนหาแบบเสนตรง

program search1;

uses wincrt;

const max = 3;

type arr = array [1..10] of string;

var

table : arr;

Page 24: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การคนหาแบบเสนตรง

procedure getnum;

var i: integer; code :string[3];

begin

for i:= 1 to max do

begin

write('enter student code: ');

readln(code);

table[i]:= code;

end; end;

Page 25: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การคนหาแบบเสนตรง

procedure search_code;

var i:integer; code :string[3]; flag : boolean;

begin

flag := false; i:= 1;

write('enter student code you want to search/ * to end ');

readln(code);

Page 26: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การคนหาแบบเสนตรง

while code <> '*' do

begin

while (flag = false) and (i <= max) do

begin

if table[i] = code then

flag := true

else

i:= i+1;

end;

Page 27: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การคนหาแบบเสนตรง

if flag = true then

begin

flag := false;

writeln('student code ',code,' is found');

end

else

writeln('student code ',code,' is not found');

Page 28: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การคนหาแบบเสนตรง

write('enter student code you want to search/ * to end ');readln(code);

end; {end while}end;{main} begingetnum;search_code;

end.

Page 29: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การเรยงขอมล (Sorting)

• การเรยงขอมล คอการจดล าดบขอมล จากนอยไปหามาก หรอ กลบกน

• การเรยงขอมลแบบ เชน Bubble Sort

Page 30: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

Bubble Sort

• Bubble Sort เปนการเปรบเทยบสมาชก 2ตวทอยตดกน หากตวทสองมคานอยกใหท าการ swap คากน ท าการเปรยบเทยบจนครบทกตว (มการเปรยบเทยบ N-1 ครง)ถอ เปน 1 รอบ

• แตตองมการวนรอบ N-1 ครงจงจะสมบรณ

Page 31: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

Bubble Sort

48 4656 80 90

48 5646 80 90

48 9056 46 80

46 48 56 80 90

รอบท 2

รอบท 1

รอบท 3

รอบท 4

Page 32: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

Bubble Sort

program sort;

uses wincrt;

const max = 5;

type arr = array[1..5] of integer;

var list:arr;

Page 33: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

Bubble Sort

procedure getnum;

var i: integer;

begin

for i:= 1 to max do

begin

write('enter number:');

readln(list[i]);

end; end;

Page 34: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

Bubble Sort

procedure sorting;

var i,j,temp: integer;

begin

for i:= 1 to max-1 do

begin

for j:= 1 to max-1 do

begin

Page 35: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

Bubble Sort

if list[j+1] < list[j] then

begin

temp := list[j];

list[j] := list[j+1];

list[j+1] := temp;

end;{end if}

end; {end for}

end; {end for} end;

Page 36: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

Bubble Sort

procedure writelist;

var i : integer;

begin

writeln('---------------------------');

for i:= 1 to max do

writeln(list[i]);

end;

Page 37: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

Bubble Sort

begin

getnum;

sorting;

writelist;

end.

Page 38: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

อารเรย 2 มต

• อารเรย 2 มต แตตางจาก อารเรย 1 มต ทเราสามารถเหนไดทงดานกวาง และ ยาว ขณะท 1 มต จะม กวาง หรอ ยาว อยางเดยว

• ดงนน การประกาศ อารเรย ตองใช 2 มต และ ตองใชตวช 2 ตว

Page 39: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

อารเรย 2 มต

การประกาศอารเรยท าไดดงน

Type row = array[1..90] of char;

column = array[1..80] of row;Var page : column;

หรอประกาศโดยตรง

VAR page : array[1..90,1..80] of char;

Page 40: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

อารเรย 2 มต

• ถาตองการเขยนตวอกษรใหเตม 1 หนากระดาษ สามารถเขยนโปรแกรมดงน

for I := 1 to 90 dofor j := 1 to 80 do

page[j] := character;

Page 41: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

Read Write คาในอารเรย

• เขยนโปรแกรมน าตวเลขเกบไวใน อารเรย 2 มต

program twodim;

uses wincrt;

const mrow= 4;

mcol= 3;

var table :array[1..4,1..3] of integer;

i,j:integer;

Page 42: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

Read Write คาในอารเรย

procedure getnum;

begin

for I := 1 to 4 do

begin

for j := 1 to 3 do

beginwrite('Enter

number:');

read (table[i,j]);

end;

end;

end;

Page 43: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

Read Write คาในอารเรย

procedure writenum ;

begin

writeln('--------------------------');

for I := 1 to 4 do

begin

for j := 1 to 3 do

Page 44: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

Read Write คาในอารเรย

begin

write(table[i,j]:5);

end;

writeln;

end;

end;

Begin {main}

getnum;

writenum;

end.

Page 45: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การประมวลผลในอารเรย

• จงเขยนโปรแกรมท าการรบจ านวนนกเรยนและ จ านวน วชาสอบ แลวจงรบคะแนนของแตละวชา พมพรายงานในรปของตารางมลกษณะดงน

SUB1 SUB2 SUB3 AVGSTUDENT1 0.0 0.0 0.0 0.0

STUDENT2 0.0 0.0 0.0 0.0

AVERAGE 0.0 0.0 0.0 0.0

Page 46: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การประมวลผลในอารเรย

program students;

uses wincrt;

var nstd,nsub:integer;

table : array[1..50,1..10] of real;

i,j:integer;

avg_sub,avg_std,sum:real;

Page 47: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การประมวลผลในอารเรย

{**** init routine ****} procedure init(row,col:integer);

begin

for i:= 1 to row do

for j:= 1 to col do

table[i,j] := 0;

end;

Page 48: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การประมวลผลในอารเรย

{**** getnum routine ****}

procedure getnum(row,col:integer);

begin

for i:= 1 to row-1 do

begin

Page 49: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

for j:= 1 to col-1 do

begin

write(i,'.','Enter score for each subject: ');

readln(table[i,j]);

end;

writeln('-------------------------');

end;

end;

การประมวลผลในอารเรย

Page 50: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การประมวลผลในอารเรย

{**** writeroutine ****}

procedure writenum(row,col:integer) ;

begin

{write column heading}

write('':12);

for i:=1 to col-1 do

write ('sub',i,'':2);

write ('avg');

writeln;

Page 51: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การประมวลผลในอารเรย

{write detail line}

for I := 1 to row do

begin

if i = row then

write('average ')

else

write('student# ',i,'');

Page 52: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การประมวลผลในอารเรย

for j := 1 to col do

write(table[i,j]:6:2);

writeln;

end;

end;

Page 53: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การประมวลผลในอารเรย

{**** compute routine ****}

procedure compute(row,col:integer);

begin

{compute averge for subject}

for i:= 1 to row-1 do

begin

sum := 0;

Page 54: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การประมวลผลในอารเรย

for j:= 1 to col-1 do

begin

sum := sum + table[i,j];

end;

avg_std := sum /(col-1);

table[i,col] := avg_std;

end;

Page 55: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การประมวลผลในอารเรย

{compute averge for students}

for i:= 1 to col-1 do

begin

sum := 0;

for j:= 1 to row-1 do

sum := sum + table[j,i];

avg_sub := sum /(row-1);

table[j+1,i] := avg_sub;

end;

end;

Page 56: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

การประมวลผลในอารเรย

{**** main routin ****}

beginwrite('Enter number of

student and number of subject: ');

readln(nstd,nsub);

nstd := nstd +1;

nsub := nsub +1;

init(nstd,nsub);

getnum(nstd,nsub);

compute(nstd,nsub);

writenum(nstd,nsub);

end.{end main}

Page 57: หน่วยที่2 เรื่อง โครงสร้างข้อมูล นางสาว สิรินยา  ปาโจด ม.5

จดท าโดยนาย ธนพงษ นานกร เลขท 1

ชนมธยมศกษาปท 5