[RESOLVIDO] Ajuda com exercício simples, explico meu problema no tópico

6 respostas
SIN_Vieira

Olá, sou iniciante em programação e novo no Fórum.
Eu tava tentando resolver esse exercício...

Escrever um algoritmo que leia o código de um aluno e suas três notas.
Calcule a média ponderada do aluno, considerando que o peso
para a maior nota seja 4 e para as duas restantes, 3. Mostre o código do
aluno, suas três notas, a média calculada e uma mensagem
"APROVADO" se a média for maior ou igual a 5 e "REPROVADO" caso contrário.

Eu até consegui resolver, porém eu utilizei bilhões de "ifs", alguém saberia alguma maneira mais simples? Pulei a parte do "codigo do aluno". Meu código:
import java.text.DecimalFormat;
import java.util.Scanner;

public class MediaPonderadaLendoAMaior {
/*Escrever um algoritmo que leia o código de um aluno e suas três notas.
Calcule a média ponderada do aluno, considerando que o peso
para a maior nota seja 4 e para as duas restantes, 3. Mostre o código do 
aluno, suas três notas, a média calculada e uma mensagem
"APROVADO" se a média for maior ou igual a 5 e "REPROVADO" caso contrário.*/
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		DecimalFormat df = new DecimalFormat("0.00");
		System.out.println(".::Média do Aluno::.");
		System.out.println("Insira as 3 notas do aluno:");
		float a = input.nextFloat();
		float b = input.nextFloat();
		float c = input.nextFloat();
		float media;
		if (a>b && a>c) {
			media = (4*a + 3*b + 3*c)/10;
			if (media >= 5) {
			System.out.println("Nota 1: " + a + "\nNota 2: " + b + "\nNota 3: " + c + 
					"\nMédia: " + df.format(media) + "\nSituação: Aprovado.");	
			} else {
				System.out.println("Nota 1: " + a + "\nNota 2: " + b + "\nNota 3: " + c + 
						"\nMédia: " + df.format(media) + "\nSituação: Reprovado.");
			}
		}
		if (b>a && b>c) {
			media = (4*b + 3*a + 3*c)/10;
			if (media >= 5) {
			System.out.println("Nota 1: " + a + "\nNota 2: " + b + "\nNota 3: " + c + 
					"\nMédia: " + df.format(media) + "\nSituação: Aprovado.");	
			} else {
				System.out.println("Nota 1: " + a + "\nNota 2: " + b + "\nNota 3: " + c + 
						"\nMédia: " + df.format(media) + "\nSituação: Reprovado.");
			}
		}
		if (c>b && c>a) {
			media = (4*c + 3*b + 3*a)/10;
			if (media >= 5) {
			System.out.println("Nota 1: " + a + "\nNota 2: " + b + "\nNota 3: " + c + 
					"\nMédia: " + df.format(media) + "\nSituação: Aprovado.");	
			} else {
				System.out.println("Nota 1: " + a + "\nNota 2: " + b + "\nNota 3: " + c + 
						"\nMédia: " + df.format(media) + "\nSituação: Reprovado.");
			}
		}
		if (a==b && a==c) {
			media = (4*a + 3*b + 3*c)/10;
			if (media >= 5) {
			System.out.println("Nota 1: " + a + "\nNota 2: " + b + "\nNota 3: " + c + 
					"\nMédia: " + df.format(media) + "\nSituação: Aprovado.");	
			} else {
				System.out.println("Nota 1: " + a + "\nNota 2: " + b + "\nNota 3: " + c + 
						"\nMédia: " + df.format(media) + "\nSituação: Reprovado.");
			}
		}
		if (a==b && a>c) {
			media = (4*a + 3*b + 3*c)/10;
			if (media >= 5) {
			System.out.println("Nota 1: " + a + "\nNota 2: " + b + "\nNota 3: " + c + 
					"\nMédia: " + df.format(media) + "\nSituação: Aprovado.");	
			} else {
				System.out.println("Nota 1: " + a + "\nNota 2: " + b + "\nNota 3: " + c + 
						"\nMédia: " + df.format(media) + "\nSituação: Reprovado.");
			}
		}
		if (a==c && a>b) {
			media = (4*a + 3*b + 3*c)/10;
			if (media >= 5) {
			System.out.println("Nota 1: " + a + "\nNota 2: " + b + "\nNota 3: " + c + 
					"\nMédia: " + df.format(media) + "\nSituação: Aprovado.");	
			} else {
				System.out.println("Nota 1: " + a + "\nNota 2: " + b + "\nNota 3: " + c + 
						"\nMédia: " + df.format(media) + "\nSituação: Reprovado.");
			}
		}
		if (c==b && b>a) {
			media = (4*b + 3*a + 3*c)/10;
			if (media >= 5) {
			System.out.println("Nota 1: " + a + "\nNota 2: " + b + "\nNota 3: " + c + 
					"\nMédia: " + df.format(media) + "\nSituação: Aprovado.");	
			} else {
				System.out.println("Nota 1: " + a + "\nNota 2: " + b + "\nNota 3: " + c + 
						"\nMédia: " + df.format(media) + "\nSituação: Reprovado.");
			}
		}
		input.close();
	}
}

Obrigado :)

6 Respostas

pmlm
ViniGodoy

Por favor, ao postar tópicos, dê um título descritivo. Não adianta dizer “Ajuda com exercício”, nem que “explica o problema no tópico”. Que você quer ajuda, e que você explicará seu problema são informações óbvias. Tente descrever realmente a natureza do problema.

Seu título poderia ser “Como reduzir uma grande quantidade de ifs?”

ViniGodoy

Para reduzir os ifs, seria melhor você começar ordenando os valores das variáveis.

if (b < c) {
   float tmp = b;
   b = c;
   c = tmp;
}

if (a < b) {
   float tmp = a;
   a = b;
   b = tmp;
}

if (b < c) {
   float tmp = b;
   b = c;
   c = tmp;
}
//Aqui, "a", "b" e "c" terão valores ordenados, sendo "a" a maior nota.
Mickdark

Mesma coisa que o viniGodoy comentou, só que com seu código alterado!

import java.text.DecimalFormat;  
    import java.util.Scanner;  
      
    public class MediaPonderadaLendoAMaior {  
        public static void main(String[] args) {  
            Scanner input = new Scanner(System.in);  
            DecimalFormat df = new DecimalFormat("0.00");  
            System.out.println(".::Média do Aluno::.");  
            System.out.println("Insira as 3 notas do aluno:");  
            float a = input.nextFloat();  
            float b = input.nextFloat();  
            float c = input.nextFloat();
            float maior = a, menor1 = b, menor2 = c;
            float aux = 0;
            float media=0;
            
            //Acha o maior
            if (menor1 > maior){
            	aux = menor1;
            	menor1 = maior;
        		maior = aux;
            }
            if (menor2 > maior){
            	aux = menor2;
            	menor2 = maior;
        		maior = aux;
        	}
            
            //Exibe na tela quem he o maior e os menores
            System.out.println("Maior: "+maior);
            System.out.println("Menor1: "+menor1);
            System.out.println("Menor2: "+menor2);
            System.out.println();
            
            //Calcula a media
            media = (4*maior + 3*menor1 + 3*menor2)/10;
            
            //Mostra a ordem das notas colocadas
            System.out.println("Nota 1: "+a);
        	System.out.println("Nota 2: "+b);
        	System.out.println("Nota 3: "+c);
        	System.out.println("Media: "+df.format(media));
            
        	//Verifica se passou
            if (media >= 5f) {
            	System.out.println("Situação: Aprovado.");
            }
            else {  
              System.out.println("Situação: Reprovado.");  
            }
            
            input.close();  
        }
    }
SIN_Vieira

Muito obrigado pela ajuda, em duvidas futuras deixarei meu assunto mais explicativo.

Mickdark

Agora é só alterar o começo do assunto para resolvido assim:
[RESOLVIDO] Assunto

Criado 11 de março de 2013
Ultima resposta 12 de mar. de 2013
Respostas 6
Participantes 4