Ir ao conteúdo

Posts recomendados

Postado

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

Postado

@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;
}
 

 

Postado

@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
Postado

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

Postado
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

 

Postado

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 */

 

Postado

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

 

Postado

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

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

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!