สวัสดีครับ
คิดว่าหลาย ๆ คนอาจจะลองทำโจทย์ดูแล้ว แต่อาจจะไม่ออก
ผมต้องขอโทษจริง ๆ ครับ ลืมบอกคำสั่งที่สำคัญไป
อย่างแรกคือ ความยาวของ String เราจะใช้ ฟังก์ชัน Length หาความยาวเช่น
var S: string = 'Test String';
Write(Length(S));
จะได้ผลออกมาว่า 11
สำหรับการประกาศ String ที่มีการกำหนดขนาด เช่น
var S: string[40];
ค่าอักขระ แต่ละตัวจะเป็น #0 ทั้งหมด
เราสามารถเช็คได้ว่า string มีตัวอักษรทั้งหมดกี่ตัวโดยการตรวจสอบค่า #0 เช่น
ส่วนการบ้านข้อ 20 ขอเปลี่ยนโจทย์หน่อยละกัน ให้ง่ายกว่าเดิม
ขอเปลี่ยนเป็น
20) ให้รับค่าเข้าไป 10 ค่า แล้วหาค่าที่ซ้ำกันอย่างน้อยครึ่งหนึ่ง เช่น
1 2 3 4 4 4 4 5 6 4 คำตอบคือ 4
1 5 6 6 6 8 7 4 2 3 คำตอบคือ none เพราะไม่มีค่าที่ซ้ำกันเกินครึ่ง
2011/09/04
2011/09/03
Object Pascal - Array
สวัสดีครับ กลับมาวันเสาร์ตามสัญญา
วันนี้เราจะมาดูกันว่า Array คืออะไร !!!!
Array คือตัวแปรแถวลำดับ...
ถ้าจะให้พูดง่าย ๆ ก็คือตัวแปรที่มีชนิดเดียวกันหลาย ๆ ตัว นั้นเอง
สมมติว่า ถ้าจะเก็บค่าคะแนนสอบของนักเรียน 100 คน เราจะต้องประกาศตัวแปร 100 ตัวแปรหรอ !!!!
เราจึงจะใช้ตัวแปรแบบ Array มาแก้ปัญหานี้กัน
วิธีการประกาศก็ง่ายแสนง่าย ลองดูตัวอย่างกัน
var
Score: array[0..99] of Integer;
จากภาพ เป็นการประกาศตัวแปรชื่อ Score เป็นตัวแปร Array ที่มีสมาชิก 100 ตัว มี Index ตั้งแต่ 0 ถึง 99 เก็บข้อมูลจำนวนเต็ม
ลองดูที่ 0..99 เลขข้างหน้า (0) คือ Index เริ่มต้น เลขข้างหลังคือ Index สุดท้าย เราสามารถเริ่มที่อะไรก็ได้ ไม่จำเป็นต้องเป็น 0 เช่น
var
Arr1: array[6..20] of Integer;
Arr2: array[-10..5] of Double;
Arr1 มีสมาชิก 20 - 6 + 1 = 15 ตัว
Arr2 มีสมาชิก 5 - (-10) + 1 = 16 ตัว
เวลาจะเรียกใช้ Array ก็เรียกเป็น
Arr[Index] เช่น
var
Arr: array[1..3] of Integer;
I: Integer;
begin
Arr[1] := 50;
I := 2;
Arr[I] := 300;
Arr[3] := I;
Writeln(Arr[1]], ' ', Arr[2], ' ', Arr[3]);
end.
เอาหล่ะ ลองมาดู Array 2 มิติกันบ้างดีกว่า
วิธีการประกาศจะมี 2 แบบ คือ
แล้ว 2 แบบนั้น มันต่างกันยังไง ?
Arr1 เป็น Array 2 มิติ ของ จำนวนเต็ม ขนาด 6 x 4
Arr2 เป็น Array 1 มิติ ของ Array 1 มิติ ของ จำนวนเต็ม
การประกาศ Array แบบที่ 2 จะดีกว่าแบบที่ 1 อยู่... ดีกว่ายังไง ? เดียวก่อนละกัน
มาดู Array หลาย ๆ มิติกันก่อนนะ
วิธีการประกาศ การใช้ก็เหมือน ๆ กัน
นอกจากนี้ String ก็ยังเหมือนกับ Array 1 มิติอีกแหน่ะ
หรือก็คือ String เป็น Array of Char ก็ว่าได้
การประกาศ String เราสามารถกำหนดได้ว่าจะให้ String นั้นเก็บค่าได้เท่าไร หรือจะไม่กำหนดก็ได้ เช่น
var
Str1: string;
Str2: string[16];
เราสามารถเรียกดูตัวอักขระ ในแต่ละตำแหน่งได้ เช่น Str1[3] ฯลฯ
เรายังสามารถประกาศตัวแปรแบบ Array[0..n-1] of Char แล้วใช้เป็น String ได้อีกด้วย
แต่ !!! ตัว Index เริ่มต้นจะต้องเป็น 0 เท่านั้น แต่จะมีความแตกต่างอยู่อย่างหนึ่งคือ
String จะมี Index เริ่มต้นที่ 1
ส่วน Array[0..n-1] of Char จะมี Index เริ่มต้นที่ 0
ลองดูตัวอย่างกันสักนิด
เราสามารถกำหนดให้ Str2 := ' ข้อความ' ได้
และยังให้ Str1 ที่มีชนิดตัวแปรเป็น string มารับข้อมูลจาก Str2 ได้เลย
แต่ไม่สามารถจะเขียนว่า Str2 := Str1 ได้
และถ้าเราประกาศตัวแปร Str1 เป็น string[80] เราก็ไม่สามารถที่จะให้ Str1 := Str2; ได้
วันนี้ขอจบแค่นี้ก่อน เดียวงงกว่าเดิมส่วนเรื่องที่ว่าการประกาศ Array แบบที่ 2 นั้นมันดียังไง ขอติดไว้ก่อน
ก่อนไปก็ฝากการบ้านไว้สักหน่อยดีกว่า หุหุ
13) ให้รับข้อความเข้ามา แล้วให้แสดงข้อความที่รับมาแบบย้อนจากหลังมาหน้า
เช่นรับเข้าไปว่า String ให้แสดงผลออกมาว่า gnirtS
14) ให้รับข้อความเข้ามาแล้วนับว่าในข้อความนั้นมีตัว i กี่ตัว ( ไม่ต้องนับตัว I ใหญ่ )
15) ให้รับคะแนนนักเรียนเข้ามา 10 คน ไปไว้ใน array ก่อน แล้วค่อยคำนวณหาค่าเฉลี่ย
16) ให้รับข้อความเข้ามาแล้วเปลี่ยนตัวอักษร '@' ให้เป็น ตัว 'a' แทน
17) ให้รับข้อความเข้ามาแล้วเปลี่ยนตัวอักษร '@' ให้เป็นคำว่า 'at' แทน
18) ให้รับค่าจำนวนเต็มเข้ามา 6 ตัว แล้วหาค่าที่มากที่สุด
19) ** ให้รับค่าจำนวนเต็มเข้ามา 10 ตัว แล้วเรียงลำดับข้อมูลจากมากไปน้อย
20) ** ให้รับค่าเข้าไป 10 ค่า แล้วหาค่าที่ซ้ำกันมากที่สุด (ฐานนิยม) (แก้โจทย์อยู่ใน เก็บตก #1)
21) * ให้รับข้อความเข้ามา แล้วแสดงข้อความ แต่ถ้าเจอคำว่า \n ให้ขึ้นบรรทัดใหม่
เช่น รับค่าเข้ามาเป็น
String Line 1\nLine 2\nNew Line
จะแสดงผลเป็น
String Line 1
Line 2
New Line
ลองไปทำกันดูนะครับ ส่วนข้อที่มี * ข้างหน้า จะค่อนข้างยากนิดนึง แต่ไม่เกินความรู้ตั้งแต่เรื่องแรก ๆ เลยครับ
วันนี้เราจะมาดูกันว่า Array คืออะไร !!!!
Array คือตัวแปรแถวลำดับ...
ถ้าจะให้พูดง่าย ๆ ก็คือตัวแปรที่มีชนิดเดียวกันหลาย ๆ ตัว นั้นเอง
สมมติว่า ถ้าจะเก็บค่าคะแนนสอบของนักเรียน 100 คน เราจะต้องประกาศตัวแปร 100 ตัวแปรหรอ !!!!
เราจึงจะใช้ตัวแปรแบบ Array มาแก้ปัญหานี้กัน
วิธีการประกาศก็ง่ายแสนง่าย ลองดูตัวอย่างกัน
var
Score: array[0..99] of Integer;
จากภาพ เป็นการประกาศตัวแปรชื่อ Score เป็นตัวแปร Array ที่มีสมาชิก 100 ตัว มี Index ตั้งแต่ 0 ถึง 99 เก็บข้อมูลจำนวนเต็ม
ลองดูที่ 0..99 เลขข้างหน้า (0) คือ Index เริ่มต้น เลขข้างหลังคือ Index สุดท้าย เราสามารถเริ่มที่อะไรก็ได้ ไม่จำเป็นต้องเป็น 0 เช่น
var
Arr1: array[6..20] of Integer;
Arr2: array[-10..5] of Double;
Arr1 มีสมาชิก 20 - 6 + 1 = 15 ตัว
Arr2 มีสมาชิก 5 - (-10) + 1 = 16 ตัว
เวลาจะเรียกใช้ Array ก็เรียกเป็น
Arr[Index] เช่น
var
Arr: array[1..3] of Integer;
I: Integer;
begin
Arr[1] := 50;
I := 2;
Arr[I] := 300;
Arr[3] := I;
Writeln(Arr[1]], ' ', Arr[2], ' ', Arr[3]);
end.
เอาหล่ะ ลองมาดู Array 2 มิติกันบ้างดีกว่า
วิธีการประกาศจะมี 2 แบบ คือ
วีธีการเรียกใช้จึงต่างกัน
แล้ว 2 แบบนั้น มันต่างกันยังไง ?
Arr1 เป็น Array 2 มิติ ของ จำนวนเต็ม ขนาด 6 x 4
Arr2 เป็น Array 1 มิติ ของ Array 1 มิติ ของ จำนวนเต็ม
การประกาศ Array แบบที่ 2 จะดีกว่าแบบที่ 1 อยู่... ดีกว่ายังไง ? เดียวก่อนละกัน
มาดู Array หลาย ๆ มิติกันก่อนนะ
วิธีการประกาศ การใช้ก็เหมือน ๆ กัน
นอกจากนี้ String ก็ยังเหมือนกับ Array 1 มิติอีกแหน่ะ
หรือก็คือ String เป็น Array of Char ก็ว่าได้
การประกาศ String เราสามารถกำหนดได้ว่าจะให้ String นั้นเก็บค่าได้เท่าไร หรือจะไม่กำหนดก็ได้ เช่น
var
Str1: string;
Str2: string[16];
เราสามารถเรียกดูตัวอักขระ ในแต่ละตำแหน่งได้ เช่น Str1[3] ฯลฯ
เรายังสามารถประกาศตัวแปรแบบ Array[0..n-1] of Char แล้วใช้เป็น String ได้อีกด้วย
แต่ !!! ตัว Index เริ่มต้นจะต้องเป็น 0 เท่านั้น แต่จะมีความแตกต่างอยู่อย่างหนึ่งคือ
String จะมี Index เริ่มต้นที่ 1
ส่วน Array[0..n-1] of Char จะมี Index เริ่มต้นที่ 0
ลองดูตัวอย่างกันสักนิด
เราสามารถกำหนดให้ Str2 := ' ข้อความ' ได้
และยังให้ Str1 ที่มีชนิดตัวแปรเป็น string มารับข้อมูลจาก Str2 ได้เลย
แต่ไม่สามารถจะเขียนว่า Str2 := Str1 ได้
และถ้าเราประกาศตัวแปร Str1 เป็น string[80] เราก็ไม่สามารถที่จะให้ Str1 := Str2; ได้
วันนี้ขอจบแค่นี้ก่อน เดียวงงกว่าเดิมส่วนเรื่องที่ว่าการประกาศ Array แบบที่ 2 นั้นมันดียังไง ขอติดไว้ก่อน
ก่อนไปก็ฝากการบ้านไว้สักหน่อยดีกว่า หุหุ
13) ให้รับข้อความเข้ามา แล้วให้แสดงข้อความที่รับมาแบบย้อนจากหลังมาหน้า
เช่นรับเข้าไปว่า String ให้แสดงผลออกมาว่า gnirtS
14) ให้รับข้อความเข้ามาแล้วนับว่าในข้อความนั้นมีตัว i กี่ตัว ( ไม่ต้องนับตัว I ใหญ่ )
15) ให้รับคะแนนนักเรียนเข้ามา 10 คน ไปไว้ใน array ก่อน แล้วค่อยคำนวณหาค่าเฉลี่ย
16) ให้รับข้อความเข้ามาแล้วเปลี่ยนตัวอักษร '@' ให้เป็น ตัว 'a' แทน
17) ให้รับข้อความเข้ามาแล้วเปลี่ยนตัวอักษร '@' ให้เป็นคำว่า 'at' แทน
18) ให้รับค่าจำนวนเต็มเข้ามา 6 ตัว แล้วหาค่าที่มากที่สุด
19) ** ให้รับค่าจำนวนเต็มเข้ามา 10 ตัว แล้วเรียงลำดับข้อมูลจากมากไปน้อย
21) * ให้รับข้อความเข้ามา แล้วแสดงข้อความ แต่ถ้าเจอคำว่า \n ให้ขึ้นบรรทัดใหม่
เช่น รับค่าเข้ามาเป็น
String Line 1\nLine 2\nNew Line
จะแสดงผลเป็น
String Line 1
Line 2
New Line
ลองไปทำกันดูนะครับ ส่วนข้อที่มี * ข้างหน้า จะค่อนข้างยากนิดนึง แต่ไม่เกินความรู้ตั้งแต่เรื่องแรก ๆ เลยครับ
Subscribe to:
Posts (Atom)