boa galera eu estou querendo fazer um metodo
para calcular o multiplos de 3.
O programa tem que imprimir os valores de 1 a 100 e imprimir só os multiplos de 3
Um número é múltiplo de 3 quando o resto de sua divisão por 3 é zero. Para saber o resto da divisão por 3, use o operador “%”. Por exemplo, 10 % 3 == 1.
Utilize o operador mod… representado por %. Que retorna o resto da divisão inteira:
Exemplo:
int numero = 40;
System.out.println(40 % 3);
Se o resto da divisão for 0 (zero) então ele é multiplo:
if(numero % 3 == 0){
System.out.println("Eh multiplo de 3");
}
- Pegue o primeiro múltiplo de 3, no caso, o próprio 0.
- A partir daí, some +3 para achar o próximo multiplo de 3.
Ou seja, basta fazer um for que vai pulando de 3 em 3, até o 99.
[quote=zeimbic]boa galera eu estou querendo fazer um metodo
para calcular o multiplos de 3.
O programa tem que imprimir os valores de 1 a 100 e imprimir só os multiplos de 3[/quote]
public final class Main {
public static void main(String args[]) {
// loop de 1 a 100
for (int i = 1; i <= 100; i++) {
// verifica se o resto da divisao por três é zero
if ((i % 3) == 0) {
// Imprime o valor na tela
System.out.println(i);
}
}
}
}
Outra opção. Todo número multiplicado por 3, será também um múltiplo de 3. Observe:
3x0 = 0
3x1 = 3
3x2 = 6
Então, faça um laço que vai somando esse número em negrito, e imprima o resultado desse número multiplicado por 3. Quando esse resultado for igual ou maior que 100 (precisamente no 34º termo), pare o laço.
[quote=brunno.orpinelli][quote=zeimbic]boa galera eu estou querendo fazer um metodo
para calcular o multiplos de 3.
O programa tem que imprimir os valores de 1 a 100 e imprimir só os multiplos de 3[/quote]
public final class Main {
public static void main(String args[]) {
// loop de 1 a 100
for (int i = 1; i <= 100; i++) {
// verifica se o resto da divisao por três é zero
if ((i % 3) == 0) {
// Imprime o valor na tela
System.out.println(i);
}
}
}
}
[/code][/quote]
Ok, já que ele postou a forma estúpida, então vamos as duas formas mais inteligentes:
[code]public final class Main {
public static void main(String args[]) {
// loop de 0 a 100, de 3 em 3.
for (int i = 0; i <= 100; i+=3) {
// sempre vai ser múltiplo
System.out.println(i);
}
}
}
public final class Main {
public static void main(String args[]) {
int produto = 0;
int multiplicador = 0;
do {
produto = 3 * multiplicador;
multiplicador++;
// sempre vai ser múltiplo
System.out.println(produto);
} while (produto <= 100)
}
}
Ambos os códigos farão 1/3 do processamento do exemplo anterior. Só use aquele programa se você precisar imprimir os outros números, e só indicar quais são múltiplos.
nossa galera valeu mesmo deu para realmente entender
valeu mesmo…
Acho que no exercício do múltiplo de 3, a intenção não é ter performance, e sim saber utilizar o operador %.
Então, a solução
if(i % 3 == 0)
creio ser a mais indicada e a que o professor deseja… Apesar de as outras também funcionarem
Eu geralmente gosto quando meus alunos não fazem simplesmente o óbvio. Aliás, os bons alunos procuram não fazer o óbvio, mas sim, usar a solução inteligente para o problema. Pensar um pouquinho na matemática antes de resolver o exercício mostra que o aluno está realmente tentando elaborar o algoritmo, não repetir mecanicamente o que foi visto em aula. Pior ainda, é quando o aluno memoriza essa solução com % como “clássica”, e depois você acaba vendo algo assim em código comercial…
Um clássico é o “Faça um programa que mostre a soma de todos os números de 1 até 100”. O óbvio é fazer:
int soma = 0;
for (int i = 0; i < soma; i++) {
soma += i;
}
System.out.println("A soma é %d", soma);
E, por incrível que pareça, já vi isso num sistema!
Um aluno mais atento pode fazer:
int a1 = 1;
int an = 100;
n = 1;
int soma = ((a1 + an) * n) / 2;
System.out.println("A soma é %d", soma);
E chegar no mesmo resultado.
O que eu costumo fazer em sala é mostrar no projetor a solução óbvia, e depois mostrar as soluções melhores, que eles obteriam pensando um poquinho mais no problema. Isso geralmente gera uma turma surpresa e melhora muito a qualidade de algoritmos futuros.
Concordo com a questão de fazer o aluno pensar…
Mas discordo com fazer algorítmos complexos para coisas simples, a não ser que o algoritmo permanceça simples…
Esse algorítmo por exemplo (minha opnião):
int produto = 0;
int multiplicador = 0;
do {
produto = 3 * multiplicador;
multiplicador++;
// sempre vai ser múltiplo
System.out.println(produto);
} while (produto <= 100)
É muito complexo para esse problema…
Esse outro, já achei interessante, pois mantém a simplicidade:
for (int i = 0; i <= 100; i+=3) {
// sempre vai ser múltiplo
System.out.println(i);
}
A não ser que a performance, seja algo que for fazer a diferença… A principal intenção da programação é ter um código limpo e fácil de entender… Aí concordo em usar criatividade…
(Não entenda como uma discussão no sentido ruim… é só meu ponto de vista)
Isso não é possível afirmar, pois a máquina virtual tem uma série de algorítmos, para otimizar código… Já li um artigo inclusive, que dizia: faça um código bom, não fique preocupado em otimizar coisas pequenas pois pode até atrapalhar a máquina virtual…
Mas aí já é outra discussão
Valew
Eu concordo com você. Geralmente é melhor fazer código limpo do que performático.
Mas no caso desse algoritmo a solução “pulando de 3 em 3” é bastante óbvia também, e geralmente o aluno não chega nela pq o professor fez questão de ensinar o operador de resto pouco antes na aula.
Pra quem está iniciando, é sempre bom utilizar o VisuAlg para treinar um pouco sobre algoritmos e até mesmo visualizar os valores de entrada e saída em tempo real.
for (int z = 1; z <=1000; z++){
if (z % 3 == 0){
System.out.println("Múltiplo de 3: "+z);
}