Porcentagem

Olá pessoal, boa tarde.

Gostaria de saber como ficaria este exercício:

Faça um programa que receba, de 10 pessoas:
idade e altura;
A porcentagem de pessoas com idade entre 10 e 30 anos entre as pessoas que medem mais de 1.90m.

Tentei aqui de várias formas, mas não consegui. Fiz apenas a parte que recebe os dados pelo teclado.

Agradeço.

Mostre aí o que você fez, e o que deu errado

esse é “a” é um acumulador.

[code]import java.util.Scanner;
public class Teste {

public static void main(String[] args) {
    int idade, cont = 1, a = 0;
    double altura, porc;
    
    Scanner ler = new Scanner(System.in);
    
    while(cont <= 10){
        
    System.out.println("Digite uma idade: ");
    idade = ler.nextInt();
    
    System.out.println("Digite sua altura: ");
    altura = ler.nextDouble();
    
    if((idade > 10 && idade < 30) && (altura > 1.90)){
        a += 1;
    }   
    System.out.println(a);
    porc = (a/100);
    System.out.println(porc);
        if(cont > 10){
            break;
        }       
    cont++;    
    }    
}

}[/code]

Use as tags para postar código, por favor.

Quando for fazer contas, cuidado com a mistura de int com double, e cuidado ao dividir ints.

No seu caso, vi um probleminha na linha:

porc = a / 100;

a é um inteiro e 100 é um inteiro, portanto você vai ter um valor inteiro, que provavelmente não é o que você quer (por exemplo, 33 / 100 vai dar zero, em vez de 0.33 como você estava esperando).

Isso aqui da certinho :smiley:

[code]import java.util.Scanner;

public class Teste {

public static void main(String[] args) {
	int idade, cont = 1, a = 0;
	double altura;

	Scanner ler = new Scanner(System.in);

	while (cont <= 10) {

		System.out.println("Digite uma idade: ");
		idade = ler.nextInt();
		
		System.out.println("Digite uma altura: ");
		altura = ler.nextDouble();

		if((idade >= 10 && idade <= 30) && altura >= 1.90){
			a++;
		}

		cont++;
	}		
	
	System.out.println("Porcentagem: " +  (double)a * 100 / 3);
}

}[/code]

OBSERVAÇÕES:

1: Esse if verificado se cont > 10 é desnecessário, não vi utilidade nenhuma.
2: Você tem que colocar a impressão da porcentagem fora do while, caso o contrario ele vai imprimir a cada iteração.
3: Lembrando um pouco das aulas de porcentagem laaa da 4ª série, pra achar a porcentagem de um número você multiplica ele por 100 e divide pelo total, que no seu caso é 10.
4: usei esse casting de double, pra pegar o resultado, que é double, e imprimir ele completo, pra dar um resultado preciso, se vc quiser pode formatar a saida pra apenas algumas casas decimais.

Espero ter ajudado.

1 curtida

[code]package porcentagem;

import java.util.Scanner;

public class Porcentagem {

public static void main(String[] args) {
    int idade;
    double altura, porc = 0;
    
    Scanner scanner = new Scanner(System.in);
    
    for(int i = 0; i<3; i++){
        System.out.println("Entre com a idade:");
        idade = scanner.nextInt();
        
        System.out.println("Entre com a altura:");
        altura = scanner.nextDouble();
        
        if((idade > 10 && idade < 30)&&(altura > 190)){
            porc = i * 100/ 3;
        }
    }
  System.out.println(porc);   
}

}
[/code]

Com for deu certo também!!
Ai fica ao seu critério!!

[quote=Matheus terra]Isso aqui da certinho :smiley:

[code]import java.util.Scanner;

public class Teste {

public static void main(String[] args) {
	int idade, cont = 1, a = 0;
	double altura;

	Scanner ler = new Scanner(System.in);

	while (cont <= 10) {

		System.out.println("Digite uma idade: ");
		idade = ler.nextInt();
		
		System.out.println("Digite uma altura: ");
		altura = ler.nextDouble();

		if((idade >= 10 && idade <= 30) && altura >= 1.90){
			a++;
		}

		cont++;
	}		
	
	System.out.println("Porcentagem: " +  (double)a * 100 / 3);
}

}[/code]

OBSERVAÇÕES:

1: Esse if verificado se cont > 10 é desnecessário, não vi utilidade nenhuma.
2: Você tem que colocar a impressão da porcentagem fora do while, caso o contrario ele vai imprimir a cada iteração.
3: Lembrando um pouco das aulas de porcentagem laaa da 4ª série, pra achar a porcentagem de um número você multiplica ele por 100 e divide pelo total, que no seu caso é 10.
4: usei esse casting de double, pra pegar o resultado, que é double, e imprimir ele completo, pra dar um resultado preciso, se vc quiser pode formatar a saida pra apenas algumas casas decimais.

Espero ter ajudado.[/quote]

Ajudou bastante.
Mas eu estou com duvida nessa conta da porcentagem.
Pensei que seria assim: a/100. Ou a/(por alguma variável com valor 100). Desse jeito o resultado fica ex: a=5/b=100…que resulta em 0,05.
Mas o seu sai diferente.

Mas obrigado, me ajudou muito.

[quote=joao0212][code]package porcentagem;

import java.util.Scanner;

public class Porcentagem {

public static void main(String[] args) {
    int idade;
    double altura, porc = 0;
    
    Scanner scanner = new Scanner(System.in);
    
    for(int i = 0; i<3; i++){
        System.out.println("Entre com a idade:");
        idade = scanner.nextInt();
        
        System.out.println("Entre com a altura:");
        altura = scanner.nextDouble();
        
        if((idade > 10 && idade < 30)&&(altura > 190)){
            porc = i * 100/ 3;
        }
    }
  System.out.println(porc);   
}

}
[/code]

Com for deu certo também!!
Ai fica ao seu critério!![/quote]

Sinto de informar, mas só de bater o olho nesse código ja da pra ver que não vai imprimir o valor desejado. O for está certo, mas você esta atribuindo a variavel “porc” um calculo de porcentagem a cada iteração do for, isso é extremamente errado. Quando a condição do if é satisfeita, você ta fazendo o contato “i” ser multiplicado por 100 e dividido pela quantidade de iterações, e isso não da o resultado esperado no final. Pra ficar certo, esse if tem que ficar fora de qualquer loop, e precisa de um contador a parte para ser incrementado dentro do loop.

[quote=Matheus terra]Isso aqui da certinho :smiley:

[code]import java.util.Scanner;

public class Teste {

public static void main(String[] args) {
	int idade, cont = 1, a = 0;
	double altura;

	Scanner ler = new Scanner(System.in);

	while (cont <= 10) {

		System.out.println("Digite uma idade: ");
		idade = ler.nextInt();
		
		System.out.println("Digite uma altura: ");
		altura = ler.nextDouble();

		if((idade >= 10 && idade <= 30) && altura >= 1.90){
			a++;
		}

		cont++;
	}		
	
	System.out.println("Porcentagem: " +  (double)a * 100 / 3);
}

}[/code]

OBSERVAÇÕES:

1: Esse if verificado se cont > 10 é desnecessário, não vi utilidade nenhuma.
2: Você tem que colocar a impressão da porcentagem fora do while, caso o contrario ele vai imprimir a cada iteração.
3: Lembrando um pouco das aulas de porcentagem laaa da 4ª série, pra achar a porcentagem de um número você multiplica ele por 100 e divide pelo total, que no seu caso é 10.
4: usei esse casting de double, pra pegar o resultado, que é double, e imprimir ele completo, pra dar um resultado preciso, se vc quiser pode formatar a saida pra apenas algumas casas decimais.

Espero ter ajudado.[/quote]

Ajudou bastante.
Mas eu estou com duvida nessa conta da porcentagem.
Pensei que seria assim: a/100. Ou a/(por alguma variável com valor 100). Desse jeito o resultado fica ex: a=5/b=100…que resulta em 0,05.
Mas o seu sai diferente.

Mas obrigado, me ajudou muito.

[quote=LuCiAnO_M.][quote=Matheus terra]Isso aqui da certinho :smiley:

[code]import java.util.Scanner;

public class Teste {

public static void main(String[] args) {
	int idade, cont = 1, a = 0;
	double altura;

	Scanner ler = new Scanner(System.in);

	while (cont <= 10) {

		System.out.println("Digite uma idade: ");
		idade = ler.nextInt();
		
		System.out.println("Digite uma altura: ");
		altura = ler.nextDouble();

		if((idade >= 10 && idade <= 30) && altura >= 1.90){
			a++;
		}

		cont++;
	}		
	
	System.out.println("Porcentagem: " +  (double)a * 100 / 3);
}

}[/code]

OBSERVAÇÕES:

1: Esse if verificado se cont > 10 é desnecessário, não vi utilidade nenhuma.
2: Você tem que colocar a impressão da porcentagem fora do while, caso o contrario ele vai imprimir a cada iteração.
3: Lembrando um pouco das aulas de porcentagem laaa da 4ª série, pra achar a porcentagem de um número você multiplica ele por 100 e divide pelo total, que no seu caso é 10.
4: usei esse casting de double, pra pegar o resultado, que é double, e imprimir ele completo, pra dar um resultado preciso, se vc quiser pode formatar a saida pra apenas algumas casas decimais.

Espero ter ajudado.[/quote]

Ajudou bastante.
Mas eu estou com duvida nessa conta da porcentagem.
Pensei que seria assim: a/100. Ou a/(por alguma variável com valor 100). Desse jeito o resultado fica ex: a=5/b=100…que resulta em 0,05.
Mas o seu sai diferente.

Mas obrigado, me ajudou muito.[/quote]

Se você simplesmente fazer o valor do contado divido por 100 é errado, não é porcentagem.
Já que a sua dúvida agora é na parte matematica do problema, de uma pesquisadinha sobre porcentagem, é mais tranquilo. :smiley:

[quote=Matheus terra][quote=joao0212][code]package porcentagem;

import java.util.Scanner;

public class Porcentagem {

public static void main(String[] args) {
    int idade;
    double altura, porc = 0;
    
    Scanner scanner = new Scanner(System.in);
    
    for(int i = 0; i<3; i++){
        System.out.println("Entre com a idade:");
        idade = scanner.nextInt();
        
        System.out.println("Entre com a altura:");
        altura = scanner.nextDouble();
        
        if((idade > 10 && idade < 30)&&(altura > 190)){
            porc = i * 100/ 3;
        }
    }
  System.out.println(porc);   
}

}
[/code]

Com for deu certo também!!
Ai fica ao seu critério!![/quote]

Sinto de informar, mas só de bater o olho nesse código ja da pra ver que não vai imprimir o valor desejado. O for está certo, mas você esta atribuindo a variavel “porc” um calculo de porcentagem a cada iteração do for, isso é extremamente errado. Quando a condição do if é satisfeita, você ta fazendo o contato “i” ser multiplicado por 100 e dividido pela quantidade de iterações, e isso não da o resultado esperado no final. Pra ficar certo, esse if tem que ficar fora de qualquer loop, e precisa de um contador a parte para ser incrementado dentro do loop.[/quote]

Engraçado, fiz os dois casos e os dois me retornam exatamente o mesmo valor.
Mas obrigado pela dica.
ps: Troquei o int i, para double i …

então pelo que via a duvida agora é só matemática, segue uma dica que eu sempre uso para esses casos sempre pegue a razão entre os valores exemplo :

quantas pessoas o grupo “a” é menor que o grupo “b” se “a” = 3 e “b” = 10 pessoas tire a razão A/B = 3/10 = 0.3333… portanto ele é 0.3333… vesses menor quer transformar isso em porcentagem multiplique por 100, então “a” vale 33.3333% de “b” se quiser por mil multiplique por 1000, e assim em diante, mas a dica é sempre pegar a razão entre os valores

se vc fizer o contrario também da certo tipo quantas vesses B é maior que A B/A = 10/3 = 3,333 significa que B é três vezes maior que A multiplique por 100 vai que que B equivale a 333,333% de A

então só para finalizar a dica é tirar a razão entre os valores xD