G
G G
The program is an Example from Deitel and Deitel, chapter 6.
I typed it in carefully, I believe.
The program seems to freeze in the function median, where
median calls printArray(). printArray() prints only 80 elements
and then it seems to be in a loop of some type running
the cpu at 100%. well, freeze may not be the right terminology.
really it happens in the printArray(), because printArray()
does not finish printing.
output i get:
********
Mean
********
The mean is the average value of the data
items. The mean is equal to the of
all the data items divided by the number
of data items ( 99 ). The mean value for
this run is: 681 / 99 = 6.8788
*********
Median
*********
The unsorted array of responses is
6 7 8 9 8 7 8 9 8 9 7 8 9 5 9 8 7 8 7 8
6 7 8 9 3 9 8 7 8 7 7 8 9 8 9 8 9 7 8 9
6 7 8 7 8 7 9 8 9 2 7 8 9 8 9 8 9 7 5 3
5 6 7 2 5 3 9 4 6 4 7 8 9 6 8 7 8 9 7 8
seems to be in a loop here. it's still running.
after some time i get an exit code 9.
thanks everyone,
g.
/* Fig. 6.16: fig06_16.c
This program introduces the topic of survey data analysis.
It computes the mean, median and mode of the data */
#include <stdio.h>
#define SIZE 99
/* functtion prototypes */
void mean( const int answer[] );
void median( int answer[] );
void mode( int freq[], const int answer[] );
void bubbleSort( int a[] );
void printArray( const int a[] );
/* function main begins program execution */
int main( void )
{
int frequency[ 10 ] = { 0 }; /* initialize array frequency */
/* initialize array response */
int response[ SIZE ] =
{ 6, 7, 8, 9, 8, 7, 8, 9, 8, 9,
7, 8, 9, 5, 9, 8, 7, 8, 7, 8,
6, 7, 8, 9, 3, 9, 8, 7, 8, 7,
7, 8, 9, 8, 9, 8, 9, 7, 8, 9,
6, 7, 8, 7, 8, 7, 9, 8, 9, 2,
7, 8, 9, 8, 9, 8, 9, 7, 5, 3,
5, 6, 7, 2, 5, 3, 9, 4, 6, 4,
7, 8, 9, 6, 8, 7, 8, 9, 7, 8,
7, 4, 4, 2, 5, 3, 8, 7, 5, 6,
4, 5, 6, 1, 6, 5, 7, 8, 7 };
/* process reponses */
mean( response );
median( response );
mode( frequency, response );
return 0; /* indicates successful termination */
} /* end main */
/* calculate average of all response values */
void mean( const int answer[] )
{
int j; /* counter for totaling array elements */
int total = 0; /* variable to hold sum of array elements */
printf ( "%s\n%s\n%s\n", "********", " Mean", "********" );
/* total response values */
for ( j = 0; j < SIZE; j++ )
total += answer[ j ];
printf ( "The mean is the average value of the data\n"
"items. The mean is equal to the of\n"
"all the data items divided by the number\n"
"of data items ( %d ). The mean value for\n"
"this run is: %d / %d = %.4f\n\n",
SIZE, total, SIZE, ( double )total / SIZE );
} /* end function mean */
/*sort array and determine median element's value */
void median( int answer [] )
{
printf( "\n%s\n%s\n%s\n%s",
"*********", " Median", "*********",
"The unsorted array of responses is" );
printArray( answer ); /* output unsorted array */
bubbleSort( answer ); /* sort array */
printf( "\n\nThe sort array is" );
printArray( answer ); /* output sorted array */
/* display median element */
printf( "\n\nThe median is element %d of \n"
"the sorted %d element array.\n"
"For this run the median is %d\n\n",
SIZE / 2, SIZE, answer[ SIZE / 2 ] );
} /* end function median */
/* determine most frequent response */
void mode( int freq[], const int answer[] )
{
int rating; /* counter for accessing elements 1-9 of array freq */
int j; /* counter for summarizing elements 0-98 of array answer */
int h; /* counter for displaying histograms of elements in array freq */
int largest = 0; /* represents largest frequency */
int modeValue = 0; /* represents most frequenct response */
printf( "\n%s\n%s\n%s\n",
"*********", " Mode", "********" );
/* initalize frequencies to 0 */
for ( rating = 1; rating <= 9; rating++ )
freq[ rating ] = 0;
/* summarise frequencies */
for ( j = 0; j < SIZE; j++ )
++freq[ answer[ j ] ];
/* output headers for result columns */
printf( "%s%11s%19s\n\n%54s\n%54s\n\n",
"Response", "Frequency", "Histogram",
"1 2 2 2", "5 0 5 0 5");
/* output results */
for ( rating = 1; rating <= 9; rating++ )
{
printf( "%8d%11d ", rating, freq[ rating ] );
/* keep track of mode value and largest frequency value */
if ( freq[ rating ] > largest )
{
largest = freq[ rating ];
modeValue = rating;
} /* end if */
for ( h = 1; h <= freq[ rating ]; h++ )
printf( "*" );
printf( "\n" );
} /* end outer for */
/* display the mode value */
printf( "The mode is the most frequent value.\n"
"For this run the mode is %d which occured"
" %d times.\n", modeValue, largest );
} /* end function mode */
/* function that sorts an array with bubble sort algorithm */
void bubbleSort( int a[] )
{
int pass; /* pass counter */
int j; /* comparison */
int hold; /* temporary location used to swap elements */
/* loop to control number of passes */
for ( pass = 1; pass < SIZE; pass++ )
{
for ( j = 0; j < SIZE - 1; pass++ )
{
/* swap elements if out of order */
if ( a[ j ] > a[ j + 1 ] )
{
hold = a[ j ];
a[ j ] = a[ j + 1 ];
a[ j + 1 ] = hold;
} /* end if */
} /* end inner for */
} /* end outer for */
} /* end function bubbleSort */
/* output array contents (20 values per row) */
void printArray( const int a[] )
{
int j; /* counter */
/* output array contents */
for ( j = 0; j < SIZE; j++ )
{
if ( j % 20 == 0 )
printf( "\n" );
printf( "%2d", a[ j ] );
} /* end for */
} /* end function printArray */
I typed it in carefully, I believe.
The program seems to freeze in the function median, where
median calls printArray(). printArray() prints only 80 elements
and then it seems to be in a loop of some type running
the cpu at 100%. well, freeze may not be the right terminology.
really it happens in the printArray(), because printArray()
does not finish printing.
output i get:
********
Mean
********
The mean is the average value of the data
items. The mean is equal to the of
all the data items divided by the number
of data items ( 99 ). The mean value for
this run is: 681 / 99 = 6.8788
*********
Median
*********
The unsorted array of responses is
6 7 8 9 8 7 8 9 8 9 7 8 9 5 9 8 7 8 7 8
6 7 8 9 3 9 8 7 8 7 7 8 9 8 9 8 9 7 8 9
6 7 8 7 8 7 9 8 9 2 7 8 9 8 9 8 9 7 5 3
5 6 7 2 5 3 9 4 6 4 7 8 9 6 8 7 8 9 7 8
seems to be in a loop here. it's still running.
after some time i get an exit code 9.
thanks everyone,
g.
/* Fig. 6.16: fig06_16.c
This program introduces the topic of survey data analysis.
It computes the mean, median and mode of the data */
#include <stdio.h>
#define SIZE 99
/* functtion prototypes */
void mean( const int answer[] );
void median( int answer[] );
void mode( int freq[], const int answer[] );
void bubbleSort( int a[] );
void printArray( const int a[] );
/* function main begins program execution */
int main( void )
{
int frequency[ 10 ] = { 0 }; /* initialize array frequency */
/* initialize array response */
int response[ SIZE ] =
{ 6, 7, 8, 9, 8, 7, 8, 9, 8, 9,
7, 8, 9, 5, 9, 8, 7, 8, 7, 8,
6, 7, 8, 9, 3, 9, 8, 7, 8, 7,
7, 8, 9, 8, 9, 8, 9, 7, 8, 9,
6, 7, 8, 7, 8, 7, 9, 8, 9, 2,
7, 8, 9, 8, 9, 8, 9, 7, 5, 3,
5, 6, 7, 2, 5, 3, 9, 4, 6, 4,
7, 8, 9, 6, 8, 7, 8, 9, 7, 8,
7, 4, 4, 2, 5, 3, 8, 7, 5, 6,
4, 5, 6, 1, 6, 5, 7, 8, 7 };
/* process reponses */
mean( response );
median( response );
mode( frequency, response );
return 0; /* indicates successful termination */
} /* end main */
/* calculate average of all response values */
void mean( const int answer[] )
{
int j; /* counter for totaling array elements */
int total = 0; /* variable to hold sum of array elements */
printf ( "%s\n%s\n%s\n", "********", " Mean", "********" );
/* total response values */
for ( j = 0; j < SIZE; j++ )
total += answer[ j ];
printf ( "The mean is the average value of the data\n"
"items. The mean is equal to the of\n"
"all the data items divided by the number\n"
"of data items ( %d ). The mean value for\n"
"this run is: %d / %d = %.4f\n\n",
SIZE, total, SIZE, ( double )total / SIZE );
} /* end function mean */
/*sort array and determine median element's value */
void median( int answer [] )
{
printf( "\n%s\n%s\n%s\n%s",
"*********", " Median", "*********",
"The unsorted array of responses is" );
printArray( answer ); /* output unsorted array */
bubbleSort( answer ); /* sort array */
printf( "\n\nThe sort array is" );
printArray( answer ); /* output sorted array */
/* display median element */
printf( "\n\nThe median is element %d of \n"
"the sorted %d element array.\n"
"For this run the median is %d\n\n",
SIZE / 2, SIZE, answer[ SIZE / 2 ] );
} /* end function median */
/* determine most frequent response */
void mode( int freq[], const int answer[] )
{
int rating; /* counter for accessing elements 1-9 of array freq */
int j; /* counter for summarizing elements 0-98 of array answer */
int h; /* counter for displaying histograms of elements in array freq */
int largest = 0; /* represents largest frequency */
int modeValue = 0; /* represents most frequenct response */
printf( "\n%s\n%s\n%s\n",
"*********", " Mode", "********" );
/* initalize frequencies to 0 */
for ( rating = 1; rating <= 9; rating++ )
freq[ rating ] = 0;
/* summarise frequencies */
for ( j = 0; j < SIZE; j++ )
++freq[ answer[ j ] ];
/* output headers for result columns */
printf( "%s%11s%19s\n\n%54s\n%54s\n\n",
"Response", "Frequency", "Histogram",
"1 2 2 2", "5 0 5 0 5");
/* output results */
for ( rating = 1; rating <= 9; rating++ )
{
printf( "%8d%11d ", rating, freq[ rating ] );
/* keep track of mode value and largest frequency value */
if ( freq[ rating ] > largest )
{
largest = freq[ rating ];
modeValue = rating;
} /* end if */
for ( h = 1; h <= freq[ rating ]; h++ )
printf( "*" );
printf( "\n" );
} /* end outer for */
/* display the mode value */
printf( "The mode is the most frequent value.\n"
"For this run the mode is %d which occured"
" %d times.\n", modeValue, largest );
} /* end function mode */
/* function that sorts an array with bubble sort algorithm */
void bubbleSort( int a[] )
{
int pass; /* pass counter */
int j; /* comparison */
int hold; /* temporary location used to swap elements */
/* loop to control number of passes */
for ( pass = 1; pass < SIZE; pass++ )
{
for ( j = 0; j < SIZE - 1; pass++ )
{
/* swap elements if out of order */
if ( a[ j ] > a[ j + 1 ] )
{
hold = a[ j ];
a[ j ] = a[ j + 1 ];
a[ j + 1 ] = hold;
} /* end if */
} /* end inner for */
} /* end outer for */
} /* end function bubbleSort */
/* output array contents (20 values per row) */
void printArray( const int a[] )
{
int j; /* counter */
/* output array contents */
for ( j = 0; j < SIZE; j++ )
{
if ( j % 20 == 0 )
printf( "\n" );
printf( "%2d", a[ j ] );
} /* end for */
} /* end function printArray */