SHOW:
|
|
- or go back to the newest paste.
| 1 | #include <bits/stdc++.h> | |
| 2 | using namespace std ; | |
| 3 | ||
| 4 | double M_a , M_b , V_a , V_eq , K_a , K_w , V_m , V_p ; | |
| 5 | ||
| 6 | double pH(double V_b) | |
| 7 | {
| |
| 8 | double beta , b , c , x , E ; | |
| 9 | x = (V_eq+(K_a/M_b)*(V_a+V_eq)) ; | |
| 10 | ||
| 11 | beta = (K_w*K_w*(V_a+V_eq)*(V_a+V_eq))/(2*M_b*M_b*x*x) ; | |
| 12 | beta *= (1 + sqrt(1 + (4*K_a*M_b*x)/(K_w*(V_a+V_eq)))) ; | |
| 13 | beta += (K_a*K_w*(V_a+V_eq))/(M_b*x) ; | |
| 14 | beta = 1/sqrt(beta) ; | |
| 15 | ||
| 16 | x = V_b + (K_a*(V_a+V_b))/M_b ; | |
| 17 | c = -(K_a*K_w*(V_a+V_b))/(M_b*x) ; | |
| 18 | b = (K_a*(V_b - (M_a/M_b)*V_a)) - (K_w/M_b)*(V_a+V_b) ; | |
| 19 | b /= x ; | |
| 20 | ||
| 21 | x = -(b/2) + sqrt(((b*b)/4)-c) ; | |
| 22 | E = ((beta*beta*x*x)-1)/(2*beta*x) ; | |
| 23 | ||
| 24 | double ret = log10(beta) - (asinh(E)*log10(exp(1))) ; | |
| 25 | ||
| 26 | return ret ; | |
| 27 | } | |
| 28 | ||
| 29 | double err(double u){
| |
| 30 | M_a = u ; | |
| 31 | V_eq = (M_a*V_a)/M_b ; | |
| 32 | double mm = (3.1+4.4)/2 ; | |
| 33 | double mp = (8.2+10)/2 ; | |
| 34 | double ret = abs(mm - pH(V_m))+abs(mp-pH(V_p)) ; | |
| 35 | return ret ; | |
| 36 | } | |
| 37 | ||
| 38 | int main(int argc, char const *argv[]) | |
| 39 | {
| |
| 40 | K_w = 1e-14 ; | |
| 41 | ||
| 42 | - | scanf("Enter the volume of the weak acid: %lf", &V_a) ;
|
| 42 | + | printf("Enter the volume of the weak acid: ") ;
|
| 43 | - | scanf("Enter the equilibrium constant of the weak acid: %lf", &K_a) ;
|
| 43 | + | scanf("%lf", &V_a) ;
|
| 44 | - | scanf("Enter the concentration of the strong base: %lf", &M_b) ;
|
| 44 | + | printf("Enter the equilibrium constant of the weak acid: ") ;
|
| 45 | - | scanf("Enter the volume of the strong base in case of Methyl Orange: %lf", &V_m) ;
|
| 45 | + | scanf("%lf", &K_a) ;
|
| 46 | - | scanf("Enter the volume of the strong base in case of Phenolphthalein: %lf", &V_p) ;
|
| 46 | + | printf("Enter the concentration of the strong base: ") ;
|
| 47 | scanf("%lf", &M_b) ;
| |
| 48 | printf("Enter the volume of the strong base in case of Methyl Orange: ") ;
| |
| 49 | scanf("%lf", &V_m) ;
| |
| 50 | printf("Enter the volume of the strong base in case of Phenolphthalein: ") ;
| |
| 51 | scanf("%lf", &V_p) ;
| |
| 52 | ||
| 53 | //ternary search | |
| 54 | double l = 0 , r = 1 ; | |
| 55 | ||
| 56 | while(r-l > 1e-6){
| |
| 57 | double l1 = (l*2+r)/3 ; | |
| 58 | double l2 = (l+2*r)/3 ; | |
| 59 | ||
| 60 | if(err(l1) < err(l2))r = l2 ; | |
| 61 | else l = l1 ; | |
| 62 | ||
| 63 | } | |
| 64 | ||
| 65 | printf("%lf\n" , l) ;
| |
| 66 | ||
| 67 | return 0; | |
| 68 | } |