01/10/2018, 08:18

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.

rogp10 viết 10:30 ngày 01/10/2018

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

Trần Hoàn viết 10:29 ngày 01/10/2018
  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};
}
The Sao viết 10:35 ngày 01/10/2018

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 ạ?

Đỗ Nhiên viết 10:33 ngày 01/10/2018

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

Trần Hoàn viết 10:22 ngày 01/10/2018

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ì

Đỗ Nhiên viết 10:21 ngày 01/10/2018

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

rogp10 viết 10:23 ngày 01/10/2018

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 cộng lại return.

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

viết 10:24 ngày 01/10/2018

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.

Trần Hoàn viết 10:19 ngày 01/10/2018

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ỉ )

viết 10:32 ngày 01/10/2018

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)

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)

Trần Hoàn viết 10:28 ngày 01/10/2018

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ứ :))

The Sao viết 10:22 ngày 01/10/2018

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

minh viết 10:33 ngày 01/10/2018

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

rogp10 viết 10:29 ngày 01/10/2018

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.

Bài liên quan
0