Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Rodrigo 7

[Dúvida] Fatorial de um número

Mensagens Recomendadas

Rodrigo 7

Boas pessoal,

Sou novo no fórum e também no que diz respeito à programação em java.

Já tenho algumas luzes sobre o assunto e já faço algumas coisitas. É o seguinte: eu preciso de fazer em java um programa que me dê o fatorial de um número.

Eu já vi pela net vários códigos mas nenhum explica o que faz cada código. Eu gostava, se possivel, que alguém me desse o código e me explicasse o que significa ou o que faz cada linha. :cheesygrin:

Sem mais,

Rodrigo 7

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

Já tenho algumas luzes sobre o assunto e já faço algumas coisitas.

apresenta o teu código (o que já fizeste do trabalho) e diz qual é a parte que não consegues fazer e porque.

se não fizeres isso :

http://www.portugal-a-programar.pt/guidelines/

2.3

Não é permitida a criação de tópicos ou colocação de mensagens a pedir que se façam trabalhos. Pedir ajuda é diferente de pedir trabalhos feitos. Em caso de incumprimento o staff pode bloquear, ou mesmo apagar, o tópico/mensagem.


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rodrigo 7


int fat = 1;
Scanner introduz = new Scanner(System.in);
int resposta = introduz.nextInt();

for( int i = 2; i <= resposta; i++ )  
{   
    fat *= i;  
}  

Isto é o que eu tenho de momento;

Eu gostava de fazer isto para qualquer número, do género eu escrever e o computador calcular. Queria saber o que faz o for( int i = 2; i <= valor; i++ )

Pequeno edit já ajustei o código para escolher o número

Editado por Rodrigo 7
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
mjamado

Isso é um ciclo, e a sintaxe é igual ou muito semelhante em muitas linguagens.

O que te diz é que, definindo um número i a começar em 2, executa as instruções que estão no interior do bloco enquanto i for menor ou igual a valor, incrementando i em uma unidade a cada passagem (i++ é o mesmo que i = i + 1).

Como nota lateral, repara que só podes calcular factoriais até 12. O factorial de 13 já é superior ao valor máximo de um int.


"Para desenhar um website, não tenho que saber distinguir server-side de client-side" - um membro do fórum que se auto-intitula webdesigner. Temo pelo futuro da web.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rodrigo 7

Mas não é suposto reduzir uma unidade a cada vez que passa no ciclo? Ou seja: eu escolho o número 5 a cada vez que passa no ciclo devia fazer menos uma unidade: 5 x 4 x 3 x 2 x 1

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

ok, antes do mais dou-te os parabéns por fazeres aquilo que muita gente não faz : indentar correctamente o código !!!

finalmente alguém que se apresenta com código indentado !!!

não apresentaste todo o código, ok, não será necessário neste caso, mas não descures esse aspecto.

agora o teu código:

public class Main
{
 public static void main(String[] args)
 {
   int fat = 1;     // atribuir o valor de 1 à variável "fat"
   int valor = 5;   // atribuir o valor de 5 à variável "valor"  

   for( int i = 2;  // declaração da variável "i" (só existente dentro do escopo for) com o valor inicial de 2
        i <= valor; // executar as instruções dentro do escopo do for enquanto o valor de "i" for menor que o valor de "valor" 
        i++ )       // no final da execução das instruções, incrementar o valor da variável "i" em uma unidade
   {                // início do escopo do ciclo for
     fat *= i;      // guardar na variável "fat" o resultado da multiplicação desta pelo valor da variável "i"
   }                // fim do escopo do ciclo for
 }
}
agora, para qualquer número vindo este do que escreves no teclado, terás de usar ferramentas que ainda não percebes.

não existe problema algum, dentro em breve aprenderás. usa o código sem tentar perceber e mais tarde irás aprender o que faz :

public class Main
{
 public static void main(String[] args)
 {
   int fat = 1;     // atribuir o valor de 1 à variável "fat"
   int valor = 5;   // atribuir o valor de 5 à variável "valor"  

   try {
     java.util.Scanner scanner = new java.util.Scanner(System.in);
     valor = scanner.nextInt();

     for( int i = 2;  // declaração da variável "i" (só existente dentro do escopo for) com o valor inicial de 2
          i <= valor; // executar as instruções dentro do escopo do for enquanto o valor de "i" for menor que o valor de "valor" 
          i++ )       // no final da execução das instruções, incrementar o valor da variável "i" em uma unidade
     {                // início do escopo do ciclo for
       fat *= i;      // guardar na variável "fat" o resultado da multiplicação desta pelo valor da variável "i"
     }                // fim do escopo do ciclo for

     System.out.println("O factorial de " + Integer.toString(valor) + " é " + Integer.toString(fat));
   }
   catch (Exception e)
   {
     System.out.println("Erro de leitura do número do teclado");
   }
 }
}
 
Em 18/01/2013 às 14:57, Rodrigo 7 disse:

Mas não é suposto reduzir uma unidade a cada vez que passa no ciclo? Ou seja: eu escolho o número 5 a cada vez que passa no ciclo devia fazer menos uma unidade: 5 x 4 x 3 x 2 x 1

qual a diferença entre 5 x 4 x 3 x 2 x 1 e 1 x 2 x 3 x 4 x 5 ?


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Rodrigo 7

Ya pois assim também dá. Ás vezes sou mesmo tone -.-

Obrigado pelo esclarecimento e ajuda ^^

PS: eu já sabia trabalhar com o Scanner, não me lembrei foi de po-lo no codigo xD

Acabei o código e já está bom penso eu

import java.util.Scanner;
public class fatorial {
 public static void main(String prg[]){
   int fat = 1;
   Scanner introduz = new Scanner(System.in);
   int resposta = introduz.nextInt();
   if(resposta < 0){
     System.out.print("Não existe fatorial desse número.");
   }
   else{
     for( int i = 2; i <= resposta; i++ ) 
     {  
       fat *= i; 
     } 
     System.out.println( "O fatorial de " + resposta + " é igual a " + fat );
   }
 }
}

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.