#include <iostream>
#include <cmath>
#include <iomanip>
#include <cstdlib>

using namespace std;

bool isInt (double value) {
    double dummy;
    return bool(modf(value, &dummy) == 0);
}

double sqr(double value) { 
	return value * value; 
}
double computePressure(double hubDimeter, double interference, double tireThickness){
	const double E1= 207e9;
	const double  v = 0.28;
	double b = hubDimeter/2;
	double c = b*tireThickness;
	double result;
	result = ((interference/b)/((1/E1)*(((c*c)+(b*b))/((c*c)-(b*b)))+((v)+((1/E1)*(1-v)))));
	return result;
}





int main (void) {
	double hubD;
	double delta;
	double thick;
	double bestThickness;
	double bestDifference;
	double difference;
	double inereferencePressure;
	double bestP;
	int i;
	
	cout<< "Enter hub dimeter and intereference(0,0 to exit) : ";
	cin >> hubD >> delta;
	
	while (hubD != 0 && delta != 0){
		if ((hubD<0.5 || hubD>2.5 || delta > hubD * 0.005 || delta < 0)){
			cout << "invaild values-- try again";
		}
		else{
			cout <<" Thickness  (cm)   Pressure  (MPa)"<<endl<<"--------------------------------------"<<endl;
			cout<< fixed << showpoint;
			for(i=0; i<12; i++){
				thick = 6 + i*0.5;
				inereferencePressure = computePressure(hubD, delta, thick*0.01);
				cout << setw(8) << setprecision(1) << thick << setw(20) << setprecision(4) << inereferencePressure/1e6 << endl;
				difference = fabs(20e6 - inereferencePressure);
				if(i==0 || difference < bestDifference){
					bestDifference = difference;
					bestThickness = thick;
				} 
			} 
			if (bestDifference < 5e6){
				cout << "all of tire thickness are unacceptable"<< endl;
			}
			else{
				cout << "A tire thickness of "<< setprecision(1) << bestThickness << "cm is the closest to giving a pressure of 20MPa."<<endl;
				
			}
				
			
		}
	cout<< "Enter hub dimeter and intereference(0,0 to exit) : ";
	cin >> hubD >> delta;
	
		
	}

    system("PAUSE"); return 0;
}
