Calculo de Media Ponderada

8 respostas
S

Seguinte, preciso fazer um programa que leia o codigo de um aluno e suas 3 notas, depois calcule a media ponderada dele(sendo que a maior nota tem peso 4 e as outras duas terão peso 3, ai final, preciso mostrar o codigo que o aluno digitou, as suas 3 notas, a media ponderada dele e uma mensagem APROVADO se a media for igual ou maior que 5 e caso contrario exiba REPROVADO.

tenho isso até agora:

import java.util.Scanner;


public class NotaMediaPonderada {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
		double media;
		double notaMaior = 0;
		double somaMenor = 0;
		
		Scanner teclado = new Scanner(System.in);
		System.out.println("Digite o código do aluno");
		double cod = teclado.nextDouble();
		System.out.println("Digite a primeira nota");
		double nota1 = teclado.nextDouble();
		System.out.println("Digite a segunda nota");
		double nota2 = teclado.nextDouble();
		System.out.println("Digite a terceira nota");
		double nota3 = teclado.nextDouble();
		
		
		if (nota1 > nota2 && nota1 > nota3){
			nota1 = notaMaior;
			somaMenor = nota2+ nota3;

		}else if (nota2 > nota1 && nota2 > nota3){
			nota2 = notaMaior;
			nota2 = nota2;
			somaMenor = nota1+nota3;
		
		}else if (nota3 > nota1 && nota3 > nota2){
			nota3 = notaMaior;
			nota3 = nota3;
			somaMenor = nota1+nota2;

		}
		
		media=((notaMaior*0.6)+(somaMenor*0.4));
		
		if ( media >= 5){
			
			System.out.println("APROVADO");
		} else {
			
			System.out.println("REPROVADO");
		}
		System.out.println("a primeira nota é "+nota1);
		System.out.println("a segunda nota é "+nota2);
		System.out.println("a terceira nota é "+nota3);
		System.out.println("a média é: "+media);
}
}

desde já agradeço a quem ajudar.

8 Respostas

pmlm

O que tu queres é exactamente o contrário. Queres que a notaMaior seja a nota1 e não que a nota1 seja a notaMaior (que será 0 pelo que atribuíste acima)

if (nota1 > nota2 && nota1 > nota3){
			notaMaior = nota1;

O mesmo problema de acima, e ainda mais, para que aquela última linha? Atribuir um valor a ele próprio como é óbvio não vai mudar nada.

Se reparares bem não é isto que diz o teu enunciado.

A

onde estão declarados os pesos?
Por que 0.6 e 0.4?
Da onde veio esses valores?
São padrão?
Não poderiam declarados com atributos?
Poderiam ser passados via console feito as notas ou declarado e inicializado como final “constante”

media=((notaMaior*0.6)+(somaMenor*0.4));

MP = (nota1 x peso1) + (nota2 x peso2) / (peso1 +peso2)

S
pmlm:
snynder:
if (nota1 > nota2 && nota1 > nota3){
			nota1 = notaMaior;
O que tu queres é exactamente o contrário. Queres que a notaMaior seja a nota1 e não que a nota1 seja a notaMaior (que será 0 pelo que atribuíste acima)
isso me ajudou, não tinha percebido isso, obrigado.
if (nota1 > nota2 && nota1 > nota3){
			notaMaior = nota1;
snynder:
}else if (nota2 > nota1 && nota2 > nota3){
			nota2 = notaMaior;
			nota2 = nota2;
O mesmo problema de acima, e ainda mais, para que aquela última linha? Atribuir um valor a ele próprio como é óbvio não vai mudar nada.
essa linha eu esqueci de deletar quando postei o código aqui, falta de atenção, no meuo código aquei eu já tinha deletado ela, foi descuido isso.
snynder:
media=((notaMaior*0.6)+(somaMenor*0.4));
estou com essa dificuldade, pode me ajudar?
Se reparares bem não é isto que diz o teu enunciado.

OBS: também estou com um problema se digito todas notas iguais ele da 0 no resultado

meu código está assim:

import java.util.Scanner;


public class NotaMediaPonderada {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
		double media;
		double notaMaior = 0;
		double somaMenor = 0;
		
		Scanner teclado = new Scanner(System.in);
		System.out.println("Digite o código do aluno");
		int cod = teclado.nextInt();
		System.out.println("Digite a primeira nota");
		double nota1 = teclado.nextDouble();
		System.out.println("Digite a segunda nota");
		double nota2 = teclado.nextDouble();
		System.out.println("Digite a terceira nota");
		double nota3 = teclado.nextDouble();
		
		
		if (nota1 > nota2 && nota1 > nota3){
			notaMaior = nota1;
			somaMenor = nota2+ nota3;

		}else if (nota2 > nota1 && nota2 > nota3){
			notaMaior = nota2;
			somaMenor = nota1+nota3;
		
		}else if (nota3 > nota1 && nota3 > nota2){
			notaMaior = nota3;
			somaMenor = nota1+nota2;

		}
		
		
	
		media= ((notaMaior*0.4) + (somaMenor*0.6));
		
		System.out.println("A média do aluno: |"+cod+"|"+ " é: "+media);
		
		if ( media >= 5){
			
			System.out.println("APROVADO");
		} else {
			
			System.out.println("REPROVADO");
		}
		
}
}
S

[quote=Alexsandro Lopes]onde estão declarados os pesos?
Por que 0.6 e 0.4?
Da onde veio esses valores?
São padrão?
Não poderiam declarados com atributos?
Poderiam ser passados via console feito as notas ou declarado e inicializado como final “constante”

0.6 e 0.4 são os pesos para as notas 0.4 é o peso da maiorNota e o 0.6 é a soma dos pesos das notas menores.

media=((notaMaior*0.6)+(somaMenor*0.4));

MP = (nota1 x peso1) + (nota2 x peso2) / (peso1 +peso2)

pmlm

É só pensares um pouco. O maior número é o que é maior ou igual aos outros dois.

pmlm

snynder:
0.6 e 0.4 são os pesos para as notas 0.4 é o peso da maiorNota e o 0.6 é a soma dos pesos das notas menores.

Podes somar as notas menores mas não o peso, o peso mantém-se

5x + 7x = 12x e não 12(2x)

S

galera, cheguei a esse código, e que pelo que testei aqui está funcionando, já testei na calculadora e a principio está ok, mas queria saber se alguém tem alguma consideração a fazer, alguma melhoria ou questionamento.

ppackage sintaxe;
import java.util.Scanner;


public class NotaMediaPonderada {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
	
	
		double igual = 0, media, notaMaior = 0, notaMenor1 = 0, notaMenor2 = 0;
		
		Scanner teclado = new Scanner(System.in);
		System.out.println("Digite o código do aluno");
		int cod = teclado.nextInt();
		System.out.println("Digite a primeira nota");
		double nota1 = teclado.nextDouble();
		System.out.println("Digite a segunda nota");
		double nota2 = teclado.nextDouble();
		System.out.println("Digite a terceira nota");
		double nota3 = teclado.nextDouble();
		
		
		if (nota1 > nota2 && nota1 > nota3){
			notaMaior = nota1;
			notaMenor1 = nota2;
			notaMenor2 = nota3;


		}else if (nota2 > nota1 && nota2 > nota3){
			notaMaior = nota2;
			notaMenor1 = nota1;
			notaMenor2 = nota3;

			
		
		}else if (nota3 > nota1 && nota3 > nota2){
			notaMaior = nota3;
			notaMenor1 = nota1;
			notaMenor2 = nota2;

		}
		
		if (nota1 == nota2 && nota1 == nota3){
			igual = nota1;
			
			System.out.println("A média do aluno:|"+cod+"|"+ " é: "+igual);
			
			if ( igual >= 5){
				
				System.out.println("APROVADO");
			} else {
				
				System.out.println("REPROVADO");	
			}
		}
			else{
		
		media = ((notaMaior*4) + ((notaMenor1*3)+(notaMenor2*3)));
		media = media/10;
		
		System.out.println("A média do aluno:|"+cod+"|"+ " é: "+media);
		
		if ( media >= 5){
			
			System.out.println("APROVADO");
		} else {
			
			System.out.println("REPROVADO");
		}
		}
}
	
}
pmlm

Podias ter mantido a soma das notas menores. Tinhas era de manter o factor 3 e não dobrar o factor.

media = ((notaMaior*4) + (somaMenores*3))/10;

A questão dos números iguais está mal. Só funciona se as três forem iguais.
E estás a complicar o que é simples. Basta nos teus if usar >= em vez de apenas >

if (nota1 >= nota2 && nota1 >= nota3){  
    notaMaior = nota1;  
    somaMenores = nota2 + nota3;  
}
Criado 6 de março de 2013
Ultima resposta 7 de mar. de 2013
Respostas 8
Participantes 3