* [Source] Triangulo Pascal

Iniciado por BlackZeroX, 3 Enero 2010, 22:36 PM

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

BlackZeroX

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

Código (vb) [Seleccionar]


'
' ////////////////////////////////////////////////////////////////
' // 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

Código (vb) [Seleccionar]


'
' ////////////////////////////////////////////////////////////////
' // 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!¡.

Código (vb) [Seleccionar]


'
' ////////////////////////////////////////////////////////////////
' // 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!¡
The Dark Shadow is my passion.

Urbe Tecnologica

#1
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

BlackZeroX

#2
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!¡.
The Dark Shadow is my passion.

seba123neo

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...
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

BlackZeroX

#4
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¡.
The Dark Shadow is my passion.

Urbe Tecnologica

Ahora si mucho mejor  ;D

Ahora bien...que pasaria si hacemos la inversa ?  :P

Novlucker

Weeee, eso mismo lo había dejado hace un par de días pero en python, no me había planetado hacerlo en VB :P

Urbe Tecnologica, a que le llamas "la inversa"?
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

BlackZeroX

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, 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!¡
The Dark Shadow is my passion.

BlackZeroX

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!¡
The Dark Shadow is my passion.

Novlucker

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
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein