คอมไพเลอร์และดีบักเกอร์ C++ ออนไลน์

ดีบัก C++ ด้วย breakpoint ตัวแปร และการทำงานทีละขั้นของ GDB ในโหมดเซิร์ฟเวอร์

🚀 2,392,386 การดำเนินการทั้งหมด (12 ในเดือนนี้)
ผลลัพธ์

ฝึก C++ ด้วยโจทย์เขียนโค้ด

แก้โจทย์จริงใน editor นี้: รันทดสอบตัวอย่าง ส่งคำตอบ และรับรีวิวโค้ดจาก AI

โจทย์ C++ ทั้งหมด
ง่าย

Average of Three

Average three whole numbers.

คุณจะได้เรียนรู้ เลขคณิตการหาร
BeginnerLearning-pathVariables
ง่าย

Rectangle Perimeter

Compute the perimeter of a rectangle from its sides.

คุณจะได้เรียนรู้ เลขคณิตค่าที่คืนกลับ
BeginnerLearning-pathVariables
ปานกลาง

หนึ่งรุ่นของอัลกอริทึมเชิงพันธุกรรม

สร้างสตริงบิตรุ่นถัดไปด้วยการคัดเลือกแบบทัวร์นาเมนต์ การไขว้จุดเดียว และการกลายพันธุ์

คุณจะได้เรียนรู้ อัลกอริทึมเชิงพันธุกรรมการค้นหาเชิงวิวัฒนาการ
OptimizationSimulationai
ยังไม่มีวิธีแก้
ง่าย

Multi-armed bandit แบบ epsilon-greedy

สร้างสมดุลระหว่างการสำรวจและการใช้ประโยชน์ใน multi-armed bandit ด้วยการเลือกการกระทำแบบ epsilon-greedy

คุณจะได้เรียนรู้ สำรวจหรือใช้ประโยชน์Bandit
การเรียนรู้แบบเสริมกำลังaiการเรียนรู้ของเครื่อง
ยังไม่มีวิธีแก้
ง่าย

การแจกแจงสถานะของห่วงโซ่มาร์คอฟ

ส่งการแจกแจงความน่าจะเป็นผ่านเมทริกซ์การเปลี่ยนสถานะของห่วงโซ่มาร์คอฟตามจำนวนก้าวที่กำหนด

คุณจะได้เรียนรู้ ห่วงโซ่มาร์คอฟความน่าจะเป็น
Simulationaimath
ยังไม่มีวิธีแก้
ปานกลาง

Value iteration

คำนวณว่าแต่ละสถานะของกระบวนการตัดสินใจแบบมาร์คอฟมีค่าแค่ไหน โดยใช้การอัปเดตความเหมาะสมที่สุดของเบลล์แมนซ้ำ ๆ

คุณจะได้เรียนรู้ สมการเบลล์แมนMDP
การเรียนรู้แบบเสริมกำลังaiการเรียนรู้ของเครื่อง
ยังไม่มีวิธีแก้
ปานกลาง

การอัปเดต Q-learning

ใช้การอัปเดต Q-learning กับลำดับประสบการณ์ และดูรางวัลไหลย้อนกลับไปยังสถานะก่อนหน้า

คุณจะได้เรียนรู้ Q-learningรางวัลแบบมีส่วนลด
การเรียนรู้แบบเสริมกำลังaiการเรียนรู้ของเครื่อง
ยังไม่มีวิธีแก้
ปานกลาง

การตัดกิ่งแบบ Alpha-Beta

ประเมินต้นไม้เกมด้วย minimax และการตัดกิ่งแบบ alpha-beta แล้วนับว่าการค้นหาดูใบไม้จริง ๆ กี่ใบ

คุณจะได้เรียนรู้ การตัดกิ่ง alpha-betaการค้นหาในเกม
RecursionTreesai
ยังไม่มีวิธีแก้
ปานกลาง

เกม OX ด้วย Minimax

เลือกตาเดินที่สมบูรณ์แบบในเกม OX โดยค้นหาต้นไม้เกมทั้งหมดด้วย minimax

คุณจะได้เรียนรู้ Minimaxต้นไม้เกม
Recursionai
ยังไม่มีวิธีแก้
ปานกลาง

การค้นหา A* บนตารางที่มีน้ำหนัก

หาเส้นทางที่ถูกที่สุดผ่านตารางค่าใช้จ่ายของภูมิประเทศด้วย A* อัลกอริทึมค้นหาที่อยู่เบื้องหลังการหาเส้นทางในเกมและหุ่นยนต์

คุณจะได้เรียนรู้ การค้นหา A*ฮิวริสติก
GraphsGridsShortest-pathai
ยังไม่มีวิธีแก้
ปานกลาง

การสุ่มด้วย temperature และ top-k

เลือก token ถัดไปแบบโมเดลภาษา: เก็บ logit สูงสุด k ตัว ใช้ temperature แล้วสุ่ม

คุณจะได้เรียนรู้ การสร้างข้อความการสุ่มตัวอย่าง
aiการเรียนรู้ของเครื่อง
ยังไม่มีวิธีแก้
ยาก

Multi-head self-attention

ฉายอินพุตเป็น query, key และ value รัน attention ในหลาย head พร้อมกัน แล้วรวมผลเข้าด้วยกัน

คุณจะได้เรียนรู้ Multi-head attentionการฉายด้วยเมทริกซ์
aiการเรียนรู้ของเครื่อง
ยังไม่มีวิธีแก้

เลือกตามหัวข้อ

เรียน C และ C++ ควบคู่กันด้วยโค้ดจริง output โมเดลหน่วยความจำ โครงสร้างข้อมูล อัลกอริทึม และ C++ สมัยใหม่

ตัวอย่าง C/C++ →

💻 เกี่ยวกับตัวรัน C++ ออนไลน์นี้

ตัวรัน C++ ของ CodeUtility ช่วยให้คุณเขียนและรันโค้ด C++ ได้โดยตรงในเบราว์เซอร์ของคุณ - ไม่ต้องติดตั้งหรือเซ็ตอัพคอมไพเลอร์ใดๆ ใช้งานบนแซนด์บ็อกซ์ที่ปลอดภัย รองรับมาตรฐาน C++ จริง ตั้งแต่ C++11, C++14, C++17 ไปจนถึงเวอร์ชัน ล่าสุด

เครื่องมือนี้ใช้คอมไพเลอร์ C++ จริงที่รันบนคลาวด์เพื่อคอมไพล์และรันโค้ดของคุณ ช่วยให้พฤติกรรมถูกต้องและสม่ำเสมอ ในแต่ละเวอร์ชัน คุณสามารถทดลองแนวคิดพื้นฐานของ C++ ได้อย่างอิสระ เช่น ตัวแปร ฟังก์ชัน ลูป เงื่อนไข และการเขียนโปรแกรมเชิงวัตถุ

ไม่ว่าคุณจะเตรียมตัวสัมภาษณ์ เรียนรู้ฟีเจอร์ C++ สมัยใหม่ หรือยืนยันตรรกะของอัลกอริทึม ตัวรัน C++ ของ CodeUtility มอบสภาพแวดล้อมที่เรียบง่ายแต่ทรงพลัง ให้คุณรันโค้ดได้ทันทีจากทุกอุปกรณ์

มากกว่าเครื่องมือรันโค้ด

ใช้ตัวแก้ไขหลายไฟล์ เทอร์มินัลประมวลผลแบบแยกส่วน ไลบรารีเฉพาะรันไทม์ พื้นที่ทำงานถาวร การแชร์ และการทำงานร่วมกันแบบเรียลไทม์ได้จากตัวประมวลผลเดียวกัน

วิธีใช้ตัวประมวลผลนี้

เลือกรันไทม์ เปิดหรือสร้างไฟล์ เขียนโค้ด แล้วเลือกเรียกใช้ ผลลัพธ์จะแสดงในเทอร์มินัล ส่วนผู้ใช้ที่ลงชื่อเข้าใช้สามารถเก็บไฟล์ในพื้นที่ทำงาน ติดตั้งไลบรารี และทำงานร่วมกันผ่านการแชร์ได้

  1. เลือกเวอร์ชันแล้วแก้ไขไฟล์ปัจจุบัน หรือเปิดไฟล์อื่นในพื้นที่ทำงาน
  2. เรียกใช้โค้ด ป้อนข้อมูลในเทอร์มินัลเมื่อระบบร้องขอ และตรวจสอบประวัติการเรียกใช้ที่บันทึกไว้
  3. ใช้ไลบรารี เครื่องมือพื้นที่ทำงาน การแชร์ และแชท เมื่องานของคุณต้องใช้โค้ดมากกว่าหนึ่งส่วน

💡 พื้นฐาน C++ และตัวอย่างที่ลองได้ด้านบน

1. ประกาศตัวแปรและค่าคงที่

C++ ต้องประกาศชนิดข้อมูลของตัวแปรทุกตัว ใช้ const เพื่อกำหนดค่าที่อ่านอย่างเดียว ซึ่งไม่สามารถเปลี่ยนได้หลังจากกำหนดค่าเริ่มต้นแล้ว

int age = 30;
double pi = 3.14159;
char grade = 'A';
std::string name = "Alice";
bool isActive = true;

// ค่าคงที่
const int MAX_USERS = 100;
const std::string COMPANY = "CodeUtility";

// การพยายามแก้ไขตัวแปร const จะทำให้เกิดข้อผิดพลาดขณะคอมไพล์
// MAX_USERS = 200; // ❌ ข้อผิดพลาด

2. เงื่อนไข (if / switch)

ใช้ if, else if, else เพื่อแตกแขนงเงื่อนไข ใช้ switch เมื่อมีหลายค่า

int x = 2;
if (x == 1) {
    std::cout << "หนึ่ง\n";
} else if (x == 2) {
    std::cout << "สอง\n";
} else {
    std::cout << "อื่นๆ\n";
}

// สวิตช์-เคส
switch (x) {
    case 1:
        std::cout << "หนึ่ง\n";
        break;
    case 2:
        std::cout << "สอง\n";
        break;
    default:
        std::cout << "อื่นๆ\n";
}

3. ลูป

ใช้ for, while และ do-while เพื่อทำซ้ำบล็อกโค้ด

for (int i = 0; i < 3; i++) {
    std::cout << i << "\n";
}

int n = 3;
while (n > 0) {
    std::cout << n << "\n";
    n--;
}

4. อาร์เรย์

อาร์เรย์เก็บหลายองค์ประกอบที่มีชนิดเดียวกัน

int numbers[3] = {10, 20, 30};
std::cout << numbers[1] << "\n";

5. การจัดการอาร์เรย์/เวกเตอร์

ใช้ std::vector สำหรับอาร์เรย์แบบขยายขนาดได้

#include <vector>

std::vector nums = {1, 2, 3};
nums.push_back(4);
nums.pop_back();

for (int n : nums) {
    std::cout << n << " ";
}

6. การรับ/ส่งข้อมูลผ่านคอนโซล

ใช้ std::cin สำหรับรับข้อมูล และใช้ std::cout สำหรับแสดงผล

std::string name;
std::cout << "ป้อนชื่อของคุณ: ";
std::cin >> name;
std::cout << "สวัสดี, " << name << "\n";

7. ฟังก์ชัน

ฟังก์ชันช่วยจัดกลุ่มลอจิกที่นำกลับมาใช้ซ้ำได้ ระบุพารามิเตอร์และชนิดค่าที่ส่งกลับ

int add(int a, int b) {
    return a + b;
}

std::cout << add(3, 4);

8. Map

std::map เก็บคู่คีย์-ค่า คล้ายพจนานุกรม

#include <map>

std::map ages;
ages["Alice"] = 30;
std::cout << ages["Alice"];

9. การจัดการข้อยกเว้น

ใช้ try และ catch เพื่อจัดการข้อผิดพลาดขณะรัน

try {
    throw std::runtime_error("เกิดข้อผิดพลาด");
} catch (const std::exception& e) {
    std::cout << e.what();
}

10. การทำงานกับไฟล์ (File I/O)

ใช้ fstream เพื่ออ่านและเขียนไฟล์

#include <fstream>

std::ofstream out("file.txt");
out << "สวัสดีไฟล์";
out.close();

std::ifstream in("file.txt");
std::string line;
getline(in, line);
std::cout << line;
in.close();

11. การจัดการสตริง

สตริงใน C++ รองรับเมธอดอย่าง length(), substr() และ find()

std::string text = "สวัสดีชาวโลก";
std::cout << text.length();
std::cout << text.substr(0, 5);
std::cout << text.find("ชาวโลก");

12. คลาสและอ็อบเจ็กต์

C++ รองรับการเขียนโปรแกรมเชิงวัตถุด้วยคลาส

class Person {
  public:
    std::string name;
    Person(std::string n) : name(n) {}
    void greet() { std::cout << "สวัสดี ฉันชื่อ " << name; }
};

Person p("Alice");
p.greet();

13. พอยน์เตอร์

พอยน์เตอร์เก็บที่อยู่หน่วยความจำของตัวแปรอีกตัว ใช้ & เพื่อรับที่อยู่ และใช้ * เพื่อ dereference (เข้าถึงค่าที่ตำแหน่งนั้น)

int x = 10;
int* ptr = &x;

std::cout << "ค่าของ x: " << x << "\n";
std::cout << "ที่อยู่ของ x: " << ptr << "\n";
std::cout << "ค่าจากพอยน์เตอร์: " << *ptr << "\n";

// แก้ไข x ผ่านพอยน์เตอร์
*ptr = 20;
std::cout << "อัปเดต x: " << x << "\n";

🐞 วิธีดีบักโค้ด %{language} ออนไลน์

ใช้ดีบักเกอร์ %{language} ออนไลน์เพื่อค้นหาข้อผิดพลาด runtime และ logic โดยไม่ต้องติดตั้งคอมไพเลอร์หรือ IDE โหมดเซิร์ฟเวอร์จะคอมไพล์พร้อม debug symbols และรันด้วย GDB

  1. ตั้ง breakpoint ข้างหมายเลขบรรทัด
  2. เลือก Debug เพื่อคอมไพล์และหยุดที่ breakpoint แรก
  3. ตรวจสอบบรรทัด call stack และตัวแปร
  4. ใช้ Continue, Step Over, Step Into หรือ Step Out
  5. เลือก Stop เพื่อจบการดีบัก

เริ่มจากตัวอย่างขนาดเล็กที่ทำให้เกิดปัญหาได้ และตั้ง breakpoint ก่อนพฤติกรรมที่ไม่คาดคิด