More Related Content Similar to งานนำเสนอ1 (20) งานนำเสนอ13. ตัวแปรอาร์เรย์แบบ 1 มิติ
อาร์เรย์หนึ่งมิติ มีโครงสร้างเทียบเท่าเมตริกซ์ขนาด nx1 การประกาศตัวแปรอาร์เรย์จะใช้
เครื่องหมาย [ ] ล้อมค่าตัวเลขจานวนเต็ม เพิ่อบอกจานวนหน่วยข้อมูลที่ต้องการได้ในรูป
ชนิดของตัวแปร ชื่อตัวแปร[จานวนสมาชิกที่ต้องการ]
data_type variable_name [ number-of-elements ]
เช่น int a[5];
double x, y[10], z[3];
4. ตัวแปรอาร์เรย์หลายตัว
อาร์เรย์หลายมิติ (Multi-dimensional array) คือ อาร์เรย์ที่มีสมาชิกเป็นข้อมูลอาร์เรย์ นั้นคือ ในหน่วยข้อมูลแต่ละหน่วยของ
อาร์เรย์จะเป็นอาร์เรย์ย่อยๆ ซึ่งอาจจะกาหนดซ้อนลงไปได้หลายชั้น
การกาหนดอาร์เรย์หลายมิติ จะกระทาในรูป
ชนิดตัวแปร ชื่อตัวแปร[จานวนสมาชิก][จานวนสมาชิก]….; ตัวแปรอาร์เรย์หลายตัว
การประกาศอาร์เรย์หลายตัวทาได้ดังนี้
int [] abc , xyz;
abc = new int[500];
xyz = new int[10];
หรือเขียนรวมกันได้ดังนี้
int[] abc = new int[500], xyz = new int[10];
5. ตัวอย่างอาร์เรย์หลายมิติ
เช่น อาร์เรย์ที่มีสมาชิกอยู่ 3 ตัว และสมาชิกแต่ละตัวก็เป็นอาร์เรย์เก็บข้อมูลชนิด int มีจานวน
สมาชิก 2 ตัว จะกาหนดได้ดังนี้ int a[3][2];
ขนาดของอาร์เรย์3 x 2
จานวนไบต์ ที่ใช้ในการเก็บอาร์เรย์sizeof (a) คานวณจาก 3 x 2 x sizeof ( int ) =
3x2x4 = 24 ไบต์
7. การกาหนดค่าเริ่มต้นให้อาร์เรย์ 1 มิติ
สามารถประกาศตัวแปร Array พร้อมกับกาหนดค่าเริ่มต้นให้กับสมาชิก Array ได้โดยมี
รูปแบบดังนี้ชนิดของตัวแปรอาร์เรย์ชื่ออาร์เรย์[จานวนข้อมูล] = {ค่าคงที่,ค่าคงที่, …};
เช่น
การกาหนดค่าเริ่มต้นให้อาร์เรย์ 1 มิติType [] var_name = {value1,value2,value3};
int []num = {5,6,9}; String []name ={“noom”,”boby”,”goft”};Int []unit = {1}
11. การใช้คาสั่งวนรอบ FOR ในการเข้าถึงค่าในอาร์เรย์
เราสามารถใช้คาสั่ง วนรอบ for ในการวนรอบรับค่าที่ป้ อนเข้ามาและใช้ในการ
คานวณโดยการใช้ตัวแปรในการวนรอบและใช้ตัวแปรเดียวกันเพื่อกาหนดลาดับของ
ข้อมูลที่จะใช้ในอาร์เรย์
int x,a[5];
for (x=0; x<5; x++)
{ printf(“Enter value for a[%d]:”,x);
scanf(“%d”,&a[x]);
}
printf(“Show all valuesn”);
for (x=0; x<5; x++)
{ printf(“a[%d] = %d”, x, a[x]); }
12. ตัวอย่างโปรแกรม
int grades[5];
grades[0] = 98;
grades[1] = grades[0] – 11;
grades[2] = 2 * (grades[0] – 6);
grades[3] = 79;
grades[4] = (grades[2]+grades[3]– 3)/2;
total = ggrraaddeess[[03]]++ ggrraaddeess[[14]]+; grades[2]+
grades[i];
grades[2*i];
grades[j-i];
13. ถ้าต้องการหาผลรวมของตัวแปร grade ทั้ง 5 อีลีเมนต์ทาดังนี้
total = grades[0] + grades[1] + grades[2] +
grades[3] + grades[4];
เปลี่ยนเป็น for loop ได้ดังนี้
total = 0;
for ( i = 0 ; i <= 4 ; i++)
total += grades[i];
15. การเรียกใช้แบบ CALL-BY-VALUE
ใช้วิธีการส่งค่าของตัวแปร (value) ให้กับฟังก์ชัน โดยผ่านพารามิเตอร์
ไม่สามารถแก้ไขค่าของอาร์กิวเมนต์(หรือพารามิเตอร์)ภายในฟังก์ชันได้ = การแก้ไขค่าต่างๆใน
ฟังก์ชัน ไม่มีผลต่อตัวแปรที่ส่งค่ามา
ใช้กับฟังก์ชันที รับค่าเข้าเป็นตัวแปรธรรมดา (int, float, char,...)
เช่น void triple(int x)
{ x=x*3; printf(“x = %d”,x); } ….
int x=5, y[2]={10,11};
triple(x); triple(y[0]);
16. การเรี ยกใช้แบบ CALL-BY-REFERENCE
ใช้วิธีการส่งค่า แอดเดรส (Address)*** ของตัวแปรไปให้ฟังก์ชัน
ใช้กับฟังก์ชันที่รับค่าเข้าเป็นอาร์เรย์
สามารถแก้ไขค่าของอาร์กิวเมนต์ภายในฟังก์ชันได้= การแก้ไขค่าตัวแปรอาร์เรย์ ภายในฟังก์ชัน มี
ผลการเปลี่ยนแปลงต่อตัวแปรที่ส่งค่ามา เพราะ การมีการจัดการค่าของหน่วยความจาในตาแหน่ง
เดียวกัน
***แอดเดรส (Address) คือ ค่าที่ใช้อ้างถึงตัวข้อมูลภายในหน่วยความจา เหมือนกับ
หมายเลขบ้านเลขที่***
19. ตัวอย่างที่ 1 : การส่ งค่าแต่ละอีลีเมนต์ในอาร์เรย์ให้กับฟั งก์ชัน
#include <stdio.h>
void check_val(int x);
int main()
{
int a[3] = {2,-1,5};
check_val(a[0]);
return 0;
}
void check_val(int x)
{
if(x >= 0)
printf("%d : Positiven",x);
else
printf("%d : Negativen",x) ;
}
2 : Positive
21. ตัวอย่างที่ 3 : การส่งค่าแต่ละอีลีเมนต์ในอาร์เรย์ให้กับ
ฟังก์ชัน
#include <stdio.h>
void showVal(int val); /* function prototype */
void main()
{
int nums[5] = {2, 18, 1, 27, 16};
showVal(nums[0]);
}
void showVal(int val) /* show a value */
{
printf("Value is %dn", val);
}
Value is 2
25. Student [] studentList = new Student[3];
studentList[0] = new Student();
studentList[1] = new Student();
studentList[2] = new Student();
26. อาร์เรย์แบบ 2 มิติ
โดยสรุป สาหรับอาร์เรย์สองมิติ เมื่ออ้างชื่ออาร์เรย์จะหมายถึงตาแหน่งเริ่มต้นของอาร์เรย์
ทั้งหมด (อาร์เรย์2 มิติ)
เมื่ออ้างชื่ออาร์เรย์พร้อมสมาชิกหนึ่งอันดับ จะหมายถึงตาแหน่งเริ่มต้นของอาร์เรย์ย่อยภายใน
(อาร์เรย์1 มิติ)
เมื่ออ้างชื่ออาร์เรย์พร้อมค่าสองอันดับ จะหมายถึง ข้อมูลภายในอาร์เรย์
29. การใช้คาสั่ง FOR ในการเข้าถึงอาร์เรย์ 2 มิติ
ใช้ลูป for 2 ชั้น โดยลูปชั้นนอกวนรอบตามจานวนแถว ส่วนลูปชั้นในวนรอบตามจานวนหลัก
ต้องมีตัวนับ 2 ตัว คือ ตัวนับแถวและตัวนับหลัก
ตัวอย่างเช่น
32. ตัวอย่างการให้ค่าเรื่ มต้น
(ARRAYINITIALIZATION)
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 };
35. CLASS ARRAYLIST
ในภาษา Java มีกลุ่มคลาสที่เ รียกว่า คอลเล็กชั่น (Collection) ซึ่ง ออบเจ็กต์จากคลาสนี้
สามารถใช้สะสมออบเจ็กต์ต่าง ๆ ไว้ได้เช่น Class ArrayList ดีกว่าArray ทีส ามารถเพื่ม
สมาชิกได้โดยไม่ต้องประกาศไว้ล่วงหน้าการใช้ Class ArrayList จะต้อง import
java.util.ArrayList
ตัวอย่างการสร้างออบเจ็กต์ จาก Class ArrayList
ArrayList nameList = new ArrayList();
36. METHOD ที่สาคัญของ ARRAYLIST
add(int index,Object obj) ใช้ใส่ออบเจ็กต์ลงในอาร์เรย์ทีต่าแหน่ง index
remove(int index) นาออบเจ็กต์ตาแหน่ง index ออกจากอาร์เรย์
get(int index) คืนค่าออบเจ็กต์ในตาแหน่ง index
indexof(Object obj) คืนค่า index ของออบเจ็กต์ทีร ะบุ
size สาหรับหาขนาดของ ArrayList
37. STRING
String คือข้อความ หรือ สายของอักขระ ในภาษา C++ ไม่มีตัวแปร
ประเภท String แต่จะมีตัวแปรประเภท char ให้ใช้แทน ซึ่งตัวแปร
ประเภทchar จะสามารถเก็บอักขระได้1 อักขระ เท่านั้นถ้าหากเราอยากให้
ตัวแปร char สามารถเก็บข้อความได้เราก็สามารถ ทาให้ตัวแปร char เป็น
array ได้char Name[10];
38. ตัวอย่างเช่น CHAR NAME[10];
ความหมายว่า
ตัวแปร ชื่อ Name เป็นตัวแปรประเภทchar สามารถเก็บอักขระได้9 ตัวอักษรสาเหตุที่เก็บได้9
ตัวอักษรก็เพราะว่า ในกรณีที่เราใช้ตัวแปร char เป็น array เพื่อเก็บข้อความCompiler จะเหลือเนื้อที่
ตาแหน่งสุดท้ายไว้เก็บอักขระ นัล เพื่อให้รู้ว่าเป็นการจบ String
เพราะฉะนั้นรูปแบบการประกาศตัวแปร char ที่เป็น Stringจึงเป็นแบบนี้
char ชื่อตัวแปร[จานวนอักษร+1]; ถ้าเราต้องการประกาศตัวแปร char ที่เป็น String ไว้เก็บข้อมูล
ชื่อที่มีได้มากสุด 30 ตัวอักษรก็ให้ ประกาศดังนี้char Name[31]; หรือถ้าเรา จะประกาศตัวแปร char ที่
เป็น String ไว้เก็บข้อมูลชื่อเดือนมีได้มากสุด20 ตัวอักษร ก็ให้ประกาศดังนี้char Month[21];
39. การเปรียบเทียบ STRING
ใช้เครื่องหมาย = =
เป็นการเปรียบเทียบว่า String 2 ตัวเป็น Object เดียวกันหรือไม่ โดยจะเปรียบเทียบค่าอ้างอิงหรือ
ที่อยู่ในหน่วยความจาของตัวแปรทั้งสอง ไม่ได้เป็นการเปรียบเทียบถึงข้อมูลที่ String ทั้ง 2 ตัวว่าเก็บ
ข้อมูลเดียวกันหรือไม่
40. EQUALS() METHOD
เป็นการเปรียบเทียบค่าใน String Object ทั้ง 2 ตัวเป็นค่าเดียวกันหรือไม่ โดยที่จะให้ค่าเป็น
จริง (True) ก็ต่อเมื่อตัวอักษรทุกตัวใน String ทั้ง 2 ค่าจะต้องเหมือนกันหมด โดยสนใจตัวอักษร
พิมพ์เล็กและพิมพ์ใหญ่ด้วย หากต่างกันก็จะให้ค่าเป็นเท็จ (False)
42. คลาส STRINGBUFFER
คลาส StringBuffer จะมีลักษณะคล้ายกับคลาส String เพียงแต่เป็นตัวแปรสตริงที่มีการแก้ไขค่าแบบถาวร
คอนสตรักเตอร์ของคลาส StringBuffer ที่น่าสนใจมีดังต่อไปนี้
StringBuffer(String s) เก็บสตริง s ไว้ในตัวแปร StringBuffer
StringBuffer() เก็บข้อความว่างเปล่าไว้ในตัวแปร StringBuffer และมีขนาด16 byte เหตุที่ตัวแปร
StringBuffer มีขนาดปกติ 16 และจะเพิ่มขนาดเมื่อเก็บข้อความลงไป เป็นเพราะถ้ามีการเปลี่ยนข้อความที่เก็บภายหลัง
ข้อความใหม่อาจมีขนาดไม่เท่าเดิม ดังนั้นจาวาจึงว่างไว้อีก 16 ที่ว่างเพื่อจะได้ไม่ต้องกันที่ในหน่วยความจาเพิ่มเติมอีกใน
กรณีที่ข้อความใหม่มีขนาดใหญ่กว่าเดิมไม่เกิน 16 เพราะการกันที่ในหน่วยความจาเพิ่มเติมภายหลังเป็นเรื่องยุ่งยากและอาจ
ทาให้ประสิทธิภาพในการเข้าถึงลดลง
StringBuffer(int length) เก็บข้อความว่างเปล่าไว้ในตัวแปร StringBuffer และมีขนาดเท่ากับ length
43. เมธอดที่น่าสนใจส่วนหนึ่ งของคลาส
S T R I N G B U F F E R
StringBuffer append(String s)
StringBuffer append(char c)
StringBuffer append(chra[] c, int offset, int len)
StringBuffer append(booleab b)
StringBuffer append(int i)
StringBuffer append(long l)
StringBuffer append(float f)
StringBuffer append(double d)
44. เ ม ธ อ ด นี้ เ ป็ น โ อ เ ว อ ร์ โ ห ล ด เ ม ธ อ ด ทา ห น้า ที่ เ พิ่ ม ข้อ ค ว า ม ใ น ว ง เ ล็ บ
เ ข้า ไ ป ต่ อ ท้า ย ข้อ ค ว า ม ที่ มี อ ยู่ แ ล้ว ใ น S T R I N G BU F F E R ถ้า
มี ก า ร เ ป ลี่ ย น แ ป ล ง S T R I N G BU F F E R ผ่ า น เ ม ธ อ ด ข้อ ค ว า ม
จ ะ ถู ก เ ป ลี่ ย น แ บ บ ถ า ว ร
StringBuffer insert(int offset, String s)
StringBuffer insert(int offset, char c)
StringBuffer insert(int offset, char[] c)
StringBuffer insert(int offset, boolean b)
StringBuffer insert(int offset, int i)
StringBuffer insert(int offset, long l)
StringBuffer insert(int offset, float f)
StringBuffer insert(int offset, double b)
45. เ ม ธ อ ด นี้ เ ป็ น โ อ เ ว อ ร์ โ ห ล ด เ ม ธ อ ด ทา ห น้า ที่ แ ท ร ก ข้อ ค ว า ม ใ น ว ง เ ล็ บ เ ข้า
ไ ป ใ น ตา แ ห น่ ง ที่ เ ท่ า กับ O F F S E T
StringBuffer deleteCharAt(int index) เมธอดนี้จะทาหน้าที่ลบตัวอักษรในตาแหน่ง index
ออก
StringBuffer delete(int start, int end) เมธอดนี้จะทาหน้าที่ลบตัวอักษรจากตาแหน่ง start ถึง
end ออก
StringBuffer revers()เมธอดนี้จะทาหน้าที่กลับตัวตัวอักษรจากหลังมาหน้า
char charAt(int index) ล่งค่าตัวอักษรในตาแหน่ง index กลับ
char setCharAt(int index, char ch) เปลี่ยนตัวอักษรในตาแหน่ง index ด้วย chtoString()
ส่งค่า
ของข้อความออกมาในรูปตัวแปรสตริง
49. จากโค้ดข้างบนในบรรทัดที่ (1) เราสร้างตัวแปร s1 โดยไม่เก็บค่าอะไร
เลย ผลที่ได้คือขนาดของข้อความเท่ากับ 0 แต่ขนาดของตัวมันเองจริงเป็น 16
ซึ่งเป็นค่าปกติ ในบรรทัดที่ (2) เราสร้างตัวแปร s2 โดยให้เก็บค่า Hello
ผลที่ได้คือขนาดข้อความเป็น 5 แต่ขนาดของตัวมันเองเท่ากับค่าปกติบวกด้วย
ความยาวของข้อความที่สั่งให้มันเก็บซึ่งเท่ากับ 21 น่ันเอง ในบรรทัดที่(3) เรา
พยายามสร้างตัวแปร s3 ซึ่งเป็นวิธีการที่ใช้ไม่ได้กับตัวแปร
StringBuffer
50. เหตุที่ตัวแปร StringBuffer มีขนาดเท่ากับ 16 และจะเพิ่มขนาดเมื่อ
เก็บข้อความลงไป เป็นเพราะถ้ามีการเปลี่ยนแปลงข้อความที่เก็บภายหลัง ข้อ
ความหใม่อาจมีขนาดไม่เท่าเดิม จาวาจึงเผื่อที่ว่างไว้อีก 16 ที่ว่าง เพื่อจะได้ไม่
ต้องกันพื่นที่ในหน่วยความจาเพิ่มเติมอีกในกรณีที่ข้อความใหม่มีขนาดใหญ่
กว่าเดิมไม่เกิน 16 เพราะการกันที่ในหน่วยความจาเพิ่มเติมภายหลังทาได้ยาก
เนื่องจากพื่นที่ในหน่วยความจาทีเพิ่มขึ้นอาจไม่อยู่ติดกับพื้นที่เดิมทาให้
ประสิทธิภาพในการเข้าถึงลดลง
51. สมาชิก
1. นาย พีรวิชญ์สุวรรณรัฐ เลขที่ 3
2. นาย อมรณัฐ อ่อนน้อม เลขที่ 4
3. นาย เพชร พรหมสีทอง เลขที่ 8
4. นาย ราชสิงห์ ทรงบัณทิตย์เลขที่ 10
5. นาย อังกูร ตันประเสริฐ เลขที่ 11
6. นางสาว ธัญญารัตน์ แต้นุเคราะห์ เลขที่ 14
ชั้นมัธยมศึกษาปีที่ 6/2