Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 11
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Dùng (%) để tạo vòng tròn số?

    Mình muốn một biến chạy từ 0 tới n sau đó quay lại 0 và tiếp tục chạy tới n, cứ như vậy tới khi kết thúc chương trình!
    tất nhiên là loại bỏ cách
    Mã:
    if(i == n) i = 0;
    i++;
    Mình nhớ là có cách dùng (%) như sau
    int i = 0
    while (true)
    i = 3 % (i+2);// i sẽ chạy từ 0 tới 1 và quay lại 0;
    Mình muốn nâng lên tổng quát nhưng nghĩ không ra cách! Mong nhận được sự giúp đỡ của mọi người

  2. #2
    dùng thử i % n nhé [IMG]images/smilies/biggrin.png[/IMG]
    i chạy từ 0.

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi MrDnD
    dùng thử i % n nhé [IMG]images/smilies/biggrin.png[/IMG]
    i chạy từ 0.
    Ở đây chủ topic bảo chạy từ 0 -> n nên phải dùng i%(n+1) mới đúng! [IMG]images/smilies/daydreaming.gif[/IMG]

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    cách của bạn vuthanhtrung
    Mã:
    i = 0;
    i = i% (5+1) = 0
    và cứ bằng 0 mãi;
    0/6 = 0 dư 0 => i = 0;
    cách của bạn clamvn
    Mã:
    i = 0;
    i = (i+ 5)%5 =  0;
    và cứ bằng không mãi;
    0 + 5 = 5 ; 5 chia 5 = 1 dư 0 => i = 0;
    và công thức đúng là :
    Mã:
    i = (i + n + 2)%(n+1);
    kết quả sẽ là i chạy từ 0 cho tới n và bắt đầu lại từ 0;[IMG]images/smilies/1.gif[/IMG][IMG]images/smilies/1.gif[/IMG]

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Click8A4
    cách của bạn vuthanhtrung
    Mã:
    i = 0;
    i = i% (5+1) = 0
    và cứ bằng 0 mãi;
    0/6 = 0 dư 0 => i = 0;
    cách của bạn clamvn
    Mã:
    i = 0;
    i = (i+ 5)%5 =  0;
    và cứ bằng không mãi;
    0 + 5 = 5 ; 5 chia 5 = 1 dư 0 => i = 0;
    và công thức đúng là :
    Mã:
    i = (i + n + 2)%(n+1);
    kết quả sẽ là i chạy từ 0 cho tới n và bắt đầu lại từ 0;[IMG]images/smilies/1.gif[/IMG][IMG]images/smilies/1.gif[/IMG]
    Suy nghĩ kĩ trước khi phát biểu nhé .

    cách của bạn : nếu i=n+1 thì (n+1 + n + 2 )%(n+1) = 1 chứ ko phải = 0.

    Vậy cách mà bạn bảo là sai thì đúng, còn cách bạn bảo đúng là sai.

    Bó tay

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    làm sao mà i có thể đạt được giá trị n + 1 chứ, giả sử i = n;
    thì i = (i + n + 2) % (n+1) = (2n+2)%(n+1) = 0 đúng không bạn?
    Mình cho i chạy từ 0 -> n mà, khi i = n thì i sẽ quay lại giá trị 0 và tiếp tục chu trình mới!
    còn cách của bạn thì sẽ như thế này :
    i = 0;
    i = (i + n)%n = n%n = 0; và cứ chạy mãi ở số 0 đó, nó chỉ chạy khi i khác 0; và sau khi chạy tới i = n - 1 thì sẽ quay về số 0, và rồi đứng mãi ở số 0 đó! Như thế sao có thể gọi là vòng tròn được!
    Hi` nếu không tin bạn có thể quăng nó vô một timer rồi show nó ra textbox là biết ngay ý mà! Thậm chí bạn có thẻ cho i bắt đầu bằng bất kì giá trị nào nằm trong khoảng từ 0 -> n, nó luôn chạy thành một vòng tròn!
    Công thức này do mình tổng quát lên từ một công thức trong sách, do lâu không sử dụng nên quên mất!


    Tổng kết : thuật toán có thể dùng để tạo ra một vòng tròn số, thay thế cho câu lệnh
    Mã:
    if(i == n ) i = 0;
    i++;
    đó là
    Mã:
    i = (i + n + 2) % (n+1);
    đôi lúc các bạn sẽ sử dụng đến nó, tiết kiệm được một lệnh if!

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Nhầm tí, cái i mình nói là ám thị vị trí của phần tử trong mảng.
    công thức tổng quát cho i chạy theo 2 chiều : từ trái sang phải hay từ phải sang trái (nghĩa là i tăng dần theo chiều dương hay giảm dần theo chiều âm thì ta vẫn lấy dc 1 phần tử thông qua công thức ) là
    Mã:
     
      a[(n+i%n)%n];

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    i = (i +n )% n

    i chạy từ trái qua phải hay từ phải qua trái gì cũng dc.

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cảm ơn công thức của clamvn, bây giờ mình muốn làm cho cái vòng tron của mình chạy ngược lại thì có ai có ý tưởng gì không nhỉ?

    i = (i + n + 2)%(n+1)

    0 1 2 3 ... n -> 0 1 2 3 ... n -> ... -> ...

    Bây giờ mình muốn nó chạy ngược lại như thế này:

    n n-1 ... 3 2 1 0 -> n n-1 ... 3 2 1 0 -> ... -> ...

    Không thể dùng : i = n - ((i + n + 2)%(n + 1)) được;

  10. #10
    tổng quát

    Mã:
    /** * * @author zstar */public class method {     public static int nextIndex(int current, int h, int count) {        //viec lua chon menu se chay vong tron        current += h + count;        current = current % count;        return current;    }}
    chạy xuôi nextIndex(current,1,n)
    chạy ngược nextIndex(current,-1,n)

    h là bước tiến hoặc lùi , âm là lùi , dương là tiến

    mình dùng cái hàm này để chọn menu vòng tròn trong J2ME

 

 
Trang 1 của 2 12 CuốiCuối

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
  •