Patrick B. answered 04/04/21
Math and computer tutor/teacher
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
// results[0] = sum; results[1]=average;
void SumAverage( int * A, int n, double * results)
{
int iLoop=0;
long sum=0;
double avg=0;
if (n>0)
{
for (iLoop=0; iLoop<n; iLoop++)
{
sum = sum + A[iLoop];
}
results[0]=sum;
avg = sum*1.0f/n;
results[1]=avg;
}
else
{
results[0]=sum;
results[1]=0;
avg=0;
}
}
void Sort(int * A, int n)
{
int i,j;
for (i=0; i<n; i++)
{
int iMinVal = A[i];
int indexOfMin = i;
for (j=i; j<n; j++) //linear searches the sub-array for the smallest element
{
if (iMinVal>A[j])
{
iMinVal=A[j];
indexOfMin=j;
}
}
//swaps
int iTemp = A[indexOfMin];
A[indexOfMin] = A[i];
A[i]=iTemp;
}
}
//array MUST be sorted
double Median(int * A, int n)
{
double medianReturn=0;
if (n%2==0)
{
// printf(" median is the average is %d and %d \n",A[n/2],A[n/2-1]);
medianReturn = (A[n/2]+A[n/2-1])/2;
}
else
{
//printf("median is %d \n",A[n/2]);
medianReturn = A[n/2];
}
return(medianReturn);
}
//results[0]=min; results[1]=max; results[2]=range; results[3]=1 if array is sorted, 0 otherwise;
void MinMax(int * A, int n, int * results)
{
int sorted_Flag=1;
int minVal = 32767;
int maxVal = -32767;
int iLoop=0;
for (iLoop=0; iLoop<n; iLoop++)
{
if (A[iLoop]<minVal) { minVal=A[iLoop]; }
if (A[iLoop]>maxVal) { maxVal=A[iLoop]; }
if (iLoop<n-1)
{
if (A[iLoop]>A[iLoop+1])
{
sorted_Flag=0;
}
}
}
results[0]=minVal;
results[1]=maxVal;
results[2] = maxVal-minVal;
results[3] = sorted_Flag;
}
void Dump( int * A, int n, char * strMsg)
{
int iLoop=0;
if (strMsg!=NULL)
{
printf("*************************************************\n");
printf(strMsg);
}
printf("\n*************************************************\n");
for (iLoop=0; iLoop<n; iLoop++)
{
printf("%d \n",A[iLoop]);
}
}
void randomInts(int * A, int n)
{
int iLoop=0;
for (iLoop=0; iLoop<n; iLoop++)
{
A[iLoop]=rand();
}
}
void Go()
{
double sumAvg[2];
double median;
int minMax[3];
int iLoop;
int n;
int * a;
int A[] = {32, 16, 64, 128, 2, 8, 0, 4, 1, 3};
int iResponse=-1;
while (iResponse<0)
{
printf(" Please input # of integers to sort or ZER0 to use the sample input data :>");
scanf("%d",&iResponse);
}
if (iResponse==0)
{
n=10;
a=A;
}
else
{
srand(time(NULL));
n=iResponse;
a = (int*)malloc(n*sizeof(int));
randomInts(a,n);
}
SumAverage(a,n,sumAvg);
Sort(a,n);
median = Median(a,n);
MinMax(a,n,minMax);
Dump(a,n,"RESULTS");
printf("---------------------------\n");
printf(" sum is %lf \n average is %6.2lf \n median is %6.2f \n",sumAvg[0],sumAvg[1],median);
printf(" min is %d \n max is %d \n range is %d \n",minMax[0],minMax[1],minMax[2]);
if (minMax[3]==1)
{
printf(" Array is sorted \n");
}
}
int main()
{
Go();
return 0;
}