listC++ Data Structure & Algorithm
Basic Concept
สารบัญ
Variable (ตัวแปร) คืออะไร ?
ใน C++ ตัวแปรคือตัวแทนที่ใช้เก็บค่าข้อมูล เพื่อให้สามารถนำมาใช้งานในโปรแกรมได้ โดยตัวแปรจะประกอบด้วยชื่อและประเภทข้อมูลที่เกี่ยวข้อง
ตัวอย่าง การประกาศตัวแปร
ใน C++ สามารถประกาศตัวแปรได้ด้วยการใช้คำสำคัญคือ ประเภทของตัวแปร (ซึ่งเดี๋ยวเราจะอธิบายอีกที) เช่น int ที่บอกว่าเป็นประเภทของตัวเลข และตามด้วยชื่อตัวแปรที่ต้องการ
เช่น
int myVariable;ในตัวอย่างนี้ เราได้ประกาศตัวแปรชื่อ myVariable โดยมีประเภทข้อมูลเป็น int ซึ่งหมายถึงจำนวนเต็ม (integer)
ประเภทของตัวแปร
ใน C++ มีประเภทของตัวแปรหลายประเภทที่ใช้งานได้ ตัวอย่างประเภทของตัวแปรที่พบบ่อย ๆ ได้แก่
- เก็บค่าจำนวนเต็ม (integer) โดย
shortเก็บค่าได้ระหว่าง -32,768 ถึง 32,767intเก็บค่าได้ระหว่าง -2,147,483,648 ถึง 2,147,483,647longเก็บค่าได้ระหว่าง -9,223,372,036,854,775,808 ถึง 9,223,372,036,854,775,807
- เก็บค่าทศนิยม (floating-point) โดย
floatเก็บค่าได้ระหว่าง -3.4 x 10^38 ถึง 3.4 x 10^38- double เก็บค่าได้ราวๆ -1.7 x 10^308 ถึง 1.7 x 10^308
charเก็บค่าอักขระ (character) เช่น ‘A’, ‘c’boolเก็บค่าตรรกะ (boolean) คือ true (จริง) และ false (เท็จ)
เป็นต้น
ตัวอย่างการใช้งานตัวแปรประเภทต่างๆ และการรับ-ส่งข้อมูลใน C++
ตัวอย่างการใช้งานตัวแปรแบบ int, char
#include <iostream>
int main() {
int myNumber;
std::cout << "กรุณาใส่ตัวเลข: ";
std::cin >> myNumber;
std::cout << "ค่าที่คุณใส่คือ: " << myNumber << std::endl;
char myCharacter;
std::cout << "กรุณาใส่อักขระ: ";
std::cin >> myCharacter;
std::cout << "อักขระที่คุณใส่คือ: " << myCharacter << std::endl;
return 0;
}ในตัวอย่างนี้ โปรแกรมจะรับค่าตัวเลขจากผู้ใช้และแสดงผลค่าที่ผู้ใช้ใส่เข้ามา และจะรับค่าอักขระจากผู้ใช้และแสดงผลอักขระที่ผู้ใช้ใส่เข้ามา
ผลลัพธ์ก็จะได้เป็นแบบนี้ออกมา (สังเกตว่า โปรแกรมจะไปต่อก็ต่อเมื่อ input มีการรับค่าเข้ามาเพิ่ม ดังนั้น หากไม่มีการใส่ input เข้ามาโปรแกรมก็จะยังคงไม่ทำงานต่อ)
ตัวอย่างการใช้งานตัวแปรแบบ float
#include <iostream>
int main() {
float myFloat;
std::cout << "กรุณาใส่ค่าทศนิยม: ";
std::cin >> myFloat;
std::cout << "ค่าที่คุณใส่คือ: " << myFloat << std::endl;
return 0;
}ในตัวอย่างนี้ โปรแกรมจะรับค่าทศนิยมจากผู้ใช้และแสดงผลค่าที่ผู้ใช้ใส่เข้ามา เมื่อลอง run program และลองใส่ทศนิยมดูก็จะสามารถใส่ค่าเข้ามาได้
สังเกตว่า เมื่อเราใส่ตัวอักษรเข้ามา ภาษา c++ เองก็ทำการ handle ให้แสดงผลออกมาเป็นตัวเลขออกมาแทน รวมถึงกับเคสก่อนหน้าเช่นเดียวกัน หากเราใส่ตัวอักษรในส่วนของตัวเลข
ก็จะเจอว่า โปรแกรมเกิดการ crash เกิดขึ้น (โปรแกรมจะไม่ทำงานไปยัง cin ตัวต่อไปที่รับค่า character) เมื่อพยายามใส่ตัวอักษรใน cin ที่เป็น integer ในโปรแกรม C++ โปรแกรมจะไม่สามารถรับค่าได้ เนื่องจากการแปลงค่าตัวอักษรเป็น integer ไม่สามารถทำได้ ผลลัพธ์ที่เกิดขึ้นคือโปรแกรมจะอ่านค่าเป็น 0 เนื่องจากผลลัพธ์ของการแปลงค่าตัวอักษรเป็น integer ที่ไม่สามารถทำได้จะเป็น 0 ตลอดเวลา ดังนั้นค่าที่รับเข้ามาจะไม่มีผลต่อการทำงานหรือผลลัพธ์ของโปรแกรม
ดังนั้น หากมีการประกาศใช้ตัวแปรประเภทไหน ต้องรับค่าประเภทนั้นเข้าไปเช่นกัน (ในการ handle error เหล่านี้ เดี๋ยวเราจะมีการพูดถึงอีกทีในบทหลังๆกันนะครับ)
Operator
Operator คือสัญลักษณ์หรือตัวดำเนินการที่ใช้ในการดำเนินการกับตัวแปรหรือข้อมูลในโปรแกรม เพื่อทำการคำนวณหรือเปลี่ยนแปลงค่าข้อมูลตามต้องการ
ในภาษา C++ มีตัวดำเนินการหลายรูปแบบที่ใช้ในการทำงานกับตัวแปร จะขอแบ่งกลุ่มออกเป็น
- Arithmetic Operators คือ operator สำหรับการดำเนินการทางคณิตศาสตร์
+: ใช้ในการบวกเลขหรือเชื่อมต่อสตริง (string concatenation)-: ใช้ในการลบเลขหรือเปลี่ยนเครื่องหมายลบ (negation)*: ใช้ในการคูณเลขหรือการทำการซ้ำ (repetition)/: ใช้ในการหารเลข%: ใช้ในการหารเลขและคืนเศษจากการหาร (modulo)
- Relational Operators คือ operator สำหรับการเปรียบเทียบ และคืนค่ากลับออกมาเป็น boolean
==: ใช้ในการเปรียบเทียบความเท่ากันของข้อมูล!=: ใช้ในการเปรียบเทียบความไม่เท่ากันของข้อมูล>: ใช้ในการเปรียบเทียบค่าข้อมูลว่ามีค่ามากกว่าหรือไม่<: ใช้ในการเปรียบเทียบค่าข้อมูลว่ามีค่าน้อยกว่าหรือไม่>=: ใช้ในการเปรียบเทียบค่าข้อมูลว่ามีค่ามากกว่าหรือเท่ากับหรือไม่<=: ใช้ในการเปรียบเทียบค่าข้อมูลว่ามีค่าน้อยกว่าหรือเท่ากับหรือไม่
3. Logical Operators คือ operator ที่ใช้สำหรับรวม condition
&&: ใช้ในการตรวจสอบเงื่อนไขทั้งสองว่าเป็นจริงหรือไม่ (logical AND)||: ใช้ในการตรวจสอบเงื่อนไขใด ๆ ว่าเป็นจริงอย่างน้อยหนึ่งเงื่อนไข (logical OR)!: ใช้ในการเปลี่ยนค่าจริงเป็นเท็จ หรือเท็จเป็นจริง (logical NOT)
Note = Operator ที่ใช้ในการกำหนดค่าตัวแปร (Assignment) ไม่ได้ใช้สำหรับการเปรียบเทียบค่าที่เท่ากัน หากต้องการเปรียบเทียบการเท่ากันในการเขียนโปรแกรม ต้องใช้ == แทน
ตัวดำเนินการเหล่านี้ช่วยให้เราสามารถทำการคำนวณ ตรวจสอบเงื่อนไข หรือเปลี่ยนแปลงค่าข้อมูลได้ในโปรแกรม C++ ในหัวข้อนี้ เดี๋ยวเราจะแนะนำการใช้ Arithmetic Operators กันก่อน โดยเราจะลองใช้ร่วมกับตัวแปร เพื่อให้เห็นภาพการใช้งาน Operator ทั่วไปมากขึ้น ****ในส่วนของ Relational และ Logical นั้น เราจะมาพูดคุยกันในหัวข้อ Control Flow อีกที
Arithmetic Operators
มาดูตัวอย่างเบื้องต้น การใช้งานตัวดำเนินการทางคณิตศาสตร์ใน C++ กัน โดย
ตัวอย่างที่ 1 จะเป็นพื้นฐานการใช้ร่วมกับตัวแปร interger โดยทำการใช้ร่วมกับ +, -, *, /, % ตามตัวอย่างต่อไปนี้
#include <iostream>
int main() {
int num1 = 10;
int num2 = 5;
int sum = num1 + num2;
int difference = num1 - num2;
int product = num1 * num2;
int quotient = num1 / num2;
int remainder = num1 % num2;
std::cout << "ผลรวม: " << sum << std::endl;
std::cout << "ผลต่าง: " << difference << std::endl;
std::cout << "ผลคูณ: " << product << std::endl;
std::cout << "ผลหาร: " << quotient << std::endl;
std::cout << "เศษ: " << remainder << std::endl;
return 0;
}ในตัวอย่างนี้ เรามีตัวแปร num1 และ num2 ที่เก็บค่าตัวเลข และใช้ตัวดำเนินการ +, -, *, /, % เพื่อดำเนินการทางคณิตศาสตร์กับตัวแปรเหล่านี้ โดยเก็บผลลัพธ์ลงในตัวแปร sum, difference, product, quotient, และ remainder ตามลำดับ
ผลลัพธ์ที่ได้จะเป็นดังนี้:
ผลรวม: 15
ผลต่าง: 5
ผลคูณ: 50
ผลหาร: 2
เศษ: 0ตัวอย่างที่ 2 ในภาษา C++ เราสามารถใช้ตัวดำเนินการ + กับ character ได้ แต่หากเรานำมาต่อ character กันแบบนี้โดยตรงเช่นเคสนี้
#include <iostream>
int main() {
char firstCharacter = 'H';
char secondCharacter = 'i';
char space = ' ';
char exclamationMark = '!';
std::cout << firstCharacter + secondCharacter + space + exclamationMark << std::endl;
return 0;
}ผลลัพธ์จะออกมาเป็นดังนี้
242The char type in C++ is essentially a small integer type that represents characters as their ASCII values. For example, the character 'H' has an ASCII value of 72, 'i' is 105, ' ' (space) is 32, and '!' (exclamation mark) is 33.
char ใน c++ โดยพื้นฐานนั้นมีการเก็บเป็นตัวเลขเอาไว้ เรียกว่า ASCII (การเข้ารหัสตัวอักษรให้กลายเป็นตัวเลขเพื่อใช้เป็น standard ในการเก็บระหว่าง computer และอุปกรณ์ electronic ที่แสดงผล Text ออกมาได้ สามารถอ่านเพิ่มเติมได้ ที่นี่) จากเคสนี้
'H'มีค่าเท่ากับ 72'i'มีค่าเท่ากับ 105' 'มีค่าเท่ากับ 32'!'มีค่าเท่ากับ 33
จึงได้ผลลัพธ์เป็น 242 ออกมานั่นเอง (จริงๆ มีวิธีการต่อ character ให้กลายเป็น String อยู่ แต่จะขอเก็บไว้เป็นหัวข้อถัดไปเนื่องจากต้องมีการพึ่งพา library เพิ่มเติมสำหรับการทำเรื่องนี้)
และนี่คือตัวอย่างการใช้ Operator โดยประมาณ ในเรื่อง Operator นั้นเดี๋ยวเราจะได้เจอกันเรื่อยๆตลอดการเรียนใน Course นี้เช่นเดียวกัน
รู้จักกับ Array
Array (อาร์เรย์) คือโครงสร้างข้อมูลที่ใช้ในการเก็บข้อมูลหลายๆ ชิ้นในตำแหน่งเดียวกัน โดยสามารถเข้าถึงและใช้งานข้อมูลใน Array ได้โดยอ้างอิงถึงตำแหน่งของข้อมูลใน Array ด้วยตัวดัชนี (index) ซึ่งเริ่มต้นที่ 0
Array ทำให้เราสามารถจัดเก็บข้อมูลที่เกี่ยวข้องกันได้ในตำแหน่งเดียว ทำให้ง่ายต่อการเข้าถึงและประมวลผลข้อมูลใน Array โดยสามารถใช้ Loop (ที่เดี๋ยวเราจะอธิบายเพิ่มเติมกันอีกที) เพื่อทำงานกับข้อมูลใน Array ได้อย่างมีประสิทธิภาพ
ตัวอย่างเช่นเราสามารถใช้ Array เพื่อเก็บข้อมูลตัวเลขด้วยการสร้าง Array และกำหนดค่าให้กับแต่ละตำแหน่งของ Array ดังนี้:
int numbers[] = {1, 2, 3, 4, 5};ในตัวอย่างนี้ เราสร้าง Array ชื่อ numbers ที่เก็บตัวเลข 1, 2, 3, 4, 5 โดยใช้เครื่องหมาย [] เพื่อระบุว่าเป็น Array และกำหนดค่าให้แต่ละตำแหน่งของ Array ด้วยเครื่องหมาย {}
เมื่อเรามี Array เราสามารถเข้าถึงและใช้งานข้อมูลใน Array ได้โดยการอ้างอิงถึงตำแหน่งของข้อมูลใน Array ด้วยตัวดัชนี (index) โดยเริ่มต้นที่ 0
ตัวอย่างการเข้าถึงและใช้งานข้อมูลใน Array:
int firstNumber = numbers[0]; // ใช้ตัวดัชนี 0 เพื่อเข้าถึงตัวเลขแรกใน Array
int secondNumber = numbers[1]; // ใช้ตัวดัชนี 1 เพื่อเข้าถึงตัวเลขที่สองใน Arrayในตัวอย่างนี้ เราใช้ตัวดัชนี 0 เพื่อเข้าถึงตัวเลขแรกใน Array และใช้ตัวดัชนี 1 เพื่อเข้าถึงตัวเลขที่สองใน Array
Array เป็นสิ่งสำคัญในการเขียนโปรแกรมเพราะช่วยให้เราสามารถจัดเก็บและใช้งานข้อมูลหลายๆ ชิ้นในตำแหน่งเดียวกันได้อย่างมีประสิทธิภาพ
อีกเคสหนึ่งคือการประกาศประเภทก่อน แล้วค่อย assign ทีหลัง
#include <iostream>
int main() {
int numbers[5]; // ประกาศ Array ชื่อ numbers ที่มีขนาด 5
numbers[0] = 10; // กำหนดค่าให้ตำแหน่งแรกของ Array เป็น 10
numbers[1] = 20; // กำหนดค่าให้ตำแหน่งที่สองของ Array เป็น 20
numbers[2] = 30; // กำหนดค่าให้ตำแหน่งที่สามของ Array เป็น 30
numbers[3] = 40; // กำหนดค่าให้ตำแหน่งที่สี่ของ Array เป็น 40
numbers[4] = 50; // กำหนดค่าให้ตำแหน่งที่ห้าของ Array เป็น 50
std::cout << "ตำแหน่งที่ 1 ของ Array คือ " << numbers[0] << std::endl;
std::cout << "ตำแหน่งที่ 2 ของ Array คือ " << numbers[1] << std::endl;
std::cout << "ตำแหน่งที่ 3 ของ Array คือ " << numbers[2] << std::endl;
std::cout << "ตำแหน่งที่ 4 ของ Array คือ " << numbers[3] << std::endl;
std::cout << "ตำแหน่งที่ 5 ของ Array คือ " << numbers[4] << std::endl;
return 0;
}ในตัวอย่างนี้ เราประกาศ Array ชื่อ numbers ที่มีขนาด 5 และกำหนดค่าให้แต่ละตำแหน่งของ Array ด้วยตัวดัชนี โดยกำหนดให้ตำแหน่งแรกของ Array เป็น 10, ตำแหน่งที่สองของ Array เป็น 20, ตำแหน่งที่สามของ Array เป็น 30, ตำแหน่งที่สี่ของ Array เป็น 40, และตำแหน่งที่ห้าของ Array เป็น 50
จากนั้นโปรแกรมจะแสดงผลลัพธ์ออกทางหน้าจอว่า "ตำแหน่งที่ 1 ของ Array คือ 10", "ตำแหน่งที่ 2 ของ Array คือ 20", "ตำแหน่งที่ 3 ของ Array คือ 30", "ตำแหน่งที่ 4 ของ Array คือ 40", และ "ตำแหน่งที่ 5 ของ Array คือ 50"
และนี่คือ Array เดี๋ยวเราจะให้เห็นภาพการใช้ประโยชน์จาก Array มากขึ้นในหัวข้อของ Loop กันอีกทีนะครับ
แนะนำตัวแปร String
ตัวแปรประเภท String ใน C++ คือตัวแปรที่ใช้เก็บข้อมูลเป็นชุดอักขระหรือข้อความ ซึ่งสามารถใช้ในการเก็บข้อมูลที่เป็นคำพูด ประโยค หรือข้อความต่าง ๆ ได้ เช่น การเก็บชื่อ นามสกุล ที่อยู่ หรือข้อความอื่น ๆ
โดยการใช้งาน String ใน c++ นั้นต้องนำเข้า library <string> เพื่อใช้งานตัวแปรประเภท String ใน C++ ได้
ตัวอย่างการประกาศตัวแปรประเภท String ใน C++:
#include <iostream>
#include <string>
int main() {
std::string myString = "Hello, World!";
std::cout << myString << std::endl;
return 0;
}ในตัวอย่างนี้ เราได้ประกาศตัวแปรชื่อ myString ที่มีประเภทข้อมูลเป็น std::string ซึ่งเป็นคลาสในไลบรารี <string> ของ C++ และกำหนดค่าให้เป็น "Hello, World!" จากนั้นโปรแกรมจะแสดงผลค่าของตัวแปรนี้ออกทางหน้าจอ
ตัวแปรประเภท String ใช้ในการจัดการข้อมูลที่เป็นข้อความได้หลากหลาย เช่น การเชื่อมต่อสตริงด้วยตัวดำเนินการ + หรือการเข้าถึงตัวอักษรแต่ละตัวในสตริงด้วยตัวดำเนินการแบบ Array [] (ระบุ index ที่ต้องการเข้าถึง) เป็นต้น (เดี๋ยวจะมีแนะนำเพิ่มเติมในหัวข้อ Loop อีกที)
