ݺߣ

ݺߣShare a Scribd company logo
หน่วยที่ 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 (9)

PDF
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
Kittinan Noimanee
PDF
บทที่5 ข้อมูลชนิดอาร์๶รย์และสตริง
Naphamas
PPT
ตัวแปรชนิดพอยเตอร์ (Pointer)
tumetr
PPT
7 pointer day10
xuou888
PPT
power point.
guest6f80da
PPT
ตัวแปรชุึϹละตัวแปรอักྺระ
Areeya Onnom
PDF
7 2โครงสร้าง
Supaksorn Tatongjai
PDF
59170284 สาวิกา
Beam Suna
(Big One) C Language - 02 ฟังก์ชันส่งผ่านสตริง
Kittinan Noimanee
บทที่5 ข้อมูลชนิดอาร์๶รย์และสตริง
Naphamas
ตัวแปรชนิดพอยเตอร์ (Pointer)
tumetr
7 pointer day10
xuou888
power point.
guest6f80da
ตัวแปรชุึϹละตัวแปรอักྺระ
Areeya Onnom
7 2โครงสร้าง
Supaksorn Tatongjai
59170284 สาวิกา
Beam Suna

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

PPTX
งาȨำเสนอ1
Ploy StopDark
PDF
Java-Chapter 07 One Dimensional Arrays
Wongyos Keardsri
PPT
Java Programming [8/12] : Arrays and Collection
IMC Institute
PPTX
บทที่ 5 ข้อมูลชนิดอาร์๶รย์และสตริง
defeat overcome
PDF
Java-Chapter 10 Two Dimensional Arrays
Wongyos Keardsri
DOC
ตัวแปรชุึϹละตัวแปรอักྺระ
Areeya Onnom
PDF
งาน
Noom Sataporn
PPTX
กลุ่มที่ 6 โปรแกรมย่อยและฟังก์ชันมาตรฐาน
Kanchana Theugcharoon
PDF
บทที่ 5 ตัวแปรชุดและตัวแปรกลุ่มอักขระ[w]
Mook Sasivimon
PPTX
ข้อมูลชนิด Array
กฤษดา จันทร์ชาวใต้
PPTX
..Arrays..
poohwapol
PPTX
อาร์๶รย์
S-Samd D-Devotion
PPTX
ข้อมูลชนิด Array
กฤษดา จันทร์ชาวใต้
PDF
งาȨำเสนอ1
Mook Prapasson
PDF
งานทำ Blog บทที่ 8
รัสนา สิงหปรีชา
PDF
Java-Answer Chapter 10-11
Wongyos Keardsri
PPTX
โครงสร้างแบบอาร์๶รย์
waradakhantee
งาȨำเสนอ1
Ploy StopDark
Java-Chapter 07 One Dimensional Arrays
Wongyos Keardsri
Java Programming [8/12] : Arrays and Collection
IMC Institute
บทที่ 5 ข้อมูลชนิดอาร์๶รย์และสตริง
defeat overcome
Java-Chapter 10 Two Dimensional Arrays
Wongyos Keardsri
ตัวแปรชุึϹละตัวแปรอักྺระ
Areeya Onnom
งาน
Noom Sataporn
กลุ่มที่ 6 โปรแกรมย่อยและฟังก์ชันมาตรฐาน
Kanchana Theugcharoon
บทที่ 5 ตัวแปรชุดและตัวแปรกลุ่มอักขระ[w]
Mook Sasivimon
ข้อมูลชนิด Array
กฤษดา จันทร์ชาวใต้
..Arrays..
poohwapol
อาร์๶รย์
S-Samd D-Devotion
ข้อมูลชนิด Array
กฤษดา จันทร์ชาวใต้
งาȨำเสนอ1
Mook Prapasson
งานทำ Blog บทที่ 8
รัสนา สิงหปรีชา
Java-Answer Chapter 10-11
Wongyos Keardsri
โครงสร้างแบบอาร์๶รย์
waradakhantee
Ad

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