ภาพรวมปัญหา
โปรแกรมนี้ใช้ตรวจสอบว่าถังน้ำทรงกระบอกจะล้นหรือไม่เมื่อหยอดลูกบอลทรงกลมแข็ง n ลูกลงไปในน้ำ โดยมีข้อมูลที่กำหนด ได้แก่ รัศมีและความสูงของถัง จำนวนลูกบอล รัศมีของลูกบอล และปริมาตรน้ำเริ่มต้นในถัง
สูตรคำนวณปริมาตร
ทรงกระบอก (ถังน้ำ)
3.14 * r * r * h
โดย r คือรัศมีของถัง และ h คือความสูงของถัง
ทรงกลม (ลูกบอล)
(4/3) * 3.14 * R * R * R
โดย R คือรัศมีของลูกบอลทรงกลม
ขั้นตอนการแก้ปัญหา
- รับค่าพารามิเตอร์: รัศมีถัง ความสูงถัง จำนวนลูกบอล รัศมีลูกบอล และปริมาตรน้ำเริ่มต้น
- คำนวณความจุสูงสุดของถัง (ปริมาตรทรงกระบอก)
- คำนวณปริมาตรของลูกบอลหนึ่งลูก แล้วคูณด้วยจำนวนลูกบอล
- คำนวณปริมาตรรวม = ปริมาตรน้ำเริ่มต้น + ปริมาตรลูกบอลทั้งหมด
- เปรียบเทียบปริมาตรรวมกับความจุถัง:
- ถ้าปริมาตรรวม > ความจุถัง → จะล้น
- ถ้าปริมาตรรวม ≤ ความจุถัง → จะไม่ล้น
ตัวอย่างโค้ด C++
#include <iostream>
using namespace std;
void checkOverflow(int tankHeight, int tankRadius, int waterHeight, int numBalls, int ballRadius) {
float tankCapacity = 3.14 * tankRadius * tankRadius * tankHeight;
float waterVolume = 3.14 * tankRadius * tankRadius * waterHeight;
float ballsVolume = numBalls * (4.0/3.0) * 3.14 * ballRadius * ballRadius * ballRadius;
float totalVolume = waterVolume + ballsVolume;
if (totalVolume > tankCapacity) {
cout << "It will overflow";
} else {
cout << "No it will not overflow";
}
}
int main() {
int tankHeight = 5, tankRadius = 2, waterHeight = 10, numBalls = 10, ballRadius = 2;
checkOverflow(tankHeight, tankRadius, waterHeight, numBalls, ballRadius);
return 0;
}
ผลลัพธ์ตัวอย่าง
It will overflow
หมายเหตุสำคัญ
- ใช้ค่า π ประมาณ 3.14 สำหรับความสะดวกในการคำนวณ
- สูตรปริมาตรทรงกลมใช้ (4.0/3.0) เพื่อให้ได้ผลลัพธ์เป็นทศนิยมที่ถูกต้อง
- ตัวแปร waterHeight ในฟังก์ชันแทนความสูงของน้ำในถัง ไม่ใช่ปริมาตรน้ำโดยตรง