Các A/C giúp đỡ em về điều kiện vòng lặp ? (3 người xem)

Liên hệ QC

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

takagi93

Thành viên mới
Tham gia
15/12/16
Bài viết
4
Được thích
0
Em mới tìm hiều VBA nền còn hơi có nhiều cái ko rõ mong Anh/Chị xem qua ^_^

Vấn đề em gặp phải :
Function Layer1(b, Ast, Ø As Variant)
Dim bo, n, KC, DK1 As Variant
'Chon So Cay Thep Lop Thu Nhat'
n = b / 50
For i = n To 0
KC = (b - (n - 1) * Ø) / (n - 1)
If KC > 50 Then
DK1 = "OK"
ElseIf KC < 50 Then
DK1 = "KO"
End If
n = n - 1
Next n
Layer1 = n
End Function

Thuật toán của em xác định là : Tìm được số n thỏa với điều kiện KC > 50 nếu không thỏa điều kiện KC > 50 thì sẽ giảm n xuống 1 đơn vị và giảm đến khi giá trị đầu tiên thỏa điều kiện KC > 50 thì dừng lại vòng lặp
Đối số : n=b/50 ,KC như trên và dựa vào n
Nếu không thỏa thì sẽ giảm xuống n=n-1 đến giá trị đầu tiên thỏa điều kiện KC >50
 
Lần chỉnh sửa cuối:
Em mới tìm hiều VBA nền còn hơi có nhiều cái ko rõ móng A/C xem qua ^_^

Vấn đề em gặp phải :
...
ở Đoạn if em phải chỉnh làm sao cho nếu KC < 50 thì vòng lặp chạy lại lần nữa với n =n -1 ạ và khi KC > 50 thì dừng vòng lặp . Mọi người xem qua giúp đỡ em với

Chào takagi93,

Có vài cái cần tìm hiểu và làm trước:
- Viết chữ tiếng Việt và trình bày văn bản;
- Cách khai báo biến, xác định thuật toán hợp lý.
 
Chào takagi93,

Có vài cái cần tìm hiểu và làm trước:
- Viết chữ tiếng Việt và trình bày văn bản;
- Cách khai báo biến, xác định thuật toán hợp lý.

Em chào Tiền Bối . e bị bí không biết khai báo chỗ Vòng lặp KC ntn . Mong a giúp đỡ
Em vấn chưa hiểu ý a lắm ?
 
Lần chỉnh sửa cuối:
Chào takagi93,

Có vài cái cần tìm hiểu và làm trước:
- Viết chữ tiếng Việt và trình bày văn bản;
- Cách khai báo biến, xác định thuật toán hợp lý.

Em chào anh . em bị bí không biết khai báo chỗ Vòng lặp KC như tế nào . Mong anh giúp đỡ
Em vấn chưa hiểu ý anh lắm ?
 
Lần chỉnh sửa cuối:
Code có nhiều chỗ sai lắm.
Nhưng trước khi sửa, bạn cần phải xác định những điều sau đây:

1. n, KC, b là số nguyên hay số thực. Trong lập trình, 2 loại số này làm việc rất khác nhau. Luôn luôn phải xác định là số nào.

2. Không có ngôn ngữ lập trình nào chấp nhận tên biến là ký tự Hy lạp cả, muốn nói đường kính thì bạn dùng từ phi.

3. trị DK1 tính xong (ok/ko) rồi làm cái gì với nó? theo code của bạn thì nó chả làm gì cả.

Gợi ý: vòng lặp for dùng để đếm với số lần đã định. Nếu cần đếm số lượt khi đạt yêu cầu thì dùng vòng lặp do while code trông rõ hơn.
 
Code có nhiều chỗ sai lắm.
Nhưng trước khi sửa, bạn cần phải xác định những điều sau đây:

1. n, KC, b là số nguyên hay số thực. Trong lập trình, 2 loại số này làm việc rất khác nhau. Luôn luôn phải xác định là số nào.

2. Không có ngôn ngữ lập trình nào chấp nhận tên biến là ký tự Hy lạp cả, muốn nói đường kính thì bạn dùng từ phi.

3. trị DK1 tính xong (ok/ko) rồi làm cái gì với nó? theo code của bạn thì nó chả làm gì cả.

Gợi ý: vòng lặp for dùng để đếm với số lần đã định. Nếu cần đếm số lượt khi đạt yêu cầu thì dùng vòng lặp do while code trông rõ hơn.

Dạ nhờ gợi ý của anh em tìm ra được cách lập rùi ạ .
Function Layer(b, Phi As Integer)
Dim n, KC, DK1 As Variant
'Chon So Cay Thep Lop Thu Nhat'
n = Round(b / 50, 0)


Do
KC = (b - (n - 1) * Phi) / (n - 1)


If KC > 50 Then
DK1 = "OK"
ElseIf KC <= 50 Then
DK1 = "KO"
End If
n = n - 1
Loop While DK1 = "OK"
Layer = n
End Function

Mà cho em hỏi nếu biên bao gồm số nguyên và số phức nên dùng Variant hay tách riêng ra ạ
Em cám ơn anh rất nhiều . Nếu anh thấy có gì sai anh gợi ý giúp em biết để lần sau e tiến bộ hơn
 
Lần chỉnh sửa cuối:
Dạ nhờ gợi ý của anh em tìm ra được cách lập rùi ạ .

Function Layer(b, Phi As Integer)

Dim n, KC, DK1 As Variant
'Chon So Cay Thep Lop Thu Nhat'
n = Round(b / 50, 0)
Do
KC = (b - (n - 1) * Phi) / (n - 1)
If KC > 50 Then
DK1 = "OK"
ElseIf KC <= 50 Then
DK1 = "KO"
End If
n = n - 1
Loop While DK1 = "OK"
Layer = n
End Function
code của bạn có nhiều vấn đề chưa ổn
Loop While DK1 = "OK" : vòng lập chạy tiếp khi KC>50 chỉ thoát khi KC<=50 trái với yêu cầu của bạn
n=n-1 đặt sau điều kiện: khi điều kiện thỏa thì giá trị n không như lúc xét điều kiện mà đã giảm 1
DK1 dư, sau không xét trực tiếp KC <=50 hoặc nếu đúng là KC>50
có thể nhận xét của mình chưa chính xác vì không rỏ bạn muốn làm gì
 
Mà cho em hỏi nếu biên bao gồm số nguyên và số phức nên dùng Variant hay tách riêng ra ạ

VBA làm gì có số phức. Nếu tôi nhớ khong lầm thì chỉ Fortran mới có số phức.
Có lẽ bạn muốn nói số thực. Theo đại số thì tập hợp số thực bao luôn số nguyên.

Về việc khai báo tách riêng ra. VBA không hề cho phép gộp chung
Khi khai báo như thế này:
Dim n, KC, DK1 As Variant
Chỉ có DK1 là được xác định là Variant. n và KC không được xác định. Vì VBA mặc định là cái gì không khai báo thì coi như Variant
Ví dụ bạn khai báo:
Dim n, KC, DK1 As String
Thì chỉ DK! là String; n và KC là Variant

Nếu toi đoán không lầm thì bạn có lẽ muốn khai như thế này:
Dim n as Integer, KC as Double, DK1 As Variant

Chú:
Khi dùng hàm Round trong VBA, nên biết rằng hàm này làm tròn theo tài chính ngân hàng; không phải theo toán và vật lý
Theo toán và vật lý, 0,5 được làm tròn thành 1. Nhưng theo tài chính ngân hàng 0,5 có thể làm tròn thành 1 hay 0 tuỳ theo số đứng trước nó.
 
Web KT

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

Back
Top Bottom