Ir ao conteúdo
  • Cadastre-se
christian3l

Portugol Exercicio Fatorial envolvendo funções e procedimentos

Recommended Posts

Boa noite galera, eu perdi muitas aulas e estou estando pra uma prova(substitutiva) de algoritmos através de videos e estou sofrendo em alguns exercício da lista.

 

Exercícios da lista 

 1) Faça um algoritmo que crie um procedimento que calcule o fatorial de um número, usando uma função que retorne o valor do fatorial para o bloco que chamou essa função.

algoritmo

var
 n, c, fat: inteiro
 funcao fatorial(x: inteiro): inteiro
inicio
      Retorne fat


fimfuncao

inicio

      fat <- 1
      escreva("Digite um numero: ")
      leia(n)
      para c <- 1 ate n passo 1 faca
           fat <- fat * c
      fimpara
      escreva("O fatorial de ", n, " = ", fat)

fimalgoritmo

 

Alguém poderia olhar e ver se já está certo? Caso esteja errado me fale qual o erro fazendo favor! 

O código está rodando normalmente, mas nunca se sabe né...

 

Procurei vídeos explicando e não achei, só achei um exercício parecido com esse porém achei muito confuso....

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá @christian3l.

 

7 horas atrás, christian3l disse:

O código está rodando normalmente, mas nunca se sabe né...

Isso. São pelo menos três pontos diferentes:

  1. Rodar sem erros; (não dá erro ao compilar)
  2. Entregar o resultado correto; (roda, e as respostas condizem com o que é proposto)
  3. Fazer o certo de modo certo. (seguir uma lógica coerente para chegar ao resultado)

 

Então, no seu código, me parece que está conseguindo chegar ao item 2. O programa "aparenta" está respondendo bem as entradas informadas. Se coloco 5, me retorna 120.  Se coloco 0, me retorna 1. Se coloco 6, me retorna 720.

 

Em relação ao 3, já vemos um probleminha: uma função foi criada, mas não está sendo utilizada em momento algum. Experimente apagá-la... o programa vai funcionar exatamente da mesma forma, ou seja, o "objetivo" de criar:

7 horas atrás, christian3l disse:

[...] uma função que retorne o valor do fatorial para o bloco que chamou essa função

não foi atendido. Beleza?

 

Abaixo complemento...

 

Em relação ao código

Abaixo fiz as alterações e tentei explicar no próprio código, veja:

algoritmo "Nome do meu programa"

//FUNÇÃO QUE RECEBE UM NUMERO INTEIRO E RETORNA O VALOR DE SEU FATORIAL
funcao fatorial(x: inteiro):inteiro
   var //DECLARAÇÃO DAS VARIÁVEIS LOCAIS (Necessárias para uso interno da função)
      fat, c :inteiro //observe que fat e c só é necessário para esse escopo do cálculo. Não precisa ser global
   inicio
   fat <- 1 //inicializa com o valor padrão
   para c <- 2 ate n passo 1 faca //do segunto até o próprio valor do número
      fat <- fat*c //multiplica o valor atual pela o número atual da sequência
   fimpara
   retorne fat //retorna o resultado do fatorial de x. ao final, a função conterá o valor da resposta
fimfuncao


//DECLARAÇÃO DAS VAIÁVEIS GLOBAIS
var
   n         :inteiro //valor que será fatorializado
   resultado :inteiro //recebe o resultado da função
inicio
   escreva("Digite um numero: ")
   leia(n)
   resultado:=fatorial(n) //copia o valor retornado em uma variável auxliar
   escreva("O fatorial de",n," =",resultado)
fimalgoritmo

 

 

ou, como a função já tem a resposta, poderia imprimir direto, ex.:

algoritmo "Nome do meu programa"

//FUNÇÃO QUE RECEBE NUMERO UM INTEIRO E RETORNA O VALOR DE SEU FATORIAL
funcao fatorial(x: inteiro):inteiro
   //DECLARAÇÃO DAS VARIÁVEIS LOCAIS (Necessárias para uso interno da função)
   var
      fat, c :inteiro
   inicio
   fat <- 1
   para c <- 1 ate n passo 1 faca
      fat <- fat*c
   fimpara
   retorne fat
fimfuncao


//DECLARAÇÃO DAS VAIÁVEIS GLOBAIS
var
   n         :inteiro //valor que será fatorializado
inicio
   escreva("Digite um numero: ")
   leia(n)
   escreva("O fatorial de",n," =",fatorial(n))
fimalgoritmo

Para simplificar, PROCEDIMENTO e FUNCAO são basicamente a mesma coisa. Elas fazem algo... é como separar um trecho do código e dar um nome a ele, ou seja, toda vez que eu invocar um procedimento ou função, eles irão fazer o que se propõe... sem os procedimentos ou funções, seria, por exemplo, necessário copiar o trecho toda vez que precisasse. Outro ponto interessante, é que pode servi para "organizar" o código.. deixar mais estruturado. Observe que que esse código acima o seu fazem a mesma coisa, a diferença que foi solicitado que o trecho do cálculo do fatorial ficasse separado. Essa separação tem utilidades...

 

Sugiro que faça o seguinte:

Compare seu código original:

algoritmo "Codigo original"
var
   n, c, fat: inteiro
inicio
   fat <- 1
   escreva("Digite um numero: ")
   leia(n)
   para c <- 1 ate n passo 1 faca
      fat <- fat * c
   fimpara
   escreva("O fatorial de ", n, " = ", fat)
fimalgoritmo

com o que postei mais acima. No "meu" código apenas separei o trecho do cálculo do fatorial. Compare um código com o outro.. tente entender TODOS os detalhes.

 

Em relação a esse exercício, alguma dúvida? se sim, quais?

obs.: Use esse tópico apenas para esse exercício

 

Fique a vontade para tirar dúvidas sobre ESSE exercício. Após tirar todas as dúvidas, tente ajustar o segundo... Crie uma nova postagem com o código atual e indique onde está com dúvidas ou se precisa que revisemos também.

 

 

No aguardo.

  • Curtir 1
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×