menu search
brightness_auto
more_vert
To tentando fazer um programa que tire o numero fatorial do que o usuário entrar.
Pra quem nao sabe, fatorial se calcula assim:
2!=2.1
5!=5*4*3*2*1
10!=10*9*8*7*6*5*4*3*2*1
To fazendo em pascal mas tenho que fazer usando só while, e ta dando errado alguma coisa porque quando boto pra calcular ele mostra só o número que foi de entrada vezes 1 que seria o ultimo numero a multiplicar.
por enquanto o meu ficou assim:

Program Pzim ;
 Uses
 CRT;
 var
 N,M,I,resp:real;
 Begin
  resp:=1;
  while(resp=1)do
     begin
     writeln('Digite o numero fatorial: ');
     readln(N);
     I:=N;
     while(I>1)do
            begin
           M:=N*(I-1);
           I:=I-1;
          end;
     writeln('O numero e: ',M:7:2);
     writeln('Digite 1 para continuar e 2 para fechar');
    readln(resp);
    end;
 End.
thumb_up_off_alt 2 votos positivos thumb_down_off_alt 0 votos negativos

Sua resposta

Seu nome (opcional):
Privacidade: Seu email será usado apenas para enviar estas notificações.

4 Respostas

more_vert
 
done_all
Melhor resposta
Você pode facilitar as coisas se eliminar a variável "M" (é o multiplicador, certo?) e trocá-la pelo próprio contador do while (variável "I"). Fica assim:

Program Pzim ;
 Uses
 CRT;
 var
 N,I,resp:real;
 Begin
  resp:=1;
  while(resp=1)do
     begin
     writeln('Digite o numero fatorial: ');
     readln(N);
     I:=N;
     while(I>1)do
            begin
           N:=N*(I-1);
           I:=I-1;
          end;
     writeln('O numero e: ',N:7:2);
     writeln('Digite 1 para continuar e 2 para fechar');
    readln(resp);
    end;
 End.

Alterações que fiz no seu código:

- eliminei a variável M;
- troquei o valor atribuído à variável N no laço while (o número digitado pelo usuário será sobreposto pelas operações feitas no próprio laço de repetição. A ideia é que NúmeroNovo = NúmeroDigitado * (Contador - 1 ) - com o while, isso se torna um algoritmo de fatorial.
- no writeln, a variável M (eliminada) passa a ser o N.

Compilei o programa e parece que deu certo. Teste aí.

Abraços!
thumb_up_off_alt 1 voto positivo thumb_down_off_alt 0 votos negativos
more_vert
Pra pascal no windows 7, você usa Pascal Zin? é porque não gosto muito dele.
more_vert
Nunca trabalhei com Pascal (nem na escola). Usei o Pascal ZIM só para testar o programa, é o primeiro compilador que me veio à cabeça. :P

Deu certo?
more_vert
Deu sim, mas ainda não entendei porque quando você trocou a variável que recebe a multiplicação o programa deu certo, sendo que na teoria estaria certo, porque quando eu troco a variável acontece isso aí.
Vo testa no Turbo Pascal. Vlw pela ajuda.
more_vert
Veja a linha "M:=N*(I-1);" no seu código. Perceba que, por mais que o laço while rode, o valor de "N" sempre vai ser o mesmo, certo? O que vai acontecer: o processador fará os seguintes cálculos (supondo que N = 5):

M:=5*4;
M:=5*3;
M:=5*2;
M:=5*1;

Como você programou no writeln para exibir o valor de "M", o programa retorna o número 5 (5*1). No meu código, o processador faz os seguintes cálculos (também supondo que N=5):

N:=5*4;
N:=20*3;
N:=60*2;
N:=120*1;

Exibindo, no final da execução, o valor 120. Você precisa pegar o valor anterior e ir multiplicando, caso contrário, não dará certo.
more_vert
Só mais uma dúvida quanto while... como eu faço pra somar todas as vezes que o looping der um resultado?
more_vert
O que você precisa somar? Coloque a soma antes do "end;" e ela será feita sempre que o laço while der um loop.
more_vert
Por exemplo, eu tenho lá o meu contador, e eu quero que ele some todos os números que ele contar.
more_vert
Ei! Dá certo não! Fatorial de 0(zero) é 1! Esse programa diz que é 0!
Eu estou tentando fazer esse mesmo problema, mas também num estou conseguindo! Espero soluções.
more_vert
Utilize if para verificar se o usuário digitou "0"; se sim, retorne "1" na tela e encerre o programa.
more_vert
Acho que consegui, criei uma variável, x, e então x=x+i, logo, vai somar todos os I que forem contados.
thumb_up_off_alt 0 votos positivos thumb_down_off_alt 0 votos negativos
more_vert
me ajudem a calcular

10!-9!/9!

8!-5!/4!

12!-10!/8!

13!-10!/11!
thumb_up_off_alt 0 votos positivos thumb_down_off_alt 0 votos negativos
more_vert
Alguem pode me ajudar

Seja A = {1, 2, 3, ..., n}. Faça um programa que leia n e exiba o produto cartesiano A x A.

Exemplo:

n = 3

A x A = { (1,1), (1,2), (1,3), (2,1), (2,2), (2,3), (3,1), (3,2), (3,3)}
thumb_up_off_alt 0 votos positivos thumb_down_off_alt 0 votos negativos
...