Jump to content
Rodrigo 7

[Dúvida] Fatorial de um número

Recommended Posts

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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Edited by Rodrigo 7
GeSHi

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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 );
   }
 }
}

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.