Trang 3 trên tổng số 3 Đầu tiênĐầu tiên 123
Từ 21 tới 26 trên tổng số 26 kết quả

Đề tài: kiểm tra số fibonasi trong lập trình C/C++

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

    Mặc định kiểm tra số fibonasi trong lập trình C/C++

    Trích dẫn Nguyên bản được gửi bởi lookfordream Xem bài viết
    Giờ hiểu rồi. Lúc trc học lơ mơ phần khai báo biến toàn cục nên em cứ nghĩ nếu trong hàm chỉ khai báo
    static int value;
    thì value vẫn mang gt của lần gọi hàm trc còn nếu khai báo
    static int value=0;
    thì mỗi lần gọi hàm biến value đều bị reset về 0.
    ở đâu ra cái kiến thức kì lạ đó thế
    ở đâu ra mà mỗi lần gọi hàm bị reset về 0 thế ?????

    biến local static chỉ có được khởi tạo duy nhất 1 lần thôi.
    hàm có được gọi 99999999999999999 lần thì cũng chỉ có duy nhất 1 lần khơi tạo thôi
    lần sau thì vẫn mang giá trị cũ, ko khởi tạp lần 2 đâu
    ^_,^

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

    Bùi Tấn Quang

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

    Trích dẫn Nguyên bản được gửi bởi hienclubvn Xem bài viết
    à, anh @langman nè, thực sự em hok có hiểu đoạn CODE này
    Code:
    char check(int x)
        {
            static int temp[1000]={1,1};
            static int n=1;
            while (temp[n]<x) temp[++n]=temp[n-1]+temp[n-2];
            for(int i=0;i<=n;i++)
                if(temp[n]==x) return 1;
            return 0;
        }
    static ở đây là gì vậy?
    rùi dùng kiểu char để trả về nữa.
    hjx
    thật ra chỉ là thói quen thôi
    char là kiểu số nguyên 1 byte,


    hienclubvn này
    static nó là từ khóa để khai báo biến tĩnh trong (local static variable) :
    + biến tĩnh được đặt trong vùng cấp phát tĩnh , nằm giữa vùng heap và vùng code ( theo C stand) như thế sẽ ko chiếm vùng nhớ stack, ko làm stack nở to mỗi khi gọi hàm
    + biến tĩnh là biến chung cho cả hàm , nó ko mất đi khi lời gọi hàm kết thúc, giá trị của nó được lưu lại phục vụ cho lần gọi sau .
    do nguyên nhân sau :
    _ các auto - local variable : được cấp phát trong stack, khi lời gọi hàm kết thúc, stack giải phóng và xẹp xuống, các biến này mất đi, ko tồn tại nữa. biến này chỉ tồn tại trong 1 thời gian ngắn.
    trong 1 hàm, ta viết
    int i=0;
    chẳng qua là viết tắt của
    auto int i=0;
    (hết sức chú ý đây là C stand, hoàn toàn khác với C++0x stand cũng có từ khóa auto với ý nghĩa khác)
    mỗi lần gọi ta sẽ có i nằm ở 1 ô nhớ khác nhau, hay mỗi lần gọi thì lại sinh ra 1 biến khác.....

    _ static - local variable : được cấp phát trong vùng nhớ tĩnh, nó ko bị ảnh hưởng bởi quá trình gọi hay cấp phát hàm. nó là duy nhất trong tất cả các lần gọi hàm


    + biến tĩnh khởi tạo duy nhất 1 lần, nếu ta ko cài đặt thì khởi tạo mặc định bằng 0. Dù ta gọi hàm bao nhiêu lần thì biến tĩnh cũng chỉ được khởi tạo duy nhất 1 lần.
    tức là
    static int n=0; và static int n;
    là hoàn toàn như nhau, ko khác biệt
    ^_,^

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

    Bùi Tấn Quang

  3. #23
    Ngày gia nhập
    06 2010
    Nơi ở
    Nha Trang City
    Bài viết
    495

    thank anh @langman nha.
    em cũng có phần hiểu rùi.
    đoạn CODE này rất hay
    while (temp[n]<x) temp[++n]=temp[n-1]+temp[n-2];
    có lẽ chỉ cao thủ mới có thể nghĩ ra.
    cho em hỏi câu lệnh này
    static int temp[1000]={1,1};
    có nghĩa là : cấp phát bộ nhớ bộ nhớ tĩnh gồm 1000 phần tử của mảng temp, có a[0]=1 và a[1]=1 à?
    anh giải thích dùm em nha.
    Embedded ARM

  4. #24
    Ngày gia nhập
    06 2010
    Nơi ở
    Nha Trang City
    Bài viết
    495

    cảm ơn anh @langman em đã hiểu
    Embedded ARM

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

    Trích dẫn Nguyên bản được gửi bởi hienclubvn Xem bài viết
    thank anh @langman nha.
    em cũng có phần hiểu rùi.
    đoạn CODE này rất hay
    while (temp[n]<x) temp[++n]=temp[n-1]+temp[n-2];
    có lẽ chỉ cao thủ mới có thể nghĩ ra.
    cho em hỏi câu lệnh này
    static int temp[1000]={1,1};
    có nghĩa là : cấp phát bộ nhớ bộ nhớ tĩnh gồm 1000 phần tử của mảng temp, có a[0]=1 và a[1]=1 à?
    anh giải thích dùm em nha.
    đúng oy,
    do đặc điểm nó nằm trong vùng cấp phát tĩnh (data seg) nên khi khởi tạo tất cả ==0 hết,
    ta viết ={1,1}; để chốt thêm a[0]=a[1]=1
    ^_,^

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

    Bùi Tấn Quang

  6. #26
    Ngày gia nhập
    12 2010
    Nơi ở
    nhà trọ
    Bài viết
    36

    Mặc định kiểm tra số fibonasi trong lập trình C/C++

    Trích dẫn Nguyên bản được gửi bởi hienclubvn Xem bài viết
    Code:
    void ktra(int n)
    {
         int f0=0,f1=1,fn=f0+f1;
         if ((n==0)||(n==1)) cout<<"thuoc day fibonaci";
         else
         {
             while (n>=fn)
             {
                   f0=f1;
                   f1=fn;
                   fn=f0+f1;
                   if (fn==n) {cout<<"thuoc day fibonaci";break;}
             }
         }
         if (fn>n)cout<<"ko thuoc day fibonaci";
    }
    Theo tôi thì hàm này chỉ nhiêu đây thôi là đã đủ rồi
    C Code:
    1. void ktra(int n)
    2. {
    3.  int b=1,a=1;
    4.  while(b<n)
    5.   {
    6.    b+=a;
    7.    a=b-a;
    8.   }
    9.  if(b==n||n==0) printf("thuoc day fibonaci");
    10.  else printf("ko thuoc day fibonaci");
    11. }
    lưu ý
    đoạn
    Code:
      {
       b+=a;
       a=b-a;
      }
    không thực hiện hoán đổi giá trị
    Hasta la vista,baby

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

  1. Tính số Fibonasi của dãy không dùng mảng???
    Gửi bởi trihn_kt trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 16-01-2010, 11:47 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