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

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

  • Upload
    -

  • View
    760

  • Download
    1

Embed Size (px)

Citation preview

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