Ir ao conteúdo
  • Cadastre-se

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


Posts recomendados

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!!

Link para o comentário
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;
}
 

 

Link para o comentário
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
Link para o comentário
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).

Link para o comentário
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

 

Link para o comentário
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 */

 

Link para o comentário
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.

 

Link para o comentário
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.

Link para o comentário
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!

Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!