User Tag List

+ Trả lời chủ đề
Trang 1/4 123 ... CuốiCuối
Hiện kết quả từ 1 tới 10 của 31

Chủ đề: Cùng giải đề thi Kỹ thuật lập trình nào anh em

  1. #1
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Cùng giải đề thi Kỹ thuật lập trình nào anh em

    Download File



    Mời anh em cùng giải, 18/5 này là thi rồi
    Contact me:
    Email: sangnd [at] svBK.vn
    Personal website: My Blog | Chat với người lạ
    Facebook Page của Bách Khoa Forum: http://www.facebook.com/svbk.vn

  2. Tớ cảm ơn 1973 đã chia sẻ.


  3. #2
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Cùng giải đề thi Kỹ thuật lập trình nào anh em

    Hôm nay mới giải được 1 số câu:

    Đề 1.

    Câu 1: Xóa bit thứ n của x

    Câu 2: Ở đây độ dài xâu s có thể vượt quá 32 nên có thể gây lỗi ở hàm strcpy. Sửa thành:

    PHP Code:
    void process_datachar *)
    {
        
    char cDest[strlen(s)+2];
        
    strcpy(cDests);
        ...

    Câu 3:

    Tại dòng:
    PHP Code:
    c/*p; 
    trình biên dịch sẽ hiểu 2 ký hiệu /* là bắt đầu cho 1 đoạn chú thích, do đó 1 đoạn chương trình sẽ không được biên dịch do đã bị coi là chú thích. Phần chương trình trở thành:

    PHP Code:
    #include <stdio.h>
    void main()
    {
        
    int ab3;
        
    int *= &c;
        
    c;
        
    printf("a = %d, b = %d\n"ab);

    do đó a = c = 3 còn b thì không được thiết lập giá trị, b sẽ nhận một giá trị nào đó không đoán trước được.

    Để 2 ký tự /* trong dòng
    PHP Code:
    c/*p; 
    không bị hiểu nhầm là bắt đầu chú thích thì có thể viết như sau:
    PHP Code:
    c/(*p); 
    Bài 4.

    Trong hàm đã cho, biến ta và tb thật sự không cần thiết, do đó có thể loại bỏ. Vòng lặp for có thể cho i chạy từ 0 đến n:

    PHP Code:
    float f(float *afloat *bint n) {
        
    float sum 0.0;
        
    int i;
        for (
    0<= ni++) {
            
    sum += a[i] + b[i];
        }
        return 
    sum;

    Bài 5.

    Hàm sw thực hiện đổi chỗ 2 phần tử a và b mà không cần sử dụng biến trung gian
    (không biết câu này có phải giải thích không nhỉ, mình cũng không biết phải giải thích thế nào )

    Bài 6. Sửa lại thành:

    PHP Code:
    void my_func(float valfloat *aint n){
        
    int i=0;
        
    float testval log(val)/log(2);
        while (
    i<n) {
            if (
    a[i] == testval){
                
    do_something;
                break;
            }
            else 
    i++;
        }

    Bài 7.
    Bài 8.

  4. #3
    Điều hành viên Avatar của iexplore
    Tham gia ngày
    Sep 2010
    Bài gửi
    208

    Mặc định Re: Cùng giải đề thi Kỹ thuật lập trình nào anh em

    Câu 2: // làm thế này không biết đúng chưa, chưa test lại
    lỗi ở đây là chưa biết độ dài của xâu s mà đã copy vào cDest[32], có thể gặp lỗi tràn
    Mã:
    void process_data( char *s )
    {
        char *cDest = ( char * ) malloc ( sizeof(char) * strlen(s));
        strcpy(cDest, s);
        ...
    }

  5. #4
    Điều hành viên Avatar của iexplore
    Tham gia ngày
    Sep 2010
    Bài gửi
    208

    Mặc định Re: Cùng giải đề thi Kỹ thuật lập trình nào anh em

    Quote Nguyên văn bởi 1973 Xem bài viết
    Hôm nay mới giải được 1 số câu:

    Đề 1.

    Câu 1: Xóa bit thứ n của x

    Câu 2:
    Hình như số thứ tự của bit bắt đầu từ 0 chứ, nếu thế phải là xóa bit thứ n-1

  6. #5
    Khánh Hòa
    Tham gia ngày
    Apr 2010
    Bài gửi
    159

    Mặc định Re: Cùng giải đề thi Kỹ thuật lập trình nào anh em

    Câu 7:
    code
    PHP Code:
    /*
        Nguyen Khanh hoa
        CNTT 3-K55

    */
    #include <iostream>
    #include <conio.h>
    #include <malloc.h>
    #include <string.h>
    #include <fstream>
    using namespace std;
    struct sinhvien{
        
    struct hoso{
            
    char malop[6];
            
    char hovaten[35];
            
    long sohieusv;
            
    float kqht;
        }
    data;
        
    struct sinhvien *next;
    }*
    ds;
    int i,j,m,n;
    void nhap(){
        
    ds=(sinhvien *)malloc(sizeof(sinhvien));
        
    sinhvien *node=ds,*temp=ds;
        
    cout<<"\nNhap thong tin SV thu 1: "<<endl;
        
    cout<<"\nMa lop: ";cin>>ds->data.malop;
        
    cout<<"\nHo va ten: ";cin>>ds->data.hovaten;
        
    cout<<"\nSo Hieu SV: ";cin>>ds->data.sohieusv;
        
    cout<<"\nKet qua ht: ";cin>>ds->data.kqht;
        
    ds->next=NULL;
        
    i=1;
        while (
    1){
            
    i++;
            
    temp=node;
            
    node=(sinhvien *)malloc(sizeof(sinhvien));
            
    cout<<"\nNhap thong tin SV thu "<<i<<": "<<endl;
            if (
    i==5) break;
            
    cout<<"\nMa lop: ";cin>>node->data.malop;
            
    cout<<"\nHo va ten: ";cin>>node->data.hovaten;
            
    cout<<"\nSo Hieu SV: ";cin>>node->data.sohieusv;
            
    cout<<"\nKet qua ht: ";cin>>node->data.kqht;
            
    node->next=NULL;
            
    temp->next=node;
        }
    }
    void sapxeplop(){
        
    sinhvien *temp1=ds,*temp2=ds;
        
    long tg;
        
    float tg1;
        
    char s[100];
        while (
    temp1->next!=NULL){
            
    temp2=temp1->next;
            while (
    temp2!=NULL){
                if (
    strcmp(temp1->data.malop,temp2->data.malop)>0){
                    
    tg=temp1->data.sohieusv;
                    
    temp1->data.sohieusv=temp2->data.sohieusv;
                    
    temp2->data.sohieusv=tg;

                    
    tg1=temp1->data.kqht;
                    
    temp1->data.kqht=temp2->data.kqht;
                    
    temp2->data.kqht=tg1;
                    
    strcpy(s,"\0");
                    
    strcpy(s,temp1->data.hovaten);
                    
    strcpy(temp1->data.hovaten,temp2->data.hovaten);
                    
    strcpy(temp2->data.hovaten,s);

                    
    strcpy(s,"\0");
                    
    strcpy(s,temp1->data.malop);
                    
    strcpy(temp1->data.malop,temp2->data.malop);
                    
    strcpy(temp2->data.malop,s);
                }
                
    temp2=temp2->next;

            }
            
    temp1=temp1->next;
        }
    }
    /*void sapxepten(){
        sinhvien *temp=ds,*temp1=ds,*temp2=ds;
        long tg;
        float tg1;
        char s[100];
        char ten[35];
        while (temp!=NULL){
            strcpy(ten,temp->data.hovaten);
            while (strcmp(temp1->data.hovaten,ten)==0 &&temp1->next!=NULL) temp1=temp1->next;

            temp=temp->next;
        }
    }*/
    void xuat(){
        
    sinhvien *temp=ds;
        
    i=0;
        while (
    temp!=NULL){
            
    i++;
            
    cout<<"\nThong tin SV thu "<<i<<": "<<endl;
            
    cout<<"\nMa lop: ";cout<<temp->data.malop;
            
    cout<<"\nHo va ten: ";cout<<temp->data.hovaten;
            
    cout<<"\nSo Hieu SV: ";cout<<temp->data.sohieusv;
            
    cout<<"\nKet qua ht: ";cout<<temp->data.kqht;
            
    temp=temp->next;
        }
    }
    int main(){
        
    nhap();
        
    sapxeplop();
        
    xuat();
        
    getch();
        return 
    0;

    Mới viết xong hàm sắp xếp theo lớp, sắp xếp họ tên để hôm sau vậy

  7. #6
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Cùng giải đề thi Kỹ thuật lập trình nào anh em

    Quote Nguyên văn bởi iexplore Xem bài viết
    Câu 2: // làm thế này không biết đúng chưa, chưa test lại
    lỗi ở đây là chưa biết độ dài của xâu s mà đã copy vào cDest[32], có thể gặp lỗi tràn
    Mã:
    void process_data( char *s )
    {
        char *cDest = ( char * ) malloc ( sizeof(char) * strlen(s));
        strcpy(cDest, s);
        ...
    }
    Tớ nghĩ không cần thiết phải đụng chạm đến cấp phát động làm gì (lại mất công giải phóng), có thể giải quyết vấn đề này đơn giản hơn:

    PHP Code:
    void process_datachar *)
    {
        
    char cDest[strlen(s)+2];
        
    strcpy(cDests);
        ...

    Quote Nguyên văn bởi iexplore Xem bài viết
    Hình như số thứ tự của bit bắt đầu từ 0 chứ, nếu thế phải là xóa bit thứ n-1
    Chắc cậu nhầm sang cái đổi số nhị phân sang số nhị phân (từ 2^0 đến 2^n-1) thì phải. Đếm số bit ở đây thì đếm từ 1 chứ

  8. #7
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Cùng giải đề thi Kỹ thuật lập trình nào anh em

    Vừa giải câu 3, 4, 5, 6 ở post #2, anh em vào xem có đúng không cái, có gì xin cứ choem'

  9. #8
    HUT's Student
    Tham gia ngày
    Feb 2012
    Bài gửi
    272

    Mặc định Re: Cùng giải đề thi Kỹ thuật lập trình nào anh em

    Cho mình hỏi là đề thi KTLT thì yêu cầu ngôn ngữ là C hay C++ hay tùy ý vậy ?

  10. #9
    .:: Grumpy svBKer ::. Avatar của 1973
    Tham gia ngày
    Mar 2010
    Bài gửi
    3.793

    Mặc định Re: Cùng giải đề thi Kỹ thuật lập trình nào anh em

    Quote Nguyên văn bởi boss14420 Xem bài viết
    Cho mình hỏi là đề thi KTLT thì yêu cầu ngôn ngữ là C hay C++ hay tùy ý vậy ?
    Tớ nghĩ là cả C và C++ đều được.

    P/s: đang làm bài 7, quả thật cái đoạn nhập họ tên lại thêm cái khoản chuẩn hóa xâu nữa thì quá tội, 90 phút làm không xuể

  11. #10
    HUT's Student
    Tham gia ngày
    Feb 2012
    Bài gửi
    272

    Mặc định Re: Cùng giải đề thi Kỹ thuật lập trình nào anh em

    Với trường hợp như bài 7 thì dùng thuật toán Selection Sort là tốt nhất:
    PHP Code:
    /*
     * =====================================================================================
     *
     *       Filename:  ktlt53-7.cc
     *
     *    Description:  
     *
     *        Version:  1.0
     *        Created:  05/12/2012 12:21:35 AM
     *       Revision:  none
     *       Compiler:  gcc
     *
     *         Author:  BOSS14420 (boss14420), boss14420@gmail.com
     *        Company:  
     *
     * =====================================================================================
     */

    #include <iostream>
    #include <cstdlib>
    #include <cstring>

    struct sinhvien{
        
    struct hoso{
            
    char malop[6];
            
    char hovaten[35];
            
    long sohieusv;
            
    float kqht;
        }
    data;
        
    struct sinhvien *next;
    };

    std::istreamoperator>> (std::istream&, sinhvien::hoso&);
    std::ostreamoperator<< (std::ostream&, sinhvien::hoso const&);
    bool operator< (sinhvien::hoso const&, sinhvien::hoso const&);

    void inputsv(sinhvien *&);
    void sortsv(sinhvien *&);
    void outputsv(sinhvien const *);
    void freesv(sinhvien *&);


    int main() {
        
    sinhvien *sv;

        
    inputsv(sv);
        
    sortsv(sv);
        
    outputsv(sv);
        
    freesv(sv);

        return 
    0;
    }

    std::istreamoperator>> (std::istreamissinhvien::hosohs) {
        
    std::cout << "Mã lớp: ";
        
    is.getline(hs.malop6);

        
    std::cout << "Họ và tên: ";
        
    is.getline(hs.hovaten35);

        
    char input[50];
        
    std::cout << "Số hiệu sinh viên: ";
        
    is.getline(input50);
        
    hs.sohieusv std::atol(input);

        
    std::cout << "Kết quả học tập: ";
        
    is.getline(input50);
        
    hs.kqht std::atof(input);
        
        return 
    is;
    }

    std::ostreamoperator<< (std::ostreamossinhvien::hoso const &hs) {
        return 
    os << "Mã lớp: " << hs.malop << '\n'
                    
    << "Họ và tên: " << hs.hovaten << '\n'
                    
    << "Số hiệu sinh viên: " << hs.sohieusv << '\n'
                    
    << "Kết quả học tập: " << hs.kqht << '\n';
    }

    bool operator< (const sinhvien::hosodt1, const sinhvien::hosodt2) {
        
    // So sánh mã lớp
        
    int malop_comp std::strcmp(dt1.malopdt2.malop);
        if(
    malop_comp 0)
            return 
    true;
        else if(
    malop_comp 0)
            return 
    false;

        
    // So sánh họ tên

        // Tìm Vị trí đầu tiên của tên 
        
    char const *ten1 dt1.hovaten std::strlen(dt1.hovaten) -1
                   *
    ten2 dt2.hovaten std::strlen(dt2.hovaten) -1;
        for(; (
    ten1 != dt1.hovaten) && ((*ten1) != ' '); --ten1);
        for(; (
    ten2 != dt2.hovaten) && ((*ten2) != ' '); --ten2);
        
        
    int ten_comp std::strcmp(ten1ten2);
        if(
    ten_comp 0)
            return 
    true;
        else if(
    ten_comp 0)
            return 
    false;

        
    // So sánh họ
        
    return std::strcmp(dt1.hovatendt2.hovaten) < 0;
    }

    void sortsv(sinhvien*& ds) {
        if(!
    ds || !ds->next)
            return;

        
        
    // selection sort
        
    sinhvien *iter1 ds, *min ds->next, *predmin ds;
        for(; 
    iter1->nextiter1 iter1->next)
            if( 
    iter1->next->data min->data ) {
                
    predmin iter1;
                
    min iter1->next;
            }

        if(
    min->data ds->data) {
            
    predmin->next min->next;
            
    min->next ds;
            
    ds min;
        }

        for(
    iter1 dsiter1->nextiter1 iter1->next) {
            
    min iter1->nextpredmin iter1;
            
            
    // find min
            
    for(sinhvien *iter2 miniter2->nextiter2 iter2->next)
                if( 
    iter2->next->data min->data ) {
                    
    predmin iter2;
                    
    min iter2->next;
                }

            
    // reconnect linked-list
            
    predmin->next min->next;
            
    min->next iter1->next;
            
    iter1->next min
        }
    }

    void freesv(sinhvien*& ds) {
        
    sinhvien *nextsv ds;
        while(
    ds) {
            
    nextsv ds->next;
            
    delete ds;
            
    ds nextsv;
        }
    }

    void inputsv(sinhvien*& ds) {
        
    freesv(ds);

        
    ds = new sinhvien;
        
    std::cout << "Sinh viên thứ 1:\n";
        
    std::cin >> ds->data;
        
    std::cout << "Tiếp tục nhập (Y/N) ?";
        if(
    std::cin.get() == 'N')
            return;

        
    sinhvien *lastsv ds;
        
    int count 1;

        while(
    true) {
            
    sinhvien *sv = new sinhvien;
            
    sv->next NULL;
            
    lastsv->next sv;
            
    lastsv sv;

            
    std::cout << "\nSinh viên thứ " << ++count << ":\n";
            
    std::cin.ignore();
            
    std::cin >> sv->data;

            
    std::cout << "Tiếp tục nhập (Y/N) ?";
            if(
    std::cin.get() == 'N') {
                
    std::cout << "\n\n";
                break;
            }
        }
    }

    void outputsv(sinhvien const *ds) {
        
    int count 0;
        while(
    ds) {
            
    std::cout << "Sinh viên thứ " << ++count << '\n' << ds->data << "\n\n";
            
    ds ds->next;
        }

    Lần sửa cuối bởi boss14420; 12-05-2012 lúc 03:02 AM

+ Trả lời chủ đề
Trang 1/4 123 ... CuốiCuối

Thông tin chủ đề

Users Browsing this Thread

Hiện có 1 người đọc bài này. (0 thành viên và 1 khách)

Từ khóa (Tag) của chủ đề này

Quyền viết bài

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


About svBK.VN

    Bách Khoa Forum - Diễn đàn thảo luận chung của sinh viên ĐH Bách Khoa Hà Nội. Nơi giao lưu giữa sinh viên - cựu sinh viên - giảng viên của trường.

Follow us on

Twitter Facebook youtube