From c237e0c92ecee53ed7352b83c69da9aabafcd26b Mon Sep 17 00:00:00 2001 From: SR Tamim Date: Sat, 9 Mar 2024 00:29:25 +0600 Subject: calculation of total heat fixed --- headers/baseElement.h | 67 ++++++++++++++++++++++++++++++++++----------------- 1 file changed, 45 insertions(+), 22 deletions(-) (limited to 'headers/baseElement.h') diff --git a/headers/baseElement.h b/headers/baseElement.h index fd77194..e6372a1 100644 --- a/headers/baseElement.h +++ b/headers/baseElement.h @@ -1,9 +1,9 @@ #ifndef BASEELEMENT_H_INCLUDED #define BASEELEMENT_H_INCLUDED - #include #include +#include "readElementState.h" using namespace std; class baseElement @@ -40,38 +40,61 @@ public: double totalHeatNeeded(double mass, double fromTemp, double toTemp) { - double totalHeat = 0; - if (fromTemp <= meltingPoint && toTemp <= meltingPoint) + if (fromTemp < 0 || toTemp < 0) { - totalHeat = mass * specificHeatSolid * (toTemp - fromTemp); + cout << "Temperature cannot be less than 0 K" << endl; + return 0; } - else if (fromTemp <= meltingPoint && toTemp >= meltingPoint && toTemp <= boilingPoint) + + double totalHeat = 0; + string initialState = ""; + string finalState = ""; + if (fromTemp == meltingPoint || fromTemp == boilingPoint) { - totalHeat = mass * specificHeatSolid * (meltingPoint - fromTemp); - totalHeat += mass * latentHeatOfFusion / meltingPoint; - totalHeat += mass * specificHeatLiquid * (toTemp - meltingPoint); + cout << "What is the state of the element at the initial temperature?" << endl; + initialState = readElementState(); } - else if (fromTemp <= meltingPoint && toTemp >= boilingPoint) + if (toTemp == meltingPoint || toTemp == boilingPoint) { - totalHeat = mass * specificHeatSolid * (meltingPoint - fromTemp); - totalHeat += mass * latentHeatOfFusion; - totalHeat += mass * specificHeatLiquid * (boilingPoint - meltingPoint); - totalHeat += mass * latentHeatOfVaporization; - totalHeat += mass * specificHeatGas * (toTemp - boilingPoint); + cout << "What is the state of the element at the final temperature?" << endl; + finalState = readElementState(); } - else if (fromTemp >= meltingPoint && fromTemp <= boilingPoint && toTemp >= meltingPoint && toTemp <= boilingPoint) + + if (toTemp <= meltingPoint) { - totalHeat = mass * specificHeatLiquid * (toTemp - fromTemp); + totalHeat += mass * specificHeatSolid * (toTemp - fromTemp); + if (toTemp == meltingPoint && initialState != finalState) + totalHeat += mass * latentHeatOfFusion; } - else if (fromTemp >= meltingPoint && fromTemp <= boilingPoint && toTemp >= boilingPoint) + else if (toTemp <= boilingPoint) { - totalHeat = mass * specificHeatLiquid * (boilingPoint - fromTemp); - totalHeat += mass * latentHeatOfVaporization; - totalHeat += mass * specificHeatGas * (toTemp - boilingPoint); + if (fromTemp < meltingPoint) + totalHeat += mass * specificHeatSolid * (meltingPoint - fromTemp); + if (fromTemp == meltingPoint && initialState != finalState) + totalHeat += mass * latentHeatOfFusion; + if (fromTemp <= meltingPoint) + totalHeat += mass * specificHeatLiquid * (toTemp - meltingPoint); + else + totalHeat += mass * specificHeatLiquid * (toTemp - fromTemp); + if (toTemp == boilingPoint && initialState != finalState) + totalHeat += mass * latentHeatOfVaporization; } - else if (fromTemp >= boilingPoint && toTemp >= boilingPoint) + else { - totalHeat = mass * specificHeatGas * (toTemp - fromTemp); + if (fromTemp < meltingPoint) + totalHeat += mass * specificHeatSolid * (meltingPoint - fromTemp); + if (fromTemp == meltingPoint && initialState != finalState) + totalHeat += mass * latentHeatOfFusion; + + if (fromTemp < boilingPoint) + totalHeat += mass * specificHeatLiquid * (fromTemp - meltingPoint); + if (fromTemp == boilingPoint && initialState != finalState) + totalHeat += mass * latentHeatOfVaporization; + + if (fromTemp > boilingPoint) + totalHeat += mass * specificHeatGas * (toTemp - fromTemp); + else + totalHeat += mass * specificHeatGas * (toTemp - boilingPoint); } return totalHeat; } -- cgit v1.2.3 From f42ea7d2cab522de28fc63c599f905b787b7fc2d Mon Sep 17 00:00:00 2001 From: SR Tamim Date: Sun, 10 Mar 2024 06:28:31 +0600 Subject: total heat calculation bug fix element state condition was not correct --- headers/baseElement.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'headers/baseElement.h') diff --git a/headers/baseElement.h b/headers/baseElement.h index e6372a1..4285fc0 100644 --- a/headers/baseElement.h +++ b/headers/baseElement.h @@ -63,32 +63,32 @@ public: if (toTemp <= meltingPoint) { totalHeat += mass * specificHeatSolid * (toTemp - fromTemp); - if (toTemp == meltingPoint && initialState != finalState) + if (toTemp == meltingPoint && finalState != "Solid") totalHeat += mass * latentHeatOfFusion; } else if (toTemp <= boilingPoint) { if (fromTemp < meltingPoint) totalHeat += mass * specificHeatSolid * (meltingPoint - fromTemp); - if (fromTemp == meltingPoint && initialState != finalState) + if (fromTemp == meltingPoint && initialState != "Liquid") totalHeat += mass * latentHeatOfFusion; if (fromTemp <= meltingPoint) totalHeat += mass * specificHeatLiquid * (toTemp - meltingPoint); else totalHeat += mass * specificHeatLiquid * (toTemp - fromTemp); - if (toTemp == boilingPoint && initialState != finalState) + if (toTemp == boilingPoint && finalState != "Liquid") totalHeat += mass * latentHeatOfVaporization; } else { if (fromTemp < meltingPoint) totalHeat += mass * specificHeatSolid * (meltingPoint - fromTemp); - if (fromTemp == meltingPoint && initialState != finalState) + if (fromTemp == meltingPoint && initialState != "Liquid") totalHeat += mass * latentHeatOfFusion; if (fromTemp < boilingPoint) totalHeat += mass * specificHeatLiquid * (fromTemp - meltingPoint); - if (fromTemp == boilingPoint && initialState != finalState) + if (fromTemp == boilingPoint && initialState != "Gas") totalHeat += mass * latentHeatOfVaporization; if (fromTemp > boilingPoint) -- cgit v1.2.3 From a2d29e8b76d3969e7c5f4f4509abf92727585a1b Mon Sep 17 00:00:00 2001 From: SR Tamim Date: Sun, 10 Mar 2024 06:41:01 +0600 Subject: total entropy calculation fixed --- headers/baseElement.h | 95 ++++++++++++++++++++++++++++++++------------------- 1 file changed, 60 insertions(+), 35 deletions(-) (limited to 'headers/baseElement.h') diff --git a/headers/baseElement.h b/headers/baseElement.h index 4285fc0..a3907fe 100644 --- a/headers/baseElement.h +++ b/headers/baseElement.h @@ -16,7 +16,9 @@ private: double specificHeatLiquid; double specificHeatGas; double meltingPoint; - double boilingPoint; + double boilingPoint; + string initialState = ""; + string finalState = ""; protected: void setElementName(string value) { elementName = value; } @@ -47,8 +49,6 @@ public: } double totalHeat = 0; - string initialState = ""; - string finalState = ""; if (fromTemp == meltingPoint || fromTemp == boilingPoint) { cout << "What is the state of the element at the initial temperature?" << endl; @@ -101,38 +101,63 @@ public: double totalEntropyChange(double mass, double fromTemp, double toTemp) { - double totalEntropy = 0; - if (fromTemp <= meltingPoint && toTemp <= meltingPoint) - { - totalEntropy = mass * specificHeatSolid * log(toTemp / fromTemp); - } - else if (fromTemp <= meltingPoint && toTemp >= meltingPoint && toTemp <= boilingPoint) - { - totalEntropy = mass * specificHeatSolid * log(meltingPoint / fromTemp); - totalEntropy += mass * latentHeatOfFusion / meltingPoint; - totalEntropy += mass * specificHeatLiquid * log(toTemp / meltingPoint); - } - else if (fromTemp <= meltingPoint && toTemp >= boilingPoint) - { - totalEntropy = mass * specificHeatSolid * log(meltingPoint / fromTemp); - totalEntropy += mass * latentHeatOfFusion; - totalEntropy += mass * specificHeatLiquid * log(boilingPoint / meltingPoint); - totalEntropy += mass * latentHeatOfVaporization; - totalEntropy += mass * specificHeatGas * log(toTemp / boilingPoint); - } - else if (fromTemp >= meltingPoint && fromTemp <= boilingPoint && toTemp >= meltingPoint && toTemp <= boilingPoint) - { - totalEntropy = mass * specificHeatLiquid * log(toTemp / fromTemp); - } - else if (fromTemp >= meltingPoint && fromTemp <= boilingPoint && toTemp >= boilingPoint) - { - totalEntropy = mass * specificHeatLiquid * log(boilingPoint / fromTemp); - totalEntropy += mass * latentHeatOfVaporization; - totalEntropy += mass * specificHeatGas * log(toTemp / boilingPoint); - } - else if (fromTemp >= boilingPoint && toTemp >= boilingPoint) - { - totalEntropy = mass * specificHeatGas * log(toTemp / fromTemp); + if (fromTemp < 0 || toTemp < 0) + { + cout << "Temperature cannot be less than 0 K" << endl; + return 0; + } + + double totalEntropy = 0; + string initialState = ""; + string finalState = ""; + if (fromTemp == meltingPoint || fromTemp == boilingPoint) + { + cout << "What is the state of the element at the initial temperature?" << endl; + if (initialState != "") + initialState = readElementState(); + } + if (toTemp == meltingPoint || toTemp == boilingPoint) + { + cout << "What is the state of the element at the final temperature?" << endl; + if (finalState != "") + finalState = readElementState(); + } + + if (toTemp <= meltingPoint) + { + totalEntropy += mass * specificHeatSolid * log(toTemp / fromTemp); + if (toTemp == meltingPoint && finalState != "Solid") + totalEntropy += mass * latentHeatOfFusion / meltingPoint; + } + else if (toTemp <= boilingPoint) + { + if (fromTemp < meltingPoint) + totalEntropy += mass * specificHeatSolid * log(meltingPoint / fromTemp); + if (fromTemp == meltingPoint && initialState != "Liquid") + totalEntropy += mass * latentHeatOfFusion / meltingPoint; + if (fromTemp <= meltingPoint) + totalEntropy += mass * specificHeatLiquid * log(toTemp / meltingPoint); + else + totalEntropy += mass * specificHeatLiquid * log(toTemp / fromTemp); + if (toTemp == boilingPoint && finalState != "Liquid") + totalEntropy += mass * latentHeatOfVaporization / boilingPoint; + } + else + { + if (fromTemp < meltingPoint) + totalEntropy += mass * specificHeatSolid * log(meltingPoint / fromTemp); + if (fromTemp == meltingPoint && initialState != "Liquid") + totalEntropy += mass * latentHeatOfFusion / meltingPoint; + + if (fromTemp < boilingPoint) + totalEntropy += mass * specificHeatLiquid * log(fromTemp / meltingPoint); + if (fromTemp == boilingPoint && initialState != "Gas") + totalEntropy += mass * latentHeatOfVaporization / boilingPoint; + + if (fromTemp > boilingPoint) + totalEntropy += mass * specificHeatGas * log(toTemp / fromTemp); + else + totalEntropy += mass * specificHeatGas * log(toTemp / boilingPoint); } return totalEntropy; } -- cgit v1.2.3