Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: XVICT0RX en 28 Enero 2013, 22:18 pm



Título: Visual Basic
Publicado por: XVICT0RX en 28 Enero 2013, 22:18 pm
Ingresar un número distinto de cero. Calcular su factorial. Nota: factorial de 5 = 5 x 4 x 3 x 2 x 1 = 120 :huh:


Título: Re: Visual Basic
Publicado por: MCKSys Argentina en 28 Enero 2013, 22:43 pm
Y el código que tienes hasta ahora es.... ?

PD: Te informo que aquí no hacen tareas.  :)


Título: Re: Visual Basic
Publicado por: Danyfirex en 28 Enero 2013, 22:55 pm
si sabes hacer un for.


solo tienes que multiplicar el valor en cada repetición del for con el anterior.



Título: Re: Visual Basic
Publicado por: XVICT0RX en 28 Enero 2013, 22:56 pm
este es el codigo k tengo pero esta mal... y no c kmo hacer para k me aparezca eso...
Código
  1. Dim num As Integer
  2. Dim fact As Integer
  3.  
  4. Private Sub Command1_Click()
  5. Text1.Text = ""
  6. Text2.Text = ""
  7. Text1.Text.SetFocus
  8. End Sub
  9.  
  10. Private Sub Command2_Click()
  11.    fact = 1
  12.    num = Text1.Text
  13.  
  14.    While num <> 0
  15.        fact = fact * num
  16.        num = num - 1
  17.    Wend
  18.  
  19.    Text2.Text = fact
  20.    Me.Text1.Enabled = False
  21.    Me.Text2.Enabled = False
  22. End Sub
  23.  
  24. Private Sub Command3_Click()
  25. End
  26. End Sub
  27.  


Título: Re: Visual Basic
Publicado por: Danyfirex en 28 Enero 2013, 23:05 pm
Puedes hacer algo tan simple como esto.

Código
  1. Dim i As Integer
  2. Dim x As Integer
  3. Dim n As Integer
  4.  
  5. x = 1
  6. n = 5
  7. If n <> 0 Then
  8.  For i = 1 To n
  9.    x = x * i
  10.  Next
  11. End If
  12.  
  13. MsgBox x


Título: Re: Visual Basic
Publicado por: XVICT0RX en 28 Enero 2013, 23:10 pm
gracias


Título: Re: Visual Basic
Publicado por: Danyfirex en 28 Enero 2013, 23:12 pm
Obviamente no funciona para números negativos. :) tienes que retocarlo.  :laugh:


Título: Re: Visual Basic
Publicado por: MCKSys Argentina en 28 Enero 2013, 23:15 pm
Tambien puedes hacer una función que se encargue de calcular el factorial de un numero cualquiera.
En este ejemplo está definida en forma recursiva:

Código
  1. Function Factorial (n as long) as long
  2. if n = 1 then
  3.    Factorial = 1
  4. else
  5.    Factorial = n * Factorial(n-1)
  6. end if
  7. end function
  8.  
  9. Private Sub Command1_Click()
  10. Text1.Text = ""
  11. Text2.Text = ""
  12. Text1.Text.SetFocus
  13. End Sub
  14.  
  15. Private Sub Command2_Click()
  16.    'fact = 1
  17.    'num = Text1.Text
  18.    'While num <> 0
  19.    '    fact = fact * num
  20.    '    num = num - 1
  21.    'Wend
  22.  
  23.    'Text2.Text = fact
  24.    if isnumeric(Text1.Text) then
  25.        Text2.Text = Factorial(clng(Text1.Text)) 'si Text1 no tiene un numero, se generará un error, por eso usamos isnumeric antes
  26.        Me.Text1.Enabled = False
  27.        Me.Text2.Enabled = False
  28.    else
  29.        msgbox "Ingrese un numero!"
  30.        text1.setfocus
  31.    endif
  32. End Sub
  33.  
  34. Private Sub Command3_Click()
  35. End
  36. End Sub
  37.  


Título: Re: Visual Basic
Publicado por: Danyfirex en 28 Enero 2013, 23:18 pm
@MCKSys Argentina

o simplemente aplicar valor absoluto a n. ya que  es igual 3*2*1 que -3*-2*-1.

Código
  1. Dim i As Integer
  2. Dim x As Integer
  3. Dim n As Integer
  4.  
  5. x = 1
  6. n = -5
  7. If n <> 0 Then
  8.  For i = 1 To Abs(n)
  9.    x = x * i
  10.  Next
  11. End If

saludos


Título: Re: Visual Basic
Publicado por: MCKSys Argentina en 28 Enero 2013, 23:25 pm
@MCKSys Argentina

o simplemente aplicar valor absoluto a n. ya que  es igual 3*2*1 que -3*-2*-1.

Claro.

Mi idea no era corregir (ni nada por el estilo), sino mostrar un poco de programacion modular basica.  ;)


Título: Re: Visual Basic
Publicado por: Danyfirex en 28 Enero 2013, 23:29 pm
Claro.

Mi idea no era corregir (ni nada por el estilo), sino mostrar un poco de programacion modular basica.  ;)

Si seguro. Aunque te pinta mejor lo avanzado  ;)

saludos Capo.


Título: Re: Visual Basic
Publicado por: $Edu$ en 28 Enero 2013, 23:46 pm
3*2*1 != -3*-2*-1
6 != -6

Pero la solucion es tan facil como poner (-n)! = n! * (-1)^n  aunque en realidad segun la definicion el factorial de un numero negativo no es posible.


Título: Re: Visual Basic
Publicado por: Danyfirex en 28 Enero 2013, 23:49 pm
3*2*1 != -3*-2*-1
6 != -6

Pero la solucion es tan facil como poner (-n)! = n! * (-1)^n  aunque en realidad segun la definicion el factorial de un numero negativo no es posible.

ups quise decir igual a  3*2*1 = ABS(-3*-2*-1)


y si no se puede de negativos sera mientras sea >0.

saludos gracias por la corrección.