วันพุธที่ 17 กันยายน พ.ศ. 2557

06:42
บทที่  5
ตัวแปรชุดและสตริง 
            ในบทที่ผ่านมาหลายบทก่อนหน้านี้ได้พูดถึงตัวแปรชนิดต่าง ๆ หลายชนิด  สำหรับเนื้อหาในบทนี้ จะได้เรียนรู้เกี่ยวกับตัวแปรอีกชนิดหนึ่งนั่นคือตัวแปรชุด (arrays)  และเนื้อหาเกี่ยวกับสตริง  (string)  ซึ่งเป็นพื้นฐานที่สำคัญในการจัดเก็บข้อมูลและโครงสร้างของข้อมูลโดยเฉพาะอย่างยิ่งตัวแปรชุดมีประโยชน์หลายประการดังนี้
1) ช่วยลดการตั้งชื่อซ้ำ ๆ กัน  เช่น  ต้องการเก็บค่าตัวเลขจำนวนเต็ม  100  ตัว  ถ้าไม่มีการใช้ตัวแปรชุด  เราจะต้องประกาศตัวแปรถึง  100  ตัว  ดังนี้
int k1, k2, k3, …, k100; /* ประกาศตัวแปร k1, k2, k3, …, k100 จำนวน 100  ตัว  */ แต่ถ้าเราใช้ตัวแปรชุดมาช่วยในการเก็บข้อมูลตัวเลขชุดนี้  เราสามารถเก็บตัวเลข  100 ตัวนี้ไว้ในชื่อเดียวกัน  แต่มีตัวเลข  subscript  คอยกำกับเพื่อบ่งบอกถึงลำดับที่ของข้อมูลในตัวแปรได้
int  k[100];  /* ประกาศตัวแปรชุด  1  ตัว  คือชื่อตัวแปร  k */
2) ช่วยในการจัดเก็บข้อมูลแบบตาราง  (table)  โดยสามารถใช้ตัวแปรชุด  2  มิติ มาเก็บข้อมูลได้
3) ช่วยในการเขียนโปรแกรมมีประสิทธิภาพมากขึ้น  เนื่องจากในโปรแกรมที่มีการใช้ตัวแปรชุดจะมีตัวแปรน้อยลง  ช่วยในการจัดเรียงข้อมูล และค้นหาข้อมูลได้สะดวกและรวดเร็ว
5.1 ตัวแปรชุด  (arrays  variables)
ตัวแปรชุด  คือ  ตัวแปรชนิดหนึ่งที่ใช้ชื่อเพียงชื่อเดียวแต่มีตัวเลขแสดงตำแหน่งกำกับไว้  (subscript)  เพื่อเป็นการบอกว่าเป็นสมาชิกของตัวแปรชุดตัวที่เท่าไหร
            5.1.1 ประเภทของตัวแปรชุด  มีดังนี้
1) ตัวแปรชุด  1  มิติ  (one dimension arrays  หรือ  single dimension arrays)  ตัวแปรชุด  1  มิติ  คือ  ตัวแปรชุดที่มีตัวเลขกำกับ  (subscript)  เพียง  1  ตัว  เช่น  a[20], b[100],  name[30]  และ  salary[20]  เป็นต้น
                        2) ตัวแปรชุดหลายมิติ  (multi-dimension  arrays)  ตัวแปรชุดหลายมิติ คือ ตัวแปรชุดที่มีตัวเลขกำกับ  (subscript)  ตั้งแต่  2  ตัวขึ้นไป  โดยมากจะสนใจศึกษาตัวแปรชุดที่มีตัวเลขกำกับ 2  ตัว  และ  3  ตัว  ดังนี้ 
    • ตัวแปรชุด  2  มิติ  (two  dimension  arrays)  คือ  ตัวแปรชุดที่มีตัวเลขกำกับ  (subscript)  เพียง 2 ตัว เช่น   a[2][4], b[3][4], name[5][30]  เป็นต้น
    • ตัวแปรชุด  3  มิติ  (three  dimension  arrays)  คือ  ตัวแปรชุดที่มีตัวเลขกำกับ  (subscript)  เพียง 3 ตัว เช่น a[2][3][4], b[3][4][5]  เป็นต้น
            5.1.2 การประกาศตัวแปรชุด  (declaration of arrays)  สามารถทำได้ดังนี้
1) การประกาศตัวแปรชุด  1  มิติ  (declaration  of  one dimension arrays) 
    กล่องข้อความ: type   arrayname  [size];
โดยที่   

type     คือ  ชนิดของตัวแปรชุด  เช่น  int, float, char, double  เป็นต้น
arrayname       คือ  ชื่อตัวแปรชุด  ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
size      คือ   ขนาดของตัวแปรชุดเป็นตัวเลขจำนวนเต็ม
                             ตัวอย่างการประกาศตัวแปรชุด  1  มิติ
                             ตัวอย่างที่  5.1  int  s[20];  ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้


การจองเนื้อที่ใช้ช่องละ  2  bytes  20  ช่อง  รวมกันทั้งหมดใช้เนื้อที่  40  bytes

                             ตัวอย่างที่  5.2  char  p[20];  ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้
            การจองเนื้อที่ใช้ช่องละ  1  bytes  20  ช่อง  รวมกันทั้งหมดใช้เนื้อที่  20  bytes
                             ตัวอย่างที่  5.3  float  t[20];  ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้


            การจองเนื้อที่ใช้ช่องละ  4  bytes  20  ช่อง  รวมกันทั้งหมดใช้เนื้อที่  80  bytes

กล่องข้อความ: ข้อควรจำ การจองเนื้อที่ในหน่วยความจำของตัวแปรชุด  จะใช้เนื้อที่เท่าไหร่  ขึ้นอยู่กับชนิดของตัวแปรชุดและสมาชิกของตัวแปรชุด


2) การประกาศตัวแปรชุด  2  มิติ  (declaration  of  two  dimension  arrays) 
   กล่องข้อความ: type   arrayname  [n][m];

โดยที่
 
type  คือ  ชนิดของตัวแปรชุด  เช่น  int, float, char, double  เป็นต้น
arrayname       คือ  ชื่อตัวแปรชุด  ตั้งขึ้นตามหลักการตั้งชื่อตัวแปร
n     คือ ตัวเลขที่ใช้แสดงตำแหน่งแถว (row) มีค่าตั้งแต่  0, 1, 2, …, n-1
   คือ   ตัวเลขที่ใช้แสดงตำแหน่งคอลัมน์ (column) มีค่าตั้งแต่  0, 1,  2, …, m-1

ตัวอย่างการประกาศตัวแปรชุด  2  มิติ
            ตัวอย่างที่  5.4  int  r[3][2];  ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้

            การจองเนื้อที่ของตัวแปรชุด 2 มิติ  จะมีลักษณะเป็นตาราง  (table)  มีจำนวนแถว  n = 0, 1, 2  และมีจำนวนคอลัมน์  m = 0, 1  โดยที่ในตารางจะมีลักษณะเป็นช่อง ๆ  ซึ่งแต่ละช่องก็คือพื้นที่ของสมาชิกแต่ละตัว  โดยใช้เนื้อที่ช่องละ  2  bytes  มีสมาชิกทั้งหมด  6  ตัว  ดังนั้นใช้เนื้อที่ทั้งหมด  12  bytes 
            วิธีการหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด  1  มิติ  และ  2  มิติ
การหาจำนวนสมาชิกทั้งหมดของตัวแปรชุด สามารถคำนวณได้จากสูตรดังนี้
กรณีตัวแปรชุด  1  มิติ
จำนวนสมาชิกทั้งหมดของตัวแปรชุด  =  ขนาดของตัวแปรชุด  (size)
กรณีตัวแปรชุด  2  มิติ
จำนวนสมาชิกทั้งหมดของตัวแปรชุด  =  n*m
            จากตัวอย่าง  int  r[3] [2];  จะได้ว่า  n  = 3,  m  =  2  ดังนั้น  จำนวนสมาชิกของตัวแปรชุด  =  3*2  =  6  แสดงว่าตัวแปรชุดนี้มีสมาชิกดังนี้  r[0][0], r[0][1], r[n-1][m-1]   รวมทั้งหมด  6  สมาชิก
            ตัวอย่างที่  5.5  float  X[5] [4];  ภายในหน่วยความจำจะมีการจองเนื้อที่ไว้ดังนี้


การจองเนื้อที่จะมีลักษณะเป็นตาราง (table) มีจำนวนแถว  n =  0,  1,  2,  3,  4  และมีจำนวนคอลัมน์  m =  0,  1,  2,  3  โดยที่ในตารางใช้เนื้อที่ช่องละ  4  bytes  มีจำนวนทั้งหมด  20  ตัว  ดังนั้นใช้เนื้อทั้งหมด  80  bytes
 
                       3) การประกาศตัวแปรชุด  3  มิติ  (declaration  of  three  dimension  arrays)
  type  arrayname  [n] [m] [p];
  
โดยที่ 

type  คือ  ชนิดของตัวแปรชุด  เช่น  int, float, char, double  เป็นต้น
arrayname  คือ  ชื่อตัวแปรชุดตั้งขึ้นตามหลักการตั้งชื่อตัวแปร          
 คือ  ตัวเลขกำกับตัวที่  1  มีค่าตั้งแต่  0, 1, 2, …., n-1
m  คือ  ตัวเลขกำกับตัวที่  2  มีค่าตั้งแต่  0, 1, 2, …., m-1                                        คือ  ตัวเลขกำกับตัวที่  3  มีค่าตั้งแต่  0, 1, 2, …., p-1

             วิธีการหาจำนวนสมาชิกทั้งหมดในตัวแปรชุด  3  มิติ  หาได้จากสูตรดังนี้
จำนวนสมาชิกทั้งหมดของตัวแปรชุด  =  n*m*p
  
           

ตัวอย่างการประกาศตัวแปรชุด  3  มิติ  float  a[2][2][3];  ดังนั้น  n = 2 , m = 2, p = 3  จะได้ว่าจำนวนสมาชิกทั้งหมดของตัวแปรชุด  =  2*2*3  =  12  ตัว

ดังนั้นเราสามารถเขียนสมาชิกทั้งหมดของตัวแปรชุดนี้ได้ดังตาราง

Column  0
Column 1
ตัวที่ 1
ตัวที่ 2
ตัวที่ 3
ตัวที่ 1
ตัวที่ 2
ตัวที่ 3
Row 0
a[0][0][0]
a[0][0][1]
a[0][0][2]
a[0][1][0]
a[0][1][1]
a[0][1][2]
Row 1
a[1][0][0]
a[1][0][1]
a[1][0][2]
a[1][1][0]
a[1][1][1]
a[1][1][2]

                        โดยที่สมาชิกแต่ละตัวใช้เนื้อที่ตัวละ  4  bytes  จำนวนสมาชิกทั้งหมดมี  12  ตัว  ดังนั้นใช้เนื้อที่ทั้งหมดคือ  4*12 =  48  bytes
            5.1.3 การกำหนดค่าเริ่มต้นให้กับตัวแปรชุด  (initializing  arrays)
                        1) การกำหนดค่าตัวเลขให้กับตัวแปรชุด
รูปแบบที่ 1 (กรณีตัวแปรชุด  1  มิติ)
type  arrayname[size]  =  { value list };
  

รูปแบบที่ 2 (กรณีตัวแปรชุด  2  มิติ)
type  arrayname[n][m]  =  { value list };

โดยที่ 

value  list  คือ  ค่าคงที่ชนิดตัวเลขที่ต้องการกำหนดให้ตัวแปรชุด  ถ้ามีหลายค่าให้ใช้เครื่องหมาย  ,  (comma)  คั่นระหว่างค่าคงที่แต่ละค่า
โดยค่าคงที่ทั้งหมดจะต้องอยู่ภายใต้เครื่องหมาย  {   }
ตัวอย่าง 5.6  int  a[10] = {10, 20, 30, 40,50, 60, 70, 80, 90, 100};
ภายในหน่วยความจำจะเก็บตัวแปรชุดดังนี้

ตัวอย่างที่ 5.7  float  p[5][3] = {

3.0, 4.5, 5.5,
4.6, 5.5, 6.5,
5.0, 6.2, 7.0,
6.3, 6.8, 7.4,
7.5, 8.0, 9.0
};

ภายในหน่วยความจำจะเก็บตัวแปรชุดเป็นลักษณะตาราง  (table)  ดังนี้
            โดยที่สมาชิกแต่ละตัวใช้เนื้อที่  4  bytes  ดังนั้นใช้เนื้อที่ทั้งหมด  =  4*15  =  60 bytes

  2) การกำหนดค่าคงที่ชนิดสตริงให้กับตัวแปรสตริง                
            รูปแบบที่ 1 (กรณีตัวแปรชุด 1 มิติ)
char arrayname[size] = “string  constant”;
  
               
              รูปแบบที่ 2 (กรณีตัวแปรชุด 2 มิติ)
char arrayname[n][m] = {“string  constant”};
                                                                                                                                                                                    โดยที่  
            string  constants  คือ  ค่าคงที่ชนิดสตริงที่ต้องการกำหนดให้ตัวแปรชุด  ถ้ามีหลายค่าจะต้องใช้เครื่องหมาย  ,  (comma)  คั่นระหว่างค่าคงที่แต่ละค่า
            ตัวอย่างที่ 5.8  char  s[12]  = “ASIAN  GAME” ;
            ภายในหน่วยความจำจะเก็บข้อมูลตัวแปรชุดมีลักษณะดังนี้

null character    

ตัวอย่างที่ 5.9  char  province[3][13] = {
“NAKHONPANOM” ,
“SAKON  NAKHON” ,
“MOOKDAHAN”  } ;
ภายในหน่วยความจำจะเก็บข้อมูลมีลักษณะดังนี้
ทั้งหมดใช้เนื้อที่  3 x 13 = 39  bytes
 การอ้างถึงสมาชิกในตัวแปรชุด  2  มิติ
          
 เช่น 

province [0]  คือ  สมาชิกแถวที่  1  ทั้งแถว  นั่นคือข้อมูล  NAKHONPANOM
province [1]  คือ  สมาชิกแถวที่  2  ทั้งแถว  นั่นคือข้อมูล  SAKON  NAKHON         province [2]  คือ  สมาชิกแถวที่  3  ทั้งแถว  นั่นคือข้อมูล  MOOKDAHAN
province [0][0]  คือ  สมาชิกของ  province [0]  ตัวที่  1  คือตัวอักษร  N
province [1][2]  คือ  สมาชิกของ  province [1]  ตัวที่  3  คือตัวอักษร  K
            5.1.4 การนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของข้อมูลในตัวแปรชุด
                        โดยปกติเราจะใช้คำสั่ง  for  หรือ  while  หรือ  do  while  คำสั่งใดคำสั่งหนึ่งมาช่วยในการนำข้อมูลเข้าเก็บและแสดงผลลัพธ์ข้อมูลในตัวแปรชุด  ส่วนมากนิยมใช้คำสั่ง  for  มากกว่าคำสั่งอื่นทั้งนี้เนื่องจากตัวแปรชุดนั้นเราสามารถทราบขนาดที่แน่นอนได้  ทำให้กำหนดจำนวนรอบการทำงานได้
            เพื่อความเข้าใจเกี่ยวกับการนำข้อมูลเข้าไปเก็บและการแสดงผลลัพธ์ของตัวแปรชุดมากยิ่งขึ้น  ให้ศึกษาโปรแกรมตัวอย่างที่  5.1, 5.2, 5.3 และ  5.4  ดังต่อไปนี้

โปรแกรมตัวอย่างที่  5.1  แสดงการใช้ตัวแปรชุด  1  มิติ  ชื่อ  scores  เก็บคะแนนนักเรียน 

/*   array1.C   */
#include<stdio.h>                                                                      /*  บรรทัดที่  1  */
#include<conio.h>                                                                     /*  บรรทัดที่  2  */
/* Record student's scores. */                                                    /*  บรรทัดที่  3  */
main()                                                                                         /*  บรรทัดที่  4  */
{                                                                                                   /*  บรรทัดที่  5  */
int index, scores[5];                                                                     /*  บรรทัดที่  6  */
 scores[0] = 59;                                                                           /*  บรรทัดที่  7  */
scores[1] = 67;                                                                             /*  บรรทัดที่  8  */
scores[2] = 85;                                                                              /*  บรรทัดที่  9  */
scores[3] = 92;                                                                              /*  บรรทัดที่  10  */
scores[4] = 74;                                                                              /*  บรรทัดที่  11  */
clrscr();                                                                                          /*  บรรทัดที่  12  */
for (index = 0; index < 5; index++)                                                  /*  บรรทัดที่  13  */
printf("Student's score: %d\n", scores[index]);  /*  end for  */          /*  บรรทัดที่  14  */
getch();                                                                                          /*  บรรทัดที่  15  */
return(0);                                                                                        /*  บรรทัดที่  16  */
}                                                                                                     /*  บรรทัดที่  17  */
ผลลัพธ์ที่ได้จากโปรแกรม

แผนผังลำดับงาน: จอภาพ: Student's score: 59  Student's score: 67  Student's score: 85  Student's score: 92  Student's score: 74
คำอธิบายโปรแกรม 
จากโปรแกรมตัวอย่างที่  5.1  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ  ได้ดังนี้

บรรทัดที่  6  ประกาศตัวแปร  index  เป็นชนิดจำนวนเต็ม  และ  scores  เป็นตัวแปรชุด  1  มิติ  ชนิดจำนวนเต็มมีสมาชิก  5  ตัว
บรรทัดที่  7  ถึง  11  กำหนค่าจำนวนเต็มให้กับตัวแปรชุด  scores[0]  ถึง  scores[4]
บรรทัดที่  13  คำสั่ง  for  ทำหน้าที่วนรอบทำงานซ้ำ  5  ครั้ง  เพื่อช่วยพิมพ์คะแนนนักเรียนที่เก็บไว้ในตัวแปรชุด  scores[0]  ถึง  scores[4]
บรรทัดที่  14  และ  15  ฟังก์ชัน  printf( )  เพื่อแสดงคะแนนของนักเรียนแต่ละคนออกที่จอภาพซึ่งเก็บไว้ในตัวแปรชุด  scores[0]  ถึง  scores[4]  หลังจากนั้นจะหยุดรอรับค่าใด ๆ  จากคีย์บอร์ด  ซึ่งถ้ากด  enter  ก็จะกลับสู่โปรแกรม
บรรทัดที่  16  ส่งค่า  0  (ศูนย์)  กลับให้กับฟังก์ชัน  main( )
ข้อสังเกต  ฟังก์ชัน  main( )  ของโปรแกรมตัวอย่างที่  5.1  เป็นฟังก์ชันที่ต้องการให้ส่งค่ากลับ  ในการเขียนโปรแกรมจะต้องมีการใช้ฟังก์ชัน  return( )  ซึ่งถ้าไม่ใช้เวลาที่เรา  compile  โปรแกรม  จะมีคำเตือนให้เราทราบทุกครั้ง  แต่โปรแกรมก็สามารถ  run  ได้ 
โปรแกรมตัวอย่างที่  5.2  แสดงการใช้ตัวแปรชุด  1  มิติ  สำหรับเก็บข้อมูลและนำข้อมูลในตัวแปรชุดมาคำนวณค่า  พร้อมทั้งแสดงผลลัพธ์ที่ได้ออกจอภาพ

/*             array2.c    */
#include<stdio.h>                                                                              /*  บรรทัดที่  1  */
#include<conio.h>                                                                             /*  บรรทัดที่  2  */
#include<stdlib.h>                                                                             /*  บรรทัดที่  3  */
void main(void)                                                                                    /*  บรรทัดที่  4  */
{               float num[100] ;         /*  บรรทัดที่  5  */
float sum= 0 , average ;                                                     /*  บรรทัดที่  6  */
int  i, n ;  char numstr[20];                                                  /*  บรรทัดที่  7  */
clrscr();                                                                                  /*  บรรทัดที่  8  */
      printf("Enter Total of number(n<100) : ");                        /*  บรรทัดที่  9  */
n = atoi(gets(numstr));                                                       /*  บรรทัดที่  10  */
                /* ===== Input Data ===== */                                         /*  บรรทัดที่  11*/
for( i=0; i<n; i++)  {                                                              /*  บรรทัดที่  12  */
      printf("\nEnter NUMBER #%d : ",i+1);                           /*  บรรทัดที่  13  */
      num[i] = atof(gets(numstr));                                           /*  บรรทัดที่  14  */
      sum=sum+num[i];                                                           /*  บรรทัดที่  15  */
      printf("\n");                                                                           /*  บรรทัดที่  16  */
} /* end for */                                                                         /*  บรรทัดที่  17  */
                /* ===== Calulate MEAN ===== */                 /*  บรรทัดที่  18  */
average = sum/n ;                                                               /*  บรรทัดที่  19  */
printf("N =%d\t Sum =%10.2f\n",n,sum);                        /*  บรรทัดที่  20  */
printf("Average = %10.2f\n",average);                             /*  บรรทัดที่  21  */
getch();                                                                                  /*  บรรทัดที่  22  */
} /* end main */                                                                                 /*  บรรทัดที่  23  */
ผลลัพธ์ที่ได้จากโปรแกรม

แผนผังลำดับงาน: จอภาพ: Enter Total of number(n<100) : 5  Enter NUMBER # 1 : 4  Enter NUMBER # 2 : 5  Enter NUMBER # 3 : 8  Enter NUMBER # 4 : 90  Enter NUMBER # 5 : 75  N = 5  Sum = 182  Average            =      36.40

คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่  5.2  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ  ได้ดังน
ี้
บรรทัดที่  3  คำสั่ง  #include <stdlib.h>  ให้การสนับสนุนฟังก์ชัน  atoi( )  และฟังก์ชัน  atof( )  สำหรับโปรแกรมนี้  ในบรรทัดที่  10   และ  14  ตามลำดับ
บรรทัดที่  5  ประกาศตัวแปร  num  เป็นตัวแปรชุด  1  มิติ  ชนิด  float มีสมาชิก 100 ตัว
บรรทัดที่  7  ประกาศตัวแปร  numstr  เป็นตัวแปรชุด  1  ติ ชนิด char มีสมาชิก 20 ตัว
บรรทัดที่  10  ฟังก์ชัน  atoi( )  ใช้เปลี่ยน  string  เป็นตัวเลขจำนวนเต็ม  จากฟังก์ชัน  gets( )  รับตัวอักขระมาเก็บไว้ในตัวแปร  numstr  แล้วเปลี่ยนค่า  string  ของตัวแปร  numstr  ไปเก็บไว้ในตัวแปร  n  โดยใช้ฟังก์ชัน  atoi( )
บรรทัดที่  12  คำสั่ง  for  ช่วยในการเก็บข้อมูลไว้ในตัวแปรชุด  num  ซึ่งมีจำนวนรอบของการทำงานเท่ากับจำนวนสมาชิกของตัวแปรชุด  คือ  n  รอบ
บรรทัดที่  14  ฟังก์ชัน  atof( )  ใช้เปลี่ยน  string  เป็นตัวเลขทศนิยม  ซึ่งมีการทำงานคล้ายกับฟังก์ชัน  atoi( )  ในบรรทัดที่  10
บรรทัดที่  15  คำสั่ง  sum = sum + num[i];  เป็นการบวกสะสมค่าตัวแปรชุด
บรรทัดที่  18  ถึง  21  คำสั่ง  average = sum/n;  เป็นการคำนวณค่าเฉลี่ยของตัวแปรชุด  แล้วแสดงผลค่าตัวแปร  n  ตัวแปร  sum  และตัวแปร  average  ออกจอภาพ
บรรทัดที่  22  หยุดรอรับค่าใด ๆ  จากคีย์บอร์ด  ซึ่งถ้าเรากด  enter  ก็จะกลับสู่โปรแกรม 

โปรแกรมตัวอย่างที่  5.3  แสดงการใช้ตัวแปรชุด  2  มิติ  สำหรับเก็บคะแนนและคำนวณค่าเฉลี่ยของคะแนนในแต่ละชุดแสดงผลออกจอภาพ

/*   array3.C    */
                #include<stdio.h>                                                      /*  บรรทัดที่  1  */
#include<conio.h>                                                                     /*  บรรทัดที่  2  */
                /* Record student's score */
        main()                                                                                 /*  บรรทัดที่  3  */
{                                                                                                 /*  บรรทัดที่  4  */
int i, j, sum, scores[3][5] = {                                                         /*  บรรทัดที่  5  */
      { 84 , 71 , 96 , 65 , 79 },                                                            /*  บรรทัดที่  6  */
      { 90 , 55 , 83 , 68 , 96 },                                                            /*  บรรทัดที่  7  */
      { 61 , 77 , 82 , 94 , 59 }                                                             /*  บรรทัดที่  8  */
};                                                                                                  /*  บรรทัดที่  9  */
clrscr();                                                                    /*  บรรทัดที่  10  */
for (i = 0; i < 3; i++){  /* loop over tests. */                                   /*  บรรทัดที่  11  */
      for (j = 0, sum = 0; j < 5; j++)                                                  /*  บรรทัดที่  12  */
            sum = sum + scores[i][j];                              /*  บรรทัดที่  13  */
      printf("Average for test %d is %f.\n", i, (float) sum / 5);     /*  บรรทัดที่  14  */
} /*  end  for  */                                                                            /*  บรรทัดที่  15  */
getch();                                                                    /*  บรรทัดที่  16  */
return(0);                                                                                     /*  บรรทัดที่  17  */
}                                                                                                  /*  บรรทัดที่  18  */

               
  

ผลลัพธ์ที่ได้จากโปรแกรม

แผนผังลำดับงาน: จอภาพ: Average for test 0 is  79.000000 .  Average for test 1 is  78.400000 .  Average for test 2 is  74.600000 .    

คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่  5.3  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ  ได้ดังนี้

บรรทัดที่  5  ถึง  9  ประกาศตัวแปรชุด  2  มิติ  ชนิดจำนวนเต็มของตัวแปรชื่อ  scores  มีจำนวนสมาชิกทั้งหมด  15  ตัว
บรรทัดที่  11  คำสั่ง  for  เพื่อตรวจสอบว่า  loop  เกินจำนวนรอบ  คือ  แถวของตัวแปรชุดหรือไม่
บรรทัดที่  12  คำสั่ง  for  เพื่อนำคะแนนที่เก็บในตัวแปรชุดทั้ง  15  ตัวมารวมกัน  ในคำสั่งบรรทัดที่  13
บรรทัดที่  14  พิมพ์คะแนนเฉลี่ยของนักเรียนทั้ง  5  คน  ในการสอบแต่ละครั้ง  โดยที่  (float) sum/5  เป็นการทำให้ตัวแปร  sum  เป็นจำนวนทศนิยมชั่วคราว  เพราะปกติเราประกาศตัวแปร  sum  เป็นชนิดจำนวนเต็ม
บรรทัดที่  15  หยุดรอรับค่าใด ๆ  จากคีย์บอร์ด  ซึ่งถ้าเรากด  enter  ก็จะกลับสู่โปรแกรม

โปรแกรมตัวอย่างที่  5.4  แสดงการใช้ตัวแปรชุด  2  มิติ  สำหรับเก็บชื่อจังหวัด  แล้วนำข้อมูลมาแสดงออกที่จอภาพ

/*             array4.c */
#include<stdio.h>                                                                              /*  บรรทัดที่  1  */
#include<conio.h>                                                                             /*  บรรทัดที่  2  */
#include<stdlib.h>                                                                             /*  บรรทัดที่  3  */
void main(void)                                                                                    /*  บรรทัดที่  4  */
{                                                                                                        /*  บรรทัดที่  5  */
char  province[100][40];                                                                /*  บรรทัดที่  6  */
int  i, n;  char  numstr[20];                                                              /*  บรรทัดที่  7  */
    clrscr( );                                                                                             /*  บรรทัดที่  8  */
printf("Enter Total of Province (n<100) : " );                                /*  บรรทัดที่  9  */
n = atoi(gets(numstr));                                                                   /*  บรรทัดที่  10  */
for( i=0; i<n; i++)  {                                                                          /*  บรรทัดที่  11  */
      printf("\nEnter your Province : ");                                       /*  บรรทัดที่  12  */
      gets( province[i] ) ;                                                              /*  บรรทัดที่  13  */
}                                                                                               /*  บรรทัดที่  14  */
for( i=0; i<n; i++)                                                                             /*  บรรทัดที่ 15  */
      printf("\nYour Province is  %s", province[i]);                   /*  บรรทัดที่  16  */
getch();                                                                                              /*  บรรทัดที่  17  */
} /* end main */                                                                       /*  บรรทัดที่  18  */
ผลลัพธ์ที่ได้จากโปรแกรม

แผนผังลำดับงาน: จอภาพ: Enter Total of Province (n<100) : 3  Enter your Province : Nakhonphanom  Enter your Province : Sakon nakhon  Enter your Province : Mookdahan  Your Province is Nakhonphanom  Your Province is Sakon nakhon  Your Province is Mookdahan    

คำอธิบายโปรแกรม
จากโปรแกรมตัวอย่างที่  5.4  สามารถอธิบายการทำงานของโปรแกรมที่สำคัญ ๆ  ได้ดังนี้

บรรทัดที่  3  คำสั่ง  #include <stdlib.h>  ให้การสนับสนุนฟังก์ชัน  atoi( )  เพื่อเปลี่ยนข้อมูลสตริงเป็นชนิดจำนวนเต็ม  ซึ่งเรียกใช้ฟังก์ชันนี้  ในบรรทัดที่  10
บรรทัดที่  11  คำสั่ง  for  เพื่อนำค่าสตริงที่รับเข้ามาไปเก็บไว้ในตัวแปรชุด  province[i]  ในคำสั่งบรรทัดที่  13
บรรทัดที่  15  คำสั่ง  for  เพื่อนำค่าสตริงที่เก็บไว้ในตัวแปร  province[i]  ออกแสดงที่จอภาพ  ตามคำสั่ง  บรรทัดที่  16
บรรทัดที่  17  หยุดรอรับค่าใด ๆ  จากคีย์บอร์ด  ซึ่งถ้าเรากด  enter  ก็จะกลับสู่โปรแกรม

0 ความคิดเห็น:

แสดงความคิดเห็น