Công cụ bảo vệ mã nguồn .NET mạnh nhất, không thể unpack, miễn phí cho các khách hàng đầu tiên đăng ký.
Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Khai báo struct lưu trữ thông tin cá nhân không quá 68 bytes có được không?

  1. #1
    Ngày gia nhập
    08 2011
    Bài viết
    4

    Question Khai báo struct lưu trữ thông tin cá nhân không quá 68 bytes có được không?

    Em có bài tập này nhưng suy nghĩ rồi mà vẫn không giải quyết ổn được, search thì em không biết search như thế nào nữa, mong mấy anh, chị giúp giùm em.

    Đề:
    Giả sử cần khai báo struct sau, lưu thông tin cá nhân
    - Số CMND: chuỗi 9 ký tự
    - Họ tên: chuỗi 30 ký tự
    - Quê quán: chuỗi 20 ký tự
    - Ngày sinh
    - Dân tộc: có 2 loại Kinh hoặc ít người
    - Tôn giáo: có 4 loại Không có, Phật, Thiên Chúa, Khác
    a. Khai báo cấu trúc trên bằng C/C++ không quá 68 bytes. Chỉ rõ dung lượng đã khai báo
    b. Bạn có thể khai báo cấu trúc trên nhỏ nhất bao nhiêu bytes. Chỉ rõ nếu khác câu a.

    Em đã làm như vầy
    struct TTCN{
    char[10] CMND; // cmnd
    char[31] HoTen; // ho va ten
    char[21] QQ; // que quan
    // 3 cai tren da het 62 bytes
    bool dantoc; // true: kinh, false: it nguoi (1byte)
    int tongiao; // 1: khong co, 2: phat, 3: thien chua, 4: khac (2bytes)
    // tong o tren da la 62 + 1 + 2 = 65
    // ma con ngay sinh nua, may anh chi giup em bai nay voi
    };
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.

  2. #2
    Ngày gia nhập
    10 2010
    Bài viết
    177

    Trích dẫn Nguyên bản được gửi bởi tnohtition Xem bài viết
    Em có bài tập này nhưng suy nghĩ rồi mà vẫn không giải quyết ổn được, search thì em không biết search như thế nào nữa, mong mấy anh, chị giúp giùm em.

    Đề:
    Giả sử cần khai báo struct sau, lưu thông tin cá nhân
    - Số CMND: chuỗi 9 ký tự
    - Họ tên: chuỗi 30 ký tự
    - Quê quán: chuỗi 20 ký tự
    - Ngày sinh
    - Dân tộc: có 2 loại Kinh hoặc ít người
    - Tôn giáo: có 4 loại Không có, Phật, Thiên Chúa, Khác
    a. Khai báo cấu trúc trên bằng C/C++ không quá 68 bytes. Chỉ rõ dung lượng đã khai báo
    b. Bạn có thể khai báo cấu trúc trên nhỏ nhất bao nhiêu bytes. Chỉ rõ nếu khác câu a.
    C1:
    struct ngay
    {
    int ng;
    int th;
    int nm;
    };
    struct TTCN{
    char[9] CMND; // cmnd
    char[30] HoTen; // ho va ten
    char[20] QQ; // que quan
    // 3 cai tren da het 62 bytes
    bool dantoc; // true: kinh, false: it nguoi (1byte)
    char tongiao; // 1: khong co, 2: phat, 3: thien chua, 4: khac (2bytes)
    ngay ngaysinh; // 6 bytes
    };

    => 9 + 30 + 20 + 1 + 1 + 6 = 67

    C2:
    struct TTCN{
    long CMND; // cmnd
    char[30] HoTen; // ho va ten
    char[20] QQ; // que quan
    // 3 cai tren da het 62 bytes
    bool dantoc; // true: kinh, false: it nguoi (1byte)
    char tongiao; // 1: khong co, 2: phat, 3: thien chua, 4: khac (2bytes)
    long ngaysinh; // 6 bytes
    };
    => 4 + 30 + 20 + 1 + 1 + 4 = 60

    C3:
    struct TTCN{
    long CMND; // cmnd
    char[30] HoTen; // ho va ten
    char[20] QQ; // que quan
    // 3 cai tren da het 62 bytes
    char dantoc_tongiao; // true: kinh, false: it nguoi (1byte)
    long ngaysinh; // 6 bytes
    };
    => 4 + 30 + 20 + 1 + 4 = 59

  3. #3
    Ngày gia nhập
    08 2011
    Bài viết
    4

    Mặc định Bổ sung

    Mình hiểu cách của bạn trình bày nhưng cho mình hỏi là, khi người ta yêu cầu CMND 9 ký tự, thì mình phải khai báo char[10] mới đúng chứ, chứ đâu phải char[9] dành 1 byte cho ký tự kết thúc chuỗi. Tương tự cho họ tên và quê quán

  4. #4
    Ngày gia nhập
    10 2010
    Bài viết
    177

    Thì mình ko lưu kí tự kết thúc. Nếu cmnd ko đủ 9 kí tự thì lưu kí tự kết thúc. Còn = 9 kí tự thì ko lưu kí tự kết thúc

  5. #5
    Ngày gia nhập
    01 2012
    Nơi ở
    localhost
    Bài viết
    140

    TTCN 68 bytes phải ép kiểu 1 số biến về kiểu mình dùng.
    C++ Code:
    1. struct TTCN
    2. {
    3.     char cmnd[10];    // 10 bytes
    4.     char hoten[31];   // 31 bytes
    5.     char quequan[21]; // 21 bytes
    6.     char ngaysinh;    // 01 byte - luu gia tri so
    7.     char thangsinh;   // 01 byte - luu gia tri so
    8.     unsigned short int namsinh;// 02 bytes
    9.     char dantoc;      // 01 byte
    10.     char tongiao;     // 01 byte
    11. };

    TTCN2 66 bytes, dùng đơn giản, không phải convert kiểu time này nọ, tên họ, cmnd, các cái không cần phải xử lý ngoại lệ cho ký tự \0
    C++ Code:
    1. struct TTCN2
    2. {
    3.     char cmnd[10];
    4.     char hoten[31];
    5.     char quequan[21];
    6.     unsigned short int dantoc: 1;
    7.     unsigned short int tongiao: 7;
    8.     unsigned short int ngaysinh: 8;
    9.     unsigned short int namsinh: 12;
    10.     unsigned short int thangsinh: 4;
    11. };

    Các code trên đây test trên compiler có kiểu int 4 bytes, padding 2 bytes.
    Công cụ bảo vệ mã nguồn .NET mạnh nhất hiện tại, miễn phí cho các khách hàng đầu tiên đăng ký.
    Rẹt rẹt..

Các đề tài tương tự

  1. khai báo struct
    Gửi bởi sangu trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 20-02-2014, 06:53 PM
  2. Thuật toán C Cách tạo ID chứa nhiều thông tin khi struct chỉ còn có 4 bytes?
    Gửi bởi bathong trong diễn đàn Thắc mắc CTDL & Giải thuật
    Trả lời: 4
    Bài viết cuối: 16-11-2012, 09:06 PM
  3. khai báo struct
    Gửi bởi edconan93 trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 29-01-2012, 04:24 PM
  4. vấn đề khi khai báo struct!!! help me
    Gửi bởi kiehuy trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 16-04-2008, 07:16 AM
  5. Cho em hỏi về các khai báo prototype cho struct
    Gửi bởi royevn trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 20-05-2007, 10:11 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn