ตัวแปรชุด และสายอักขระ
Author: Nagorn Phongphasura
ลองนึกสถานการณ์ขึ้นมาว่า คุณต้องการจะเก็บข้อมูลจำนวนหลาย ๆ ตัว แทนที่คุณจะมานั่งสร้างตัวแปรเป็นร้อยตัว คุณสามารถแก้ไขปัญหานี้ได้ด้วยการใช้สิ่งที่เรียกว่า ตัวแปรชุด หรือ Array
Array
โดย Array ใน C++ จะเป็นการใช้การเรียงตำแหน่งแบบ 0-indexed นั่นคือ ช่องแรกจะเป็นลำดับที่ 0 หรือเมื่อเขียนเป็นโค้ด จะแทนด้วย arr[0] ซึ่งหากสร้าง Array ขนาด \(10\) ขึ้นมา เราจะสามารถเก็บค่าได้ตั้งแต่ช่อง arr[0] จนถึง arr[9] ซึ่งก็คือ จะเก็บได้ \(10\) ค่าพอดี แต่เราจะไม่สามารถเข้าถึงช่องที่ arr[10] ได้ เพราะเป็นช่วงนอกขอบเขต (Out of bounds)
ซึ่งการเรียก Input/Output สำหรับ Array นั้น ก็เหมือนกับการใช้ตัวแปรทั่วไปเลย
ตัวอย่าง Code การใช้ Array
int arr[10]; // สร้างชุดข้อมูลเป็นจำนวนเต็ม เก็บ 10 ช่อง (0-9)
for (int i = 0; i <= 9; i++) { // วนตั้งแต่ 0-9
cin >> arr[i]; // รับ Input ตัวที่ i
}
for (int i = 0; i <= 9; i++) { // วนตั้งแต่ 0-9
cout << arr[i] << ' ';
}
เพิ่มเติม
- การประกาศ Array ในฟังก์ชัน (เช่น
main) ค่าเริ่มต้นของแต่ละตัว จะไม่ได้เป็น 0 แต่กลับเป็นค่า Random แทน ซึ่งเราสามารถแก้ได้ดังนี้ - การประกาศ Array นอกฟังก์ชัน จะทำให้ค่าเริ่มต้นของแต่ละตัว เท่ากับ 0 เช่น
- เราสามารถประกาศ Array ด้วยขนาดตามค่าของตัวแปรได้ เช่น
String
ใน C++ เรามี Library ที่ชื่อว่า string ซึ่งทรงพลังและใช้ง่ายกว่า char[] ของ C มาก เนื่องจากมีฟังก์ชันสำเร็จรูปให้ใช้งานได้ โดยไม่ต้องเขียนเองใหม่ โดย string จะทำหน้าที่เหมือนกับ Array ของ char ซึ่งเราสามารถ access แต่ละตัวของ string ได้เหมือนกับ Array นอกจากนี้ เราสามารถรับค่าของ string ได้โดยการ cin ทั้งประโยค เหมือนกับ Variable ทั่วไปเลย
#include <iostream> // Library Input Output
#include <string> // Library String
using namespace std;
int main() {
string sentence = "Hello, "; // ประกาศ string ชื่อ sentence
string Name; // ประกาศ string ชื่อ Name
cin >> Name; // รับค่า Name
cout << sentence << Name; // จะส่งออก "Hello, [Name]" เมื่อ [Name] คือค่าของ Name ที่รับเข้ามา
}
2D Array
และ Array นอกจากจะทำด้วย Variable ต่าง ๆ ได้ เราเองก็สามารถทำ "Array of Array" ซึ่งเนื่องจากเราเก็บเป็น Array ของ Array ทำให้เป็นเหมือนกับการเก็บแถว หลาย ๆ แถว กลายเป็นตาราง 2 มิติ เราจึงเรียกมันว่า 2D Array นั่นเอง
การประกาศ 2D Array ทำได้ง่าย ๆ โดยการเรียก int arr[10][10] จะได้เป็นตารางขนาด \(10\) X \(10\)
และการเรียก Input/Output ก็เหมือนกัน Array ทั่วไปเลย
ตัวอย่าง Code การใช้ 2D Array
int arr[10][10]; // ประกาศตารางขนาด 10 x 10
for (int i = 0; i <= 9; i++) { // วนตามแต่ละแถว
for (int j = 0; j <= 9; j++) { // วนตามแต่ละหลัก
cin >> arr[i][j]; // รับค่าช่องที่ i, j
}
}
for (int i = 0; i <= 9; i++) { // วนตามแต่ละแถว
for (int j = 0; j <= 9; j++) { // วนตามแต่ละหลัก
cout << arr[i][j] << ' '; // พิมพ์ค่าออกมา
}
cout << '\n'; // ขึ้นบรรทัดใหม่ เมื่อจบแถวนั้นแล้ว
}
โจทย์
| Problem | Source | Difficulty | Solution |
|---|---|---|---|
| Matrix Addition | PROG | Very Easy | View |
| Character Checker | PROG | Very Easy | View |
| Trik | PROG | ? | View |
| Ptice | PROG | ? | View |
| Pet | PROG | ? | View |
| Kemija | PROG | ? | View |
| BUKA | PROG | ? | View |
| 3-11 (three-eleven) | PROG | ? | View |
| ลูบไล้ (looblike) | PROG | ? | View |
| สามเหลี่ยมใหญ่ (bigtriangle) | PROG | ? | View |
| แชมป์นักจำ (Memory Champion) | PROG | ? | View |