ข้ามไปยังเนื้อหา

เรียน สอวน. คอมพิวเตอร์ ควรเริ่มภาษาอะไร Python, C หรือ C++

ควรเริ่มภาษาอะไร ตอบไม่ได้ถ้าไม่ถามกลับว่าเตรียมสนามไหน เพราะ TOI-Zero ข้อสอบคัดเลือก และค่ายใช้ภาษาไม่เหมือนกัน คำตอบสั้นของเราคือ ถ้าตั้งใจไปให้ถึงค่าย เริ่ม C++ ตั้งแต่วันแรก และฝึกอ่าน Python ไว้สำหรับข้อสอบคัดเลือก

พี่ธี CodeChampionเหรียญทอง TOI, วิศวกรรมคอมพิวเตอร์ จุฬาฯ (เกียรตินิยม 1)อัปเดตล่าสุด

ประเด็นสำคัญ

  • TOI-Zero ปี 2569 รับ Python และ C/C++ ข้อสอบคัดเลือกเข้าค่าย 1 ให้อ่านโปรแกรม Python ส่วนในค่าย 1 เป็นต้นไปเรียน C/C++
  • ถ้าเป้าหมายคือค่าย 1 และ TOI เริ่ม C++ ได้เลยตั้งแต่วันแรก ไม่ต้องเรียน C ให้จบก่อน
  • Python ไม่ต้องเขียนคล่อง แต่ต้องอ่านแล้วไล่ค่าตัวแปร นับรอบลูป และบอกผลลัพธ์ได้ เพื่อข้อสอบคัดเลือก
  • คนที่เรียน C มาแล้วไม่ต้องทิ้ง ตัวแปร อาร์เรย์ ฟังก์ชัน และ Pointer ใช้ต่อใน C++ ได้ทั้งหมด
  • C++ เพิ่มเครื่องมืออย่าง string vector และ sort ที่ทำให้โจทย์ค่ายสั้นลง แต่ต้องรู้ว่าเครื่องมือทำอะไรและใช้เวลาเท่าไร
ในหน้านี้
  1. แต่ละสนามใช้ภาษาอะไร
  2. ควรเริ่มที่ไหน
  3. Python ต้องรู้แค่ไหน
  4. C กับ C++ ต่างกันตรงไหน
  5. จาก C ไป C++ ใน 6 ขั้น
  6. สัญญาณว่าพร้อมขยับ
  7. แหล่งอ้างอิง
  8. คำถามที่พบบ่อย

แต่ละสนามใช้ภาษาอะไร

เอกสารทางการของปี 2569 ระบุภาษาไว้ต่างกันในแต่ละขั้น ถ้าเอาข้อกำหนดของขั้นหนึ่งไปใช้กับอีกขั้น จะเตรียมผิดเรื่อง

ภาษาที่แต่ละสนามของ สอวน. คอมพิวเตอร์ใช้ ปี 2569
สนามภาษาต้องทำอะไรได้
TOI-Zero
Python หรือ C/C++ เลือกได้
เขียนโปรแกรมแก้โจทย์ A1 ถึง A3 แล้วส่งระบบตรวจผ่าน
สอบคัดเลือกเข้าค่าย 1
Python (อ่าน ไม่ต้องเขียน)
ไล่ค่าตัวแปร นับรอบลูป while ลูปซ้อนไม่เกิน 2 ชั้น และอาร์เรย์ 1 มิติ แล้วบอกผลลัพธ์
ค่าย 1 และสอบท้ายค่าย
C/C++
เขียนโปรแกรมและใช้โครงสร้างข้อมูลพื้นฐานตามหลักสูตร
ค่าย 2 และ TOI
C/C++
เขียนอัลกอริทึมที่ผ่านชุดทดสอบภายในเวลาและหน่วยความจำที่กำหนด

ข้อสอบคัดเลือกปี 2569 ระบุด้วยว่าไม่ใช้ลูป for ไม่มีการประกาศฟังก์ชันด้วย def และไม่มีอัลกอริทึมหรือโครงสร้างข้อมูลที่ซับซ้อน ข้อจำกัดนี้เป็นของข้อสอบคัดเลือกเท่านั้น ไม่ใช่ข้อห้ามของการเรียนหรือของ TOI-Zero

ควรเริ่มที่ไหน ดูจากเป้าหมาย

ภาษาที่ควรเริ่มตามสถานการณ์
สถานการณ์เริ่มที่เพราะ
ยังไม่เคยเขียนโปรแกรม ตั้งใจไปให้ถึงค่าย
C++
ใช้ได้ตั้งแต่ TOI-Zero จนถึง TOI ไม่ต้องย้ายภาษากลางทาง และพื้นฐานตัวแปร เงื่อนไข ลูป เหมือนทุกภาษา
ยังไม่เคยเขียนโปรแกรม อยากแค่ผ่าน TOI-Zero ให้เร็ว
Python
ไวยากรณ์สั้น เขียนโจทย์ A1 ได้เร็ว แต่ต้องวางแผนย้ายไป C++ ก่อนเข้าค่าย
เรียน C ที่โรงเรียนอยู่แล้ว
C ต่อ แล้วเติม C++
พื้นฐานใช้ต่อได้ทั้งหมด เพิ่มแค่ string vector และ STL ตามโจทย์
เขียน Python คล่องแล้ว
C++ ทันที
สิ่งที่ต้องเรียนใหม่คือชนิดข้อมูล การจัดการหน่วยความจำ และความเร็ว ไม่ใช่วิธีคิด

ไม่ว่าจะเลือกทางไหน ให้ฝึกอ่าน Python สั้น ๆ ควบคู่ไปด้วยสำหรับข้อสอบคัดเลือก ใช้เวลาไม่มาก เพราะขอบเขตจำกัดแค่ ตัวแปร เงื่อนไข ลูป while และอาร์เรย์ 1 มิติ

Python ต้องรู้แค่ไหน

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

  • การกำหนดค่าให้ตัวแปร นิพจน์คณิตศาสตร์ และนิพจน์เปรียบเทียบ
  • if-else ทั้งชั้นเดียวและซ้อน เงื่อนไขประกอบด้วย not and or
  • ลูป while และลูปซ้อนไม่เกิน 2 ชั้น
  • อาร์เรย์ 1 มิติ และการคำนวณตามเงื่อนไข

วิธีฝึกที่ได้ผลคือเขียนตารางค่าตัวแปรทุกรอบของลูปลงกระดาษ ไม่มองโค้ดแล้วเดา ดูตัวอย่างโจทย์และแผนฝึกได้ที่ สอบเข้าค่าย 1 สอบอะไร

C กับ C++ ต่างกันตรงไหน ลองโจทย์เดียวกัน

โจทย์นี้เราแต่งเอง: รับจำนวนเต็ม n ไม่เกิน 100 แล้วรับข้อมูล n ค่า ให้แสดงจำนวนค่าที่แตกต่างกัน เช่น ข้อมูล 4 2 4 -1 2 7 ตอบ 4 แนวคิดเดียวกันทั้งสองภาษา: เรียงข้อมูลก่อน แล้วนับจุดที่ค่าเปลี่ยนจากตัวก่อนหน้า

ภาษา C

#include <stdio.h>
#include <stdlib.h>

int compare(const void *a, const void *b) {
    int x = *(const int *)a, y = *(const int *)b;
    return (x > y) - (x < y);
}

int main(void) {
    int n, values[100];
    scanf("%d", &n);
    for (int i = 0; i < n; i++) scanf("%d", &values[i]);
    qsort(values, n, sizeof values[0], compare);
    int distinct = 1;
    for (int i = 1; i < n; i++)
        if (values[i] != values[i - 1]) distinct++;
    printf("%d\n", distinct);
    return 0;
}

ภาษา C++

#include <algorithm>
#include <iostream>
#include <vector>

int main() {
    int n;
    std::cin >> n;
    std::vector<int> values(n);
    for (int &value : values) std::cin >> value;
    std::sort(values.begin(), values.end());
    int distinct = 1;
    for (int i = 1; i < n; i++)
        if (values[i] != values[i - 1]) distinct++;
    std::cout << distinct << '\n';
    return 0;
}
สิ่งที่ต่างกันในสองเวอร์ชัน
ประเด็นCC++
เก็บข้อมูล
อาร์เรย์ขนาดคงที่ 100 ต้องไม่เขียนเกินขอบเขต
vector ขนาด n แต่ยังต้องใช้ดัชนีให้ถูก
เรียงลำดับ
qsort ต้องส่งขนาดสมาชิกและฟังก์ชันเปรียบเทียบเอง
std::sort รู้ชนิดข้อมูลเอง ส่งแค่ช่วงข้อมูล
นับค่าต่างกัน
เทียบกับสมาชิกก่อนหน้า
เหมือนกัน
สิ่งที่ยังต้องคิดเอง
การอ่านข้อมูล ชนิดข้อมูล ขอบเขต และเหตุผลของวิธี
เหมือนกัน

ลองตัดขั้นตอนเรียงออก ข้อมูล 4 2 4 จะทำให้การเทียบเพื่อนบ้านตอบผิดทันที นี่คือเหตุผลที่ต้องเข้าใจวิธีแก้ก่อนจำคำสั่ง ไม่ว่าจะใช้ภาษาไหน

จาก C ไป C++ ใน 6 ขั้น โดยไม่เรียนซ้ำ

  1. ยืนยันพื้นฐานร่วม

    Input/Output ชนิดข้อมูล เงื่อนไข ลูป อาร์เรย์ และฟังก์ชัน ถ้าเขียน C ได้ ส่วนนี้จบแล้ว
  2. เทียบไวยากรณ์ที่เปลี่ยน

    cin cout แทน scanf printf, bool, และการประกาศตัวแปรตรงที่ใช้ แนวคิดเดิม เขียนต่างนิดเดียว
  3. เพิ่ม reference และ string

    เข้าใจว่าต่างจาก pointer และอาร์เรย์ของตัวอักษรอย่างไร เพราะโจทย์ค่ายใช้ string บ่อย
  4. เรียน container ตามโจทย์

    เริ่มจาก vector pair stack queue แล้ว set กับ map เมื่อมีโจทย์ให้ใช้ ไม่ต้องท่องทั้ง STL
  5. เรียน algorithm คู่กับต้นทุน

    รู้ทั้งวิธีเรียก sort reverse count find และรู้ว่าแต่ละตัวใช้เวลาเท่าไรเมื่อข้อมูลใหญ่ขึ้น
  6. แก้โจทย์เดิมด้วยเครื่องมือใหม่

    เอาโจทย์ที่เคยเขียนด้วย C มาเขียนใหม่ เทียบความยาว ความชัด และจุดที่เสี่ยงบั๊ก

คอร์ส C101 สอนเนื้อหาค่าย 1 ด้วย C++ ตั้งแต่พื้นฐานจนถึง Data Structure และเลือกเรียน C ได้ เพื่อให้คนที่เรียน C จากโรงเรียนต่อได้โดยไม่ต้องเริ่มใหม่

สัญญาณว่าพร้อมขยับไป C++ และ STL

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

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

แหล่งอ้างอิง

ข้อมูลที่เป็นกฎเกณฑ์อ้างอิงประกาศทางการตามรายการนี้ และระบุวันที่อ่านล่าสุดไว้ด้วย เงื่อนไขเปลี่ยนได้ทุกปี ก่อนสมัครให้ตรวจประกาศฉบับล่าสุดของปีที่จะสมัครอีกครั้ง

  1. ขอบเขตข้อสอบคัดเลือกเข้าค่าย 1 วิชาคอมพิวเตอร์ ปี 2569 (พาร์ทวิทยาการคำนวณใช้ Python) (เปิดในแท็บใหม่)อ่านล่าสุด 13 ตุลาคม 2569
  2. ธรรมนูญและหลักสูตรคอมพิวเตอร์โอลิมปิก ฉบับปรับปรุง 2568 (ค่ายใช้ C/C++) (เปิดในแท็บใหม่)อ่านล่าสุด 13 ตุลาคม 2569
  3. ประกาศที่ 74/2568 เรื่องโครงการ TOI-Zero ปี 2569 (ภาษาที่รองรับ) (เปิดในแท็บใหม่)อ่านล่าสุด 13 ตุลาคม 2569

FAQ

คำถามที่พบบ่อยเรื่องภาษา

คำถามที่นักเรียนถามเราก่อนเริ่มเรียนและตอนจะย้ายภาษา

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

ยังต้องเข้าใจในระดับที่หลักสูตรค่าย 1 กำหนด แม้โจทย์ส่วนใหญ่จะใช้ container แทนการจัดการหน่วยความจำเอง ความเข้าใจเรื่องค่ากับตำแหน่งช่วยให้หาบั๊กและอ่านโค้ดของคนอื่นได้แม่นขึ้น

ไม่ต้อง เริ่มจาก vector pair stack queue set และ map ที่ใช้บ่อย เรียนผ่านโจทย์จริง สิ่งสำคัญกว่าคือเลือกเครื่องมือถูก รู้ข้อจำกัด และประเมินเวลาที่ใช้ได้

หลักสูตรค่ายระบุ C/C++ และสอบท้ายค่ายภาคปฏิบัติเขียนโปรแกรมด้วยภาษาที่ค่ายสอน คนที่ใช้ Python ผ่าน TOI-Zero ควรย้ายไป C++ ให้ได้ก่อนเปิดค่าย เพราะค่ายเดินเร็วและมีสอบภายใน 2 ถึง 3 สัปดาห์

Python เขียนสั้นกว่าและเริ่มได้เร็วกว่า ส่วน C++ ต้องประกาศชนิดข้อมูลและดูแลขอบเขตเอง จึงช้ากว่าในสัปดาห์แรก แต่สิ่งที่ยากจริงคือการคิดเป็นขั้นตอนและการทดสอบ ซึ่งเหมือนกันทั้งสองภาษา และ C++ เป็นภาษาที่ใช้ตั้งแต่ค่าย 1 ถึง TOI

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

ใช้เป็นพื้นฐานวิธีคิดได้ แต่ไม่อยู่ในภาษาที่ประกาศ TOI-Zero และหลักสูตรค่ายระบุ ให้ย้ายไป C++ ซึ่งคนที่เขียนภาษาเหล่านี้คล่องแล้วมักใช้เวลาไม่นาน เพราะโครงสร้างเงื่อนไขและลูปคล้ายกัน

ติดต่อทีมงาน

สอบถามหลักสูตร
และวางแผนการเรียน

ทีมผู้สอน CodeChampion พร้อมช่วยประเมินพื้นฐาน และวางแผนการเรียนที่เหมาะสมกับเป้าหมายและระยะเวลาของน้อง