Trang 6 trên tổng số 21 Đầu tiênĐầu tiên ... 4567816... Cuối cùngCuối cùng
Từ 51 tới 60 trên tổng số 203 kết quả

Đề tài: Đố vui về C++, giúp các bạn học C++ tốt hơn

  1. #51
    Ngày gia nhập
    05 2008
    Bài viết
    11

    Mặc định Đố vui về C++, giúp các bạn học C++ tốt hơn

    Trích dẫn Nguyên bản được gửi bởi huynguyen;
    [/code
    Code:
    int min(int a, int b) {
        if (a > b) {
            return b;
        } else if (a <= b) {
            return a;
        }
    }
    mình xin sửa lại code này:
    Code:
    int min(int a, int b) {
        if (a > b) {
            return b;
        } else
            return a;
    }
    ý tưởng của mình là vậy. Ko biết có dúng hok nhỉ?

  2. #52
    Ngày gia nhập
    12 2008
    Bài viết
    0

    Trích dẫn Nguyên bản được gửi bởi huynguyen Xem bài viết
    Ta có chương trình sau dùng để xuất 1 số ngẫu nhiên từ 0 đến 9 ra màn hình:
    Code:
    #include <iostream>
    using namespace std;
    int main(){
        srand(time(NULL));
        int x = rand()%10;
        cout <<x <<endl;
        system("pause");
        return 0;
    }
    Hãy sửa đoạn code trên để chương trình xuất 1 số
    a. từ 1 đến 10
    b. từ một giá trị min đến 1 giá trị max nào đó, giả sử từ 5 đến 29.
    tổng quát của nó là đây :
    Code:
         int RANGE_MIN;
         int RANGE_MAX;   
         int rand = (((double) rand() /(double) RAND_MAX)*RANGE_MAX  +  RANGE_MIN);
    Đã được chỉnh sửa lần cuối bởi eragon0611 : 28-12-2008 lúc 11:36 PM. Lý do: rõ ràng hơn

  3. #53
    Ngày gia nhập
    11 2008
    Nơi ở
    Neverland
    Bài viết
    48

    Một topic hay nhưng không còn được các sư huynh tiếp tục duy trì :
    Tổng quát bài ngẫu nhiên từ MIN => MAX :
    C++ Code:
    1. #include <iostream>
    2. using namespace std;
    3.  
    4. const int MIN = 5;
    5. const int MAX = 29;
    6.  
    7. int main() {
    8.     int x = 0;
    9.     srand(time(NULL));
    10.     x = rand() % (MAX - MIN + 1) + MIN;
    11.     system("pause >> NULL");
    12.     return 0;
    13. }
    I'm superman

  4. #54
    Ngày gia nhập
    07 2007
    Nơi ở
    TP.HCM
    Bài viết
    199

    int rand = (((double) rand() /(double) RAND_MAX)*(RANGE_MAX -RANGE_MIN) + RANGE_MIN);

  5. #55
    Ngày gia nhập
    04 2009
    Nơi ở
    một căn hộ nhỏ trên trái đất
    Bài viết
    372

    Hôm nay phải đào mộ rồi, đáng lẽ mình không trở thành kẻ đào mộ nếu đã phát hiện ra đề tài này sớm hơn.
    Mình có câu đố khác cho mọi người về thao tác con trỏ nâng cao:
    C++ Code:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4.  
    5. char *(*((*aa[10][10])()))(char **as,int size);
    6. char *hs[]={"Nguyen","Quang","Hien"};//một mảng các chuỗi
    7. //khai báo pa, pf, tf ở đây
    8. int main()
    9. {
    10.    
    11.    
    12.     for(pa=aa;pa<&aa[10];++pa)
    13.         for(pf=*pa;pf<*pa+10;++pf)
    14.             *pf = 0;
    15.     aa[0][0]=&ts;
    16.     printf("%s",aa[0][0]()(hs,sizeof(hs)/sizeof(char*)));//in ra một chuỗi gồm các kí tự đầu của mảng hs
    17.     return 0;
    18. }
    Trong đoạn mã có sử dụng các biến sau: pa,pf,ts nhưng chưa được khai báo. Hãy khai báo các biến này (cộng thêm định nghĩa hàm khác nếu cần) để sao cho đoạn mã trong hàm main có thể chạy được (không dùng các chỉ thị tiền xử lý, không sửa gì ở main), đồng thời kết quả của hàm printf ở phía cuối đoạn mã trên sẽ là chuỗi gồm các kí tự đầu của mảng hs (mảng hs là mảng bất kì), trong trường hợp cụ thể của đoạn mã trên thì đầu ra là
    Output:
    Code:
    NQH
    Giải thích khai báo này:
    C++ Code:
    1.  char *(*((*aa[10][10])()))(char **as,int size);
    Giải thích tác dụng của đoạn mã này
    C++ Code:
    1.   for(pa=aa;pa<&aa[10];++pa)
    2.         for(pf=*pa;pf<*pa+10;++pf)
    3.             *pf = 0;
    Đã được chỉnh sửa lần cuối bởi icttrack : 16-02-2010 lúc 12:12 AM.
    Being top programmers always requires advanced knowledge of C/C++ and assembly


  6. #56
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    Mặc định Đố vui về C++, giúp các bạn học C++ tốt hơn

    cái cậu này, đi tảo mộ này tết à :( nhưng mà cái này hay nên mình đồng tình với cậu.... hj hj

    để mình dùng logic phân tích câu hỏi của cậu nhé

    PHP Code:
    char *(*((*aa[10][10])()))(char **as,int size); 

    Bước 1 : đầu tiên, mình dịch đoạn code sau
    PHP Code:
    char *(*p);
        
    p=2
    nhận được thông báo như sau : cannot convert from 'int' to 'char **'
    vậy có nghĩa là p ở đây là char**
    ổ vậy là done 1 vấn đề

    Bước 2:
    PHP Code:
        char *(*p)(char**,int );
        
    p=2
    nhận được thông báo như sau : cannot convert from 'int' to 'char *(__cdecl *)(char **,int)
    vậy ta thấy 1 điều : đây là 1 con trỏ hàm viết đẹp, chuẩn hơn phải là
    PHP Code:
    char* (*p)(char**,int); 
    //cái * đầu tiên phải đưa về gần char mới là chuẩn,
    //giống như là char* gets(char*)
    //char* ở đây là kiểu dữ liệu trả về


    Bước 3:
    PHP Code:
    char *(*p)(char**a,int b);
        
    p=2
    mà vẫn nhận được thông báo như thế , vậy có nghĩa là cái định danh thêm vô ko có ý nghĩa gì,

    => đã giải thích được cái (char **as,int size)
    của bạn rồi nhé, đoạn này có ý nói là con trỏ hàm có 2 tham số truyền vào là
    (char**,int)


    viết lại là
    PHP Code:
    char* (*((*aa[10][10])()))(char **,int); 
    Bước 4: tiếp theo
    dịch thử
    PHP Code:
        char* (*(*p))(char **,int);
        
    p="aa"
    nhận được thông báo và tôi thấy nó hoàn toàn giống với
    PHP Code:
        char* (**p)(char **,int);
        
    p="aa"
    ok? vấn đề đến đây lại dễ hiểu hơn



    Bước 5 : quan trọng nhất
    PHP Code:
    void ham(int a)(int b,int c)
    {
        
    cout<<a<<"la nhi";
    }
    void main()
    {
        
    ham(2)(2,3);
        
    system("pause");

    dịch code này, tôi nhận được dòng báo lỗi : function returns function
    ổ, lại 1 vấn đề nữa được thắc mắc, đó là 2 cái ngoặc này của bạn
    (*aa[][])()
    tôi đã hiểu,

    char*(*((*p)()))(char **as,int size);
    cả cái đoạn tôi đóng đỏ đó sẽ trả về 1 tên hàm hoặc con trỏ hàm (chưa bàn chi tiết, chỉ tiết ở bước 7) và trở thành
    PHP Code:
    charhàm(char**,int
    ok.vấn đề đã giải quyết 60%

    Bước 6 :
    PHP Code:
    char* (*((*aa[10][10])()))(char **,int); 
    chỉ khác bước 5 ở chỗ đây là 1 mảng các con trỏ như bước 5

    Bước 7 :
    char* (*((*aa)()))(char **,int);
    giả sử ((*aa)()) trả về tên hàm là hamx
    vậy ta có
    char* (*hamx)(char**,int)
    vậy đến đây vấn đề đã được giải quyết 99% rồi,

    ..................... ok??????


    vậy đơn giản hóa vấn đề, ta có đây là khai báo 1 mảng con trỏ... hj hj hj....
    Đã được chỉnh sửa lần cuối bởi langman : 16-02-2010 lúc 10:05 AM.
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  7. #57
    Ngày gia nhập
    04 2009
    Nơi ở
    một căn hộ nhỏ trên trái đất
    Bài viết
    372

    Bác langman đúng là giải thích hơi lan man, thực ra bác nói là được rồi nhưng vẫn còn chung chung quá. Ấn tượng nhất là bác dùng trình biên dịch gỡ rối dần cái mớ bòng bong đó.Tuy nhiên bác vẫn chưa làm hết theo yêu cầu đề bài. Và việc bảo đây là một mảng con trỏ thì [10][10] là liệu đây có đơn thuần là một mảng. Câu đố của mình vẫn chưa được giải hoàn chỉnh
    Đã được chỉnh sửa lần cuối bởi icttrack : 16-02-2010 lúc 11:22 AM.
    Being top programmers always requires advanced knowledge of C/C++ and assembly


  8. #58
    Ngày gia nhập
    06 2007
    Nơi ở
    C:\WINDOWS\system32\dllcache\
    Bài viết
    3,007

    hj, hj hj, đã add topic này vô bản đồ box để mọi người tiện tham khảo.....

    langman vừa đọc lại , đúng là lan man... hj hj mà cái từ này sao nó lại giống giống cái nick của langman nhỉ hj hj hj

    langman ngó qua bài bạn, thấy cái dòng đó hay nhất (mình thật sự rất cảm phục cái đề bài của bạn ra và rất muốn tìm hiểu cái dòng đó), nên langman bắt tay vào tìm hiểu, langman tường thuật lại quá trình mình tìm hiểu vì muốn giúp những bạn nào chưa có kĩ năng phân tích những vấn đề phức tạp....

    Câu trả lời langman mạn phép nhờ người tiếp theo trả lời vậy.

    à cậu ơi
    PHP Code:
        aa[0][0]=&ts
    cái này là ts hay hs vậy, mình nghĩ là hs
    Đã được chỉnh sửa lần cuối bởi langman : 16-02-2010 lúc 07:11 PM.
    ^_,^

    Facebook : https://www.facebook.com/langmaninternet

    Bùi Tấn Quang

  9. #59
    Ngày gia nhập
    04 2009
    Nơi ở
    một căn hộ nhỏ trên trái đất
    Bài viết
    372

    à cậu ơi
    C++ Code:
    1.     aa[0][0]=&ts;
    cái này là ts hay hs vậy, mình nghĩ là hs
    cái này đúng là ts đó langman. Ở yêu cầu đề bài mình có nói rằng
    Trích dẫn Nguyên bản được gửi bởi icttrack
    Trong đoạn mã có sử dụng các biến sau: pa,pf,ts nhưng chưa được khai báo. Hãy khai báo các biến này (cộng thêm định nghĩa nếu cần) để sao cho đoạn mã trên có thể chạy được
    Bài này cũng rất khoai, mình xin giải đáp một phần bài tập này.
    C++ Code:
    1. char *(*((*aa[10][10])()))(char **as,int size);
    Khai báo trên có nghĩa là khai báo một mảng của mảng con trỏ hàm trả về con trỏ hàm trả về con trỏ kiểu char.

    Đây là mã giải đáp đề bài của mình, biên dịch dưới dạng mã C, chạy được trên VC++ và GNU GCC
    C Code:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4.  
    5. char* firstLetter(char **as, int size)
    6. {
    7.     static char* s=0;
    8.     int i;
    9.     if(s!=0)
    10.         free(s);
    11.     //minh hoa cho bai tap, mac du co ro ri bo nho
    12.     s=(char *)malloc(sizeof(char)*(size+1));
    13.     for(i=0;i<size;++i)
    14.         s[i]=as[i][0];
    15.     s[i]='\0';
    16.     return s;
    17. }
    18.  
    19. char *(*( ts() ))(char **as, int size)
    20. {
    21.         return &firstLetter;
    22. }
    23.  
    24.  
    25. int main()
    26. {
    27.    
    28.     char*(*((*(*pa)[10])()))(char **as,int size);
    29.     char *(*( (*aa[10][10])() ))(char **as,int size);
    30.     char* (*( (**pf)() ))(char **as,int size);
    31.     char *hs[]={"Nguyen","Quang","Hien"};
    32.     for(pa=aa;pa<&aa[10];++pa)
    33.         for(pf=*pa;pf<*pa+10;++pf)
    34.             *pf = 0;
    35.     aa[0][0]=&ts;
    36.     printf("%s",aa[0][0]()(hs,sizeof(hs)/sizeof(char*)));
    37.     return 0;
    38. }
    Với đoạn mã đầy đủ đây rồi, mọi người có thể giải thích các câu hỏi mình đã nêu không?
    Being top programmers always requires advanced knowledge of C/C++ and assembly


  10. #60
    Ngày gia nhập
    01 2010
    Nơi ở
    до свидания!
    Bài viết
    1,766

    Hãy xem kết quả của code này:
    PHP Code:
    #include <iostream.h>
    #include <stdio.h>

    void main()
    {
      
    cout<<"Xin chao!";
      
    printf("Duy Cuong ");

    Kết quả code trên rất lạ lùng, nó không in ra dòng "Xin chao!Duy Cuong " mà nó lại in thành "Duy Cuong Xin chao!" với 1 dòng duy nhất trên màn hình kết quả.

    Các bạn hãy thử sức như sau: Chỉ thêm một câu lệnh nào đó vào trong main() để thu được một dòng duy nhất là: "Xin chao!Duy Cuong " (Chú ý: Chỉ được phép thêm duy nhất 1 dòng lệnh vào main()).
    Chúc may mắn!

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

  1. Sự cố Nhờ mod chuyển giúp bài "Sắp xếp số thứ tự ngay trong bảng của 1 database?" từ MySQL sang MSSQL giúp!
    Gửi bởi hu-xeko trong diễn đàn Ý kiến, đề xuất và khiếu nại
    Trả lời: 1
    Bài viết cuối: 12-03-2012, 07:48 PM
  2. Mới nhập môn khó quá , cần trợ giúp [Vấn đề của bạn cần muốn giúp là gì ?]
    Gửi bởi cuingo212 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 5
    Bài viết cuối: 22-10-2011, 08:43 AM
  3. Chương trình giúp một học sinh cấp 1 học phép nhân, xử lý hàm rand, giúp mình với?
    Gửi bởi chankx trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 2
    Bài viết cuối: 12-05-2009, 08:52 PM
  4. Code giúp add một key vào registry, ai giúp em?
    Gửi bởi olavien trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 5
    Bài viết cuối: 12-12-2007, 08:45 AM

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