Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: matoreggae en 15 Julio 2007, 17:35 pm



Título: crear grafos en visual
Publicado por: matoreggae en 15 Julio 2007, 17:35 pm
necesito crear un grafo en visual y no tengo ni idea tengo algo de codigo hecho


Título: Re: craea
Publicado por: MANULOMM en 15 Julio 2007, 21:18 pm
se un poco más explicito, muestranos tu code...

Atentamente,


Juan Manuel Lombana
Medellín - Colombia


Título: Re: craea
Publicado por: matoreggae en 15 Julio 2007, 22:34 pm
Este es el codigo del formulario

Código
  1. Option Explicit
  2. Const Nulo = 0    '' Posicion NO Valida de la Lista
  3. Dim L       As New Listas
  4. Dim P       As New Pilas
  5. Dim C       As New Colas
  6. Dim G       As New Grafos
  7.  
  8. Private Sub cmd_apilar_Click()
  9.  
  10.    Dim X       As Variant
  11.  
  12.    Randomize
  13.  
  14.    While Not P.EstaLlena
  15.        X = Int(Rnd(100) * 100)
  16.        P.Apilar X
  17.    Wend
  18.  
  19. End Sub
  20.  
  21. Private Sub cmd_eliminar_Click()
  22.  
  23.    Dim Q       As Long
  24.    Dim X       As Variant
  25.  
  26.    X = CLng(InputBox("Ingresar Dato a Eliminar", "Ingresar Datos", ""))
  27.  
  28.    Q = L.Buscar(X)
  29.  
  30.    If Q <> Nulo Then
  31.        L.Eliminar (Q)
  32.    Else
  33.        MsgBox "Elemento No Encontrado"
  34.    End If
  35.  
  36. End Sub
  37.  
  38. Private Sub cmd_encolar_Click()
  39.  
  40.    Dim X       As Variant
  41.  
  42.    Randomize
  43.  
  44.    While Not C.EstaLlena
  45.        X = Int(Rnd(100) * 100)
  46.        C.Encolar X
  47.    Wend
  48.  
  49. End Sub
  50.  
  51. Private Sub cmd_listar_Click()
  52.  
  53.    Dim Q       As Long
  54.    Dim X       As Variant
  55.  
  56.    List1.Clear
  57.    Q = L.Inicio
  58.  
  59.    While Q <> Nulo
  60.        X = L.Recuperar(Q)
  61.        List1.AddItem X
  62.        Q = L.Siguiente(Q)
  63.    Wend
  64.  
  65. End Sub
  66.  
  67. Private Sub cmd_mostrar_cola_Click()
  68.  
  69.    Dim X       As Variant
  70.    Dim li      As Integer
  71.  
  72.    li = 0
  73.    List1.Clear
  74.    While Not C.EstaVacia
  75.        X = C.Recuperar
  76.        li = li + 1
  77.        List1.AddItem "Pos(" & li & ") = " & X
  78.        C.DesEncolar
  79.    Wend
  80.  
  81. End Sub
  82.  
  83. Private Sub cmd_mostrar_pila_Click()
  84.  
  85.    Dim X       As Variant
  86.  
  87.    List1.Clear
  88.    While Not P.EstaVacia
  89.        X = P.Recuperar
  90.        List1.AddItem X
  91.        P.DesApilar
  92.    Wend
  93.  
  94. End Sub
  95.  
  96. Private Sub cmd_test_Click()
  97.  
  98.    Dim X       As Variant
  99.  
  100.    Randomize
  101.    X = Int(Rnd(100) * 100)
  102.    If L.Agregar(X) = False Then
  103.        MsgBox "Error al Agregar en la Lista"
  104.    End If
  105.  
  106. End Sub
  107.  
  108. Private Sub cmdcreargrafo_Click()
  109.    Dim V As Variant
  110.    Dim V2 As Variant
  111.    Dim Varco As Variant
  112.  
  113.    V = "A"
  114.    G.AgregarVertice (V)
  115.    V = "B"
  116.    G.AgregarVertice (V)
  117.    V = "C"
  118.    G.AgregarVertice (V)
  119.    V = "D"
  120.    G.AgregarVertice (V)
  121.  
  122.    Varco = 1
  123.    V = "A"
  124.    V2 = "B"
  125.    If G.AgregarArco(V, V2, Varco) = False Then
  126.    End If
  127.  
  128.    V = "B"
  129.    V2 = "D"
  130.    If G.AgregarArco(V, V2, Varco) = False Then
  131.    End If
  132.  
  133.    V = "D"
  134.    V2 = "C"
  135.    If G.AgregarArco(V, V2, Varco) = False Then
  136.    End If
  137.  
  138.    List1.Clear
  139.    List1.AddItem G.RetornarVertices
  140.    List1.AddItem G.RetornarArcos
  141.  
  142. End Sub
  143.  
  144. Private Sub cmdrecorridoanchura_Click()
  145.  
  146.    List1.AddItem G.RecorridoAnchura("A")
  147.  
  148. End Sub
  149.  
  150. Private Sub cmdrecorridoprof_Click()
  151.  
  152.    List1.AddItem G.RecorridoProfundidad("A")
  153.  
  154. End Sub
  155.  
  156. Private Sub Form_Load()
  157.  
  158.    L.CrearVacia
  159.    P.CrearVacia
  160.    C.CrearVacia
  161.    G.CrearVacio
  162.  
  163. End Sub


Y este es el del modulo de clase

Código
  1. Option Explicit   '' Obliga a definir todos las variables
  2. Option Base 1     '' Para obligar a que los array funcionen de 1-N
  3.  
  4. Const MIN = 1     '' Elemento Minimo del Array
  5. Const MAX = 100   '' Elemento Maximo del Array
  6. Const Nulo = 0    '' Posicion NO Valida de la Lista
  7.  
  8. Dim Vertices(MAX) As Variant  '' Array donde se guardan los elementos
  9. Dim Arcos(MAX, MAX) As Integer
  10.  
  11. Public NroVertices  As Integer  '' Maneja la Cantidad de Vertices que hay al momento en el grafo. maximo MAX = 100
  12.  
  13. Public Sub CrearVacio()
  14.    Dim i, j As Integer
  15.  
  16.  
  17.    NroVertices = 0  '' Indica que NO hay vertices
  18.  
  19.    '' Instancio cada casillero de la Matriz en Vacio
  20.    For i = 1 To MAX
  21.        For j = 1 To MAX
  22.            Arcos(i, j) = vbEmpty
  23.        Next
  24.    Next
  25. End Sub
  26.  
  27. Public Function EsVacio() As Boolean
  28.    EsVacio = IIf(NroVertices = 0, True, False)
  29. End Function
  30.  
  31. Public Function EsLleno() As Boolean
  32.    EsLleno = IIf(NroVertices = MAX, True, False)
  33. End Function
  34.  
  35. Public Function BuscarVertice(V As Variant) As Integer
  36.    Dim i As Integer
  37.  
  38.    BuscarVertice = Nulo
  39.    For i = 1 To NroVertices
  40.        If Vertices(i) = V Then
  41.            BuscarVertice = i
  42.            Exit For
  43.        End If
  44.    Next
  45. End Function
  46.  
  47. Public Function AgregarVertice(V As Variant) As Boolean
  48.  
  49.    If BuscarVertice(V) <> Nulo Then
  50.        AgregarVertice = False
  51.    Else
  52.        NroVertices = NroVertices + 1
  53.        Vertices(NroVertices) = V
  54.        AgregarVertice = True
  55.    End If
  56.  
  57. End Function
  58.  
  59. Public Function AgregarArco(V1, V2 As Variant, Varco As Variant, Optional ArcoBidireccional As Boolean = True) As Boolean
  60.    Dim i, j As Integer
  61.  
  62.    AgregarArco = False
  63.    If V1 <> V2 Then
  64.        i = BuscarVertice(V1)
  65.        j = BuscarVertice(V2)
  66.        If (i <> Nulo) And (j <> Nulo) Then
  67.            Arcos(i, j) = Varco
  68.            If ArcoBidireccional = True Then
  69.                Arcos(j, i) = Varco
  70.            End If
  71.            AgregarArco = True
  72.        End If
  73.    End If
  74. End Function
  75.  
  76. Public Function EliminarArco(V1, V2 As Variant, Optional ArcoBidireccional As Boolean = True) As Boolean
  77.    Dim i, j As Integer
  78.  
  79.    EliminarArco = False
  80.    If V1 <> V2 Then
  81.        i = BuscarVertice(V1)
  82.        j = BuscarVertice(V2)
  83.        If (i <> Nulo) And (j <> Nulo) Then
  84.            Arcos(i, j) = vbEmpty
  85.            If ArcoBidireccional = True Then
  86.                Arcos(j, i) = vbEmpty
  87.            End If
  88.            EliminarArco = True
  89.        End If
  90.    End If
  91. End Function
  92.  
  93. Public Function EliminarVertice(V As Variant) As Boolean
  94.    Dim i, j, k As Integer
  95.  
  96.    EliminarVertice = False
  97.    i = BuscarVertice(V)
  98.    If V <> Nulo Then
  99.        '' Primero Saco la Columna de la Matriz
  100.        For j = 1 To NroVertices
  101.            For k = i To NroVertices - 1
  102.                Arcos(j, k) = Arcos(j, k + 1)
  103.            Next
  104.        Next
  105.        '' Segundo saco la Fila de la matriz
  106.        For j = i To NroVertices - 1
  107.            For k = 1 To NroVertices - 1
  108.                Arcos(j, k) = Arcos(j + 1, k)
  109.            Next
  110.        Next
  111.        '' Saco el Vertice del vector de vertices
  112.        For j = i To NroVertices - 1
  113.            Vertices(j) = Vertices(j + 1)
  114.        Next
  115.        '' Por ultimo descuento 1 en la variable nrovertices
  116.        NroVertices = NroVertices - 1
  117.  
  118.        EliminarVertice = True
  119.    End If
  120. End Function
  121.  
  122. Public Function RetornarVertices() As String
  123.    Dim ll_i As Integer
  124.    Dim S As String
  125.  
  126.    RetornarVertices = ""
  127.    For ll_i = 1 To NroVertices
  128.        S = S & Vertices(ll_i) & ", "
  129.    Next
  130.    RetornarVertices = S
  131. End Function
  132.  
  133. Public Function RetornarArcos() As String
  134.    Dim ll_i As Integer
  135.    Dim ll_j As Integer
  136.    Dim S As String
  137.  
  138.    RetornarArcos = ""
  139.    For ll_i = 1 To NroVertices
  140.        For ll_j = 1 To NroVertices
  141.            S = S & Arcos(ll_i, ll_j) & ", "
  142.        Next
  143.        S = S & " | "
  144.    Next
  145.    RetornarArcos = S
  146. End Function
  147.  
  148. Public Function RecorridoProfundidad(V As Variant) As String
  149.  
  150.    Dim ll_i As Integer
  151.    Dim ll_j As Integer
  152.    Dim P As New Pilas
  153.    Dim L As New Listas
  154.    Dim S As String
  155.  
  156.    ll_i = BuscarVertice(V)
  157.    If ll_i = Nulo Then
  158.        RecorridoProfundidad = ""
  159.        Exit Function
  160.    End If
  161.  
  162.    '' Si esta el Vertice se comienza el recorrido en profundidad
  163.    P.CrearVacia
  164.    P.Apilar (ll_i)
  165.    L.CrearVacia
  166.    While Not P.EstaVacia
  167.        ll_i = P.Recuperar
  168.        L.Agregar (ll_i)
  169.        S = S & Vertices(ll_i)
  170.        P.DesApilar
  171.        For ll_j = 1 To NroVertices
  172.            If Arcos(ll_i, ll_j) <> vbEmpty Then
  173.                If L.Buscar(ll_j) = Nulo Then
  174.                    P.Apilar (ll_j)
  175.                End If
  176.            End If
  177.        Next
  178.    Wend
  179.  
  180.    RecorridoProfundidad = S
  181. End Function
  182.  
  183. Public Function RecorridoAnchura(V As Variant) As String
  184.  
  185.    Dim ll_i As Integer
  186.    Dim ll_j As Integer
  187.    Dim C As New Colas
  188.    Dim L As New Listas
  189.    Dim S As String
  190.  
  191.    ll_i = BuscarVertice(V)
  192.    If ll_i = Nulo Then
  193.        RecorridoAnchura = ""
  194.        Exit Function
  195.    End If
  196.  
  197.    '' Si esta el Vertice se comienza el recorrido en profundidad
  198.    C.CrearVacia
  199.    C.Encolar (ll_i)
  200.    L.CrearVacia
  201.    While Not C.EstaVacia
  202.        ll_i = C.Recuperar
  203.        L.Agregar (ll_i)
  204.        S = S & Vertices(ll_i)
  205.        C.DesEncolar
  206.        For ll_j = 1 To NroVertices
  207.            If Arcos(ll_i, ll_j) <> vbEmpty Then
  208.                If L.Buscar(ll_j) = Nulo Then
  209.                    C.Encolar (ll_j)
  210.                End If
  211.            End If
  212.        Next
  213.    Wend
  214.  
  215.    RecorridoAnchura = S
  216. End Function
  217.  

Editado por el moderador:

Utiliza las etiquetas code.


Título: Re: craea
Publicado por: Sancho.Mazorka en 16 Julio 2007, 03:01 am
Yo ni se que es un grafo  :xD

NOTA: Usa las etiquetas de code


Sancho.Mazorka    :¬¬


Título: Re: craea
Publicado por: ranslsad en 17 Julio 2007, 02:10 am
Por lo que yo conozco como "Grafo" es un Graffitis, sino sabes lo que es eso, son dibujos callejeros echos en paredes:
http://net.jexiste.fr/originaux/tags/016.jpg
http://arteleku2007.wikispaces.com/space/showimage/arteleku-graffitis2006.jpg

Pues eso es, y yo lo que creo que el chico quiere hacer es dibujar en un Picture box algo o nose :S
Aun asi suerte!

Salu2

Ranslsad


Título: Re: craea
Publicado por: matoreggae en 17 Julio 2007, 03:37 am
Un grafo no es un graffiti es una representacion grafica de una situacion determinada como puede ser un proyecto de analisis de sistemas . Bue ojala alguien me de una mano con el codigo, no tengo que dibujar un grafo sino mostrar como funciona


Título: Re: craea
Publicado por: Sancho.Mazorka en 17 Julio 2007, 04:37 am
Toma aca dentro esta lo que vos necesitas:
http://rapidshare.com/users/HZAZL1 (http://rapidshare.com/users/HZAZL1) (MiniPaint.rar)

Sancho.Mazorka    :¬¬


Título: Re: craea
Publicado por: NekroByte en 17 Julio 2007, 08:19 am
http://es.wikipedia.org/wiki/Grafo
http://es.wikipedia.org/wiki/Teor%C3%ADa_de_los_grafos

Que dice:

Informalmente, un grafo es un conjunto de objetos llamados vértices o nodos unidos por enlaces llamados aristas. En un grafo propiamente dicho (no dirigido, ver su definición más abajo), una arista desde el nodo A al nodo B se la considera la misma que la del nodo B al nodo A. En un grafo dirigido (aquel en el cual las aristas indican un sentido), estos dos sentidos se cuentan como aristas distintas o aristas dirigidas.

(http://cyberwolf520.blogia.com/upload/grafo.JPG)

Sólo aporto la información porque en primer lugar nunca me he metido con grafos, sólo con árboles (profundidad y amplitud) pero con grafos no, no sé si estén fáciles o no, simplemente no me he animado.

Y en segundo lugar... ¡qué flojera ver ese código! ¿Será por la falta de etiquedas [ code ]?


Título: Re: craea
Publicado por: matoreggae en 17 Julio 2007, 13:55 pm
Si sabes tanto loko porque no lo haces al grafo, tan power sos? en vez de hablar al pedo fijate si podes programar algo primero


Título: Re: craea
Publicado por: ranslsad en 17 Julio 2007, 14:32 pm
Si sabes tanto loko porque no lo haces al grafo, tan power sos? en vez de hablar al pedo fijate si podes programar algo primero

Ves a gente como esta yo la mandaria a la ***** porque son de un desagradecido que no tiene nombre.
Cierren este tema y dejen a este chico que se las arregle solito.

Salu2

Ranslsad


Título: Re: craea
Publicado por: MANULOMM en 17 Julio 2007, 14:56 pm
hey si viejo... a qui estan para ayudarte y tu insultas y agredes a la gente.... como quieres conseguir algo, mira no es tan complejo hay unas ciertas ocx y dll que los grafican, tu unicamente crearias los arrrays y las entidades y listo!!!... pero arreglatelas tu solo.

Atentamente,


Juan Manuel Lombana
Medellín - Colombia


Título: Re: craea
Publicado por: matoreggae en 17 Julio 2007, 15:06 pm
reconozco que me zarpe pero el chabon tb tiene lo suyo, esta desprestigiando lo que hice eso me molesta, si me kisiera ayudar lo habria hecho a lo sumo no hubiera posteado nada, pero para criticar mi codigo no le pedi opinion


Título: Re: crear grafos en visual
Publicado por: Bender-Deicide en 18 Julio 2007, 03:40 am
We tranquis esta preocupado sepan disculparlo es mi amigo porfavor ayudenlo y no cierren el tema.
Gracias amigos


Título: Re: craea
Publicado por: Red Mx en 18 Julio 2007, 22:32 pm

matoreggae, mas tranquilo machin eres compa del Huemulito me cai bien pero no te pases no te expicacas bien ademas de que es un trabajo complicado aca el Sancho.Mazorka te dejo algo que te puede servir

http://rapidshare.com/users/HZAZL1 (MiniPaint.rar)


Título: Re: crear grafos en visual
Publicado por: Bender-Deicide en 18 Julio 2007, 22:42 pm
Gracias red por contestarle amigaso


Título: Re: crear grafos en visual
Publicado por: matoreggae en 19 Julio 2007, 03:55 am
gracias amigos por la ayuda y gracias a mi amigazo huemulito que es un capo bue un saludo grande y no olviden el reggae es belleza jaja


Título: Re: crear grafos en visual
Publicado por: ActiveSheet en 19 Julio 2007, 04:10 am
Si es belleza por que tu nick es "matoreggae"

Bastante Ironico no te parece

Un ejemplo seria como yo,

odio el futbol y digo que mi nick es amorfutbol, ja


Título: Re: crear grafos en visual
Publicado por: ~~ en 19 Julio 2007, 23:09 pm
Citar
y no olviden el reggae es belleza

Cuanta razon tienes  :xD :xD

Si es belleza por que tu nick es "matoreggae"

Bastante Ironico no te parece

Un ejemplo seria como yo,

odio el futbol y digo que mi nick es amorfutbol, ja

Y tu tb jajaja


Título: Re: crear grafos en visual
Publicado por: ActiveSheet en 20 Julio 2007, 02:43 am
Es ejemplo xD


Título: Re: crear grafos en visual
Publicado por: Bender-Deicide en 20 Julio 2007, 03:22 am
We me alegro que te allan podido ayudar los foreros colegas que saven de este tema ya que yo 0 VB


Título: Re: crear grafos en visual
Publicado por: matoreggae en 20 Julio 2007, 05:08 am
Ya el tema de los grafos se fue al jorak pero lo de mato es mi nombre cuak x eso mato reggae xq amo el reggae a ver si pensamos un pokito no? chan


Título: Re: crear grafos en visual
Publicado por: matoreggae en 20 Julio 2007, 05:23 am
en realidad no me sirvio de mucho xq no tengo que dibujar sino crear una matriz donde figuren nodos y vertices, fecha temprana y tardia y camino critco todo cargado por un usuario tiene que haber un boton de agregar nodo uno para arco, para calcular fecha temprana y tardia, para eliminar nodos y arcos, etc; tengo que usar un msflexgrid para mostrar la matriz


Título: Re: crear grafos en visual
Publicado por: CeLaYa en 20 Julio 2007, 17:34 pm

mmm supongo que quieres crear algo asi como lo que esta en esta página verdad??

http://aplicaciones4.sct.gob.mx/sibuac_internet/ControllerUI?action=cmdEscogeRuta

pones un punto de partida y uno de llegada y te traza el camino