Ahora el factorial con while, wend.

Iniciado por TiT@n, 9 Diciembre 2006, 15:42 PM

0 Miembros y 1 Visitante están viendo este tema.

TiT@n

Ola de nuevo.
Pues ahora estaba haciendo el factorial de un numero.
El factorial de un numero es el resultado de multiplicar ese numero por el mismo menos 1, es decir.
Factorial de 6 = 6*5*4*3*2*1 = 720
Creo que con el do loop sabria hacerlo, pero con el while wend me da error 6 o el pograma nunca acaba
Os pongo el code que he hecho:

Citar
Private Sub Command1_Click()

Dim o As Byte
Dim p As Byte
p = Text1.Text
Label2.Caption = ""
While p > 0
o = p - 1
Label2.Caption = Label2.Caption & (p * o)
Wend

End Sub

Quisiera que al pulsar un boton, me mostrara en un label el factorial.

CeLaYa

creo que sería así:


Private Sub Command1_Click()

    Dim o() As Byte
    Dim p As Byte, fact As Long
    p = Text1.Text
    p = p + 1
    fact = 1
    Label1.Caption = ""
    ReDim o(0 To 0)
    While p > 1
        ReDim Preserve o(0 To UBound(o))
       
        o(UBound(o)) = p - 1
        Label1.Caption = Label1.Caption & o(UBound(o)) & vbCrLf
        fact = fact * o(UBound(o))
        p = p - 1
       
    Wend
    Label1.Caption = Label1.Caption & fact & vbCrLf
End Sub
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.

TiT@n

Pues si... eso es lo k keria, muchas gracias, ahora una cosita mas, sino te importa explicarme lo k es
Citar
ReDim Preserve
       
UBound

Gracias.
Saludos.

CeLaYa

====Redim====
Se utiliza en elnivel de procedimiento para reasignar espacio de almacenamiento paravariables de matriz dinámica.

Sintaxis

ReDim [Preserve] nombre_variable(subíndices) [As tipo] [, nombre_variable(subíndices) [As tipo]] . . .

La sintaxis de la instrucción ReDim consta de las siguientes partes:

Parte Descripción
Preserve Opcional.Palabra clave utilizada para conservar los datos de unamatriz existente cuando se cambia el tamaño de la última dimensión.
nombre_
variable Requerido. Nombre de la variable; sigue las convenciones estándar de nombre de variable.
subíndices Requerido. Dimensiones de una variable de matriz; se pueden declarar hasta 60 dimensiones múltiples. Elargumento subíndices utiliza la sintaxis siguiente:
[inferior To] superior [,[inferior To] superior] . . .

Cuando no se declara explícitamente en inferior, el límite inferior de una matriz se controla mediante la instrucción Option Base. El límite inferior es cero si no hay ninguna instrucción Option Base.

tipo Opcional.Tipo de datos de la variable; puede serByte,Boolean,Integer,Long,Currency,Single,Double,Decimal (no admitida actualmente),Date,String (para cadenas de longitud variable), String * length (para cadenas de longitud fija),Object,Variant, untipo definido por el usuario, o untipo de objeto. Utilice una cláusula As tipo distinta para cada variable que defina. Para una Variant que contiene una matriz, tipo describe el tipo de cada elemento de la matriz, pero no cambia la Variant a algún otro tipo.

Lainstrucción ReDim se utiliza para asignar o cambiar el tamaño de una matriz dinámica que ya se ha declarado formalmente mediante las instrucciones Private, Public o Dim con paréntesis vacíos (sin subíndices de dimensiones).

Puede utilizar la instrucción ReDim repetidamente para cambiar el número de elementos y dimensiones de una matriz. Sin embargo, no puede declarar una matriz de un tipo de datos y luego usar ReDim para cambiar la matriz a otro tipo de datos, a menos que la matriz esté contenida en una Variant. Si la matriz está contenida en una Variant, el tipo de los elementos se puede cambiar mediante una cláusula As tipo, a menos que esté utilizando la palabra clave Preserve, en cuyo caso no se permiten cambios al tipo de datos.

Si utiliza la palabra clave Preserve sólo puede cambiar el tamaño de la última dimensión de la matriz y no es posible cambiar el número de dimensiones. Por ejemplo, si la matriz sólo tiene una dimensión, puede cambiar el tamaño de esa dimensión porque es la última y única dimensión. Sin embargo, si la matriz tiene dos o más dimensiones, sólo puede cambiar la dimensión de la última y todavía conservar el contenido de la matriz. El ejemplo siguiente muestra cómo puede aumentar el tamaño de la última dimensión de una matriz dinámica sin borrar ninguno de los datos existentes contenidos en la matriz.

ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)

De modo parecido, cuando utiliza el argumento Preserve puede cambiar el tamaño de la matriz sólo cambiando el límite superior; cambiar el límite inferior produce un error.

Si hace que una matriz sea más pequeña de lo que era, perderá los datos de los elementos eliminados. Si transfiere una matriz a un procedimiento por referencia, no puede cambiar el tamaño de la matriz dentro del procedimiento.

Cuando se inicializan las variables, una variable numérica se inicializa a 0, una cadena de longitud variable se inicializa a una cadena de longitud cero ("") y una cadena de longitud fija se rellena con ceros. Las variables Variant se inicializan aEmpty. Cada elemento de una variable de un tipo definido por el usuario se inicializa como si fuera una variable distinta. A una variable que se refiere a un objeto se le debe asignar un objeto existente mediante la instrucción Set antes de que se pueda usar. Hasta que se asigna a un objeto, lavariable de objeto declarada tiene el valor especial Nothing, el cual indica que no se refiere a ninguna instancia en particular de un objeto.

Precaución   La instrucción ReDim actúa como una instrucción declarativa si la variable que declara no existe en elnivel de módulo onivel de procedimiento. Si más tarde crea otra variable con el mismo nombre, incluso con unalcance mayor, ReDim hará referencia a la creada más tarde y no causará necesariamente un error de compilación, incluso aunque Option Explicit esté en efecto. Para evitar estos conflictos, ReDim no se debe utilizar como una instrucción declarativa, sino sólo para cambiar el tamaño de las matrices.

Nota   Para cambiar el tamaño de una matriz contenida en una Variant, debe declarar explícitamente la variable Variant antes de intentar cambiar el tamaño de su matriz.


====Ubound====
Devuelve un tipoLong que contiene el mayor subíndice disponible para la dimensión indicada de unamatriz.

Sintaxis

UBound(nombre_matriz[, dimensión])

La sintaxis de la función UBound consta de las siguientes partes:

Parte Descripción
nombre_
matriz Requerido. Nombre de lavariable de matriz; sigue las convenciones estándar de nombres de variable.
dimensión Opcional; Variant (Long). Número entero que indica la dimensión cuyo límite superior se devolverá. Use 1 para la primera dimensión, 2 para la segunda y así sucesivamente. Si dimensión se omite, se supone que es 1.


Comentarios

La función UBound se utiliza junto con la función LBound para determinar el tamaño de una matriz. Use la función LBound para encontrar el límite inferior de la dimensión de una matriz.

UBound devuelve los valores enumerados en la tabla siguiente para una matriz con las dimensiones siguientes:

Dim A(1 To 100, 0 To 3, -3 To 4)

Instrucción Valor devuelto
UBound(A, 1) 100
UBound(A, 2) 3
UBound(A, 3) 4


-----------------------------------------------------------------------------------
Nota:  Esto lo saque de la ayuda del VB
"La soledad es el elemento de los grandes talentos".
Cristina de Suecia (1626-1689) Reina de Suecia.