บทที่ 4 อาร์เรย์ (Array)

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
หลักการโปรแกรม 1 Lecture 12: อาร์เรย์หนึ่งมิติ
Advertisements

Array ธนวัฒน์ แซ่ เอียบ. The concept of array อาเรย์ : กลุ่มของข้อมูลที่มีชนิดเดียวกันและถูก จัดเก็บเรียงลำดับต่อเนื่องกัน ตัวแปร x สามารถจัดเก็บค่ามากกว่า.
การเขียนคำสั่งควบคุม การทำงานขั้นพื้นฐาน
การใช้งานโปรแกรม SPSS
Operator of String Data Type
LAB ตัวแปร : Variables ในการเขียนโปรแกรมเราต้องการให้โปรแกรม จดจำค่าต่างๆ ไว้ เช่นเมื่อรับค่าข้อมูลจาก ผู้ใช้ หรือค่าที่ได้จากการคำนวณใดๆ ค่า.
Chapter 10 Arrays Dept of Computer Engineering Khon Kaen University.
บทที่ 4 คำสั่งควบคุม โปรแกรม. คำสั่งควบคุมโปรแกรมออกได้เป็น 2 ประเภท คือ คำสั่งแบบกำหนดเงื่อนไข (Conditional Statement) คำสั่งแบบทำงานซ้ำ (Repetitive.
ชนิดของข้อมูล และการคำนวณทางคณิตศาสตร์
หน่วยการเรียนรู้ที่ 2 หลักการแก้ปัญหาด้วยคอมพิวเตอร์
กาญจนา ทองบุญนาค สาขาวิชาคอมพิวเตอร์ คณะวิทยาศาสตร์และเทคโนโลยี
หน่วยที่ 5 การเวียนเกิด
หน่วยที่ 6 แถวลำดับ (Array)
ตัวแปร และชนิด ข้อมูล. ตัวแปร การกำหนดตัวแปรเป็นการใช้ ชื่อตัวแปรแทน ตำแหน่งบนหน่วยความจำ สำหรับเก็บ ข้อมูลระหว่างการ ประมวลผล ซึ่งอาจเป็นข้อมูลนำเข้า.
MEE 231 Computer Programming สัปดาห์ที่ 6 ภาษา C หลักการของโปรแกรม ชนิดของตัวแปร การดำเนินการ คำสั่งการรับค่าตัวแปร และการแสดงผล.
ARRAY & PRINTF สาขางานคอมพิวเตอร์ธุรกิจอาจารย์จิรา ภรณ์ เขตกุฎี
Intro Excel 2010 ข้อมูลจาก... ellession1.htm.
การเลือกข้อมูลจาก List การกำหนดเงื่อนไขการป้อนข้อมูลด้วย Data Validation การใส่ Comment / แสดง / แก้ไข / ลบ.
LOGO ภาษาซี 1.1 อ. กฤติเดช จินดาภัทร์. LOGO ตัวอย่างโค้ดภาษาซี
ตอนที่ 2 โครงสร้างภาษา C Arduino เบื้องต้น
คำสั่งควบคุมการทำงาน
เกม คณิตคิดเร็ว.
โครงสร้างโปรแกรมภาษา C
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
รายการ(List) [1] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
บทที่ 5 อินพุตและเอาต์พุต
โปรแกรมย่อย อาจารย์สมเกียรติ ช่อเหมือน
แนวข้อสอบ Final (จดด่วน)
ครูวีรธรรม เทศประสิทธิ์ แผนกวิชาคอมพิวเตอร์ธุรกิจ
การประยุกต์ Logic Gates ภาค 2
Principles of Problem Solving and Basic Programming หลักการแก้ปัญหาและการเขียนโปรแกรมเบื้องต้น2(1-2-3) สัปดาห์ที่ 4 เครื่องหมาย ตรรกะศาสตร์ และการดำเนินการทางตรรกะศาสตร์
บทที่ 1 สถาปัตยกรรมของระบบฐานข้อมูล (Database Architecture)
สมการเชิงเส้น (Linear equation)
บทที่ 10 อาร์เรย์ (Array)
แล้วทำการเรียงลำดับข้อมูลใหม่โดยเรียงจากน้อยไปหามาก
รายการ(List) [3] ผู้สอน อาจารย์ ยืนยง กันทะเนตร
STACK สแตก(stack) เป็นโครงสร้างข้อมูลแบบเชิงเส้น ที่มีการใส่ข้อมูลเข้า และนำข้อมูลออกเพียงด้านเดียว ดังนั้น ข้อมูลที่เข้าไปอยู่ใน stack ก่อนจะออกจาก stack.
ตัวแปรและชนิดของข้อมูล
BC320 Introduction to Computer Programming
START INPUT R = 1 R = R Yes R*R <=2 No R = R PROCESS
โครงสร้างภาษา C Arduino
หน่วยการเรียนที่ 4 เรื่อง การควบคุมทิศทางการทำงาน
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
บทที่ 13 การจัดการไฟล์ (File Management)
Control Statement เงื่อนไขคำสั่งในโปรแกรม ภาษา C
ตัวแปรกับชนิดของข้อมูล
ขั้นตอนการออกแบบ ผังงาน (Flow Chart)
การเขียนโปรแกรมแบบวนซ้ำ: คำสั่ง while คำสั่ง do….while
Data storage II Introduction to Computer Science ( )
บริษัท พัฒนาวิชาการ (2535) จำกัด
บทที่ 9 การทำซ้ำ (Loop).
การเขียนภาษาจาวาเบื้องต้น
Week 5 C Programming.
การสร้างแบบสอบถาม และ การกำหนดเงื่อนไข.
Data storage II Introduction to Computer Science ( )
หน่วยที่ 6 อะเรย์ของอักขระ
บทที่ 7 การประมวลผลอาร์เรย์
บทที่ 8 การแก้ไขข้อผิดพลาดโปรแกรม(Debugging)
OPERATOR ภาษาปาสคาล (Pascal)
2 โครงสร้างข้อมูลแบบสแตก (STACK).
บทที่ 2 โครงสร้างข้อมูลแบบแถวลำดับหรืออาร์เรย์ (Array)
Chapter 3 : Array.
Array Sanchai Yeewiyom
Array: One Dimension Programming I 9.
ฟังก์ชันของโปรแกรม Computer Game Programming
การเขียนโปรแกรมด้วยภาษาไพทอน การเขียนโปรแกรมแบบทางเลือก
Decision: Single and Double Selection (if and if-else statement)
พอยเตอร์ #include <stdio.h> void main() { int age; int *pointer;
กระดาษทำการ (หลักการและภาคปฏิบัติ)
Computer Game Programming
ใบสำเนางานนำเสนอ:

บทที่ 4 อาร์เรย์ (Array)

วัตถุประสงค์ สามารถใช้งานตัวแปรประเภทอาร์เรย์ 1 มิติ และ 2 มิติได้ เรียนรู้วิธีการเก็บข้อมูลสตริง และฟังก์ชันเกี่ยวกับสตริง

เนื้อหาในบทเรียน นิยามของอาร์เรย์ ตัวแปรอาร์เรย์ แบบ 1 มิติ การเข้าถึงค่าในอาร์เรย์ การให้ค่าเริ่มต้นกับอาร์เรย์ การรับและแสดงค่าอาร์เรย์ สายตัวอักษร (String) ตัวแปรอาร์เรย์แบบหลายมิติ

1. นิยามของอาร์เรย์ ตัวแปรชุด หรือ อาร์เรย์ (Array) คือกลุ่มข้อมูลที่ประกอบไปด้วยข้อมูลชนิดเดียวกัน เรียงต่อเนื่องกันไปเป็นกลุ่ม โดยจัดอยู่ในบล็อกของหน่วยความจำเดียวกัน และใช้ชื่อตัวแปรร่วมกันในการอ้างอิงถึง ข้อมูลแต่ละบล็อกของหน่วยความจำ เรียกว่า อีลีเมนต์ (Element) อย่างเช่น ประกาศตัวแปรชนิดจำนวนเต็ม ชื่อว่า v มีขนาดเท่ากับ 5 int v[5]; v[0] v[1] v[2] v[3] v[4] 3000 3004 3008 3012 3016

2. อาร์เรย์แบบ 1 มิติ อาร์เรย์หนึ่งมิติ มีโครงสร้างเทียบเท่าเมตริกซ์ขนาด nx1 การประกาศตัวแปรอาร์เรย์ จะใช้เครื่องหมาย [ ] ล้อมค่าตัวเลขจำนวนเต็ม เพื่อบอกจำนวนหน่วยข้อมูลที่ต้องการได้ในรูป ชนิดของตัวแปร ชื่อตัวแปร [จำนวนสมาชิกที่ต้องการ] ; เช่น int a[5]; double x, y[10], z[3];

ขนาดของตัวแปรอาร์เรย์ (ในหน่วยไบต์) เราสามารถหาขนาดของอาร์เรย์ที่ถูกจัดเก็บที่หน่วยความจำ (memory) ในหน่วยไบต์ได้โดยใช้ sizeof ตัวอย่างเช่น int numbers[10]; printf (“%d”, sizeof (numbers)); ขนาดของตัวแปรชนิดอาร์เรย์ชื่อ numbers คือ 10 * 4 = 40 ไบต์ ขนาดของอาร์เรย์ ขนาดของอาร์เรย์ ขนาดของตัวแปรแบบ int

ตัวอย่าง: การดูขนาดอาร์เรย์ 1 มิติในหน่วยไบต์ #include <stdio.h> void main() { int ages[10]; char name[50]; double scores[20]; printf("Size of ages = %d\n", sizeof(ages)); printf("Size of name = %d\n", sizeof(name)); printf("Size of scores = %d\n", sizeof(scores)); } Size of ages = 40 Size of name = 50 Size of scores = 160

3. การเข้าถึงตัวแปรอาร์เรย์ เมื่อมีการประกาศอาร์เรย์แล้ว ค่าตำแหน่งหมายเลขลำดับข้อมูลสำหรับใช้เข้าถึงตัวแปรย่อยต่างๆ ในอาร์เรย์ จะถูกกำหนดโดยอัตโนมัติ โดยหากกำหนดอาร์เรย์ด้วยขนาด n ข้อมูล หน่วยแรก จะมีค่าตำแหน่งลำดับเป็น 0 ไปจนถึงข้อมูลหน่วยสุดท้ายจะมีค่าตำแหน่งลำดับเป็น n-1 ถ้าต้องการอ่านหรือเขียนข้อมูลในหน่วยต่างๆ ของตัวแปรอาร์เรย์ จะต้องอ้างชื่อตัวแปรตามด้วยค่าลำดับของหน่วยในกลุ่มข้อมูลอาร์เรย์ ล้อมด้วยเครื่องหมาย [ ] ซึ่งเรียกว่า subscript ค่าหน่วยตัวเลขนี้ อาจป้อนในรูปของตัวแปร นิพจน์ หรือฟังก์ชันที่ให้ค่าเป็นค่าจำนวนเต็มก็ได้

การเข้าถึงตัวแปรอาร์เรย์ ลักษณะของอาร์เรย์ 1 มิติ เกิดจากความต้องการนำข้อมูลที่เป็นข้อมูลชนิดเดียวกัน แล้วเก็บไว้ที่เดียวกัน โดยการเรียงข้อมูลนั้นต่อเนื่องกัน อย่างเช่น ประกาศตัวแปรชนิดจำนวนเต็ม เป็นการประกาศตัวแปรชื่อว่า X ที่เป็นชนิดจำนวนเต็ม และมีขนาดเท่ากับ 5 โดยที่ เลข 5 เป็นตัวเลข index เพื่อระบุขนาดของข้อมูลที่ต้องการ โดยสามารถเก็บข้อมูลได้ทั้งหมด 5 ตัวแปร และเริ่มจาก x[0] จนกระทั่งถึง x[4] int x[5]; X[0] X[1] X[2] X[3] X[4]

การเข้าถึงตัวแปรอาร์เรย์ 2) ประกาศตัวแปรชนิดทศนิยม เป็นการประกาศตัวแปรชื่อว่า y เก็บข้อมูลชนิดทศนิยม และมีขนาดเท่ากับ 6 โดยสามารถเก็บข้อมูลได้ทั้งหมด 6 ตัวแปร และเริ่มจาก y[0] จนกระทั่งถึง y[5] ตัวอย่างข้อมูล เช่น ให้ตัวแปร y[0]=5.50; y[1]=4.0; y[2]=3.0; y[3]=2.0; y[4]=5; y[5]=6.05; จากค่าตัวเลขข้างต้น เป็นเพียงค่าสมมุติ และตัวแปรแต่ละตัวก็เก็บค่าที่เป็นค่าทศนิยม และสามารถเปลี่ยนแปลงค่าได้ตามความต้องการ หรือค่าที่เหมาะสม float y[6]; y[0] y[1] y[2] y[3] y[4] y[5]

การเข้าถึงตัวแปรอาร์เรย์ 3) ประกาศตัวแปรชนิดตัวอักษร เป็นการประกาศตัวแปรชื่อว่า z เก็บข้อมูลแบบตัวอักษร โดยสามารถเก็บข้อมูลได้ทั้งหมด 3 ตัวแปร และเริ่มจาก z[0] จนกระทั่งถึง z[3] ตัวแปรแต่ละตัว จะเก็บข้อมูลเป็นตัวอักษรเพียง 1 ตัว อย่างเช่น z[0]= ‘A’; z[1]=‘b’; z[2]=‘c’; - หรือ z[2]=z[0]; เพราะฉะนั้น z[2]= ‘A’ ; char z[3]; Z[0] Z[1] Z[2]

ตัวอย่างการเข้าถึงตัวแปรอาร์เรย์ เช่น จากโจทย์ที่กำหนด ข้อมูลทำงานตามลำดับหมายเลขจากข้อที่1 ถึง 4 1. ประกาศตัวแปรชนิดจำนวนเต็มชื่อว่า A มีขนาดเท่ากับ 3 int A[3]; 2. ให้ตัวแปร A[0] มีค่าเท่ากับ 50 A[0]=50; 3. ตัวแปร A[1] มีค่าเท่ากับ A[0] บวกกับค่า 100 A[1]= A[0]+100; A[1]=150; 4. ตัวแปร A[2] มีค่าเท่ากับ A[0] บวกกับตัวแปร A[1]; A[2]= A[0]+A[1]; A[2]=200; #include<stdio.h> void main () { int A[3]; A[0]=50; A[1]=A[0]+100; A[2]=A[0]+A[1]; }

4. การให้ค่าเริ่มต้น (Array Initialization) ในการกำหนดค่าเริ่มต้นให้กับตัวแปรอาร์เรย์นั้น สามารถกำหนดไปพร้อมกับการกำหนดตัวแปรได้เช่นเดียวกันกับตัวแปรเดี่ยว แต่จะใช้กลุ่มของค่าคงที่ในการกำหนดค่าเริ่มต้น ชนิดของตัวแปรอาร์เรย์ ชื่ออาร์เรย์[จำนวนข้อมูล] = {ค่าคงที่,ค่าคงที่,…};

ตัวอย่างการให้ค่าเริ่มต้น (Array Initialization) int a[5] = {12,7,0,5,-10} char codes[6] = {‘s’, ‘a’, ‘m’, ‘p’, ‘l’, ‘e’}; double width[7] = {10.96, 6.43, 2.58, 0.86, 5.89, 7.56, 8.22}; float temp[4] = {98.6, 97.2, 99.0 , 101.5}; int gallons[20] = { 19, 16, 14, 19, 20, 18, 12, 10, 22, 15, 18, 17, 16, 24, 23, 19, 15, 18, 21, 5 };

การให้ค่าเริ่มต้น (Array Initialization) ค่าคงที่ที่ใช้ในการกำหนดค่าเริ่มต้น จะต้องมีชนิดสอดคล้องกับชนิดอาร์เรย์ ค่าคงที่แต่ละค่าจะถูกนำไปกำหนดให้กับสมาชิกแต่ละตัวตามลำดับ หากเราใช้ค่าคงที่จำนวนน้อยกว่าสมาชิกของอาร์เรย์ ตำแหน่งที่เหลือจะถูกกำหนดให้เป็น 0 เช่น int a[5] = {12 , 7 }; มีค่าเท่ากับ int a[5] = {12 , 7 , 0 , 0 , 0 };

การให้ค่าเริ่มต้น (Array Initialization) การประกาศตัวแปรแบบอาร์เรย์พร้อมทั้งกำหนดค่าเริ่มต้น สามารถทำได้โดยไม่จำเป็นต้องกำหนดขนาดของอาร์เรย์ก็ได้ คอมไพเลอร์จะหาจำนวนสมาชิกในกลุ่มค่าคงที่เอง เช่น char codes[6] = {‘s’, ‘a’, ‘m’, ‘p’, ‘l’, ‘e’}; char codes[] = {‘s’, ‘a’, ‘m’, ‘p’, ‘l’, ‘e’}; ทั้งสองบรรทัดทำงานเหมือนกัน โดยคอมไพล์เลอร์จะรู้ได้เองว่าขนาดของอาร์เรย์จะมีขนาดเป็น 6 แต่ char codes[ ];

การให้ค่าเริ่มต้น (Array Initialization) ในกรณีให้ค่าเริ่มต้นแก่ตัวแปร char สามารถกระทำได้ดังนี้ด้วย คือ char code[] = “sample”; คอมไพล์เลอร์จะใส่ ‘ \0 ’ หรือเรียกว่า null character ไว้ท้ายข้อความเสมอ

ตัวอย่างที่ 1 #include <stdio.h> void main() { int array_A[3] = {1, 2, 3}; int array_B[3] = {8, 9, 10}; printf("Initial value of array_A[0]: %d\n", array_A[0]); printf("Initial value of array_A[2]: %d\n", array_A[2]); printf("Final value of array_B[0]: %d\n", array_B[0]); printf("Final value of array_B[1]: %d\n", array_B[1]); } Initial value of array_A[0]: 1 Initial value of array_A[2]: 3 Final value of array_B[0]: 8 Final value of array_B[1]: 9

ตัวอย่างที่ 2 #include <stdio.h> void main() { int array_A[3] = {1, 2, 3}; int array_B[3] = {8, 9, 10}; array_A[2]=5; printf("Initial value of array_A[0]: %d\n", array_A[0]); printf("Initial value of array_A[2]: %d\n", array_A[2]); array_A[2]=10; printf("Final value of array_A[2]: %d\n", array_A[2]); array_A[2]=20; printf("Final value of array_B[1]: %d\n", array_B[1]); } Initial value of array_A[0]: 1 Initial value of array_A[2]: 5 Final value of array_A[2]: 10 Final value of array_B[1]: 9

5. การแสดงค่าหรือรับค่าอาร์เรย์ (Input and Output) ตัวอย่างการรับค่า int grades[3]; double price[3]; char code[2]; scanf(“%d %d %d”, &grades[0], &grades[1], &grade[2]); scanf(“%lf, %lf, %lf”, &price[0], &price[1]), &price[2]); scanf(“%c,%c”, &code[0], &code[1]); scanf(“%d %lf”, &grades[0], &price[2]);

การแสดงค่าหรือรับค่าอาร์เรย์ (Input and Output) ตัวอย่างการแสดงค่า printf(“%d %d %d”, grades[0], grades[1], grade[2]); printf(“%lf, %lf, %lf”, price[0], price[1]), price[2]); printf(“%c,%c”, code[0], code[1]); printf(“%d %lf”, grades[0], price[2]); printf(“%lf”, price[6]); printf(“The value of element is %d”, grades[0]);

การใช้คำสั่งวนรอบ for ในการเข้าถึงค่าในอาร์เรย์ 1. int grades[3]; scanf(“%d %d %d”, &grades[0], &grades[1], &grade[2]); int grades[3], i; for(i=0;i<3;i++) scanf(“%d”,grades[i]);

ตัวอย่างการใช้คำสั่งวนรอบ for กับอาร์เรย์ 2. int x[3]={5,10,15}; printf(“%d,%d,%d”, x[0], x[1], x[2]); int i, x[3]={5,10,15}; for ( i = 0 ; i < 3 ; i++) printf(“%d”,x[i]);

ตัวอย่างการใช้คำสั่งวนรอบ for กับอาร์เรย์ 3. ถ้าต้องการหาผลรวมของตัวแปร grade ทั้ง 3 อีลีเมนต์ ทำดังนี้ int total, grades[3]={10,20,30); total = grades[0] + grades[1] + grades[2]; int i, grades[3]={10,20,30); total = 0; for ( i = 0 ; i <3 ; i++) total += grades[i];

ตัวอย่างที่ 1 : การรับค่าและแสดงค่าของอาร์เรย์ ไฟล์ arrayex1.c #include <stdio.h> int main() { int num[4],i; for(i=0;i<4;i++) printf("Enter num[%d]: ",i); scanf("%d",&num[i]); } num[i] = 2*num[i]; printf("num[%d] = %d\n",i,num[i]); return 0; Enter num[0]: 1 Enter num[1]: 2 Enter num[2]: 3 Enter num[3]: 4 num[0] = 2 num[1] = 4 num[2] = 6 num[3] = 8

ตัวอย่างที่ 2 : โปรแกรมสำหรับหาค่าสูงสุดในอาร์เรย์ ไฟล์ arrayex2.c #include <stdio.h> int main() { int a[4] = {-1,6,9,2}; int i,max = a[0]; for(i=1;i<4;i++) { if(a[i] > max) max = a[i]; } printf("Maximum value is %d\n" ,max); return 0; Maximum value is 9

ตัวอย่างที่ 3 : โปรแกรมสำหรับหาค่าผลบวกในอาร์เรย์ ไฟล์ arrayex3.c #include <stdio.h> #define SIZE 4 int main() { int num[SIZE] = {1,4,5,7}; int i,total = 0; for(i=0;i<SIZE;i++) total = total + num[i]; printf("Sum of all elements = %d\n",total); return 0; } Sum of all elements = 17

6. สายตัวอักษร (String) สตริง หรือ สายตัวอักษร คือ ข้อมูลที่ประกอบไปด้วยค่าคงที่ชนิดตัวอักษรเรียงต่อเนื่องกันไป โดยมีจุดสิ้นสุดที่ตัวอักษร Null Character มีรหัสเป็น 0 เสมอ การเก็บข้อมูลสตริง จะใช้ตัวแปรชนิด อาร์เรย์ของตัวอักษร จึงจัดเป็นโครงสร้างของอาร์เรย์ 1 มิติ

การประกาศตัวแปรชนิดสตริง ทำได้เช่นเดียวกับการประกาศตัวแปรอาร์เรย์ 1 มิติ ในการ กำหนดตัวสตริงและมีการกำหนดค่าเริ่มต้นไปพร้อมกันนั้น อาจ ไม่ต้องใส่จำนวนข้อมูลภายในวงเล็บบอกจำนวนสมาชิกก็ได้ เช่น char str1[] ={‘A’, ‘B’, ‘C’, ‘D’, ‘\0’}; char str2[10]={‘A’, ‘B’, ‘C’, ‘D’, ‘\0’}; char str3[] = “ABCD”; ตัวอย่างการประกาศที่ผิด char str4[2] ={‘A’, ‘B’, ‘C’, ‘D’, ‘\0’};

จากตัวอย่าง “Hello!” คือ ค่าคงที่สตริง ซึ่งจะเขียนล้อมไว้ด้วย ตัวอย่างของสตริง char a[7] = “Hello!”; จากตัวอย่าง “Hello!” คือ ค่าคงที่สตริง ซึ่งจะเขียนล้อมไว้ด้วย เครื่องหมาย “ “ ค่าคงที่ “Hello!” ถูกกำหนดให้เป็นค่าเริ่มต้นแก่ตัวแปร a ซึ่งเป็นอาร์เรย์ขนาด 7 หน่วย หลังจากการกำหนดค่าแล้ว ในตัวแปร a จะ มีลักษณะ ดังนี้ ‘H’ ‘e’ ‘l’ ‘o’ ‘!’ ‘\0’ a[0] a[1] a[2] a[3] a[5] a[4] a[6]

มีการเก็บข้อมูล ดังรูป ตัวอย่างของสตริง คอมไพเลอร์จะกำหนดจำนวนพื้นที่ตัวอักษรจากจำนวนตัวอักษรในค่าคงที่ของสตริงรวมกับ ‘\0’ หรืออาจกำหนดพื้นที่ตัวอักษรให้มากกว่าความยาวของสตริงที่ใช้กำหนดเป็นค่าเริ่มต้นได้ เช่น char a[10] = “Hello!”; มีการเก็บข้อมูล ดังรูป ‘H’ ‘e’ ‘l’ ‘o’ ‘!’ ‘\0’ a[0] a[1] a[2] a[3] a[5] a[4] a[6] a[7] a[8] a[9]

ตัวอย่าง: การแสดงค่าของสตริง John F #include <stdio.h> int main() { char name[5] = {'J','o','h','n','\0'} ; char surname[8] = {'F','\0','K','E','N'}; printf("%s\n",name); printf("%s\n",surname); return 0; }

ตัวอย่าง: การรับค่าของสตริง Enter name: John Enter surname: Smith Hello John Smith #include <stdio.h> int main( ) { char n[10],s[10]; printf("Enter name: "); scanf("%s",n); printf("Enter surname: "); scanf("%s",s); printf("Hello %s %s\n" ,n,s); return 0; }

การกำหนดค่าให้กับตัวแปรชนิดสตริง การกำหนดค่าของอาร์เรย์ให้เป็นข้อความ จะไม่สามารถใช้ โอเปอร์เรเตอร์ = ได้โดยตรง เช่น char a[20]; a = “Hello World!”; ถ้าต้องการเก็บข้อความใดๆ ลงในอาร์เรย์ ต้องใช้วิธีการเรียกใช้ฟังก์ชัน เช่น ฟังก์ชันมาตรฐาน strcpy( ) ที่นิยามไว้ใน <string.h>

ตัวอย่าง: การกำหนดค่าของสตริงโดยใช้ฟังก์ชัน strcpy() #include <stdio.h> #include <string.h> int main() { char a[20] = "XXXXXXXXXX"; printf("%s\n", a); strcpy(a, "ABCD"); strcpy(a, "0123456789"); return 0; } XXXXXXXXXX ABCD 0123456789

ฟังก์ชันมาตรฐานที่นิยามใน <string.h> strcpy (char str2[ ], char str1[ ] ) คัดลอกข้อความจาก str1 ไปใส่ใน str2 strlen (char str[ ]) หาความยาวสายอักขระ strcat(char str2[ ], char str1[ ] ) นำข้อมูลจากสายอักขระ str1 ไปใส่ต่อท้ายสายอักขระ str2

ฟังก์ชันมาตรฐานที่นิยามใน <string.h> strcmp (char str1[ ], char str2[ ] ) เทียบค่าสตริงทั้งสอง โดยค่าที่ได้จะมีค่า น้อยกว่า 0 เมื่อ str1[ ] น้อยกว่า str2[ ] เท่ากับ 0 เมื่อ str1[ ] เท่ากับ str2[ ] มากกว่า 0 เมื่อ str1[ ] มากกว่า str2[ ]

ตัวอย่าง: การใช้ฟังก์ชันเกี่ยวกับสตริง #include <stdio.h> #include <string.h> int main() { char name[20]; int len; strcpy(name,"David"); len = strlen(name); printf("Length of %s is %d\n",name,len); return 0; } Length of David is 5

ตัวอย่าง: การใช้ฟังก์ชันเกี่ยวกับสตริง #include <stdio.h> #include <string.h> int main() { char str[] = "CAN"; int i,len = strlen(str); for(i=0;i<len;i++) str[i] = str[i] + 1; printf("%s\n",str); return 0; } DBO

ตัวอย่าง: การใช้ฟังก์ชันเกี่ยวกับสตริง #include <stdio.h> #include <string.h> int main() { char s1[ ] = “abc”; char s2[ ] = “XYZ”; if (strcmp(s1,s2)!=0) printf(“Not equal”); else printf(“Equal”); return 0; } Not equal

อาร์เรย์ของสตริง เนื่องจาก String จัดเป็นอาร์เรย์ 1 มิติ char name[6] = "Nesta"; ดังนั้นอาร์เรย์ของ String จึงต้องมีรูปแบบเป็นอาร์เรย์ 2 มิติ เช่น char names[2][8] ={ "Nesta","Maldini" }; N e s t a \0 M l d i n names[0] names[1]

7. อาร์เรย์หลายมิติ อาร์เรย์หลายมิติ (Multi-dimensional array) คือ อาร์เรย์ที่มีสมาชิกเป็นข้อมูลอาร์เรย์ นั่นคือ ในหน่วยข้อมูลแต่ละหน่วยของอาร์เรย์ จะเป็นอาร์เรย์ย่อยๆ ซึ่งอาจจะกำหนดซ้อนลงไปได้หลายชั้น การกำหนดอาร์เรย์หลายมิติ จะกระทำในรูป ชนิดตัวแปร ชื่อตัวแปร[จำนวนสมาชิก][จำนวนสมาชิก]….;

ตัวอย่างอาร์เรย์หลายมิติ เช่น อาร์เรย์ที่มีสมาชิกอยู่ 3 ตัว และสมาชิกแต่ละตัวก็เป็นอาร์เรย์เก็บข้อมูลชนิด int มีจำนวนสมาชิก 2 ตัว จะกำหนดได้ดังนี้ int a[3][2]; a[0][0] a[0][1] a[1][1] a[1][0] a[2][1] a[2][0] a a[0] a[1] a[2]

ตัวอย่างอาร์เรย์หลายมิติ การจัดวางภายในหน่วยความจำ สามารถแสดงได้ดังรูป a[0][0] a[0][1] a[1][0] a[1][1] a[2][0] a[2][1] a a[0] a[1] a[2]

อาร์เรย์แบบ 2 มิติ อาร์เรย์แบบ 2 มิติ มีโครงสร้างคล้ายคลึงกับเมตริกซ์สองมิติ จะเป็นตัวแปรที่มีการอ้างอิงถึงค่าข้อมูลโดยใช้ค่าเลขดัชนี 2 ค่า ซึ่งประกอบไปด้วยค่าดัชนีที่ใช้ในการอ้างอิงในแนวแถว (rows) และค่าดัชนีที่ใช้อ้างอิงในแนวคอลัมน์ (columns) ตัวอย่างข้อมูลอาร์เรย์ 2 มิติ เช่น 8 16 9 52 3 15 27 6 14 25 2 10 int val[3][4]; //(4 bytes * 3 * 4 = 48 bytes)

ตัวอย่าง: การดูขนาดอาร์เรย์ 2 มิติในหน่วยไบต์ ไฟล์ arrayex11.c #include <stdio.h> int main() { int x[2][5]; char names[3][4]; float nums[2][2]; printf("Size of x = %d\n",sizeof(x)); printf("Size of names = %d\n",sizeof(names)); printf("Size of nums = %d\n",sizeof(nums)); return 0; } Size of x = 40 Size of names = 12 Size of nums = 16

อาร์เรย์แบบ 2 มิติ โดยสรุป สำหรับอาร์เรย์สองมิติ เมื่ออ้างชื่ออาร์เรย์ จะหมายถึงตำแหน่งเริ่มต้นของอาร์เรย์ทั้งหมด เมื่ออ้างชื่ออาร์เรย์พร้อมสมาชิกหนึ่งอันดับ จะหมายถึงตำแหน่งเริ่มต้นของอาร์เรย์ย่อยภายใน เมื่ออ้างชื่ออาร์เรย์พร้อมค่าสองอันดับ จะหมายถึง ข้อมูลภายในอาร์เรย์

การประกาศตัวแปรอาร์เรย์ 2 มิติ int val[3][4]; double prices[10][5]; char code[6][4]; code[0][1] code[0][2] code[0][0] code[0][3] code[1][0] code[1][1] code[5][0] . code[5][3]

ตัวอย่างการเข้าถึงตัวแปรอาร์เรย์ 2 มิติ num = val[2][3]; val[0][0] = 62; new_nu = 4 * ( val[1][0] – 5); sum_row0 = val[0][0] + val[0][1] + val[0][2] + val[0][3];

การใช้คำสั่ง for ในการเข้าถึงอาร์เรย์ 2 มิติ ต้องมีตัวนับ 2 ตัว คือ ตัวนับแถวและตัวนับหลัก ตัวอย่างเช่น 1 2 3 int i,j,x[2][3]; for(i=0;i<2;i++) for(j=0;j<3;j++) x[i][j] = i+j;

ตัวอย่างที่: การแสดงค่าของอาร์เรย์ 2 มิติ Display of val array by explicit element 8 16 9 52 3 15 27 6 14 25 2 10 14 25 2 10 ไฟล์ arrayex12.c #include<stdio.h> void main(void) { int i, j, val[3][4] = {8,16,9,52,3,15,27,6,14,25,2,10}; printf("\n Display of val array by explicit element"); printf("\n%2d %2d %2d %2d",val[0][0],val[0][1],val[0][2],val[0][3]); printf("\n%2d %2d %2d %2d",val[1][0],val[1][1],val[1][2],val[1][3]); printf("\n%2d %2d %2d %2d\n",val[2][0],val[2][1],val[2][2],val[2][3]); for ( i = 0; i < 3; ++i) { printf("\n"); /* start a new line for each row */ for ( j = 0; j < 4; ++j) printf("%2d ", val[i][j]); }

ตัวอย่าง: การแสดงค่าของอาร์เรย์ 2 มิติ Display of multiplied elements 80 160 90 520 30 150 270 60 140 250 20 100 ไฟล์ arrayex13.c #include <stdio.h> void main() { int i, j, val[3][4] = {8,16,9,52,3,15,27,6,14,25,2,10}; /* multiply each element by 10 and display it */ printf("\n\nDisplay of multiplied elements\n"); for(i =0 ; i < 3 ; ++ i ){ printf("\n"); /* start a new line */ for(j = 0; j < 4; ++j){ val[i][j] = val[i][j] * 10; printf("%3d ", val[i][j]); } /* End for j */ } /* End for i */ } /* End main */

ตัวอย่าง: การรับและแสดงค่าของอาร์เรย์ 2 มิติ ไฟล์ arrayex15.c #include <stdio.h> int main() { int i,j,a[2][3]; for(i=0;i<2;i++) { for(j=0;j<3;j++) { printf("Enter a[%d][%d] : ",i,j); scanf("%d", &a[i][j]); } for(j=0;j<3;j++) printf("%d",a[i][j]); printf("\n"); return 0; Enter a[0][0] : 1 Enter a[0][1] : 2 Enter a[0][2] : 3 Enter a[1][0] : 4 Enter a[1][1] : 5 Enter a[1][2] : 6 123 456

การให้ค่าเริ่มต้น (Array Initialization) เราจะใช้กลุ่มค่าคงที่ที่มีสมาชิกเป็นกลุ่มค่าคงที่ย่อย ซึ่งเป็นชนิดเดียว กันและมีขนาดเท่ากัน รวมถึงสอดคล้องกับชนิดของอาร์เรย์ด้วย โดยใช้เครื่องหมาย {} หรือ , ในการแบ่งแยกแต่ละแถว

ตัวอย่างการให้ค่าเริ่มต้น (Array Initialization) int val[3][4] ={ {8,16,9,52}, {3,15,27,6}, {14,25,2,10} }; int val[3][4] = {8,16,9,52, 3,15,27,6, 14,25,2,10};

หากไม่มีการกำหนดจำนวนแถว คอมไพเลอร์จะกำหนดจำนวนแถวโดยนับจากที่กำหนดในค่าเริ่มต้น แต่จะต้องมีการกำหนดจำนวนหลักเสมอ เช่น int a[][2] = {{5,8},{9},{-1}}; 5 8 9 1 -1 2

ในการกำหนดค่าเริ่มต้นของอาร์เรย์ 2 มิติ สามารถละเครื่องหมายปีกกาที่ใช้แบ่งแถวได้ โดยใช้จำนวนหลักในการจัดว่าอีลีเมนต์ใดอยู่แถวใด เช่น float x[2][3] = {2.5,1.25,8.6,4.1,6.9,7.2}; 2.5 1.25 4.1 8.6 1 7.2 6.9 2

โจทย์ฝึกสมอง: ไฟล์ arrayprac3.c จงเขียนโปรแกรมสำหรับรับเมตริกซ์ของเลขจำนวนเต็มขนาด 2*2 จำนวน 2 เมตริกซ์ จากนั้นแสดงผลบวกของเมตริกซ์ทั้งสอง ตัวอย่างผลการรันเป็นดังนี้ (ข้อความสีแดงคือค่าที่รับจากผู้ใช้) Enter matrix A: 2 -1 15 9 Enter matrix B: 10 8 3 -7 Matrix A+B: 12 7 18 2

#include <stdio.h> int main() { int A[2][2],B[2][2],i,j; printf("Enter matrix A:\n"); for(i=0;i<2;i++) { for(j=0;j<2;j++) scanf("%d",&A[i][j]); } printf("Enter matrix B:\n" ); scanf("%d",&B[i][j]); printf("Matrix A+B:\n"); printf("%d ",A[i][j] + B[i][j]); printf("\n"); return 0; } // end of main Enter matrix A: 1 2 3 4 Enter matrix B: 5 6 7 8 Matrix A+B: 6 8 10 12

อาร์เรย์ที่มากกว่า 2 มิติ เช่น อาร์เรย์ 3 มิติ int volume[3][4][2]; int i,j,k; for(i=0;i<3;i++) for(j=0;j<4;j++) for(k=0;k<2;k++) val[i][j][k] = 0; อีลีเมนต์แรกคือ val[0][0][0] อีลีเมนต์สุดท้าย val[2][3][1] 4 2 3

ความผิดพลาดของโปรแกรมทั่วไปเกี่ยวกับอาร์เรย์ ลืมประกาศตัวแปร ใช้งานตัวแปรอาร์เรย์ นอกเหนือจากขอบเขตที่ประกาศไว้ int error[3] , i; for ( i = 0 ; i <=3 ; i++ ) error[i] = i;

ความผิดพลาดของโปรแกรมทั่วไปเกี่ยวกับอาร์เรย์ (ต่อ) ลืมให้ค่าเริ่มต้นกับตัวแปรอาร์เรย์ แล้วนำตัวแปรนั้นไปใช้งาน int a1 = 5, a2 = 8; int total[2]; total[1] = total[0] + a1 + a2; กำหนดค่าให้กับตัวแปรอาร์เรย์โดยตรง int x[10]; x = 11;

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

โจทย์ฝึกสมอง: ไฟล์ arrayprac4.c จงเขียนโปรแกรมสำหรับรับข้อความจากผู้ใช้ 4 ข้อความ โดยแต่ละข้อความมีความยาวไม่ถึง 20 ตัวอักษร จากนั้นพิมพ์ค่าความยาวของแต่ละข้อความออกทางหน้าจอ (ฟังก์ชันที่ใช้ในการหาความยาวของข้อความคือ strlen ) ตัวอย่างผลการรันเป็นดังนี้ Enter text 1: Maths Enter text 2: Physics Enter text 3: Chemistry Enter text 4: Biology Maths: 5 Physics: 7 Chemistry: 9 Biology: 7

#include <stdio.h> #include <string.h> int main() { //arrayprac4.c #include <stdio.h> #include <string.h> int main() { char texts[4][20]; int i; for(i=0;i<4;i++) { printf("Enter text %d : ",i+1); scanf("%s",&texts[i]); } for(i=0;i<4;i++) printf("%s : %d\n",texts[i],strlen (texts[i])); return 0; Enter text 1 : Welcome Enter text 2 : Hello Enter text 3 : Bye Enter text 4 : Hi Welcome : 7 Hello : 5 Bye : 3 Hi : 2

คำถามท้ายบท (ไฟล์ arrayprob2.c) จงเขียนโปรแกรมสำหรับรับเมตริกซ์จากผู้ใช้ 1 เมตริกซ์ (ให้ชื่อว่าเมตริกซ์ A) โดยผู้ใช้สามารถกำหนดจำนวนหลักและแถวของเมตริกซ์ได้ (แต่สมมุติว่าผู้ใช้ใส่ค่าจำนวนแถวและจำนวนหลักไม่เกิน 10 ) จากนั้นให้แสดงผลลัพธ์ของเมตริกซ์ 2A ตัวอย่างผลการรันโปรแกรมเป็นดังนี้ (ข้อความสีแดงคือค่าที่รับจากผู้ใช้) Enter number of rows: 2 Enter number of columns: 3 Enter matrix A: 4 3 5 2 9 7 Matrix 2A: 8 9 10 4 18 14