Cách tính tổng chu vi hộp hình chữ nhật dựa vào diện tích 3 mặt của hình hộp chữ nhật?

Em có một bài toán là cho diện tích 3 mặt của hình hộp chữ nhật và yêu cầu viết chương trình tính tổng chu vi của 3 mặt của hhcn đó. Anh chị có thể gợi ý giúp em cách tính không ạ?
Em cảm ơn.

Nhân lại rồi rút căn là dễ nhất.

1 Like
  1. Hình hộp chứ nhật có 3 chiều là double ChieuDai, double ChieuRong, double ChieuCao
  2. Có diện tích 3 mặt => Có ChieuDaiChieuRong, ChieuDaiChieuCao, ChieuRong*ChieuCao
  3. Có 3 tích, ta giải hệ phương trình 3 ẩn (x, y, z) với (xy = a; yz = b; zx = c)
  4. Xây dựng hàm tính cạnh dựa trên cách giải phương trình:
int[] TinhCanhBangDienTich3Mat(double DienTichMat1, double DienTichMat2, double DienTichMat3)
{
    ...
    double Canh1...;
    ...
    double Canh2=...;
    ...
    double Canh3=...;
    return {Canh1, Canh2, Canh3};
}
1 Like

anh cho em hỏi thêm là làm sao mình có thể return nhiều giá trị như vậy ạ. Cách sử dụng ra sao ạ. Em đã search google. Rồi mình dùng hàm void cho dễ được không ạ?

bạn ko thấy đó là nó trả về một mảng sao bạn

Mình đâu có return nhiều giá trị đâu, mình return MỘT mảng đó chứ. Và Array là một kiểu dữ liệu khác với “ints” (int thêm số nhiều :)) )
Bạn cũng có thể dùng hàm void, kiểu như là

void TinhCanhBangDienTich3Mat(double DienTichMat1, double DienTichMat2, double DienTichMat3, &Canh1, &Canh2, &Canh3)
{
    ...
}

Nhưng mà mình không học C++ nên không biết dùng hàm thay đổi giá trị biến kiểu gì :slight_smile:

cái đấy em nghĩ phải dùng con trỏ anh nhỉ

Bữa có thớt hỏi làm sao trả về nhiều trị cùng lúc mà nhỉ. Return hai giá trị trong một hàm C/C++

Mà bài này đâu cần :smiley: cộng lại return.

C++ có tham chiếu mà nhỉ? &<tham số>

1 Like

Không nhầm thì trước mình cũng làm 1 bài trên SPOJ tương tự thế này. Bài này là kiến thức toán thôi, bạn lấy giấy bút tính là ra. :slight_smile:

Mình thấy trả về nhiều giá trị nó phức tạp lắm, thôi cứ khai báo struct/class mới luôn nhẹ nợ. Nếu trả về nhiều giá trị cùng kiểu thì dùng Array/List (Không biết C++ có List không nhỉ :smiley: )

Với a, b, c là các giá trị nhập vào:
x = sqrt(a * b / c)
z = c / x
y = b / z

-> Đ/S: 4 * (x + y + z)

1 Like

Ai bảo dùng struct class cho bài này đâu :)) Mình trả lời cho ý “return nhiều giá trị” đó chứ :))

cảm ơn mọi người nhiều ạ

Giải thuật nó đại khái thế này
nhập vào diện tích 3 mặt :
Sx, Sy, Sz.

khai báo biến

dài = d; rộng = r; cao = c.

Chu vi ba mặt lần lượt là
Cx, Cy, Cz

công thức

c = sqrt(Sx * Sy / Sz)

Cx = (c + Sx /c) *2;

Cy = (Sy /c + c) *2;

Cz =(Sy/ c + Sx / c)*2

tổng chu vi 3 mặt sẽ là
C = (2c + 2Sx/c + 2Sy/c ) *2
= (c + Sx/c + Sy/c) *4

=========================================
giải thích cho công thức
Sx = c * r >> r = Sx / c;
Sy = d * c >> d = Sy / c;
Sz = r * d = Sx /c * Sy / c

Cách làm của mình là thế :V hơi thô thiển, nhưng hy vọng có ích với bạn :smiley:

2 Likes

Cách này hơi dài nhưng mình có cảm giác là có sai số nhỏ hơn hai cách trên.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?