Ir ao conteúdo
  • Cadastre-se
diegotecinfoo

C algoritmo para determinar uma média e a nota maior!

Recommended Posts

Gostaria de criar um algoritmo que leia nota de 5 alunos, determine a nota maior e calcule a média, e mostrar a maior nota e a média. Sei que tem várias formas e a maioria utiliza o comando for, gostaria de ver utilizando somente printf e scan mesmo para entender melhor. Sou iniciante!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gnomo Psicodélico

Fiz assim está certo? Se puder me ajuda a fazer esse mesmo processo utilizando o comando "for"! obrigado :)

Citação

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

int main()

{
// Declarar variaveis
float a1, a2, a3, media, maior;

//entrada de variaveis ou dados

printf("Digite a 1 Nota: ");
scanf("%f", &a1);
printf("Digite a 2 Nota: ");
scanf("%f", &a2);
printf("Digite a 3 Nota: ");
scanf("%f", &a3);

//Calculo

media = (a1+a2+a3) / 3;

//IF else

if (a1>a2 && a1>a3)
{
    maior = a1;
}
else if (a2>a1 && a2>a3)
{
    maior = a2;
}
else if(a3>a2 && a3>a1)
{
    maior = a3;
}

printf("A media das notas e: %2.2f \n", media);
printf("A maior nota foi: %2.2f \n", maior);
    system ("pause");
    return 0;
}
 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@diegotecinfoo Lamento mas está errado.
Aí você está calculando a média de um aluno só que tem 3 notas. É uma situaçao completamente diferente.

O que o enunciado quer é a média das notas de 5 alunos diferentes. Portanto, você vai ter que dar scanf() em 5 notas, uma para cada aluno. (nesse exemplo você está pegando apenas 3 notas)


Além de calcular a média, que é relativamente fácil, mesmo sem o laço "for", o exercício pede que exiba a "maior nota". Aí vai ficar muuuuuuuuuuito complicado de fazer sem usar um laço "for".


Pense bem

Primeiro, você vai repetir 5 scanf()'s para obter as 5 notas. Usando o for, você só usaria um.

 

Segundo, você vai ter que comparar a primeira nota com as outras 4 para ver se ela é a maior. Isso é um IF enorme com 4 comparações. Se esse if der false, você vai ter que fazer outro if para comparar a segunda nota com as outras 3 notas, outro IF enorme com 3 condições. Se der false, você vai ter que comparar a terceira nota com as outras 2. Outro if agora com 2 condições. Se esse if der false, ainda resta comparar a quarta nota com a quinta. Um if simples. 

 

Usando o for, é um if só dentro do laço. Detalhe. Fazendo um loop para 5 alunos, você faz loop para 10, para 100, um milhão de alunos. Já o ninho de if's que você fizer só serve para 5 alunos. Se quiser fazer para 100 alunos usando if's aninhados, você enlouquece e é internado num hospital psquiátrico antes de terminar o programa. Em alguns países inclusive é proibido e punido com ajoelhar em caroços de milho, decapitação ou coisa pior (como cortarem o nosso acesso a internet) se você fizer um if com 100 condições num programa em pleno século XXI.

Diga-me, qual é o mais complicado ? aprender "for" e usá-lo ou fazer ninho de if's confusos como essa parágrafo acima que mais parece uma bíblia do que um passo de algoritmo, de tão longo que o if ficou ? 


Entenda bem: mais cedo ou mais tarde você vai ter que aprender e dominar a usar o comando for se quiser ser um bom programador. Recomendo que seja mais cedo porque mais tarde pode ser tarde demais.

 

Se o professor que passou esse exercício EXIGIU que não se usasse "for" o que ele pretende com isso é "ensinar por contra exemplo", ou seja, "tente fazer sem o for para ver como é complicado".  Embora não seja uma prática de ensino boa, ela é eficaz. Os alunos que sobreviverem a esse exercício vão adorar usar o for para simplificar seus programas. O problema é: você consegue sobreviver ? 

 

 

  • Haha 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade pode ficar bem mais simples mesmo sem usar o for.

 

Se observar o problema atentamente vai ver que não precisa armazenar as 5 notas dos alunos, já que não vai ter que imprimir elas na saída do programa, as únicas coisas que o programa pede são a média e a maior nota, então você só precisa armazenar em variáveis 2 coisas, a maior nota e a soma das notas digitadas (que será dividido por 5 no final para calcular a média).

 

Então usa 5 scanfs para obter as notas dos alunos, e após cada scanf faz 2 coisas:

- Compara o valor da nova nota digitada ao valor guardado na variável que guarda o valor da maior nota, se for maior que o valor na variável essa nova nota substitui o valor anterior como sendo a nova maior nota.

- Faz a soma dessa nova nota digitada a uma variável que armazena a soma de todas as notas.

 

O programa pode ser feito usando 3 variáveis apenas: nota (usado nos scanfs para guardar a nota mais recente digitada), soma (guarda a soma das notas) e maiornota (guarda a maior nota).

Também pode usar mais uma pra guardar a média se desejar, mas não é necessário, já que pode imprimir direto o valor calculado da média (=soma/5).

Compartilhar este post


Link para o post
Compartilhar em outros sites
5 minutos atrás, isrnick disse:

Então usa 5 scanfs para obter as notas dos alunos, e após cada scanf faz 2 coisas:

- Compara o valor da nova nota digitada ao valor guardado na variável que guarda o valor da maior nota, se for maior que o valor na variável essa nova nota substitui o valor anterior como sendo a nova maior nota.

- Faz a soma dessa nova nota digitada a uma variável que armazena a soma de todas as notas.

 

Ou seja, basicamente o mesmo código, copiado e colado 5 vezes com um prinft, um scanf, um if, uma atribuicao dentro do if, uma soma.
25 linhas de programa, que só testam 5 alunos.
Mude para uso de for e terá 6 linhas de programa que faz teste para quantos alunos quiser.

Esse é o meu ponto. Tem que aprender a usar for

 

adicionado 13 minutos depois

Fazendo com o for a ideia é a seguinte

 

um for para obter os dados dos 5 alunos e fazer o somatório das notas para posterior cálculo da média

 

for <alguma coisa que garanta que será feito 5 vezes>  { 

        solicitar ao usuário uma nota

        ler do teclado a nota 

       comparar com a maior nota e se for maior essa nota passa a ser a maior 

       somar a nota obtida ao total de notas

}

calcular a media que é o somatório das  notas dividido por 5

 

DICA DE UM TRUQUE para simplificar
Crie uma variável para armazenar o valor da maior nota. Nela coloque um valor SUPER pequeno.
quando a primeira nota for comparada com esse valor, independente do valor da nota lida, ela será maior e passa então a ser maior. Portanto, inicialize a variáel maior nota com o menor valor possível.

Tente fazer o programa

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se não podemos usar de estrutura FOR, então só resta repetir ...

Apenas que aperte com bloco de decisão IF's  que não refletiu 'adequadamente' a ideia de repetição.

Veja versão mais clara disso, sinta como coisa toda se repete de cima para baixo.

float maior_nota_f;/* variável com maior nota */

/* repetição literal *//* teste de maior nota */


maior_nota_f = nota1_f                                                /* Teste 0 */
if( maior_nota_f < nota2_f ){ maior_nota_f = nota2_f; }/* Teste 1 */
if( maior_nota_f < nota3_f ){ maior_nota_f = nota3_f; }/* Teste 2 */
if( maior_nota_f < nota4_f ){ maior_nota_f = nota4_f; }/* Teste 3 */
if( maior_nota_f < nota5_f ){ maior_nota_f = nota5_f; }/* Teste 4 */


/* fim do teste */

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@AnsiC seu exemplo ainda armazena todas as notas dos alunos, mas não é necessário nesse exercício. Veja, vou demonstrar melhor minha explicação.

 

Tendo estas 3 variáveis:

float nota, maiornota = 0, soma = 0;

 

Basta repetir isso várias vezes (como o @Boko Moko isso ficaria ainda mais simples usando um ciclo de repetição como o ciclo for, já que é exatamente pra isso que serve, repetir):

printf("Digite a 1 Nota: ");
scanf("%f", &nota);
if (maiornota < nota)
    maiornota = nota;
soma = soma + nota;

E no final usar o resultado da soma pra calcular e imprimir a média, assim como a maior nota.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Boko Moko Entendi. Obrigado! vou aprender o for e posto de noite.

adicionado 1 minuto depois

@AnsiC Não entendi muito bem. Me desculpe estou aprendendo agora e ja comecei direto no C por causa da faculdade.

adicionado 2 minutos depois

@isrnick Vou tentar desse jeito. Mas não entendi muito bem o código.

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 minutos atrás, diegotecinfoo disse:

Não entendi muito bem. Me desculpe estou aprendendo agora e ja comecei direto no C por causa da faculdade.

:exorcize: Esquece!

adicionado 1 minuto depois
31 minutos atrás, isrnick disse:

seu exemplo ainda armazena todas as notas dos alunos, mas não é necessário nesse exercício. Veja, vou demonstrar melhor minha explicação.

:exorcize: Esquece!

Compartilhar este post


Link para o post
Compartilhar em outros sites
49 minutos atrás, diegotecinfoo disse:

 

@isrnick Vou tentar desse jeito. Mas não entendi muito bem o código.

Posta onde estão as suas dúvidas que explico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@isrnick Eu entendi assim. Se a maiornota for menor que nota, então maiornota recebe a nota. É assim mesmo? Vou fazer e ja posto. E obrigado pela atenção :D

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro 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 publicações 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

×