Bài tập VBA cho những người rỗi. . . đủ thứ! (3 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

SA_DQ

/(hông là gì!
Thành viên danh dự
Tham gia
8/6/06
Bài viết
14,717
Được thích
23,088
Nghề nghiệp
U80
Hãy viết hàm người dùng để xác định trị thứ N nào đó trong dẫy:

1, 2, 4, 5, 7, 8, . . .


Ví dụ bổ sung: Con số tiếp theo con số 8 sẽ là con số 10; & như vậy trong chuỗi không chứa các bội số của con số 3
 
Lần chỉnh sửa cuối:
Hãy viết hàm người dùng để xác định trị thứ N nào đó trong dẫy:

1, 2, 4, 5, 7, 8, . . .


Ví dụ bổ sung: Con số tiếp theo con số 8 sẽ là con số 10; & như vậy trong chuỗi không chứa các bội số của con số 3
= N + INT( (N-1)/2 )
 
Upvote 0
Mình cũng vậy;
Mình đưa bảng này lên & Copilot rút ra kết luân dùm:

1755762450421.png
 
Upvote 0
Tác giả bài 2 không dùng AI, chắc chỉ trong 3 giây là có phép tính, 30 giây để viết bài. AI các kiểu thì phải 3 ngày rưỡi.
Đặc biệt:
- AI ở bài 3 không làm tròn bài toán chia 2 nên kết quả thập phân
- Copilot ở bài 4 chỉ thấy quy luật mà không thấy phép tính ra kết quả.
 
Upvote 0
Mình đã nhờ & Copilot khẳng định có thể viết 1 hàm tổng quát để hoặc tìm vị trí của giá trị hay tìm trị của 1 vị trí trong chuỗi
Theo kiểu
(♥) Cho con số 100 tìm ra vị trí hay trị của chuỗi tại vi trí này

Function TraBangSoLieu( Num As Integer, Optional ViTri As Boolean = False)
If ViTri Then
. . . .
End If
End Function
 
Upvote 0
AI cho mình công thức sau chưa text htwr thế nào
' Trả về phần tử thứ N trong dãy: 1, 2, 4, 5, 7, 8, 10, ...
Function NthTerm(ByVal N As Long) As Long
' Công thức O(1): N + floor((N-1)/2)
NthTerm = N + (N - 1) \ 2
End Function
 
Upvote 0
Cái hại khi dựa hoàn toàn vào AI là nếu chép nguyên văn code về xài:
- Có kết quả nhưng không biết đúng hay sai
- Không test hoặc không biết cách test
- Khả năng tư duy lần lần bị mòn đi.
 
Upvote 0
Anh @SA_DQ có cái quy luật hội tụ 4,2,1
Bài toán Collatz (còn gọi là giả thuyết Collatz hay 3n + 1).
  1. Bắt đầu từ một số nguyên dương bất kỳ.
  2. Nếu số đó chẵn, ta chia cho 2.
  3. Nếu số đó lẻ, ta nhân với 3 rồi cộng thêm 1.
  4. Lặp lại quá trình này.
Từ số cho trước tìm giá trị phần tử tại vị trí chỉ định :D
Anh sửa lại thành bài toán rảnh rảnh đi anh.
 
Upvote 0
Từ định nghĩa thôi
=IF(ISODD(N),N*3+1,N/2)

VBA
Mã:
if N mod 2 = 0 then
    x = N / 2
else
    x = N * 3 + 1
end if
 
Upvote 0
Từ định nghĩa thôi
=IF(ISODD(N),N*3+1,N/2)

VBA
Mã:
if N mod 2 = 0 then
    x = N / 2
else
    x = N * 3 + 1
end if
Dạ, đó là công thức chính của bước 2, 3; Từ đó ta lặp lại cho đến khi nó hội tụ về 1; (Hiện tại thì chắc chắn về 1);
Có thể dẫn thành bài toán: Cho số ban đầu là 2025 tìm giá trị tại vị trí thứ 23 chẳng hạn;
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ, đó là công thức chính của bước 2, 3; Từ đó ta lặp lại cho đến khi nó hội tụ về 1; (Hiện tại thì chắc chắn về 1);
Có thể dẫn thành bài toán: Cho số ban đầu là 2025 tìm giá trị tại vị trí thứ 23 chẳng hạn;
Công thức trên nhưng thay N bằng N + 2024
 
Upvote 0
Tôi làm đúng định nghĩa này:
  1. Bắt đầu từ một số nguyên dương bất kỳ.
  2. Nếu số đó chẵn, ta chia cho 2.
  3. Nếu số đó lẻ, ta nhân với 3 rồi cộng thêm 1.
  4. Lặp lại quá trình này.
Và chẳng hề hội tụ.
Bắt đầu từ 1:

q01.png

Bắt đầu từ 23

q02.png

Bạn làm thế nào để ra cái hình bài 14?
 
Upvote 0
Bài toán Collatz (còn gọi là giả thuyết Collatz hay 3n + 1).
  1. Bắt đầu từ một số nguyên dương bất kỳ.
  2. Nếu số đó chẵn, ta chia cho 2.
  3. Nếu số đó lẻ, ta nhân với 3 rồi cộng thêm 1.
  4. Lặp lại quá trình này.
Từ số cho trước tìm giá trị phần tử tại vị trí chỉ định
Thử UDF này:

Mã:
Public Function Collatz(ByVal N As Long, N_index As Long) As Long
For i = 1 To N_index
    N = IIf(N Mod 2 = 0, N \ 2, N * 3 + 1)
Next i
Collatz = N
End Function
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom