Hello! Below is a program I wrote after a Chemistry lecture today. PV = nRT is an incredibly fundamental equation within Chemistry. Otherwise known as the Ideal Gas Law, this formula combines basis’ of Boyle’s Law, Charles’ Law, and Avangadro’s Law into a simple equation, which we can use to find any missing variables from the equation, when given the other circumstances.
PV = nRT
P = pressure,
V = volume,
n = substance in moles,
R = 0.0821 (when unit is (atm*L)/(mol*K)) With other units, this constant will vary however, this is the constant used in this program, for these are the units used. Read more on this constant
T = temperature
The program I have written will take input from the user for the values they DO have, and use those to find the “mystery” value, whichever variable that may be.

//
// main.cpp
// PV=nRT
//
// Created by Aidan Takami on 2/22/18.
// Copyright © 2018 Aidan Takami. All rights reserved.
//
#include
using namespace std;
void numbers();
double calculateP();
double calculateV();
double calculateN();
double calculateT();
//Fields
double p, v, n, t;
string pTemp = "";
string vTemp, nTemp, tTemp;
bool keepGoing = true;
const double R = 0.0821;
//Main
int main() {
//Introduction & directions
cout << "Hello! Welcome to the PV = nRT calculator! Type \"?\" for the value you are trying to find" << endl;
while(keepGoing){
//Calls calculation method
numbers();
}
}
//Method which gathers the numbers to be used in calculation
void numbers(){
//Bool to represent whether mystery value has been found yet
bool mysteryValue = false;
//Bools to represent which value is mystery value
bool pBool = false;
bool vBool = false;
bool nBool = false;
bool tBool = false;
//Used for continue/end process
string temp;
//Pressure
cout << "What is the pressure in atm?" <> pTemp;
//if the first value of the string is a digit
if(isdigit(pTemp[0])){
//convert the string to a double
p = stod(pTemp);
}
else{
pBool = true;
mysteryValue = true;
}
//Volume
cout << "What is the volume in L?" <> vTemp;
//if the first value of the string is a digit
if(isdigit(vTemp[0])){
//convert the string to a double
v = stod(vTemp);
}
else if(mysteryValue == true){
//error message & restart
cout << "We already have a mystery value! Let's try again!" << endl << endl;
numbers();
}
else{
vBool = true;
mysteryValue = true;
}
//Moles
cout << "What is the mole to molar mass ratio of the compound/element?" <> nTemp;
//if the first value of the string is a digit
if(isdigit(nTemp[0])){
//convert the string to a double
n = stod(nTemp);
}
else if(mysteryValue == true){
//error message and restart
cout << "We already have a mystery value! Let's try again!" << endl << endl;
numbers();
}
else{
nBool = true;
mysteryValue = true;
}
//Temperature
cout << "What is the temperature in Kelvin" <> tTemp;
//if the first value of the string is a digit
if(isdigit(tTemp[0])){
//convert the string to a double
t = stod(tTemp);
}
else if(mysteryValue == true){
//error message and restart
cout << "We already have a mystery value! Let's try again!" << endl << endl;
numbers();
}
else{
tBool = true;
mysteryValue = true;
}
//if pressure = mystery value
if(pBool){
cout << "The Pressure is: " << calculateP() << " atm!" << endl << endl;
}
//if volume = mystery value
else if(vBool){
cout << "The Volume is: " << calculateV() << " L!" << endl << endl;
}
//if mole = mystery value
else if(nBool){
cout << "The Molar Ratio is: " << calculateN() << " mol!" << endl << endl;
}
//if temp = mystery value
else if(tBool){
cout << "The Temperature is: " << calculateT() << " K!" << endl << endl;
}
else{
cout << "You answered your own question! I cannot verify whether it's true or not.!" << endl;
cout << "Try again!" << endl << endl << endl;
}
//Continue?
cout << "Would you like to continue? (y/n)" <> temp;
if(temp == "no" || temp == "n"){
keepGoing = false;
}
cout << endl;
}
//Calculates Pressure
double calculateP(){
cout << (n * R * t) << endl;
return (n*R*t)/v;
}
//Calculates Volume
double calculateV(){
return (n*R*t)/p;
}
//Calculates Molar Ratio
double calculateN(){
return (p*v)/(R*t);
}
//Calculates Temp
double calculateT(){
return (p*v)/(R*n);
}