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

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi nguyenson197
    Mình có một mảng 2 chiều 15x8 các button. Muốn đưa ảnh lên button bằng code sao cho 120 cái ảnh mỗi cái nằm trên một button theo thứ tự ramdom thì làm thế nào. Thanks
    Bác nào cho code thì tốt quá
    Mình có 1 gợi ý cho bạn như sau:
    - Gán số thứ tự của 120 ảnh của bạn từ 0-119 (hoặc 1-120) vào một list ảnh. (img[0-119])
    - Tạo một mảng 120 phần tử int từ 0-119 xuất hiện ngẫu nhiên và mỗi phần tử chỉ xuất hiện 1 lần. (a[]= random[1,2,3,...199]).
    - Tiến hành load ảnh lên button theo giá trị các phần tử tương ứng với số thứ tự của ảnh. (button[i].Image=img[a[i]]).
    B1 và B3 khá nhẹ nhàng, vấn đề rắc rối chính là ở bước 2 tạo mảng, mình đề xuất cho bạn 2 thuật toán để giải quyết:
    - Thuật toán 1:
    B1: Random 1 số int thuộc [0,199]
    B2: Kiểm tra xem số vừa tạo đã có trong mảng hay chưa, có thì thêm vào mảng, chưa thì quay lại B1.
    B3: Lập đến khi lấy đủ mảng có 120 phần tử.
    Thuật toán 1 khá dễ nhưng có phần rất nhọc nhằng, trong trường hợp xấu có thể lặp đi lặp lại vô số lần.
    - Thuật toán 2:
    B1: Tạo một mảng b 120(tức n) phần tử int xếp thứ tự từ 0-199.
    B2: Random 1 số int thuộc [0, n-1] {r=rand.next(n)}
    B3: Thêm phần tử trong mảng b tại vị trí vừa tạo vào mảng {a[i++]=b[r]}
    B4: Xóa phần tử tại vị trí vừa tạo ra khỏi mảng b đồng thời giảm n đi 1. {b[r]=b[n-1]; n--;} or {b[r]=b[--n]}
    B5: Quay lại B2, lặp đến khi lấy đủ 120 phần tử cho a.
    Thuật toán 2 hiểu quả hơn rất nhiều.
    Chúc bạn làm tốt [IMG]images/smilies/wave.gif[/IMG].

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    hihi vấn đề này cũng giống vấn đề mình đã làm.
    Bài của mình là có 52 cái button và nhiệm vụ phải load 52 cây tú vào đó.
    Mình đã giải quyết được vấn đề hihi.
    nhưng mình xin được trình bày cách làm với 25button thôi hihi. còn bạn muốn làm thêm bao nhiêu thì làm hihi

    mình làm như thế này
    Mã:
    private void Form1_Load(object sender, EventArgs e)
            {
                Random rd = new Random();
                Button[] btn = new Button[25];// minh khai bao mang button;
                int left = 0;
                int top = 0;
                int i = 0;
                List<int> lst = new List<int>();//list lst dung de chua danh sach cac so ma minh random duoc
    
                do 
                {
                    int num = rd.Next(0, 25);
                    if (lst.Contains(num) == false)// neu nhu lst cua minh chua co gia tri num minh se add no vao
                    {
                        lst.Add(num);
                        btn[i] = new Button();
                        btn[i].Size = new System.Drawing.Size(100, 125);
                        btn[i].Image = Image.FromFile("E:\\bo tu\\" + (num + 1).ToString() + ".PNG");
                        btn[i].Left = left;
                        btn[i].Top = top;
                        if ((i + 1) != 0 && (i + 1) % 5 == 0)
                        {
                            left = 0;
                            top += 130;
                        }
                        else
                        {
                            left += 125;
                        }
                        this.Controls.Add(btn[i]);
                        i++;
                    }
                } while (i < 25);
                
            }

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    hihi à quên mất mình mới bắt đầu học C# thôi nếu viết không hay hoặc chưa tối ưu nhất. bạn nào làm hay hơn post lên mình xem với nha.
    à nếu có ích thì thank cho mình cái nhé! lấy thành tích cái[IMG]images/smilies/2.gif[/IMG]

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi rucvan
    hihi à quên mất mình mới bắt đầu học C# thôi nếu viết không hay hoặc chưa tối ưu nhất. bạn nào làm hay hơn post lên mình xem với nha.
    à nếu có ích thì thank cho mình cái nhé! lấy thành tích cái[IMG]images/smilies/2.gif[/IMG]
    Cách bạn làm thuộc vào thuật toán 1 của mình đưa ra ở trên. Như mình đã nói nó khá dễ nhưng hiệu quả ko cao, vòng lặp có thể thực hiện vô số lần (có thể lớn hơn n rất nhiều lần) trong trường xấu đó là khi số random cứ lẫn quẫn trong những số đã xuất hiện trước đó. Bạn nên thử viết lại theo thuật toán 2 của mình hiệu quả sẽ cao hơn rất nhiều, số lần random luôn luôn bằng n trong mọi trường hợp. Chúc bạn làm tốt!!!

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    mình đã nói là chưa tối ưu nhưng cũng đáp ứng được yêu cầu của bài. đảm bảo vẫn load đủ ảnh và không có cái ảnh nào trùng nhau cả. hihi mình mới tự học được 1 thời gian mà
    [IMG]images/smilies/laughing.gif[/IMG]

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi mrvu.mlt
    Cách bạn làm thuộc vào thuật toán 1 của mình đưa ra ở trên. Như mình đã nói nó khá dễ nhưng hiệu quả ko cao, vòng lặp có thể thực hiện vô số lần (có thể lớn hơn n rất nhiều lần) trong trường xấu đó là khi số random cứ lẫn quẫn trong những số đã xuất hiện trước đó. Bạn nên thử viết lại theo thuật toán 2 của mình hiệu quả sẽ cao hơn rất nhiều, số lần random luôn luôn bằng n trong mọi trường hợp. Chúc bạn làm tốt!!!
    uhm thank bạn nha. quả thực khi code mình không để ý đến 2 thuật toán của bạn.
    nhìn yêu cầud đề bài là lao vào code thôi. hihi.
    đọc lại thuật toán thứ 2 của bạn quả thực very good!
    hihi mình cảm ơn vì sự góp ý của bạn.

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi rucvan
    mình đã nói là chưa tối ưu nhưng cũng đáp ứng được yêu cầu của bài. đảm bảo vẫn load đủ ảnh và không có cái ảnh nào trùng nhau cả. hihi mình mới tự học được 1 thời gian mà
    [IMG]images/smilies/laughing.gif[/IMG]
    Uh mình ko nói là nó ko đáp ứng đủ yêu cầu đề bài. Nhưng nếu muốn lập trình giỏi ko phải chỉ đáp ứng yêu cầu chạy được là đủ mà mình phải biết lựa chọn thuật toán sau cho tối ưu nhất có thể. Tùy vào điều kiện cụ thể mà bạn fai biết dung hòa giữa "tốc độ" và "tài nguyên" (tức bộ nhớ). Nếu bạn luôn có ý nghĩa đó thì khả năng của bạn sẽ tiến bộ rất nhanh.

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi mrvu.mlt
    Uh mình ko nói là nó ko đáp ứng đủ yêu cầu đề bài. Nhưng nếu muốn lập trình giỏi ko phải chỉ đáp ứng yêu cầu chạy được là đủ mà mình phải biết lựa chọn thuật toán sau cho tối ưu nhất có thể. Tùy vào điều kiện cụ thể mà bạn fai biết dung hòa giữa "tốc độ" và "tài nguyên" (tức bộ nhớ). Nếu bạn luôn có ý nghĩa đó thì khả năng của bạn sẽ tiến bộ rất nhanh.
    ok cảm ơn bạn nhé!
    Mình đang tự mày mò học lập trình mà không có sự dẫn dắt nào.
    nên nhiều khi không biết bắt đầu từ đâu nữa hê hê. nên quyết định lên cộng đồng học hỏi. Cảm ơn bạn đã cho mình một lời khuyên bổ ích.[IMG]images/smilies/clap_grin.gif[/IMG]

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Thanks 2 bác rất nhiều. Em làm được rồi. hỳ

 

 

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
  •