Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรมตรวจสอบการล้นของถังน้ำเมื่อหยอดลูกบอลทรงกลม n ลูกลงไปใน C++

ภาพรวมปัญหา

โปรแกรมนี้ใช้ตรวจสอบว่าถังน้ำทรงกระบอกจะล้นหรือไม่เมื่อหยอดลูกบอลทรงกลมแข็ง n ลูกลงไปในน้ำ โดยมีข้อมูลที่กำหนด ได้แก่ รัศมีและความสูงของถัง จำนวนลูกบอล รัศมีของลูกบอล และปริมาตรน้ำเริ่มต้นในถัง

สูตรคำนวณปริมาตร

ทรงกระบอก (ถังน้ำ)

3.14 * r * r * h

โดย r คือรัศมีของถัง และ h คือความสูงของถัง

ทรงกลม (ลูกบอล)

(4/3) * 3.14 * R * R * R

โดย R คือรัศมีของลูกบอลทรงกลม

ขั้นตอนการแก้ปัญหา

  1. รับค่าพารามิเตอร์: รัศมีถัง ความสูงถัง จำนวนลูกบอล รัศมีลูกบอล และปริมาตรน้ำเริ่มต้น
  2. คำนวณความจุสูงสุดของถัง (ปริมาตรทรงกระบอก)
  3. คำนวณปริมาตรของลูกบอลหนึ่งลูก แล้วคูณด้วยจำนวนลูกบอล
  4. คำนวณปริมาตรรวม = ปริมาตรน้ำเริ่มต้น + ปริมาตรลูกบอลทั้งหมด
  5. เปรียบเทียบปริมาตรรวมกับความจุถัง:
    • ถ้าปริมาตรรวม > ความจุถัง → จะล้น
    • ถ้าปริมาตรรวม ≤ ความจุถัง → จะไม่ล้น

ตัวอย่างโค้ด 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 ในฟังก์ชันแทนความสูงของน้ำในถัง ไม่ใช่ปริมาตรน้ำโดยตรง