fork download
  1. #include <stdio.h>
  2.  
  3. int main(void)
  4. {
  5. int i, j;
  6. long dec; /* ให้รับค่าอินพุทแบบ Long Integer - เลขจำนวนเต็มแบบยาว */
  7. int bit[32]; /* จองพื้นที่ในการเก็บข้อมูลเลขฐาน 2 ลงใน Array */
  8.  
  9. clrscr(); /* เคลียร์หน้าจอ */
  10. printf("Decimal Number : "); /* แจ้งผู้ใช้เพื่อเตรียมป้อนค่าเลขฐาน 10 */
  11. scanf("%ld", &dec); /* ต้องใช้ ld เพราะ Input มันเป็นแบบ Long Integer */
  12. i = 0; /* กำหนดค่าเริ่มต้นของ Array */
  13. /* ทำตามที่ได้ออกแบบโปรแกรมเอาไว้ ... ยังไงยังงั้นเลย 55555+ */
  14. do {
  15. bit[i++] = dec % 2; /* การหารเอาเศษ เพื่อให้เป็นคำตอบ */
  16.  
  17. /* การหารทั่วไป แต่ตัวแปร dec ของภาษา C มันเป็น Integer หรือ เลขจำนวนเต็ม */
  18. /* ดังนั้นมันจึงตัดเศษ (หรือทศนิยม) ทิ้งไปโดยอัตโนมัติ */
  19. dec = dec / 2;
  20.  
  21. } while (dec > 0); /* เงื่อนไขที่ทำจนกระทั่ง dec = 0 ก็ออกจากวังวนเงื่อนไข */
  22.  
  23. /* การแสดงผลของการแปลงเลขฐาน 10 เป็นเลขฐาน 2*/
  24. /* j = i - 1 และให้ j ลดค่าลงทีละ 1 ... ก็คืออ่านข้อมูลถอยหลังกลับเท่านั้นเองครับ */
  25. /* เพราะตัวแปรแบบ Array ในภาษา C มันเก็บข้อมูลจากซ้ายไปขวา */
  26. /* ทำให้ LSB มันไปอยู่ทางซ้าย ส่วน MSB มันไปอยู่ทางขวา */
  27. for(j = i - 1; j >= 0; j--)
  28. printf("%d", bit[j]);
  29.  
  30. printf("\n");
  31. return 0;
  32.  
  33. }
Success #stdin #stdout 0.03s 25444KB
stdin
#include <bits/stdc++.h>
using namespace std;

enum Status { AT_ORIGIN, IN_TRANSIT, OUT_FOR_DELIVERY, DELIVERED };

struct Parcel {
    string tracking;
    string sender, receiver;
    string origin, destination;
    double weightKg{};
    int postage{};
    int declaredValue{};
    Status status{};
    string acceptDate;
    string deliverDate; // อาจว่างถ้ายังไม่ส่งสำเร็จ
};

/* ---------- Utilities ---------- */
string statusName(Status s){
    switch(s){
        case AT_ORIGIN: return "AT_ORIGIN";
        case IN_TRANSIT: return "IN_TRANSIT";
        case OUT_FOR_DELIVERY: return "OUT_FOR_DELIVERY";
        case DELIVERED: return "DELIVERED";
    }
    return "?";
}

void printRow(const Parcel& p){
    cout << left
         << setw(13) << p.tracking
         << setw(12) << p.sender.substr(0,10)
         << setw(12) << p.receiver.substr(0,10)
         << setw(8)  << p.origin
         << setw(8)  << p.destination
         << setw(6)  << fixed << setprecision(1) << p.weightKg
         << setw(7)  << p.postage
         << setw(8)  << p.declaredValue
         << setw(19) << statusName(p.status)
         << setw(12) << p.acceptDate
         << setw(12) << (p.deliverDate.empty() ? "-" : p.deliverDate)
         << "\n";
}

void printTable(const vector<Parcel>& v){
    cout << left
         << setw(13) << "Tracking"
         << setw(12) << "Sender"
         << setw(12) << "Receiver"
         << setw(8)  << "From"
         << setw(8)  << "To"
         << setw(6)  << "Kg"
         << setw(7)  << "Fee"
         << setw(8)  << "Value"
         << setw(19) << "Status"
         << setw(12) << "AcceptDate"
         << setw(12) << "DeliverDate" << "\n";
    cout << string(117,'-') << "\n";
    for (auto &p : v) printRow(p);
    cout << "\n";
}

/* ---------- Sample Data (10 รายการ) ---------- */
vector<Parcel> sampleData(){
    return {
        {"TH010001", "Somchai",  "Aor",      "BKK","CNX", 1.2,  60, 3000, IN_TRANSIT,        "2025-10-20", ""},
        {"TH010009", "May",      "Ton",      "BKK","HKT", 2.0, 110, 2500, AT_ORIGIN,         "2025-10-22", ""},
        {"TH010004", "Jane",     "Beam",     "CNX","BKK", 0.5,  45, 1200, OUT_FOR_DELIVERY,  "2025-10-18", ""},
        {"TH010002", "Pond",     "Mint",     "BKK","KKN", 3.4, 160, 4500, IN_TRANSIT,        "2025-10-19", ""},
        {"TH010006", "View",     "Linn",     "HKT","BKK", 0.8,  55,  800, DELIVERED,         "2025-10-10", "2025-10-13"},
        {"TH010007", "Bank",     "Game",     "KKN","BKK", 1.0,  60, 2000, IN_TRANSIT,        "2025-10-21", ""},
        {"TH010003", "Noon",     "Mhee",     "BKK","CTI", 5.2, 220, 7000, AT_ORIGIN,         "2025-10-23", ""},
        {"TH010010", "Pop",      "Fon",      "CNX","CTI", 0.4,  40,  500, DELIVERED,         "2025-10-08", "2025-10-11"},
        {"TH010008", "Tle",      "Nune",     "CTI","CNX", 1.7,  90, 1800, OUT_FOR_DELIVERY,  "2025-10-22", ""},
        {"TH010005", "First",    "Boat",     "BKK","CNX", 2.8, 150, 3200, IN_TRANSIT,        "2025-10-17", ""}
    };
}

/* ---------- การเรียงลำดับ: Selection Sort ตาม tracking ---------- */
void selectionSortByTracking(vector<Parcel>& a){
    int n = (int)a.size();
    for(int i=0;i<n-1;i++){
        int minIdx = i;
        for(int j=i+1;j<n;j++)
            if (a[j].tracking < a[minIdx].tracking) minIdx = j;
        if (minIdx != i) swap(a[i], a[minIdx]);
    }
}

/* ---------- ค้นหาแบบไบนารี (ต้องเรียงแล้ว) ---------- */
int binarySearchTracking(const vector<Parcel>& a, const string& key){
    int L = 0, R = (int)a.size()-1;
    while (L <= R){
        int M = (L+R)/2;
        if (a[M].tracking == key) return M;
        if (a[M].tracking < key)  L = M+1;
        else                      R = M-1;
    }
    return -1;
}

/* ---------- การแก้ไข/ลบ/เพิ่ม ---------- */
bool updateStatus(vector<Parcel>& a, const string& key, Status s, const string& deliverDate=""){
    int idx = binarySearchTracking(a, key);
    if (idx < 0) return false;
    a[idx].status = s;
    if (s == DELIVERED && !deliverDate.empty())
        a[idx].deliverDate = deliverDate;
    return true;
}

bool removeByTracking(vector<Parcel>& a, const string& key){
    int idx = binarySearchTracking(a, key);
    if (idx < 0) return false;
    a.erase(a.begin()+idx);
    return true;
}

void addParcel(vector<Parcel>& a, const Parcel& p){
    // แทรกแล้วเรียงใหม่ง่ายที่สุดสำหรับงานนี้ (n เล็ก)
    a.push_back(p);
    selectionSortByTracking(a);
}

/* ---------- กรองตามสถานะ ---------- */
vector<Parcel> filterByStatus(const vector<Parcel>& a, Status s){
    vector<Parcel> out;
    for (auto &p : a) if (p.status == s) out.push_back(p);
    return out;
}

/* ---------- เดโมการใช้งานตามใบงาน ---------- */
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // 1) โหลดข้อมูลตัวอย่าง + แสดง
    auto db = sampleData();
    cout << "=== ข้อมูลเริ่มต้น (10 รายการ) ===\n";
    printTable(db);

    // 2) เรียงลำดับตาม tracking (Selection Sort) แล้วแสดง
    selectionSortByTracking(db);
    cout << "=== หลังเรียงลำดับด้วย Selection Sort (tracking) ===\n";
    printTable(db);

    // 3) ค้นหาเลขพัสดุ (Binary Search) – ตัวอย่าง: เจอ และ ไม่เจอ
    string k1 = "TH010006", k2 = "TH999999";
    int idx1 = binarySearchTracking(db, k1);
    int idx2 = binarySearchTracking(db, k2);
    cout << "ค้นหา " << k1 << " -> " << (idx1>=0 ? "พบที่ index "+to_string(idx1) : "ไม่พบ") << "\n";
    cout << "ค้นหา " << k2 << " -> " << (idx2>=0 ? "พบ" : "ไม่พบ") << "\n\n";

    // 4) อัปเดตสถานะ: ส่งสำเร็จ
    cout << "=== อัปเดตสถานะ " << k1 << " เป็น DELIVERED ===\n";
    if (updateStatus(db, k1, DELIVERED, "2025-10-23")) printTable(db);

    // 5) ลบพัสดุด้วย tracking
    cout << "=== ลบพัสดุ TH010003 ===\n";
    removeByTracking(db, "TH010003");
    printTable(db);

    // 6) กรองแสดงเฉพาะสถานะ OUT_FOR_DELIVERY
    cout << "=== กรองสถานะ OUT_FOR_DELIVERY ===\n";
    auto ofd = filterByStatus(db, OUT_FOR_DELIVERY);
    printTable(ofd);

    // 7) เพิ่มรายการใหม่
    cout << "=== เพิ่มรายการใหม่ และเรียงอัตโนมัติ ===\n";
    addParcel(db, {"TH010000", "Art", "Om", "BKK","CNX",0.7,50,500, AT_ORIGIN, "2025-10-24",""});
    printTable(db);

    return 0;
}
stdout
#include <stdio.h>

int main(void)
{
int i, j;
long dec;  /* ให้รับค่าอินพุทแบบ Long Integer - เลขจำนวนเต็มแบบยาว */
int bit[32];  /* จองพื้นที่ในการเก็บข้อมูลเลขฐาน 2 ลงใน Array */

    clrscr();  /* เคลียร์หน้าจอ */
    printf("Decimal Number : ");  /* แจ้งผู้ใช้เพื่อเตรียมป้อนค่าเลขฐาน 10 */
    scanf("%ld", &dec);  /* ต้องใช้ ld เพราะ Input มันเป็นแบบ Long Integer */
    i = 0;  /* กำหนดค่าเริ่มต้นของ Array */
    /* ทำตามที่ได้ออกแบบโปรแกรมเอาไว้ ... ยังไงยังงั้นเลย 55555+ */
    do {
        bit[i++] = dec % 2;  /* การหารเอาเศษ เพื่อให้เป็นคำตอบ */

        /* การหารทั่วไป แต่ตัวแปร dec ของภาษา C มันเป็น Integer หรือ เลขจำนวนเต็ม */
        /* ดังนั้นมันจึงตัดเศษ (หรือทศนิยม) ทิ้งไปโดยอัตโนมัติ */
        dec = dec / 2;

    } while (dec > 0);  /* เงื่อนไขที่ทำจนกระทั่ง dec = 0 ก็ออกจากวังวนเงื่อนไข */

    /* การแสดงผลของการแปลงเลขฐาน 10 เป็นเลขฐาน 2*/
    /* j = i - 1 และให้ j ลดค่าลงทีละ 1 ... ก็คืออ่านข้อมูลถอยหลังกลับเท่านั้นเองครับ */
    /* เพราะตัวแปรแบบ Array ในภาษา C มันเก็บข้อมูลจากซ้ายไปขวา */
    /* ทำให้ LSB มันไปอยู่ทางซ้าย ส่วน MSB มันไปอยู่ทางขวา */
    for(j = i - 1; j >= 0; j--)
        printf("%d", bit[j]);

printf("\n");
return 0;

}