Modificações nos programas de média, mediana e moda. Modifique o programa da Figura 6.16 de modo que a função mode seja capaz de lidar com um empate para o valor de moda. Modifique também a função median para que os dois elementos do meio de um array tenham a média calculada caso haja um número par de elementos.
Passo 1
Fala Galerinha!!! Tudo certo? Espero que sim!! Vamos junto resolver esse exercício.
De início, olhando para enunciado, sabemos que nosso programa terá que ser capaz de calcular a média, mediana e moda de um array que iremos definir como tamaho 100 através do comando #define SIZE 100.
Para facilitar nossa vida vamos criar essas funções que faça cada uma dessas operações. Mas antes vamos relembrar oque é a media, mediana e a moda.
A média é a média aritmética dos 100 valores. A função mean calcula a média totalizando os 99 elementos e dividindo o resultado por 99.
A mediana é o ‘valor intermediário’. A função median determina a mediana, além disso ela classifica o array de respostas em ordem crescente, depois escolhendo o elemento do meio, answer[SIZE / 2], do array classificado. Quando existe um número par de elementos, a mediana deve ser calculada como a média dos dois elementos do meio.
A moda é o valor que ocorre com mais frequência entre as 99 respostas. A função mode determina a moda contando o número de respostas de cada tipo, depois selecionando o valor que aparece mais vezes.
Passo 2
Show de bola!!! Agora já sabemos como será a cara das nossas funções. Vamos começar escrever elas então. Começando pela função mean(). Já sabemos que ela terá que calcular a média do array, para isso ela vai precisar de uma variável para totalizar os elementos do array e uma outra para manter a soma dos elementos do array. Feito isso usamos uma estrutura de repetição para pegar todos os valores do array e então realizar os cálculos que fará a média do array. A nossa função então, irá ficar com essa cara:
void mean (int resposta[]){
int j;
int total = 0; /* total de todos os valores de respsota */
printf("%s\n%s\n%s\n", "******", "Mean", "******" );
for ( j = 0; j
total += resposta [j];
} /* fim do for */
/*saida dos resultados */
printf("A média é o valor médio dos itens de dados.\n");
printf("A média é igual ao total de.\n");
printf("os itens de dados divididos pelo número\n");
printf("de itens de dados ( %d ). ,", SIZE);
printf("O valor medio para execucao e: ");
printf("%d/%d=%4f\n\n", total, SIZE, (double)total/SIZE);
} /* fim da funçao mean */
Passo 3
Agora vamos para nossa função median(). Sabemos que ela terá que ordenar o array e determinar o valor do elemento mediano.
Vamos precisar ordenar nosso array de forma crescente para facilitar de encontrar o elemento mediano. Portanto, vamos precisar usar as estruturas de repetições para percorrer nosso array e realizar a ordenação. Após ordenada, o elemento mediano será calculando o tamanho da array /2, como o tamanho do array é um numero par, a mediana será a média dos elementos do meio. Bora escrever isso tudo então, a nossa função median() ficará da seguinte forma:
void median( int resposta[]){
int loop; /* contador de laço */
int pass; /* contador de laço */
int hold; /* variável temporária para realizar a ordenacao */
int firstRow; /* varaiavel aux para ordenar array */
printf("\n%s\n%s\n%s\n","******", "Median", "******" );
printf( "O conjunto de respostas não seleccionadas é\n" );
/* exibir array não ordenada */
for ( loop = 0, firstRow = 1; loop
/* iniciar uma nova linha */
if ( loop % 20 == 0 && !firstRow ){
printf( "\n" );
} /*fim do if */
printf( "%2d", resposta[ loop ] );
firstRow = 0;
} /* fim do for */
printf( "\n\n" );
/* ordenação */
for ( pass = 0; pass
/* comparar elementos e trocar, se necessário */
for ( loop = 0; loop
/* elementos de troca */
if ( resposta[ loop ] > resposta[ loop + 1 ] ){
hold = resposta[ loop ];
resposta[ loop ] = resposta[ loop + 1 ];
resposta[ loop + 1 ] = hold;
} /*fim do if*/
} /*fim do for */
}/*fim do for */
/* mostrar matriz ordenada */
for ( loop = 0, firstRow = 1; loop
if ( loop % 20 == 0 && !firstRow ){
printf( "\n" );
} /* fim do if */
printf( "%2d", resposta[ loop ] );
firstRow = 0;
}/* fim do for */
printf( "\n\n" );
/* número par de elementos */
printf( "A array ordenada é\n" );
if ( SIZE % 2 == 0 ) {
printf( "A mediana é a média dos elementos %d", ( SIZE + 1 ) / 2 );
printf( " e %d de", 1 + ( SIZE + 1 ) / 2 );
printf( " a array de elementos classificados %d.\n", SIZE );
printf( "Para esta corrida a mediana é " );
printf( "%.1f\n\n", ( double )( resposta[ ( SIZE + 1 ) / 2 ] +resposta[ ( SIZE + 1 ) / 2 + 1 ] ) / 2 );
} /*fim do if */
else { /* número impar de elementos */
printf( "A mediana é o elemento %d de ", ( SIZE + 1 ) / 2 );
printf( "o conjunto de elementos %d ordenados.\n", SIZE );
printf( "Para esta corrida a mediana é " );
printf( "%d\n\n", resposta[ ( SIZE + 1 ) / 2 - 1 ] );
} /* fim do else*/
} /* fim da função median */
Passo 4
Agora vamos para nossa ultima função mode() que irá determinar a resposta mais frequente. Dentro da função vamos criar um array que guardará os valores com maior frequência. Vamos precisar usar as estruturas de repetições para percorrer a array de repostas, e exibir todos os valores e a frequência. Feito isso, a função irá verificar qual o valor que aparece com maior frequência, e mostrar um histograma de saída de impressão que representa o valor de frequência. A função terá que tratar o caso em que houver mais de uma moda, ou seja, os números de frequência dos elementos estiverem iguais, quando isso acontecer a função irá imprimir os valores com as mesmas modas.
A nossa função ficará da seguinte forma:
/* determinam a resposta mais frequente */
void mode( int freq[], int answer[] ) {
int rating; /* loop counter */
int loop; /* loop counter */
int largest = 0; /* representa a maior frequência */
int array[ 10 ] = { 0}; /* array utilizada para manter as maiores frequências */
int count = 0; /* variavel para contar o número de modas */
printf( "\n%s\n%s\n%s\n", "******", " Mode", "******" );
/* definir todas as frequências para 0 */
for ( rating = 1; rating
freq[ rating ] = 0;
} /* fim do for */
/* array transversal e incrementar a frequência correspondente */
for ( loop = 0; loop
++freq[ answer[ loop ] ];
} /* fim do for */
printf( "%s%11s%19s\n\n", "Response", "Frequency", "Histogram" );
printf( "%54s\n", "1 1 2 2" );
printf( "%54s\n\n", "5 0 5 0 5" );
/* exibir valores e frequência */
for ( rating = 1; rating
printf( "%8d%11d ", rating, freq[ rating ] );
/* testar se a frequência atual é maior do que a maior frequência */
if ( freq[ rating ] > largest ){
largest = freq[ rating ];
/* definir valores de matriz para 0 */
for ( loop = 0; loop
array[ loop ] = 0;
}/* fim do for */
/* adicionar nova maior frequência à matriz */
array[ rating ] = largest;
++count;
} /* fim do if */
/* se a frequência da corrente for igual à maior, adicionar no array*/
else if ( freq[ rating ] == largest ) {
array[ rating ] = largest;
++count;
}/* fim do else if */
/* barra de histograma de saída de impressão que representa valor de frequência */
for ( loop = 1; loop
printf( "*" );
} /* fim do for */
printf( "\n" );
} /* fim do for */
printf( "\n" );
/* se mais do que uma moda */
if ( count > 1 ) {
printf( "As modas são: " );
} /* fim do if */
else{ /* apenas uma moda */
printf( "A moda é: " );
} /* fim do else */
/*exibir modas */
for ( loop = 1; loop
if ( array[ loop ] != 0 ) {
printf( "%d com uma frequência de %d\t", loop, array[ loop ] );
}/*fim do if */
}/* fim do for */
printf( "\n" );
} /* fim da função */
Passo 5
UFFA!!! Finalizamos a criação das nossas funções.
Agora vamos determinar os comandos que irão dentro do main(). Além de é claro chamar as funções criada, teremos que definir a nossa array de resposta. Logo, os comandos dentro do main() ficará da seguinte forma:
int main()
{ /* inicializa array reposta */
int response[SIZE] = { 6, 7, 8, 9, 8, 7, 8, 9, 8, 9,
7, 8, 9, 5, 9, 8, 7, 8, 7, 1,
6, 7, 8, 9, 3, 9, 8, 7, 1, 7,
7, 8, 9, 8, 9, 8, 9, 7, 1, 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, 1,
7, 4, 4, 2, 5, 3, 8, 7, 5, 6,
4, 5, 6, 1, 6, 5, 7, 8, 7, 9
};
/* inicializa array frequencia */
int frequency [ 10 ] = {0};
/*processa resposta */
mean(response);
median(response);
mode(frequency,response);
return 0;
}/*fim do main */
Feito isso, é só juntar tudo e finalizado o nosso programa. E é isso GALERA!! Até o próximo exercício.
Resposta
O programa final será: