bueno andaba aburrido e hice el codigo para generar el triangulo de pascal
se nesesitan
2 textBox (textbox 2 en propiedad multilinea = true)
1 CommandButton
'
' ////////////////////////////////////////////////////////////////
' // Autor: BlackZeroX ( Ortega Avila Miguel Angel ) //
' // //
' // Web: http://InfrAngeluX.Sytes.Net/ //
' // //
' // |-> Pueden Distribuir Este Codigo siempre y cuando //
' // no se eliminen los creditos originales de este codigo //
' // No importando que sea modificado/editado o engrandesido //
' // o achicado, si es en base a este codigo //
' ////////////////////////////////////////////////////////////////
Option Explicit
Public Function GenerateTrianglePascal(ByVal nLineas As Long) As String
On Error GoTo 1
Dim a As Long
Dim b As Long
Dim CelVar() As Double
If nLineas > 0 Then
ReDim CelVar(nLineas, nLineas)
For a = 1 To nLineas
For b = 1 To a: DoEvents
CelVar(a, b) = Val(IIf(b = 1, 1, Val(CelVar(a - 1, b - 1)) + Val(CelVar(a - 1, b))))
GenerateTrianglePascal = GenerateTrianglePascal & CelVar(a, b) & IIf(Not b = a, String(3, " "), "")
Next b
If a <> nLineas Then GenerateTrianglePascal = GenerateTrianglePascal & vbCrLf
Next a
1: Erase CelVar
End If
End Function
Private Sub Form_Load()
Text2.Alignment = 2 ' // Modo centralizado
End Sub
Private Sub Command1_Click()
Text2.Text = GenerateTrianglePascal(Val(Text1.Text))
End Sub
con dowhile y doevents
'
' ////////////////////////////////////////////////////////////////
' // Autor: BlackZeroX ( Ortega Avila Miguel Angel ) //
' // //
' // Web: http://InfrAngeluX.Sytes.Net/ //
' // //
' // |-> Pueden Distribuir Este Codigo siempre y cuando //
' // no se eliminen los creditos originales de este codigo //
' // No importando que sea modificado/editado o engrandesido //
' // o achicado, si es en base a este codigo //
' ////////////////////////////////////////////////////////////////
Option Explicit
Public Function GenerateTrianglePascal(ByVal nLineas As Long) As String
On Error GoTo 1
Dim a As Long
Dim b As Long
Dim CelVar() As Double
If nLineas > 0 Then
ReDim CelVar(nLineas, nLineas)
a = 1: Do While a <= nLineas
b = 1: Do While b <= a: DoEvents
CelVar(a, b) = Val(IIf(b = 1, 1, Val(CelVar(a - 1, b - 1)) + Val(CelVar(a - 1, b))))
GenerateTrianglePascal = GenerateTrianglePascal & CelVar(a, b) & IIf(Not b = a, String(2, " "), "")
b = b + 1: Loop
If a <> nLineas Then GenerateTrianglePascal = GenerateTrianglePascal & vbCrLf
a = a + 1: Loop
1: Erase CelVar
End If
End Function
Private Sub Form_Load()
Text2.Alignment = 2 ' // Modo centralizado
End Sub
Private Sub Command1_Click()
Text2.Text = GenerateTrianglePascal(Val(Text1.Text))
End Sub
Código ligeramente mejorado ya se se queda tanto tiempo muerto!¡.
'
' ////////////////////////////////////////////////////////////////
' // Autor: BlackZeroX ( Ortega Avila Miguel Angel ) //
' // //
' // Web: http://InfrAngeluX.Sytes.Net/ //
' // //
' // |-> Pueden Distribuir Este Codigo siempre y cuando //
' // no se eliminen los creditos originales de este codigo //
' // No importando que sea modificado/editado o engrandesido //
' // o achicado, si es en base a este codigo //
' ////////////////////////////////////////////////////////////////
Option Explicit
Public Sub GenerateTrianglePascal(ByVal nLineas As Long, ByRef OutData As String)
'On Error GoTo 1
Dim a As Long
Dim b As Long
Dim Puntero As Long
Dim Longitud As Long
Dim Temporal As String
Dim CelVar() As Double
Dim OutDataTemp As String
Const KiloByte As Long = 5120
If nLineas > 0 Then
ReDim CelVar(nLineas, nLineas)
Puntero = 1
OutDataTemp = Space(KiloByte)
Temporal = Space(255)
For a = 1 To nLineas
For b = 1 To a: DoEvents
CelVar(a, b) = Val(IIf(b = 1, 1, Val(CelVar(a - 1, b - 1)) + Val(CelVar(a - 1, b))))
Temporal = CelVar(a, b) & IIf(a <> b, " ", "")
Longitud = Len(Temporal)
Mid(OutDataTemp, Puntero, Longitud) = Temporal
Puntero = Puntero + Longitud
If Puntero > KiloByte Then
OutData = OutData & OutDataTemp
OutDataTemp = Space(KiloByte)
Puntero = 2
End If
Next b
If a <> nLineas Then
Puntero = Puntero
Mid(OutDataTemp, Puntero, 2) = vbCrLf
Puntero = Puntero + 2
End If
Caption = a
Next a
1: Erase CelVar
End If
OutData = OutData & Trim$(OutDataTemp)
End Sub
Private Sub Form_Load()
Text2.Alignment = 2 ' // Modo centralizado
End Sub
Private Sub Command1_Click()
Dim datas As String
Call GenerateTrianglePascal(Val(Text1.Text), datas)
Text2.Text = datas
End Sub
la longitud de los números esta limitada por el buffer que solo le asigne 255 caracteres.
El limite de lineas es de 932 si es que no se aumentan los buffers de memoria
P.D.: El código en lugar de hacerle un redim a celvar(x,x) puede hacerse de esta forma Celver(1,x) pero decidí dejar los registros anteriores por si alguien deseaba hacerles cambios aun que de esta forma en la que lo deje gasta mas memoria ram en el modo celvar(1,x) no gastaría tanta pero tendría que estarse usando copymemori (API) para mover el de 1 a 0 y sacar los nuevos valores.
Dulces Lunas!¡
El triángulo de Pascal en matemáticas es un conjunto infinito de números enteros ordenados en forma de triángulo que expresan coeficientes binomiales. El interés del Triángulo de Pascal radica en su aplicación en álgebra y permite calcular de forma sencilla números combinatorios lo que sirve para aplicar el binomio de Newton.
También es conocido como Triángulo de Tartaglia. En países orientales como China, India o Persia, este triángulo se conocía y fue estudiado por matemáticos como Al-Karaji, cinco siglos antes de que Pascal expusiera sus aplicaciones. En China es conocido como Triángulo de Yanghui. (Wikipedia)
Lo probe, le puse el numero 500 en el text1 y se me colgo la maquina jajaja :P
ponle un DoEvents en los for next asi no se traba
en el post principal puse un código pero con do while
Dulces lunas!¡.
otra cosa que se podria mejorar es sacarle el IIf en los bucles largos, aunque no lo crean, el IIf es mas lento que los if comunes ;D...
Bueno lo he arreglado para que no se quede parado tanto tiempo, el código esta en el primer post es el 3er código!¡.
Dulces Lunas1¡.
Ahora si mucho mejor ;D
Ahora bien...que pasaria si hacemos la inversa ? :P
Weeee, eso mismo lo había dejado hace un par de días pero en python (https://foro.elhacker.net/scripting/calculador_de_binomio_de_newton_python-t279500.0.html;msg1376556#msg1376556), no me había planetado hacerlo en VB :P
Urbe Tecnologica, a que le llamas "la inversa"?
Cita de: Novlucker en 5 Enero 2010, 18:28 PM
Weeee, eso mismo lo había dejado hace un par de días pero en python (https://foro.elhacker.net/scripting/calculador_de_binomio_de_newton_python-t279500.0.html;msg1376556#msg1376556), no me había planetado hacerlo en VB :P
Urbe Tecnologica, a que le llamas "la inversa"?
yo vi un reto en indetectables.net y por aburrimiento lo hize ahora busco el tipo me interesa python xP
Dulces Lunas!¡
Cita de: Urbe Tecnologica en 5 Enero 2010, 18:15 PM
Ahora si mucho mejor ;D
Ahora bien...que pasaria si hacemos la inversa ? :P
Pues tendría que llegar a 1 no ¬¬"
Dulces Lunas!¡
Puede ser .. el problema con eso sería que tendrías que partir de un nivel del triángulo dado, así que sería necesario ingresar por parámetros dicho nivel, y no hay seguridad de que sea correcto :-\
Saludos
Cita de: Novlucker en 5 Enero 2010, 18:28 PM
Weeee, eso mismo lo había dejado hace un par de días pero en python (https://foro.elhacker.net/scripting/calculador_de_binomio_de_newton_python-t279500.0.html;msg1376556#msg1376556), no me había planetado hacerlo en VB :P
Urbe Tecnologica, a que le llamas "la inversa"?
Se refiere a la función inversa, toda función inyectivas y suryectiva a la vez tiene su inversa y esta lo es, pero no tendría gracia por que con tan solo contar cuantas lineas tiene el triangulo se obtiene lo que se puso en el TextBox1 sin necesidad de hacer el mismo algoritmos "al revés" . :rolleyes:
;-)
que grosso este foro... C@rajo!
P/D: BlackZero cambiaste la foto :o
Citarpero no tendría gracia por que con tan solo contar cuantas lineas tiene el triangulo se obtiene lo que se puso en el TextBox1 sin necesidad de hacer el mismo algoritmos "al revés" .
Por eso lo decía :P
Volviendo al principio y por curiosidad, no debería de tomar tanto para llegar al nivel 500, pero de cualquier manera los números son bestiales XD
Aquí el archivo con el nivel 499 (partiendo de cero)
http://www.mediafire.com/download.php?mnyezzjwmzf
Y aquí solamente dos de los 500 números que hay en ese nível :o
Citar22336535121085766956818730762096415097216293864759715541263605200416160575240464416895329970392030532143764893308687016176318630514889884152983461922, 19649433151631840104870612775678801250934634452457794874645427131193163814309280727644763958916297535795642800880574292425784058422873055984203496578
Saludos
Cita de: Urbe Tecnologica en 6 Enero 2010, 00:40 AM
;-)
que grosso este foro... C@rajo!
P/D: BlackZero cambiaste la foto :o
Cuantas veces lo tendré que decir es BlackZeroX no BlackZero
siempre se cambia la foto según la cambie en el msn es decir la que ves en el foro es la misma de mi msn xP
@Novlucker
Volviendo al principio y por curiosidad, no debería de tomar tanto para llegar al nivel 500, pero de cualquier manera los números son bestiales XD
Es por los números y creo que por otra cosilla pero igual lo reviso después Xao a y la longitud de los números esta limitada por el buffer que solo le asigne 255 caracteres
El limite de lineas es de 932 si es que no se aumentan los buffers de memoriaDulces Lunas!¡