[duvida] Fatorial

Started by Anonymous, 04 de October , 2006, 05:39:27 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Anonymous

entaum galera do darkers...

como consegui ver qui uma calculadora cientifica, fazendo um calculo (Fatorial) se colocarmos por exemplo o numero 80, a calculadora cientifica, naum consegue entregar o valor ela dá erro...

ai decidi testar em ium computador na qual, possui mais memoria, e menas possibilidade de dar erro,

só qui em VB, na criação, vi qui tbm deu erro....

vou executar o programa, e digito o numero 30, e para me trazer o valor fatorial, ai da ((overflow))

e eu naum entendo porq ele da esso erro, tanto na calculadora, quanto a um programa em VB




(a codificação do progrma está Bem simples, porem faz os calculos certinhus, mais quando os numeros se elevam muito ele naum aguenta, alguem poderia me ajudar, no que implementar a mais, para qui ela suporte numeros mais altos ??

valew galera do darkers!

até ++


ai vai o codigo fonte qui eu estou usando ::



Private Sub CMCLIMPAR_Click()
  TXTNUM.Text = ""
  LBLRESPOSTA.Caption = ""
  LBLFATORIAL.Caption = ""
  TXTNUM.SetFocus
End Sub

Private Sub CMDCALCULAR_Click()
 Dim VALOR, CONT As Integer
 Dim TOTAL As Currency
 TOTAL = 1
 VALOR = Val(TXTNUM.Text)
If VALOR = 0 Then
 LBLRESPOSTA.Caption = ""
 LBLFATORIAL.Caption = ""
 MsgBox "zero é um número inválido", vbExclamation
Else
 For CONT = 1 To VALOR
  TOTAL = TOTAL * CONT
 Next CONT
  LBLFATORIAL.Caption = Str$(VALOR) + "!"
  LBLRESPOSTA.Caption = Str$(TOTAL)
 End If
 
End Sub

Private Sub CMDSAIR_Click()
If MsgBox("Deseja realmente Sair?", vbYesNo, "encerrar") = vbYes Then
End
End If
End Sub

nibbles

Primeiro de tudo, não existe "menas", anta.
huahuahauhuahua
Agora a resposta... é normal acontecer isso mesmo cara... acontece que o fatorial de 30 é um número gigantesco e a variável não suporta armazená-lo... não manjo de VB , a dica que posso te dar é procurar tipos de variáveis maiores...



"A diversão do inteligente é se fingir de burro para aquele que se finge de inteligente."
"ENGENHARIA SOCIAL. Porque não existe patch para a ignorância humana."

Anonymous

hum...

naum existe (menas)

agora um erro de digitação, e vc ja vem querer dar uma de ser o bom...

e que o fatorial de 30 é um numero giganteso eu sei, porem por isso qui eu estou querendo alguma maneira de fazer com que ele calcule numeros altos, pois já vi, progrgamas escritos em delphi qui calculam até 3000 e alguuma coisa!!

faolows

vuln

É o seguinte, meu amigo. C é uma Linguagem a qual existem diversas variáveis diferentes, onde cada uma tem sua característica que lhe beneficia em alguns casos. Porém, aqui é VB. Não sei se VB tem tipos de variáveis long ou decimais como em C mas vou tentar dar uma nova saída. Você não precisa armazenar tudo na sua memória. Um dos meios que vejo é jogar o fluxo de dados gigantesco de cálculos pro stderr ou qualquer outra saida de dados. No Linux eu daria o exemplo de >> /dev/null. Não sei em VB, mas C podemos através da "," especificar o número de casas decimais que uma variável deve armazenar. Logo, se temos uma dízima não periódica 1,4579784447787414 poderiamos escolher apenas 4 casas decimais após a vírgula, resumindo apenas 1,4579.

Espero ter ajudado, se não pelo ou menos agradeça a força de vontade ;). Não entendo muito de VB o que complica as coisas.

Abraços
"O amor por princípio, a Ordem por base, o progresso por objetivo."

Dkid

Boas... nao sei se voce sabe.. mas o factorial de zero é 1... logo voce ja esta falhando ao dizer que o ZERO é um numero invalido para factorial... confira na calculadora do windows se tiver duvidas

Dkid

Dkid

E agora a sua resposta

Para declarar uma variavel maior basta voce a declarar como LONG (long integer) que vai desde  –2,147,483,648 e 2,147,483,642.

portanto.. so tem de substituir INTENGER POR LONG

espero ter ajudado

Dkid

Anonymous

^^

desculpas dkid...eh ke eu naum tinha mais frequentado este topicoo...

mais somente aterando o tipo de variavel naum eh suficiente...pois ja tentei isso a um bom tempo atrais... ^^

e quando chega em uim valor naum taum alto...ele continua no overflow... ^^

bye

rog

eu nao entende vb mas em geral um overflow e porque a allocaçao do espaço memoria nao reservou um espaço sufficiente

isso pode desrespeitar o typo de variavel como o espaço reservado na pilha para a funçao etc...

rog
realty.sys is corrupt :  reboot the universe (Y/N)