SlideShare a Scribd company logo
1 of 57
Download to read offline
หน่วยที่ 2
 โครงสร้างข้อมูล

• OUTLINE
  – อาร์เรย์ (Array)
     • 1 มิติ และ 2 มิติ
  – เรคอร์ด (Record)
  – เซท (Set)
อาร์เรย์ (Array)

• อาร์เรย์ หรือ แถวลาดับ
       เป็นโครงสร้างข้อมูลทีประกอบด้วยจานวนสมาชิกที่
                               ่
  มีขนาด และ ประเภทข้อมูลเหมือนกัน โดยทุกตัวในแถว
  ลาดับใช้ชื่อเดียวกัน ดังนั้นจึงต้องอาศัยตัวชี้ (Index)
  กากับชื่ออาร์เรย์เพื่อระบุถึงสมาชิกแต่ละตัว
• อาร์เรย์มีตั้งแต่ 1มิติ ถึงหลายมิติ
อาร์เรย์
• อาร์เรย์ ช่วยให้การเขียนโปรแกรมสั้นและประหยัดเนื้อที่
  ตัวแปร
• การใช้ อาร์เรย์ ต้องกาหนดชนิดและขนาดของอาร์เรย์
  เพื่อเป็นการจองเนื้อที่ในหน่วยความจา
• ต้องมีตัวแปรที่ใช้เป็น Index
การกาหนดแบบอาร์เรย์ 1 มิติ
กาหนดผ่าน TYPE
       Type matrix = array[1..100] of integer;
       VAR number:matrix;
หรือ กาหนดตรงผ่าน VAR
       VAR number: array[1..100] of integer;
การกาหนดแบบอาร์เรย์ 1 มิติ

   – ตัวอย่าง
TYPE matrix = array[1..100] of integer;
     letter = array[‘A’..’Z’] of real;
VAR number : matrix; index: integer;
    scale : letter;
    chindex : ‘A’..’Z’;
การอ่านค่าเก็บไว้ในอาร์เรย์
• การอ่านค่าเก็บไว้ในอาร์เรย์ ต้องอาศัยลูปในการนาค่าเข้า
  ไปเก็บไว้ในสมาชิกแต่ละตัว
• for index := 1 to 100 do
   – read(number[index]);
• for chindex := ‘A’ to ‘Z’ do
   – scale[chindex] := ‘ ‘;
การอ่านค่าเก็บไว้ในอาร์เรย์
• การนาค่าจากอาร์เรย์ A ไปไว้ในอาร์เรย์ B
program array1;
uses Wincrt;
type arraynum = array['a'..'z'] of integer;
var a,b: arraynum;
     i:'a'..'z';
การอ่านค่าเก็บไว้ในอาร์เรย์
(* program put asiic code of      for i:= 'a' to 'z' do
   character a-z into array A              b[i] := a[i];
   and copy to B*)                for i:='z' downto 'a' do
begin                                 writeln(a[i],' and ',b[i]);
    for i:= 'a' to 'z' do       end.
      a[i] := ord(i);           หมายเหตุ
                                 ภาษาปาลคาลให้ใช้ b:= a ได้ถ้า
                                  อาร์เรย์ทั้ง2เหมือนกัน
การค้นหาค่าสูงสุดต่าสุด
•   การค้นหาค่าสูงสุดต่าสุด ของเลขจานวนเต็มบวก
•   หลักการนาค่าทังหมดเก็บในอาร์เรย์
                  ้
•   กาหนดให้คาแรกในอาร์เรย์เป็นทั้งค่าสูงสุด และ ต่าสุด
              ่
•   จากนังจึงทาการเปรียบเทียบค่า
         ้
การค้นหาค่าสูงสุดต่าสุด
program maxmin;
uses wincrt;
const n_array = 5;
type number = array[1..5] of byte;
var x: integer;
  num: number;
การค้นหาค่าสูงสุดต่าสุด
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;
การค้นหาค่าสูงสุดต่าสุด

procedure find_max_min;
var max,min,i:integer;
begin
 i:=1;
 max:= num[i];
 min:= num[i];
การค้นหาค่าสูงสุดต่าสุด
for i:=1 to n_array do        writeln('---------------------------
    begin                        --');
       if num[i] > max then     writeln('Max is = ',max,'
            max := num[i];       Min is = ',min);
       if num[i] < min then   end;
            min := num[i];
    end;
การค้นหาค่าสูงสุดต่าสุด

  begin {min}
   readnum;
   find_max_min;
  end.
การหาความถี่
ตาบลแห่งหนึ่งมีผู้สมัครเข้าแข่งขัน อบต. จานวน 3 คน
  เขียนโปรแกรมหาคะแนนเสียงของผู้แข่งขันแต่ละคน
program freq;
uses wincrt;
const max = 3;
type arr = array [1..3] of integer;
var score : arr;
การหาความถี่

procedure init;
var i: integer;
begin
  for i:= 1 to max do
   score[i] := 0;
end;
การหาความถี่
procedure enternum;
var num : integer;
begin
   write('Enter number you want to select 1-3 or -1
  to end :');
   readln (num);
การหาความถี่
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
การหาความถี่

              Writeln(' You enter a wrong number.');
      end;{end case}
      write('Enter number you want to select 1-3 or -1
             to end :');
      readln (num);
  end;{end while}
end;
การหาความถี่
procedure write_score;
var i:integer;
begin
     for i:= 1 to max do
     writeln('Member number ',i,' is ',score[i]);
end;
การหาความถี่

begin {main}
   init;
   enternum;
   write_score;
end.
การค้นหาแบบเส้นตรง
• การค้นหาข้อมูลแบบเส้นตรง สามารถทาได้โดยการ
  ค้นหาข้อมุลแต่ละตัวตังแต่ตัวแรกจนถึงสมาชิกตัว
                       ้
  สุดท้าย
• การค้นหาสิ้สุดเมื่อพบข้อมูล หรือ หมดจานวนสมาชิกที่
  จะค้นหา(คือไม่พบ)
การค้นหาแบบเส้นตรง
program search1;
uses wincrt;
const max = 3;
type arr = array [1..10] of string;
var
  table : arr;
การค้นหาแบบเส้นตรง
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;
การค้นหาแบบเส้นตรง
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);
การค้นหาแบบเส้นตรง
while code <> '*' do
    begin
        while (flag = false) and (i <= max) do
         begin
           if table[i] = code then
              flag := true
           else
              i:= i+1;
         end;
การค้นหาแบบเส้นตรง

if flag = true then
       begin
           flag := false;
           writeln('student code ',code,' is found');
       end
else
       writeln('student code ',code,' is not found');
การค้นหาแบบเส้นตรง
     write('enter student code you want to search/ * to end ');
        readln(code);
      end; {end while}
end;
{main}
begin
 getnum;
 search_code;
end.
การเรียงข้อมูล (Sorting)
• การเรียงข้อมูล คือการจัดลาดับข้อมูล จากน้อยไปหามาก
  หรือ กลับกัน
• การเรียงข้อมูลแบบ เช่น Bubble Sort
Bubble Sort
• Bubble Sort เป็นการเปรีบเทียบสมาชิก 2ตัวทีอยู่ติดกัน
                                               ่
  หากตัวที่สองมีค่าน้อยก็ให้ทาการ swap ค่ากัน ทาการ
  เปรียบเทียบจนครบทุกตัว (มีการเปรียบเทียบ N-1 ครั้ง)
  ถือ เป็น 1 รอบ
• แต่ต้องมีการวนรอบ N-1 ครั้งจึงจะสมบูรณ์
Bubble Sort

48 9056 46 80    รอบที่ 1

48 5646 80 90    รอบที่ 2

48 4656 80 90        รอบที่ 3

46 48 56 80 90       รอบที่ 4
Bubble Sort
program sort;
uses wincrt;
const max = 5;
type arr = array[1..5] of integer;
var list:arr;
Bubble Sort
procedure getnum;
var i: integer;
begin
     for i:= 1 to max do
     begin
     write('enter number:');
     readln(list[i]);
     end; end;
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
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;
Bubble Sort
procedure writelist;
var i : integer;
begin
 writeln('---------------------------');
 for i:= 1 to max do
   writeln(list[i]);
end;
Bubble Sort

begin
 getnum;
 sorting;
 writelist;
end.
อาร์เรย์ 2 มิติ
• อาร์เรย์ 2 มิติ แต่ต่างจาก อาร์เรย์ 1 มิติ ที่เราสามารถ
  เห็นได้ทั้งด้านกว้าง และ ยาว ขณะที่ 1 มิติ จะมี กว้าง
  หรือ ยาว อย่างเดียว
• ดังนั้น การประกาศ อาร์เรย์ ต้องใช้ 2 มิติ และ ต้องใช้ตัว
  ชี้ 2 ตัว
อาร์เรย์ 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;
อาร์เรย์ 2 มิติ
• ถ้าต้องการเขียนตัวอักษรให้เต็ม 1 หน้ากระดาษ
  สามารถเขียนโปรแกรมดังนี้
   for I := 1 to 90 do
      for j := 1 to 80 do
           page[j] := character;
Read Write ค่าในอาร์เรย์
• เขียนโปรแกรมนาตัวเลขเก็บไว้ใน อาร์เรย์ 2 มิติ
program twodim;
uses wincrt;
const mrow= 4;
        mcol= 3;
var table :array[1..4,1..3] of integer;
     i,j:integer;
Read Write ค่าในอาร์เรย์
procedure getnum;           begin
begin                                 write('Enter
  for I := 1 to 4 do          number:');
   begin                             read (table[i,j]);
    for j := 1 to 3 do            end;
                                end;
                            end;
Read Write ค่าในอาร์เรย์
procedure writenum ;
begin
  writeln('--------------------------');
  for I := 1 to 4 do
   begin
    for j := 1 to 3 do
Read Write ค่าในอาร์เรย์
begin                         Begin {main}
       write(table[i,j]:5);     getnum;
     end;                       writenum;
     writeln;                 end.
   end;
end;
การประมวลผลในอาร์เรย์
• จงเขียนโปรแกรมทาการรับจานวนนักเรียนและ จานวน
  วิชาสอบ แล้วจึงรับคะแนนของแต่ละวิชา พิมพ์รายงาน
  ในรูปของตารางมีลักษณะดังนี้
            SUB1 SUB2 SUB3 AVG
STUDENT1 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
การประมวลผลในอาร์เรย์
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;
การประมวลผลในอาร์เรย์
  {****              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;
การประมวลผลในอาร์เรย์
     {****           getnum routine   ****}
procedure getnum(row,col:integer);
  begin
     for i:= 1 to row-1 do
       begin
การประมวลผลในอาร์เรย์

         for j:= 1 to col-1 do
       begin
            write(i,'.','Enter score for each subject: ');
            readln(table[i,j]);
          end;
          writeln('-------------------------');
       end;
end;
การประมวลผลในอาร์เรย์
          {**** 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;
การประมวลผลในอาร์เรย์
{write detail line}
for I := 1 to row do
  begin
   if i = row then
      write('average ')
   else
      write('student# ',i,'');
การประมวลผลในอาร์เรย์

         for j := 1 to col do
           write(table[i,j]:6:2);
         writeln;
       end;
end;
การประมวลผลในอาร์เรย์

         {****          compute routine   ****}
procedure compute(row,col:integer);
  begin
   {compute averge for subject}
     for i:= 1 to row-1 do
       begin
         sum := 0;
การประมวลผลในอาร์เรย์

  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;
การประมวลผลในอาร์เรย์

       {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;
การประมวลผลในอาร์เรย์
{**** main routin ****}       nstd := nstd +1;
begin                         nsub := nsub +1;
    write('Enter number of    init(nstd,nsub);
  student and number of       getnum(nstd,nsub);
  subject: ');                compute(nstd,nsub);
    readln(nstd,nsub);        writenum(nstd,nsub);
                             end.{end main}
จัดทาโดย
นาย ธนพงษ์ น่านกร เลขที่ 1
    ชั้นมัธยมศึกษาปีที่ 5

More Related Content

What's hot

(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริงKittinan Noimanee
 
บทที่5 ข้อมูลชนิดอาร์เรย์และสตริง
บทที่5 ข้อมูลชนิดอาร์เรย์และสตริงบทที่5 ข้อมูลชนิดอาร์เรย์และสตริง
บทที่5 ข้อมูลชนิดอาร์เรย์และสตริงNaphamas
 
ตัวแปรชนิดพอยเตอร์ (Pointer)
ตัวแปรชนิดพอยเตอร์ (Pointer)ตัวแปรชนิดพอยเตอร์ (Pointer)
ตัวแปรชนิดพอยเตอร์ (Pointer)tumetr
 
7 pointer day10
7  pointer day107  pointer day10
7 pointer day10xuou888
 
ตัวแปรชุดและตัวแปรอักขระ
ตัวแปรชุดและตัวแปรอักขระตัวแปรชุดและตัวแปรอักขระ
ตัวแปรชุดและตัวแปรอักขระAreeya Onnom
 
59170284 สาวิกา
59170284 สาวิกา59170284 สาวิกา
59170284 สาวิกาBeam Suna
 

What's hot (9)

(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
 
Python101
Python101Python101
Python101
 
บทที่5 ข้อมูลชนิดอาร์เรย์และสตริง
บทที่5 ข้อมูลชนิดอาร์เรย์และสตริงบทที่5 ข้อมูลชนิดอาร์เรย์และสตริง
บทที่5 ข้อมูลชนิดอาร์เรย์และสตริง
 
ตัวแปรชนิดพอยเตอร์ (Pointer)
ตัวแปรชนิดพอยเตอร์ (Pointer)ตัวแปรชนิดพอยเตอร์ (Pointer)
ตัวแปรชนิดพอยเตอร์ (Pointer)
 
7 pointer day10
7  pointer day107  pointer day10
7 pointer day10
 
power point.
power point.power point.
power point.
 
ตัวแปรชุดและตัวแปรอักขระ
ตัวแปรชุดและตัวแปรอักขระตัวแปรชุดและตัวแปรอักขระ
ตัวแปรชุดและตัวแปรอักขระ
 
7 2โครงสร้าง
7 2โครงสร้าง7 2โครงสร้าง
7 2โครงสร้าง
 
59170284 สาวิกา
59170284 สาวิกา59170284 สาวิกา
59170284 สาวิกา
 

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

Computer programming
Computer programmingComputer programming
Computer programmingJariyaa
 
RTAF_Basic_Python_2022_Cyber_Operation_Contest.pptx
RTAF_Basic_Python_2022_Cyber_Operation_Contest.pptxRTAF_Basic_Python_2022_Cyber_Operation_Contest.pptx
RTAF_Basic_Python_2022_Cyber_Operation_Contest.pptxnkrafacyberclub
 
อัลกอริทึมและการวิเคราะห์ปัญหา
อัลกอริทึมและการวิเคราะห์ปัญหาอัลกอริทึมและการวิเคราะห์ปัญหา
อัลกอริทึมและการวิเคราะห์ปัญหาsupatra178
 
ตัวแปรชุดและตัวแปรอักขระ
ตัวแปรชุดและตัวแปรอักขระตัวแปรชุดและตัวแปรอักขระ
ตัวแปรชุดและตัวแปรอักขระAreeya Onnom
 
ตัวแปรชุดและตัวแปรอักขระ PPT
ตัวแปรชุดและตัวแปรอักขระ PPTตัวแปรชุดและตัวแปรอักขระ PPT
ตัวแปรชุดและตัวแปรอักขระ PPTAreeya Onnom
 
การเขียนฟังก์ชั่นในภาษา C
การเขียนฟังก์ชั่นในภาษา Cการเขียนฟังก์ชั่นในภาษา C
การเขียนฟังก์ชั่นในภาษา CWarawut
 
Java Programming [8/12] : Arrays and Collection
Java Programming [8/12] : Arrays and CollectionJava Programming [8/12] : Arrays and Collection
Java Programming [8/12] : Arrays and CollectionIMC Institute
 

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

งานPPT
งานPPTงานPPT
งานPPT
 
Computer programming
Computer programmingComputer programming
Computer programming
 
C language
C languageC language
C language
 
Know4 1
Know4 1Know4 1
Know4 1
 
05 loops
05 loops05 loops
05 loops
 
RTAF_Basic_Python_2022_Cyber_Operation_Contest.pptx
RTAF_Basic_Python_2022_Cyber_Operation_Contest.pptxRTAF_Basic_Python_2022_Cyber_Operation_Contest.pptx
RTAF_Basic_Python_2022_Cyber_Operation_Contest.pptx
 
Tec4
Tec4Tec4
Tec4
 
อัลกอริทึมและการวิเคราะห์ปัญหา
อัลกอริทึมและการวิเคราะห์ปัญหาอัลกอริทึมและการวิเคราะห์ปัญหา
อัลกอริทึมและการวิเคราะห์ปัญหา
 
ตัวแปรชุดและตัวแปรอักขระ
ตัวแปรชุดและตัวแปรอักขระตัวแปรชุดและตัวแปรอักขระ
ตัวแปรชุดและตัวแปรอักขระ
 
ตัวแปรชุดและตัวแปรอักขระ PPT
ตัวแปรชุดและตัวแปรอักขระ PPTตัวแปรชุดและตัวแปรอักขระ PPT
ตัวแปรชุดและตัวแปรอักขระ PPT
 
4
44
4
 
การเขียนฟังก์ชั่นในภาษา C
การเขียนฟังก์ชั่นในภาษา Cการเขียนฟังก์ชั่นในภาษา C
การเขียนฟังก์ชั่นในภาษา C
 
C slide
C slideC slide
C slide
 
Lesson6
Lesson6Lesson6
Lesson6
 
Java Programming [8/12] : Arrays and Collection
Java Programming [8/12] : Arrays and CollectionJava Programming [8/12] : Arrays and Collection
Java Programming [8/12] : Arrays and Collection
 
คอมโปรเฟรม
คอมโปรเฟรมคอมโปรเฟรม
คอมโปรเฟรม
 
บทที่2
บทที่2บทที่2
บทที่2
 
05 Loops
05  Loops05  Loops
05 Loops
 
Chapter 02 Flowchart
Chapter 02 FlowchartChapter 02 Flowchart
Chapter 02 Flowchart
 
Know4 3
Know4 3Know4 3
Know4 3
 

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