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á: