Skip to content

ตัวแปรชุด และสายอักขระ

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 แทน ซึ่งเราสามารถแก้ได้ดังนี้
    int arr[100];
    for (int i = 0; i < 100; i++) arr[i] = 0;
    
  • การประกาศ Array นอกฟังก์ชัน จะทำให้ค่าเริ่มต้นของแต่ละตัว เท่ากับ 0 เช่น
    #include <iostream>
    
    int arr[100]; // ทุกตัวใน Array มีค่าเป็น 0
    
    int main() {
        // ...
    }
    
  • เราสามารถประกาศ Array ด้วยขนาดตามค่าของตัวแปรได้ เช่น
    #include <iostream>
    
    int main() {
        int n;
        cin >> n;
        int arr[n];
    }
    

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