[Ajuda] - Exercicios Caelum FJ11

17 respostas
MAFIA_Pao

Boa noite amigos eu venho fazendo os exercicios da apostila Caelum FJ11, so que estou com duvidas em relação de como fazer o exercicio de fatorial de 1 ate 10, alguem poderia me ajudar ! Obrigado. Espero respostas !

17 Respostas

celso.martins

Cara, em primeiro lugar, você sabe o que é fatorial?

Por favor, não se ofenda, pois não sei se o seu problema é matemático ou "algoritmático".

10! = 10x9x8x7x6x5x4x3x2x1

Assim,

public class Fatorial {
	
	public static void main(String args[]){
		final short fatorial = 10;
		
		int resultado = 1;
		
		for (short i = 1; i <= fatorial; i++){
			resultado *= i;
		}
		
		System.out.println(resultado);
	}
}

Não sei se existe uma fórmula mágica para fazer isso mais eficientemente. Mas, basicamente, 10!, está aí.

O que tem de tópico falando da sequencia Fibonacci e de fatorial aqui, não está no gibi.

Acho que esses dois tópicos deveriam ser permanentes e aparecer logo após a criação de usuário do GUJ.

Abraços

MAFIA_Pao

Celso obrigado cara, mais meu problema eh “algoritmático” mesmo, pq eu ja sabia o que era isso sim, eu ate fiz o calculo no caderno, agora quando vai passar isso do caderno para programação, dae que vem a dificuldade, programação eh pratica, por isso tenho q praticar mais, mais vlw pela ajuda. Obrigado !

lcfagundes

Celso,

sua resposta está estaria correta se o exercício pedisse somente o 10!, mas o exercício pede: Imprima os fatoriais de 1 a 10. Travei justamente aí, porque consegui calcular o fatorial de um número, mas pelo que entendi é necessário imprimir a sequência de 1 até 10. E como iniciante que sou travei.

davidbuzatto

Dois anos depois…

lcfagundes, evite ressuscitar tópicos muito antigos tudo bem?
Quanto a sua dúvida, basta vc encapsular o código para gerar fatorial em um método e então fazer um for, de 1 a 10, chamando o método e imprimindo o valor retornado.

Ah, outra coisa, se for reaproveitar o código do amigo acima, não precisa usar short nem final, além de precisar testar se o valor desejado é o fatorial de 0, que por definição é igual a 1 ou se é um número negativo, visto que não existe fatorial de números negativos.

[]'s

prog.tiago

Boa noite!

Abaixo segue o código que eu fiz.

Utilizei o código do Celso, apenas complementei utilizando um for de 0 a 10, para atender a solicitação do lcfagundes.

public class Fatorial {

	public static void main(String args[]) {
		for (int fatorial = 1; fatorial <= 10; fatorial++) {

			int resultado = 1;

			for (short i = 1; i <= fatorial; i++) {
				resultado *= i;
			}

			System.out.printf("fatorial de %d: %d\n", fatorial, resultado);
		}
	}
}

Abraços :D

celso.martins

Na verdade, não sei se usar um topico antigo é pior que criar outro com a mesma dúvida… =)

Tiago, na verdade, acho que era só colocar o sysout para dentro do for, não? Não entendi o motivo de dois "for"…

public class Fatorial {

	public static void main(String args[]) {
		final short fatorial = 10;

		int resultado = 1;

		for (short i = 1; i <= fatorial; i++) {
			resultado *= i;
			System.out.println(resultado);
		}
	}
}

David, Esse método encapsulador teria apenas a multiplicação ou faria o "for"?
Era isso: (?)

public class Fatorial {

	public static void main(String args[]) {
		final Short valor = 10;

		for (Integer i = 1; i <= valor; i++) {
			System.out.println(acharFatorial(i));
		}
	}
	
	public static Integer acharFatorial(Integer valor) {
		if (valor < 0) throw new IllegalArgumentException("Não existe fatorial de numero negativo");
		if (valor == 0) return 1;
		
		Integer resultado = 1;
		for (Integer i = 1; i <= valor; i++) {
			resultado *= i;
		}
		return resultado;
	}
}

Acho que o maior problema desta abordagem é ter que duplicar o laço, concorda?

Abraços

davidbuzatto

Pq usar Integer ao invés de int?
Fatoriais crescem beeem rápido. Ou vc usa um long, ou se fosse algo que fosse ser usado na vida real, seria melhor um BigInteger que tem precisão arbitrária.

public class TestesFatorial {

    public static void main( String[] args ) {

        for ( long i = -10; i < 11; i++ ) {
            System.out.printf( "%d! = %d\n", i, fatorial( i ) );
        }

    }

    public static long fatorial( long numero ) {

        if ( numero < 0 ) {

            return -1;

        } else {

            long resultado = 1;

            for ( long i = 1; i <= numero; i++ ) {
                resultado *= i;
            }

            return resultado;

        }

    }

}
prog.tiago

Obrigado Celso,

Não me liguei no sysout. :smiley:

Abraços

celso.martins

Na verdade, para o calculo eu deveria ter realmente usado o primitivo em vez do wrapper, pois é mais eficiente. Você tem razão.
Mas para o retorno de método e passagem de argumentos, costumo usar o wrapper pela facilidade de usar como um key de um Map, por exemplo.
Como tento trabalhar o máximo possível “nulless” é fácil transformar do wrapper para o primitivo com Integer.intValue()

http://mindprod.com/jgloss/intvsinteger.html

Concordo completamente. Bem observado.

Abraços

F

alguem tema apostila Caelum Fj11??? Me ajudem a fazer o exercicio da pag. 16!!!

F

^^

celso.martins

Então… se você colocar o exercicio você amplia o seu universo para incluir pessoas que não tem a apostila… :wink:

F

Então… se você colocar o exercicio você amplia o seu universo para incluir pessoas que não tem a apostila… ;-)

Eu fiz o exercício da pág.16… mais não sei se está certo!!! está dando 3 erros ):

class BalancoTrimestral {

public static void main(String[ ] args)  {

//gastosJaneiro

int gastoJaneiro =15000;

//gastosFevereiro

int gastoFevereiro = 23000;

//gastosMarco

int gastoMarco = 17000;

int gastosTrimestre = gastosJaneiro + gastosFevereiro + gastosMarco

System.out.println
}

}

dhsouza
class BalancoTrimestral {
	public static void main(String[ ] args) {
	//gastosJaneiro
	int gastoJaneiro =15000;
	//gastosFevereiro
	int gastoFevereiro = 23000;
	//gastosMarco
	int gastoMarco = 17000;
	int gastosTrimestre = gastoJaneiro + gastoFevereiro + gastoMarco;
	System.out.println(gastosTrimestre);
	}
}

a variavel tinha sido declarada como gastoFevereiro, gastoJaneiro e gastoMarco e depois estava fazendo a soma das variaveis gastosjaneiro, gastosfevereiro e gastosmarco. estava faltando um ponto e vírgual depois dessa atribuição e o comando System.out.println estava faltando o parametro para o que seria impresso

[]'s

F
dhsouza:
class BalancoTrimestral {
	public static void main(String[ ] args) {
	//gastosJaneiro
	int gastoJaneiro =15000;
	//gastosFevereiro
	int gastoFevereiro = 23000;
	//gastosMarco
	int gastoMarco = 17000;
	int gastosTrimestre = gastoJaneiro + gastoFevereiro + gastoMarco;
	System.out.println(gastosTrimestre);
	}
}

Era isso mesmo...eu tinha dado uma revisada e axei o erro...era esse mesmo!!! valew pela ajuda!!! ^^

a variavel tinha sido declarada como gastoFevereiro, gastoJaneiro e gastoMarco e depois estava fazendo a soma das variaveis gastosjaneiro, gastosfevereiro e gastosmarco. estava faltando um ponto e vírgual depois dessa atribuição e o comando System.out.println estava faltando o parametro para o que seria impresso

[]'s

Era isso mesmo...eu tinha dado uma revizada e axei o erro...era esse mesmo!!! valew pela ajuda!!! ^^

F

:lol:

A

tou fazendo um programa em java mas da erro me ajuda.

Escreva uma aplicação que receba um número inteiro n e um outro p que representa o
passo da contagem (valor do incremento) e o programa deve imprimir uma contagem de 0 até n de p em p. Nota que p deve ser inferior a n. Caso não for fornecido o segundo argumento, o programa assume que p = 1 (contagem simples) Por exemplo:
para n = 10 e p = 3, a saída seria:
0
3
6
9

Criado 25 de abril de 2009
Ultima resposta 5 de abr. de 2013
Respostas 17
Participantes 8