1 Attachment(s)
how to pass array from one function into another: variance to mean
function name implies what it does: i.e. finds mean variance etc.
Attachment 11014
I think the mean is ok. The resultant mean in the main function is 6.something, ask you can see from the image.
But the mean is not right in the variance function, as you can see from a test print. What is wrong with the mean there? :(
Code:
#include<stdio.h>
#include<math.h>
double mean(int marks[], int n);
double variance(int marks[], int n);
double stdDev(int marks[], int n);
double mode(int marks[], int n);
void sort(int marks[], int n);
int main(){
int n,i;
double t1, t2, t3, t4;
FILE *inFile;
inFile=fopen("marks.txt", "r");
if (inFile==NULL)
{
printf("File open error!\n");
return 0;
}
n=0;
int count[10000];
while((fscanf(inFile, "%d", &count[n]))==1) n++;
int marks[n];
for(i=0; i<n; i++) marks[i]=count[i];
printf("%d is the number of readings\n", n);
/*printf("testing marks array %d %d %d %d %d", marks[0], marks[1], marks[2], marks[812], marks[813]);*/
t1=mean(marks, n);
/*printf("testing marks array %d %d %d %d %d", marks[0], marks[1], marks[2], marks[812], marks[813]);*/
t2=variance(marks, n);
/*printf("testing marks array %d %d %d %d %d", marks[0], marks[1], marks[2], marks[812], marks[813]);*/
t3=stdDev(marks, n);
/*printf("testing marks array %d %d %d %d %d", marks[0], marks[1], marks[2], marks[812], marks[813]);*/
t4=mode(marks, n);
/*printf("testing marks array %d %d %d %d %d", marks[0], marks[1], marks[2], marks[812], marks[813]);*/
printf("%lf %d %lf %d, mean, variance, stdDev, mode", t1, t2, t3, t4);
fclose(inFile);
return 0;
}
double mean(int marks[], int n){
int i;
int sum=0;
for(i=0; i<n; i++) sum+=marks[i];
return (1.0*sum/n);
}
double variance(int marks[], int n){
int i;
double ave, varsum;
varsum=0;
printf("%d %d %d marks test\n", marks[0], marks[1], marks[813]);
ave=mean(marks, n);
printf("%d ave test\n", ave);
for (i=0; i<n; i++) varsum+=(marks[i]-ave)*(marks[i]-ave);
printf("%d varsum, %d variance test \n", varsum, varsum/n);
return (varsum/n);
}
double stdDev(int marks[], int n){
int i;
double var;
var=variance(marks, n);
return (sqrt(var));
}
double mode(int marks[], int n){
int i, count=0;
double mid;
mid=n/2.0;
sort(marks, n);
for(i=0; i<n; i++){
count=+marks[i];
if (count==mid) return ((marks[i]+marks[i+1])/2.0);
if (count>mid) return(marks[i]);}
return 0;
}
void sort(int marks[], int n){
int sorter[n];
sorter[0]=marks[0];
int i, temp;
for(i=1; i<n; i++){
if (marks[i]>=sorter[i]) sorter[i+1]=marks[i];
else {
temp=sorter[i];
sorter[i]=marks[i];
sorter[i+1]=temp;
}
}
for (i=0; i<n; i++) marks[i]=sorter[i];
return;}