Ir ao conteúdo
  • Cadastre-se

C Programa para calcular nota final


Visitante
Ir à solução Resolvido por sannoy,

Posts recomendados

#include <stdio.h>


int main() 
{
float n1, n2, n3,nf;

printf ("\n Valor da prova N1: ");
scanf ("%f",&n1);

printf ("\n Valor da prova N2: ");
scanf ("%f",&n2);

printf("\n Valor da prova N3: ");
scanf ("%f",&n3);



printf ("\n Nota final (media aritmética das duas  notas mais altas): %d ",nf);


 

Link para o comentário
Compartilhar em outros sites

@Tiago L. Santos  Olá,

 

Presumo que você esteja com dificuldades na parte de checagem dos valores?!?! Se for o caso tentarei lhe dar um norte.

Para ficar mais simples para você compreender, mude os valores das variáveis para os seguintes:

float primeiraNota, segundaNota, rec;

 

Não será necessário uma variável para nota final, neste caso você pode fazer o calculo quando for mostrar a média com o printf(), da seguinte forma:

((primeiraNota+segundaNota)/2)

 

Agora partimos para a parte lógica:

Você irá receber 3 valores e você precisa descobrir a média entre os dois maiores valores. A forma mais simples para você, seria utilizar a ultima variável como um valor de recuperação, que apenas será adicionada caso ser maior que uma das outras notas.

 

Visualmente para nós isto é uma tarefa fácil mas, para o computador você deve especificar logicamente. Então qual lógica seria?!

Simples, se o valor de recuperação for maior que a primeira nota você altera o valor da primeira nota, caso não for, verifique se é maior que o da segunda nota se for altera o valor da segunda nota.

 

No entanto, há alguns problemas nesta lógica, pense o seguinte e se os valores forem:

primeiraNota = 2.0;
segundaNota = 1.0;
rec = 3.0;

 

Ao invés de alterar o valor da segunda nota estaríamos alterando o valor da primeira. E no final teríamos a média entre 1.0 e 3.0 e não entre 2.0 e 3.0. E se as duas primeira notas forem iguais e a recuperação maior que as duas?!...

 

Logo deixarei para você pensar em uma lógica um pouco melhor para solucionar este problema (Não se preocupe é bem simples, não precisa complicar muito).

 

A lógica que utilizei como exemplo ficaria da seguinte forma:

#include <stdio.h>

int main() {
    float primeiraNota,segundaNota,rec;

    printf("\n Valor da primeira prova: ");
    scanf("%f",&primeiraNota);

    printf("\n Valor da segunda prova: ");
    scanf("%f",&segundaNota);

    printf("\n Valor da recuperação: ");
    scanf("%f",&rec);
  
    if (rec > primeiraNota)
        primeiraNota = rec;
    else if (rec > segundaNota)
        segundaNota = rec;
        
    printf("\n Notas: [%f], [%f]", primeiraNota, segundaNota);
    printf("\n Média: %f\n", ((primeiraNota+segundaNota)/2));

    return 0;
}

 

 

Espero ter lhe ajudado em algo, até mais!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@sannoy Eu não entendi muito bem como faço isso com três notas pois preciso especificar as  3.

Pois o programa deve receber os valos e em seguida tirar o menor e calcular só os dois maiores só que o menor valor pode ser qualquer uma das 3 notas e o valor maior também também pode que ser qualquer uma notas.

É isso que esta me confundindo faz tempo.

porque se qualquer um pode ser o menor ou o maior, como faço tão para calcular.

Link para o comentário
Compartilhar em outros sites

  • Solução

@Tiago L. Santos  Olá,

 

7 horas atrás, sannoy disse:

Para ficar mais simples para você compreender, mude os valores das variáveis para os seguintes:

Eu mudei os nomes das variáveis para te ajudar a entender a lógica necessária. No entanto, se você não compreendeu mesmo com tudo que lhe disse. Recomendo, que estude mais sobre lógica de programação e métodos de checagem/estruturas de decisão.

 

25 minutos atrás, Tiago L. Santos disse:

Pois o programa deve receber os valos e em seguida tirar o menor e calcular só os dois maiores só que o menor valor pode ser qualquer uma das 3 notas e o valor maior também também pode que ser qualquer uma notas.

 

Eu entendi, e a lógica que lhe mostrei soluciona +40% da questão. Em programação você deve tratar de forma lógica. Tem que fazer todo o processo de pensamento lógico para efetuar está ação e para fazer isto você necessita verificar as variáveis que recebem os valores(notas).

 

Tem diversas outras formas de resolver este problema mas, escolhi essa porque adiciona apenas um método de checagem tipo else-fi.

7 horas atrás, sannoy disse:

if (rec > primeiraNota)

    primeiraNota = rec;

else if (rec > segundaNota)

    segundaNota = rec;

Seguindo o que lhe mostrei, você precisa adicionar outros filtros, no caso do primeiro if(), Se primeira nota for menor que a segunda e Se terceira nota for maior que a primeira, ficaria assim:

if (primeiraNota < segundaNota && rec > primeiraNota)
  primeiraNota = rec;

 

Agora apenas seguindo está lógica basta criar outros filtros/checagem necessárias.

 

Espero ter lhe ajudado em algo, até mais!

 

Link para o comentário
Compartilhar em outros sites

@Tiago L. Santos  Olá,

Apenas para ajudar quem vier a este post no futuro, tentarei explicar uma lógica para solucionar este problema de forma mais detalhada já que tenho uma horinha livre.

 

Definiremos 3 variáveis que receberão os valores aleatórios sem uma ordem especifica, e também uma variável tipo array/vetor/lista que receberá os dois maiores valores e uma variável que receberá o menor valor:

float n1, n2, n3, maior[2], menor;

 

Agora sabendo que as variáveis N1,N2 e N3 receberão valores aleatórios e sem ordem, precisamos descobrir os dois maiores valores e o menor, criaremos uma lógica para verificarmos estas variáveis.

 

Bom, vamos lá:

Utilizaremos uma das variáveis com um "escopo", neste caso, utilizarei a última variável(N3), Desta forma podemos criar o método de checagem que precisamos:

 

  • Primeiro utilizaremos um if(), que verificará se a primeira variável(N1) é menor que a segunda variável(N2) e se a última variável é maior que a primeira.
if (n1 < n2 && n3 > n1) {
	/*
	* Aqui podem definir como valor menor da primeira variável
	* e os maiores valores são da segunda e da terceira.
	*/
}

 

  • O segundo utilizaremos um else-if(), que testará se a segunda variável é menor que a primeira e se a última variável é maior que a segunda.
else if (n2 < n1 && n3 > n2) {
	/*
	* Aqui podemos definir como valor menor da segunda variável
	* e os maiores valores são da primeira e última.
	*/
}

 

  • O terceiro também else-fi(), testará se as duas primeiras variáveis(N1,N2) são iguais e se a ultima é maior.
else if (n2 == n1 && n3 > n2) {
	/*
	* Aqui podemos definir como valor menor qualquer uma das
	* primeiras variáveis(N1,N2), definirei sendo a N1. e como
	* maior a segunda e terceira.
	*/
}
  • O quarto e último utilizaremos um else, que levará em conta caso a última variável for menor que as duas primeiras.
else {
	/*
	* Aqui podemos definir como valor menor o da terceira
	* variável e como maior os valores da primeira e segunda.
	*/
}

 

Bom, lógica feita agora se aplicarmos e testarmos não importa os valores(validos) que forem colocados nas variáveis N1, N2 e N3 esperado que todos os valores sejam filtrados.

 

Claro, que isto é um exemplo de como solucionar este problema para este caso, agora se quisermos testar mais de três valores, por exemplo, uma lista com 10.000 valores aí a lógica teria que ser alterada.

 

Espero ter lhe ajuda em algo, até mais!

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