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