Votação. A Internet e a Web vêm permitindo que as pessoas, cada vez mais, estabeleçam redes de contatos, juntem-se a uma causa, expressem opiniões e assim por diante. Em

2008, os candidatos à presidência dos Estados Unidos usaram amplamente a Internet para passar suas mensagens e levantar fundos para suas campanhas. Nesse exercício, você escreverá um programa de votação simples, que permite que os usuários avaliem, de 1 (menos importante) a 10 (mais importante), cinco questões de importância social. Escolha cinco causas que sejam importantes para você (por exemplo, questões políticas, questões de meio ambiente). Use um array unidimensional topics (do tipo char *) para armazenar as cinco causas. Para resumir as respostas do estudo, use um array bidimensional de 5 linhas e

10 colunas, responses (do tipo int), com cada linha correspondendo a um elemento no array topics. Ao ser executado, o programa deve pedir ao usuário que dê uma nota para cada questão. Peça a seus amigos e familiares que respondam à pesquisa. Depois, faça com que o programa apresente um resumo dos resultados, que inclua:

a) Um relatório tabular com os cinco tópicos no lado

esquerdo e as 10 classificações no topo, listando em

cada coluna o número de classificações recebidas

para cada tópico.

b) À direita de cada linha, mostre a média das classificações

para essa questão.

c) Qual questão recebeu a maior pontuação total? Mostre

a questão e o total de pontos.

d) Qual questão recebeu a menor pontuação total?

Mostre a questão e o total de pontos.

Passo 1

Neste exercício, encontraremos cinco questões importantes ou hoje e escreveremos um programa que pedirá a 1010 pessoas que classifiquem a importância dessas cinco questões de 11 a 1010.

Assim que todas as 1010 pessoas avaliarem os tópicos, o programa exibirá um relatório tabular da pesquisa e os tópicos classificados como os mais importantes e os menos importantes.

Passo 2

Começaremos incluindo a biblioteca stdio.h e definindo o array de tópicos const char* que será inicializado com as cinco strings representando cinco problemas.

#include "stdio.h"

const char* topics[5] = {

"Discrimination",

"Global warming",

"Education",

"Poverty",

"Political polarization"

};

Na função main(), definiremos um array int de 55 por 1010 com subscrito duplo chamado answers. Armazenaremos as respostas das dez pessoas neste array. Cada linha da matriz representará um tópico e cada coluna uma pessoa.

Vamos executar um loop for que itera dez vezes, para dez pessoas. Em cada iteração, pediremos à pessoa que avalie os tópicos e usaremos outro loop for que itera 55 vezes, para cinco tópicos.

A entrada será validada.

int main()

{

int responses[5][10];

for (int person = 0; person

printf("Rate these issues form 1 (least important)"\

" to 10 (most important):\n");

for (int topic = 0; topic

printf("%s > ", topics[topic]);

do {

scanf("%d", &responses[topic][person]);

} while (responses[topic][person]

|| responses[topic][person] > 10);

}

puts("");

}

Passo 3

Em seguida, definiremos mais um array int chamado totalPoints que terá todos os cinco elementos inicializados em 00. Ele será usado para armazenar o número total de pontos para cada um dos cinco tópicos.

Também inicializaremos duas variáveis int chamadas min e max para 00. Elas serão usadas para salvar os subscritos dos tópicos de maior e menor classificação.

int totalPoints[5] = { 0 };

int max = 0, min = 0;

  1. Agora exibiremos os resultados da pesquisa em um formato tabular.
  2. Na primeira linha, exibiremos as classificações, de 11 a 1010.

    Em seguida, usaremos um loop for para percorrer os tópicos. Em cada iteração, exibiremos o tópico e usaremos outro loop for que itera 1010 vezes para exibir todas as respostas desse tópico.

    Adicionaremos cada classificação da linha atual de respostas ao elemento correspondente da matriz totalPoints.

    printf("\n\n%22s", " ");

    for (int rating = 1; rating

    printf("%4d", rating);

    }

    printf("\n");

    for (int topic = 0; topic

    printf("%-22s", topics[topic]);

    for (int person = 0; person

    printf("%4d", responses[topic][person]);

    totalPoints[topic] += responses[topic][person];

    }

  3. Para finalizar o loop for externo, usaremos duas instruções if para definir os valores max e min para os subscritos do tópico com classificação mais alta e mais baixa.
  4. No final de cada linha, exibiremos a classificação média para cada um dos tópicos. Obteremos esse valor dividindo o total de pontos do tópico atual por 1010.

    if (totalPoints[topic] > totalPoints[max])

    max = topic;

    if (totalPoints[topic]

    min = topic;

    printf(" |%4.2lf\n", totalPoints[topic] / 10.0);

    }

  5. e d) No final do programa, usaremos os subscritos armazenados nas variáveis min e max para exibir o problema com classificação mais alta e mais baixa, seguido pelo total de pontos com o qual o problema foi avaliado.

printf("\n");

printf("The issue that recieved the highest point total:\n");

printf("%s - %d\n", topics[max], totalPoints[max]);

printf("The issue that recieved the lowest point total:\n");

printf("%s - %d\n", topics[min], totalPoints[min]);

}

O código completo:

int main()

{

int responses[5][10];

for (int person = 0; person

printf("Rate these issues form 1 (least important)"\

" to 10 (most important):\n");

for (int topic = 0; topic

printf("%s > ", topics[topic]);

do {

scanf("%d", &responses[topic][person]);

} while (responses[topic][person]

|| responses[topic][person] > 10);

}

puts("");

}

int totalPoints[5] = { 0 };

int max = 0, min = 0;

printf("\n\n%22s", " ");

for (int rating = 1; rating

printf("%4d", rating);

}

printf("\n");

for (int topic = 0; topic

printf("%-22s", topics[topic]);

for (int person = 0; person

printf("%4d", responses[topic][person]);

totalPoints[topic] += responses[topic][person];

}

if (totalPoints[topic] > totalPoints[max])

max = topic;

if (totalPoints[topic]

min = topic;

printf(" |%4.2lf\n", totalPoints[topic] / 10.0);

}

printf("\n");

printf("The issue that received the highest point total:\n");

printf("%s - %d\n", topics[max], totalPoints[max]);

printf("The issue that received the lowest point total:\n");

printf("%s - %d\n", topics[min], totalPoints[min]);

}

Resposta

Ver o desenvolvimento.