Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
kleber10

[Resolvido] VisualG - Como desenvolver este algoritmo de looping?

Recommended Posts

Estou à horas tentando desenvolver um algoritmo que apenas mostre (sem inserir nenhum dado) a somatória da fatorial de 15 valores (qualquer valor, acho mais simples de 1 à 15 mesmo).

O máximo que consegui fazer foi isto. Este é um exemplo de 5! fatorial.

O resultado dá 120 mas no final aparece que 120 é a fatorial de 1. Obviamente, pois para efetuar o cálculo a variável N diminui até chegar ao 1.


f <- n //fatorial

enquanto n > 1 faca
f <- f * (n - 1)
n <- n - 1
fimenquanto
Escreval ("O fatorial de ", n, " é:", f)
n <- 5 //numero

E aqui tenho 2 problemas, informar corretamente a fatorial e seu resultado.... e também apresentar 15 resultados de fatoriais.

Para o primeiro problema pensei em uma nova variável, pro segundo... fazer um looping dentro do looping, mas não faço ideia se isto é possível.

Alguém pode ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

kleber10,

Se entendi bem, você quer fazer o seguinte cálculo. Exemplo:

1! + 2! + 3! + ... + 15!

Correto?

Bom, sendo isso, você poderia usar o laço para do VisuAlg, pois facilitaria. Você poderia inicializar as variáveis (f, para o fatorial; e soma, para guardar o somatório) desta forma:

f <- 1;
soma <- 0;

Observação: declare f e soma como variáveis reais, pois o fatorial de 15 extrapola o limite que um inteiro pode comportar.

Então, o laço começaria de 1 até 15. Dentro do laço, você multiplica f pelo contador do laço. Tipo:

f <- f * i

E para manter o somatório:

soma <- soma + f

Pronto. Basta imprimir soma (e o fatorial, f, caso queira).

[]'s

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, o problema é que preciso fazer com "Enquanto...faca" e também com "para...faca".

Enfim, já estou muito confuso com isto... foi preciso criar um valor para "i" para dar certo. Se eu colocar i e soma como real dá erro, tenho que colocar inteiro.

O problema é que desta vez, mostra corretamente (O fatorial de x é ...), mas o resultado da errado (No alg acima que criei só o resultado que dá certo).


f <- 1
soma <- 0
i <- 1

para f de 1 ate 15 faca
f <- f * i
soma <- soma + f

escreval ("O fatorial de ", f, " é:", soma)

fimpara

Se fosse para criar um alg para mostrar apenas a fatorial de um número dado pelo usuário seria fácil, o que não consigo é apresentar os resultados corretos aos fatoriais correspondentes...

Compartilhar este post


Link para o post
Compartilhar em outros sites

kleber10,

Se eu colocar i e soma como real dá erro, tenho que colocar inteiro.

O problema é que desta vez, mostra corretamente (O fatorial de x é ...), mas o resultado da errado (No alg acima que criei só o resultado que dá certo).

Se fosse para criar um alg para mostrar apenas a fatorial de um número dado pelo usuário seria fácil, o que não consigo é apresentar os resultados corretos aos fatoriais correspondentes...

Você deve declarar como real as variáveis que vão guardar o fatorial e a soma, e não o contador do laço:

var
soma, f : real
i : inteiro

inicio
// Seção de Comandos

f <- 1;
soma <- 0;

para i de 1 ate 15 faca
f <- f * i
soma <- soma + f
fimpara

escreval ("O fatorial de" , i - 1, "! é:", f)
escreval
escreval ("O somatório (1! + ... + 15!) é:", soma)

Para fazer outro com Enquanto ... faça, basta adaptar.

[]'s

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites

CARA, muito obrigado! Parece tão difícil, mas você acha tão simples quando olha a resolução...

Apenas em "escreval ("O fatorial de" , i - 1, "! é:", f)" que tive de tirar o -1, daria errado assim.

Deixa só ver se entendi, pela variável i estar dentro da repetição, o valor dela se altera sem necessidade de dar um valor inicial (no caso de f e soma)? Era isto que estava me complicando lol Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

kleber10,

Apenas em "escreval ("O fatorial de" , i - 1, "! é:", f)" que tive de tirar o -1, daria errado assim.

Que erro? Aqui apresenta o valor 15. Se retirar o -1 ele vai apresentar o valor 16. Se não quiser fazer dessa forma, poderia usar uma variável específica:

x <- 15

x declarada como inteira. E no laço:

para i de 1 ate x faca
f <- f * i
soma <- soma + f
fimpara

escreval ("O fatorial de" , x, "! é:", f)

Deixa só ver se entendi, pela variável i estar dentro da repetição, o valor dela se altera sem necessidade de dar um valor inicial (no caso de f e soma)? Era isto que estava me complicando lol Obrigado!

i recebe o valor inicial de 1 e vai sendo incrementada em 1 até 15. Ou seja, i varia de 1 até 15.

[]'s

LNW

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui apareceu os valores até 0 até 14, tirei o -1 e apareceu de 1 à 15. Bom, o importante é que funcionou kkk' obrigado, agora entendi a lógica para fazer um exercício similar o/

Compartilhar este post


Link para o post
Compartilhar em outros sites

kleber10,

Aqui apareceu os valores até 0 até 14, tirei o -1 e apareceu de 1 à 15. Bom, o importante é que funcionou kkk' obrigado, agora entendi a lógica para fazer um exercício similar o/

Estranho, kleber10, deve ter feito alguma coisa de diferente. Por gentileza, poste o código completo para que eu possa dar uma olhada..

[]'s

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites


f <- 1
soma <- 0

para i de 1 ate 15 faca
f <- f * i
soma <- soma + f
escreval ("O fatorial de" , i, "! é:", f)
fimpara

escreval
escreval ("O somatório (1! + ... + 15!) é:", soma)

Ah sim, esqueci de avisar. O i - 1 mostra sim o valor 15!, mas como eu também preciso apresentar na tela de saída todos os fatoriais, coloquei o código dentro do looping, por isso tive de tirar o -1.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Ah sim, esqueci de avisar. O i - 1 mostra sim o valor 15!, mas como eu também preciso apresentar na tela de saída todos os fatoriais, coloquei o código dentro do looping, por isso tive de tirar o -1.

Exato. :D

Depois imaginei que fosse por essa razão mesmo... ;):joia:

Um abraço,

LNW

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  





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

×