Nhờ hoàn thiện công thức thoả mãn điều kiện (giá trị chênh lệch vị thứ không quá 15%)

  • Thread starter Thread starter qingyu
  • Ngày gửi Ngày gửi
Liên hệ QC

qingyu

Thành viên mới
Tham gia
2/2/09
Bài viết
15
Được thích
0
Trong 3 số sẽ có 1 số lớn nhất, 1 số nhỏ nhất và 1 số TB
Lấy số lớn nhất so với số TB nếu số lớn nhất lệch hơn 15% so với số TB thì loại
Lấy số nhỏ nhất so với số TB nếu số nhỏ nhất lệch hơn 15% so với số TB thì loại
Mình muốn viết hàm để ko bao giờ nó lệch quá 15% hoặc hàm báo cho mình biết là nó vượt 15%
3 số này mình cho nó chạy ngẫu nhiên nên mình bị rối :D
Bạn nào giúp mình nha. Mình cám ơn trước.
 

File đính kèm

Bạn mô tả bài toán rõ hơn đi, có thể lấy 1 vài ví dụ cụ thể nữa. Chưa hiểu bài toán của bạn lắm
 
Mình sẽ ví dụ 3 số nha:
568 số này nhỏ nhất trong 3 số
604 số này là số trung vị trong 3 số
682 số này lớn nhất trong 3 số
Lấy 568 so với 604 nếu vượt quá 15% thì "loại" so bằng công thức này (604-568)/568*100
Lấy 682 so với 604 nếu vượt quá 15% thì "loại" (682-604)/604*100
Mình muốn làm công thức sao cho nó đừng quá 15% nhưng mình dùng hàm rand nên nó chạy ngẫu nhiên vì thế 3 số đó sẽ thay đổi
mình có add file trong bài viết đó bạn down về xem bạn sẽ hình dung dễ hơn
 
Trong 3 số sẽ có 1 số lớn nhất, 1 số nhỏ nhất và 1 số TB
Lấy số lớn nhất so với số TB nếu số lớn nhất lệch hơn 15% so với số TB thì loại
Lấy số nhỏ nhất so với số TB nếu số nhỏ nhất lệch hơn 15% so với số TB thì loại
Mình muốn viết hàm để ko bao giờ nó lệch quá 15% hoặc hàm báo cho mình biết là nó vượt 15%
3 số này mình cho nó chạy ngẫu nhiên nên mình bị rối :D
Bạn nào giúp mình nha. Mình cám ơn trước.

Chưa biết bạn ứng dụng vào việc gì, làm tạm bạn xem đã đúng ý chưa nhé! (Bạn có thể ấn liên tục F9 để test)
 

File đính kèm

Lần chỉnh sửa cuối:
Bạn dùng cặp hàm tự tạo sau đây cho 6 fương án có thể

PHP:
Option Explicit
Function TrungVi(Num1 As Double, Num2 As Double, Num3 As Double)
 Dim NumMin As Double, NumAvg As Double, NumMax As Double
 
 If Num1 <= Num2 And Num2 <= Num3 Then
   NumMin = Num1:       NumAvg = Num2:             NumMax = Num3
   TrungVi = 1
 ElseIf Num1 <= Num2 And Num3 <= Num2 Then
   NumMax = Num2
   If Num1 <= Num3 Then
      NumMin = Num1:       NumAvg = Num3:          TrungVi = 2
   Else
      NumMin = Num3:       NumAvg = Num1:          TrungVi = 3
   End If
 ElseIf Num1 >= Num2 And Num2 >= Num3 Then
   NumMin = Num3:          NumAvg = Num2
   TrungVi = 4:          NumMax = Num1
 ElseIf Num1 >= Num2 And Num2 <= Num3 Then
   NumMin = Num2
   If Num1 >= Num3 Then
      NumAvg = Num3:          NumMax = Num1:       TrungVi = 5
   Else
      NumAvg = Num1:          NumMax = Num3:       TrungVi = 6
   End If
 End If
 TrungVi = 100 * TrungVi + 10 * GPE(NumAvg, NumMin) + GPE(NumMax, NumAvg)
End Function

Mã:
[B]Function GPE(Num1 As Double, Num2 As Double) As Byte[/B]
   If Abs((Num1 - Num2)) / Num1 > 0.15 Then GPE = 0 Else GPE = 1
[B]End Function
[/B]

Tùy thuộc thứ tự các số bạn cung cấp sẽ cho ta đáp án
100|101|110|111
200|201|210|211
. . . .

Trong đó xuất hiện 2 con 0 là không được số nào thỏa; Số 0 giữa chứng tỏ số đầu đưa vô có vấn đề; Nếu không có số không nào là trường hợp OK!
 
Lần chỉnh sửa cuối:
Chưa biết bạn ứng dụng vào việc gì, làm tạm bạn xem đã đúng ý chưa nhé! (Bạn có thể ấn liên tục F9 để test)

mình phục vụ cho công việc hằng ngày, ngày nào mình cũng phải đối diện với nó. mình làm bên mảng xây dựng ^^
thx bạn nha, nhưng mình làm trang in nên chắc mình sửa lại xíu, in màu ra đen thui luôn T.T
 
Lần chỉnh sửa cuối:
PHP:
Option Explicit
Function TrungVi(Num1 As Double, Num2 As Double, Num3 As Double)
 Dim NumMin As Double, NumAvg As Double, NumMax As Double
 
 If Num1 <= Num2 And Num2 <= Num3 Then
   NumMin = Num1:       NumAvg = Num2:             NumMax = Num3
   TrungVi = 1
 ElseIf Num1 <= Num2 And Num3 <= Num2 Then
   NumMax = Num2
   If Num1 <= Num3 Then
      NumMin = Num1:       NumAvg = Num3:          TrungVi = 2
   Else
      NumMin = Num3:       NumAvg = Num1:          TrungVi = 3
   End If
 ElseIf Num1 >= Num2 And Num2 >= Num3 Then
   NumMin = Num3:          NumAvg = Num2
   TrungVi = 4:          NumMax = Num1
 ElseIf Num1 >= Num2 And Num2 <= Num3 Then
   NumMin = Num2
   If Num1 >= Num3 Then
      NumAvg = Num3:          NumMax = Num1:       TrungVi = 5
   Else
      NumAvg = Num1:          NumMax = Num3:       TrungVi = 6
   End If
 End If
 TrungVi = 100 * TrungVi + 10 * GPE(NumAvg, NumMin) + GPE(NumMax, NumAvg)
End Function

Mã:
[B]Function GPE(Num1 As Double, Num2 As Double) As Byte[/B]
   If Abs((Num1 - Num2)) / Num1 > 0.15 Then GPE = 0 Else GPE = 1
[B]End Function
[/B]

Tùy thuộc thứ tự các số bạn cung cấp sẽ cho ta đáp án
100|101|110|111
200|201|210|211
. . . .

Trong đó xuất hiện 2 con 0 là không được số nào thỏa; Số 0 giữa chứng tỏ số đầu đưa vô có vấn đề; Nếu không có số không nào là trường hợp OK!

bạn ơi mình ko biết xài code mình ko có học, nhưng cũng thanhk bạn nha, có gì bạn chỉ mình làm luôn nha
 
Mình xin SPAM cho bạn ví dụ sau đây

có gì bạn chỉ mình làm luôn nha

Giả sử ta có dữ liệu như các cột 'A' đến 'C' theo bảng:

A|B|C|D|E|F
568|604|682||111|=trungvi(A1,B1,C1)
568|570|682||110|=trungvi(A2,B2,C2)
568|676|682||101|=trungvi(A3,B3,C3)
|||}}}}}|||
568|682|604||211|=trungvi(A5,B5,C5)
500|682|604||201|=trungvi(A6,B6,C6)
568|789|604||210|=trungvi(A7,B7,C7)
|||}}}}}|||
Cột 'F' đang ghi cú fáp hàm tự tạo ta nhập ở cột 'E';
& cột 'E' là trị trả về của hàm tự tạo bên trên.

(Mình mới dẫn ra 2 trong số 6 trường hợp hàm sẽ trả về. Bạn ngâm cứu & thực nghiệm tiếp xem sao nha!

Chúc thành công!
 
Giả sử ta có dữ liệu như các cột 'A' đến 'C' theo bảng:

A|B|C|D|E|F
568|604|682||111|=trungvi(A1,B1,C1)
568|570|682||110|=trungvi(A2,B2,C2)
568|676|682||101|=trungvi(A3,B3,C3)
|||}}}}}|||
568|682|604||211|=trungvi(A5,B5,C5)
500|682|604||201|=trungvi(A6,B6,C6)
568|789|604||210|=trungvi(A7,B7,C7)
|||}}}}}|||
Cột 'F' đang ghi cú fáp hàm tự tạo ta nhập ở cột 'E';
& cột 'E' là trị trả về của hàm tự tạo bên trên.

(Mình mới dẫn ra 2 trong số 6 trường hợp hàm sẽ trả về. Bạn ngâm cứu & thực nghiệm tiếp xem sao nha!

Chúc thành công!
hu hu hu! ý mình hỏi ở trên là cách nhập 2 code, giờ bạn trả lời mình mới bít là mình lòi ra cái dốt nữa nà
mình ko biết nhập và dùng code vì hồi giờ chỉ biết xài hàm thông thường thôi
 
nếu cột "E" trả về giá trị hàm tự tạo thì ko đúng ùi. vì theo bài viết của mình 568 604 682 trung vị của nó là 604 ko phải 111
 
Hàm trả về 604 là chuyện nhỏ, thông tin mà hàm đưa lại còn lớn hơn nhiều

nếu cột "E" trả về giá trị hàm tự tạo thì ko đúng ùi. vì theo bài viết của mình 568 604 682 trung vị của nó là 604 ko phải 111

Nếu hàm trả về là x11 - có nghĩa là thỏa điều kiện ở cả 2 số nhập vô hàm;
Nếu x=1 cho ta biết ba số nhập vô tăng dần theo thứ tự;
Nếu x=2: Số giữa là số lớn nhất (như bạn thấy);

Nếu Hàm trả vế x01 có nghĩa số đầu & giữa không thỏa & ngược lại, nếu trả về x10 nghĩa là số giữa & cuối không thỏa. . . .

Mà này, ta có thể dùng thêm hàm If() & hàm MOD() để xử lý hàm tự tạo ra kết quả bạn cần mà!

(Chuyên này chắc bạn nghe qua lần đầu?!)

Chúc nhiều thành tựu nay mai!

)(&&@@ )(&&@@ )(&&@@
 
Nếu hàm trả về là x11 - có nghĩa là thỏa điều kiện ở cả 2 số nhập vô hàm;
Nếu x=1 cho ta biết ba số nhập vô tăng dần theo thứ tự;
Nếu x=2: Số giữa là số lớn nhất (như bạn thấy);

Nếu Hàm trả vế x01 có nghĩa số đầu & giữa không thỏa & ngược lại, nếu trả về x10 nghĩa là số giữa & cuối không thỏa. . . .

Mà này, ta có thể dùng thêm hàm If() & hàm MOD() để xử lý hàm tự tạo ra kết quả bạn cần mà!

(Chuyên này chắc bạn nghe qua lần đầu?!)

Chúc nhiều thành tựu nay mai!

)(&&@@ )(&&@@ )(&&@@

Nhờ bạn giải thích mà code của bạn kia viết mình đã hiểu đọc kỹ lại thì ra có 1 dòng giải thích

file ban MinhTuan gửi cho mình thì chạy tốt trên file bạn gửi nhưng tui làm theo bên file hồ sơ thì hok đc hu hu
 
Chỉnh sửa lần cuối bởi điều hành viên:
Web KT

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

Back
Top Bottom