Ir ao conteúdo

C Média entre vetores. Questão de prova. Análise de Sistemas. Faeterj. FAC.


Ir à solução Resolvido por isrnick,

Posts recomendados

Postado

O vetor vNota armazena a nota atribuída (1 a 10) ao atendimento do funcionário cujo código está no vetor vAtend.

Há 6 funcionários identificados por um número entre 1 e 6.

Complete a main abaixo, de forma modularizada (com função), para responder a seguinte questão:

A nota média de cada funcionário?

Resposta:

Funcionário 1 - Nota média: 4,666667;

Funcionário 2 - Nota média: 5,500000;

Funcionário 3 - Nota média: 5,000000;

Funcionário 4 - Nota média: 6,666667;

Funcionário 5 - Nota média: 6,500000;

Funcionário 6 - Nota média: 6,500000.

 

#include <stdio.h>
#include <stdlib.h>

int main (void) {

int vNota[25]  =  {1,1,2,10,10,3,4,6,7,7,8,9,3,10,4,5,2,7,5,9,8,4,6,8,9};

int vAtend[25] = {1,2,3,4,5,6,2,3,4,5,1,2,3,6,4,5,4,6,1,3,4,5,6,2,4};

return 0;

}


 

<>

IMG_20181213_102021.jpg

Postado

Bom dia @jcgs98

 

Nós não podemos escrever o código para você, nós só podemos lhe auxiliar tirando duvidas e corrigindo algum código que você já tenha feito.

 

Se puder postar o código que você já fez ou colocar em qual parte do exercício você está com duvida, poderemos lhe ajudar melhor :D 

  • Curtir 1
  • Triste 1
Postado

Boa tarde.

 

Não consegui nem começar.

 

Essa é minha dúvida.

 

Não sou obtuso, fiz as questões 1 e 2.

adicionado 0 minutos depois

Não sabia que havia essa regra de ajudar com questões.

  • Curtir 1
Postado

Uma maneira seria percorrer os vetores 6 vezes, 1 para cada funcionário, e ir somando as notas deste funcionário e contando a quantidade de notas, e calcula e imprime a média do respectivo funcionário toda vez que acabar de percorrer o vetor dividindo a soma pela quantidade.

  • Curtir 1
  • Confuso 1
Postado

Mas como associar a nota ao funcionário?

adicionado 4 minutos depois

A professora fez essa correção, mas não consegui captar em sua plenitude.

Alguém conseguiria desanuviá-la para esse humilde servo do conhecimento?

Obrigado!

IMG_20181213_101952.jpg

Postado
1 hora atrás, jcgs98 disse:

Mas como associar a nota ao funcionário?

 

Tem que entender o que o enunciado diz, mas sua confusão é justificável visto que o enunciado não é claro o suficiente.

 

Pelo que entendi (e confirmado pela resolução da sua professora) basicamente o enunciado está dizendo que foram feitos 25 atendimentos pelos funcionários. No vetor vNota estão as notas que cada atendimento recebeu, e no vetor vAtend estão os números dos funcionários que fizeram cada atendimento respectivamente. Ou seja, o n-ésimo atendimento recebeu nota vNota[n] e foi atendido pelo funcionário vAtend[n].

  • Curtir 2
Postado

Exatamente.

Eu tentei, inclusive, resolver com matriz de 6 linhas (funcionários) x 25 colunas (notas do atendimento) e 1 coluna com a média.

Não consegui.

E não entendi o que ela propôs como solução.

Postado

Tem 6 funcionários então ela criou um 2 vetores de 6 posições, vcont para contar quantas vezes cada funcionário atendeu, e vtot para somar as notas recebidas por cada funcionário em cada atendimento (= total das notas).

 

Observe que vetores na linguagem C começam com índice 0, e nesse caso o índice vai até 5. Mas os números dos funcionários começam em 1 e vão até 6. Então para compensar ela subtraiu -1 dos números dos funcionários para fazer cada índice do vetor corresponder a um dos funcionários.

 

Tendo a soma total e a quantidade de atendimentos de cada funcionário basta dividir a soma pela quantidade para obter a nota média do funcionário.

 

Sua professora também tratou o caso especial em que nenhum atendimento foi realizado pelo funcionário, pois nesse caso não é possível calcular a média pois não é possível dividir por zero, então o programa dela só calcula e imprime a média se a quantidade de atendimentos vcont do funcionário for diferente de zero.

  • Curtir 2
Postado

Mas nesse caso, só vai totalizar as 6 primeiras posições do vetor vNota

#include <stdio.h>
#include <stdlib.h>

int main (void)

{

float vNota[25]  =  {1,1,2,10,10,3,4,6,7,7,8,9,3,10,4,5,2,7,5,9,8,4,6,8,9};

float vAtend[25] = {1,2,3,4,5,6,2,3,4,5,1,2,3,6,4,5,4,6,1,3,4,5,6,2,4};



int vCont [6];
float vTot[6];
int func;
int i;

//zera (vtot);
//zera (vCont);

for (i=0;i<6;i++)
{
	vTot[i]=0;
	vCont[i]=0;
}


for (i=0;i<25;i++)
{
	func=vAtend[i]-1;
	vCont[func]++;
	vTot[func]+=vNota[func];
}

for (i=0;i<6;i++)
{
	if (vCont[i]!=0)printf ("\nMedia...:%.7f",vTot[i]/vCont[i]);
}

return 0;
}

 

Capturar.PNG

  • Curtir 1
Postado

Exatamente!

 

Não entendi tudo, mas se cair na prova final agora dia 04 vou saber fazer alguma coisa. (Isso lá é prova de primeiro período???)

 

Obrigado!

 

Postei outra dúvida se puderem ajudar:

 

adicionado 2 minutos depois

Como finalizo o tópico? A questão foi resolvida!

Postado

Se quiser tirar as dúvidas poste o que não conseguiu entender.

 

E veja aqui outra solução que pode ser mais fácil de entender:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    int vNota[25]  = {1, 1, 2, 10, 10, 3, 4, 6, 7, 7, 8, 9, 3, 10, 4, 5, 2, 7, 5, 9, 8, 4, 6, 8, 9};
    int vAtend[25] = {1, 2, 3,  4,  5, 6, 2, 3, 4, 5, 1, 2, 3,  6, 4, 5, 4, 6, 1, 3, 4, 5, 6, 2, 4};
    int func, j, qnt;
    float soma;
    
    for (func = 1; func <= 6; func++){ //Para cada funcionário faça:
        soma = 0;
        qnt = 0;
        
        for (j = 0; j < 25; j++) { //Percorre todos os atendimentos...
            if (vAtend[j] == func) { //Se encontrar o funcionário atual faça:
                soma += vNota[j];    //Soma a nota ao total do funcionário
                qnt++;               //Incrementa a quantidade de atendimentos do funcionário
            }
        }
        
        if (qnt != 0)
            printf("\nMedia do funcionario %d: %.6f", func, soma/qnt);
        
    }

    return 0;
}

 

Mas seria interessante você entender a solução da sua professora pois em programação quanto mais opções, e maneiras diferentes de fazer algo, você aprender mais preparado estará para resolver problemas diferentes e/ou mais complexos.

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...