Guest User

Untitled

a guest
Feb 24th, 2018
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.86 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define Ra 4.7 //The constant resistance
  5. #define Ein 10 //Input voltage
  6. #define Rx 1 //True value
  7. int size; //Number of readings you're going to input
  8.  
  9. void resistance(double *volt, double *resi);
  10. void mean(double *Rb, double *mean);
  11. void meanDeviation(double *mean, double *resi, double *deviation);
  12. void avgDeviation(double *deviation, double *avgDev);
  13. void stdDeviation(double *deviation, double *stdDeviation);
  14. void rangeFu(double *resi, double *range);
  15. void impresFu(double *resi, double *impres);
  16.  
  17.  
  18. int main()
  19. {
  20. printf("Enter the number of readings:");
  21. scanf("%d",&size);
  22.  
  23. double Eo[size],Rb[size],meanVr,devMean[size],avgDev,stdDevRes,range,impres[size]; //If you see squiggly lines here, ignore them
  24. double *Eptr;
  25. Eptr = Eo;
  26.  
  27.  
  28. for(int i=0; i<size; i++)
  29. {
  30. printf("Enter reading number %d: ",(i+1));
  31. scanf("%lf",(Eptr+i));
  32. if(*(Eptr+i) >= Ein) //Eliminating negative resistance values
  33. {
  34. printf("The value of reading you entered was more than %d.\n",Ein);
  35. return 1;
  36. }
  37. else if (*(Eptr+i) <= 0) //Eliminating runtime errors errors
  38. {
  39. printf("The value of the reading your entered was zero or negative.\n");
  40. return 1;
  41. }
  42. }
  43. /*Data plugging*/
  44. resistance(&Eo[0],&Rb[0]);
  45. mean(&Rb[0],&meanVr);
  46. meanDeviation(&meanVr,&Rb[0],&devMean[0]);
  47. avgDeviation(&devMean[0], &avgDev);
  48. stdDeviation(&devMean[0], &stdDevRes);
  49. rangeFu(&Rb[0],&range);
  50. impresFu(&Rb[0],&impres[0]);
  51. /* Printing output starts*/
  52. for(int j=0; j<size; j++)
  53. {
  54. printf("The value of resistance number %d = %lf\n", (j+1), Rb[j]);
  55. }
  56. for(int k=0; k<size; k++)
  57. {
  58. printf("Deviation from mean for resistance number %d = %lf\n",(k+1),*(devMean+k));
  59. }
  60. for(int l=0; l<size; l++)
  61. {
  62. printf("Error for resistance number %d = %lf\n",(l+1),impres[l]);
  63. }
  64. printf("The average deviation = %lf\n",avgDev);
  65. printf("Standard deviation = %lf\n",stdDevRes);
  66. printf("Mean = %lf\n",meanVr);
  67. printf("Range = %lf\n",range);
  68. /*printing output ends*/
  69. }
  70.  
  71. void resistance(double *volt, double *resi)
  72. {//calculating the value of the resistance and plugging it into an array
  73. for(int j=0; j<size; j++)
  74. {
  75. *(resi+j) = (Ra * (*(volt+j)))/(Ein-(*(volt+j)));
  76. }
  77. }
  78.  
  79. void mean(double *Rb, double *mean)
  80. {
  81. double numerator = 0;
  82. for(int k=0; k<size; k++)
  83. {
  84. numerator += *(Rb+k);
  85. }
  86. *mean = numerator/size;
  87. }
  88.  
  89. void meanDeviation(double *mean, double *resi, double *deviation)
  90. {
  91. for(int l=0; l<size; l++)
  92. {
  93. *(deviation+l) = (*(resi+l) - *(mean));
  94. }
  95. }
  96.  
  97. void avgDeviation(double *deviation, double *avgDev)
  98. {
  99. for(int m=0; m<size; m++)
  100. {
  101. *(deviation+m) = sqrt(*(deviation+m) * *(deviation+m)); //Modulus
  102. }
  103. double sigmaDev = 0;
  104. for(int n=0; n<size; n++)
  105. {
  106. sigmaDev += *(deviation+n);
  107. }
  108. *avgDev = (sigmaDev)/size;
  109. }
  110.  
  111. void stdDeviation(double *deviation, double *stdDeviation)
  112. {
  113. double devSqr[size];
  114. for(int i=0; i<size;i++)
  115. {
  116. devSqr[i] = (*(deviation+i)) * (*(deviation+i)); //squaring
  117. }
  118. double sigmadevSqr;
  119. for(int j=0; j<size; j++)
  120. {
  121. sigmadevSqr += devSqr[j];
  122. }
  123.  
  124. *stdDeviation = sqrt(sigmadevSqr/(size-1));
  125. }
  126.  
  127. void rangeFu(double *resi, double *range)
  128. {
  129. double Rmax=0,Rmin=500;
  130. for(int i=0; i<(size); i++)
  131. { //Selecting the highest value
  132. if(*(resi+i) > Rmax)
  133. {
  134. Rmax = *(resi+i);
  135. }
  136. //Selecting the lowest value
  137. if(*(resi+i) < Rmin)
  138. {
  139. Rmin = *(resi+i);
  140. }
  141. }
  142. *range = sqrt((Rmax - Rmin) * (Rmax - Rmin));
  143. }
  144.  
  145. void impresFu(double *resi, double *impres)
  146. {
  147. for(int i=0; i<size; i++)
  148. {
  149. *(impres+i) = (sqrt((*(resi+i) - Rx) * (*(resi+i) - Rx))/Rx) * 100; //Modulus
  150. }
  151. }
Add Comment
Please, Sign In to add comment