Xin giúp số lần lặp tối đa trong vòng lăp (3 người xem)

Liên hệ QC

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

thamphong

Thành viên mới
Tham gia
30/6/10
Bài viết
3
Được thích
0
Mình đã làm mộ vòng lặp như file đinh kèm với bước nhảy là 0.000001. Nhưng kết quả luôn sai. Không biết có phải lý do là số lần lặp trong vòng lặp bị giới hạn không nữa. Mọi ngưởi xem giúp mình với.
 

File đính kèm

Chắc bạn làm về kỹ thuật, mình có những lời khuyên ngoài lề như sau

(1) Nên dùng câu lệnh
[thongBao]
Option Eplicit[/thongbao]
trong các module

(2) Hàm Spv_Ideal(Subs, Press, T) của bạn có thể viết gọn lại như sau:

PHP:
Function Spv_Ideal(Subs, Press, T)
Dim M As Single
M = Switch(Subs = "Nitrogen", 28.01, Subs = "Water", 18.02, Subs = "Oxygen", 32, _
    Subs = "Butane", 58.12, Subs = "Carbon dioxide", 44.01, Subs = "Carbon monoxide", 28.01, _
    Subs = "Methane", 16.04, Subs = "Propane", 44.09, Subs = "Sulfur dioxide", 64.06, _
    Subs = "Acetylen", 26.04, Subs = "Air", 28.97, Subs = "Ammonia", 17.04, _
    Subs = "Argon", 39.94, Subs = "Benzene", 78.11, Subs = "Helium", 4, _
    Subs = "Carbon", 12.01, Subs = "Hydrogen", 2.02, Subs = "Ethane", 30.07)
    ' MsgBox M'
Spv_Ideal = T * (8314 / M) / Press
End Function

& cũng vậy với hàm fía dưới, như:

PHP:
Function Spv_Van(Subs, Press, T)
Dim a As Single, b As Single, p As Single, v As Single, M As Single
If Subs = "Nitrogen" Then
    M = 28.01:      a = 1.366:      b = 0.0386
ElseIf Subs = "Water" Then
    M = 18.02:      a = 5.531:      b = 0.0305
ElseIf Subs = "Oxygen" Then
    M = 32:         a = 1.368:      b = 0.0367
ElseIf Subs = "Butane" Then
    M = 58.12:      a = 13.86:      b = 0.1162
ElseIf Subs = "Carbon dioxide" Then
    M = 44.01:      a = 3.647:      b = 0.0428
ElseIf Subs = "Carbon monoxide" Then
    M = 28.01:      a = 1.474:      b = 0.0395
ElseIf Subs = "Methane" Then
    M = 16.04:      a = 2.293:      b = 0.0428
ElseIf Subs = "Propane" Then
    M = 44.09:      a = 9.349:      b = 0.0901
ElseIf Subs = "Sulfur dioxide" Then
    M = 64.06:      a = 6.883:      b = 0.0569
End If
v = 0
Do
    v = v + 0.000001
    p = (8314 * T / ((v * M) - b)) - (a / ((v * M) ^ 2)) * 10 ^ 5
    diff = Press - p
    MsgBox diff
Loop While diff > 0 And p > 0
Spv_Van = v
End Function

Mình cho là toàn bộ hàm có trên 1 trang màn hình; Như vậy dễ bề kiểm soát lỗi

(3) Với công thức dài ngoằng này
p = (8314 * T / ((v * M) - b)) - (a / ((v * M) ^ 2)) * 10 ^ 5

Bạn nên tách ra làm 2 fần đễ dễ bề kiểm giá trị các thành tố
Ví dụ fần sau của công thức dư cặp dấu ngoat; tuy rằng không ảnh hưởng đế kết quả, nhưng khó nhìn ra sai sót (nếu có)


Những mong bạn cùng tôi thuộc câu "Sai con toán bán con Đầu Cơ Nghiệp"

Thông điệp của mình là rõ ràng đó chứ nhĩ?!

& chúc buổi sáng tốt lành!
 
Cảm ơn bạn. Mình làm bên kỹ thuật. Các dấu ngoặc thừa đó m là mục đích của mình phân theo cụm cho dễ kiểm tra thôi.
Bạn kiểm tra giúp mình vì sao cái hàm cuối cùng ở trên lại cho ra kết quả sai giúp mình với.
Ngoài ra , mình dùng Goal Seek giải thì đúng kết quả, và record thành macro. Nhưng giờ không biết làm sao để mỗi lần thay đổi giá trị vào thì macro(đã record) sẽ tự động chạy. Bạn giúp mình với.
 
Lần chỉnh sửa cuối:
Web KT

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

Back
Top Bottom