Res: [delphi-br] [OT] Código em VB para Delphi , alguém consegue?
Cara o que eu posso fazer é comentar o código e dai você procura as traduções. valeu? Os meus comentários estarão entre {}. É tudo muito intuitivo. ** Attribute VB_Name = Module1 {nome do módulo com as funções} {aqui começa a declaração de variáveis globais e como você pode ver, são todas públicas.} {Após os 'As', vem o tipo de variável} Public dist() As Single 'Array bidimensional para armazenar a matriz de distancia Public adj() As Integer 'Array bidimensional para armazenar a matriz de adjacencia Public adjprod() As Integer 'Array bidimensional para armazenar a matriz de caminhos Public num_vert As Integer 'Numero de vertices do grafo Public i, j As Integer 'indices para as matrizes Public allcells As String Public Fnum, num_linhas As Integer Public TxtBoxGotFocus As Boolean 'flag para controlar o foco na apresentação de FormDados Public Shortest() As Single 'Array bidimensional para armazenar as distancias calculadas pelo algoritmo de Floyd Public Caminho As String 'String para armazenar o caminho Public para() As Single 'Array para armazenar o caminho temporario de um vertice i ate um 'vertice j Public lim_inferior As Integer Public lim_superior As Integer {aqui temos uma única função que deve retornar um inteiro e termina em 'End Function'} 'Funcao para determinar a existencia de caminho entre os vertices do grafo 'Não foi necessária neste contexto Function Determina_Caminho( n As Integer) As Integer {'Dim' é uma forma de declarar variáveis} Dim k As Integer {'ReDim' (abaixo) é uma função que até onde eu sei, não existe no Delphi e chega a ser um ponto crítico} {na tradução deste código. está função redefine uma variável já declarada} 'Redimensionamento da matriz de adjacencia ReDim adjprod(n, n) {dois loops FOR, encadeados. 'Next' marca o fim do loop} 'Inicialização das matrizes For i = 1 To n For j = 1 To n adjprod(i, j) = adj(i, j) Next j Next i 'Multiplicação boolena For k = 1 To n For i = 1 To n For j = 1 To n adjprod(i, j) = adjprod(i, j) Or (adjprod(i, k) And adjprod(k, j)) Next j Next i Next k End Function {aqui começa os procedimentos, ou procedure. 'End Sub' marca o fim da procedure} 'Sub-rotina para inicialização da matriz de distancia Sub init_mtDistancia( n As Integer) 'Redimensionamento da matriz de distancia ReDim dist(n, n) For i = 1 To n For j = 1 To n dist(i, j) = 3.402823E+38 Next j Next i End Sub 'Sub-rotina para inicialização da matriz de adjacencia 'Sub init_mtAdjacencia( n As Integer) 'Redimensionamento da matriz de adjacencia ' ReDim adj(n, n) ' For i = 1 To n ' For j = 1 To n ' adj(i, j) = 0 ' Next j ' Next i 'End Sub {outra procedure} 'Sub-rotina para desalocação de memória Sub destrutor() {limpa os arrays} Erase dist Erase adj End Sub {outra procedure} 'Sub-rotina para acrescimo de um arco. Sub Add_Arco(d As Single, nodo_1 As Integer, nodo_2 As Integer) 'Ao ser acrescentado um arco, sera atribuido o valor 1 na matriz de adjacencia para indicar que existe um caminho entre os dois arcos e o valor deste arco na matriz de distancias 'adj(nodo_1, nodo_2) = 1 'nao foi necessaria neste contexto dist(nodo_1, nodo_2) = d End Sub {outra procedure} 'Sub-rotina para remocao de um arco Sub Rem_Arco(nodo_ 1 As Integer, nodo_2 As Integer) 'Ao ser removido... 'adj(nodo_1, nodo_2) = 0 dist(nodo_1, nodo_2) = 3.402823E+38 'flag para distancia infinita End Sub {outra função} 'Funcao para determinar o menor caminho pelo algoritmo de Floyd Function Floyd(n As Integer) As Single Dim u, v, w As Integer Dim changed As Integer 'array bidimensional auxiliar changed = 1 Max = num_vert ReDim Shortest(n, n) ReDim para(n, n) For v = 1 To n For w = 1 To n Shortest(v, w) = dist(v, w) para(v, w) = w Next w Next v {o nosso conhecido 'while' finalizado em 'Wend'} While changed 'Testa o valor de changed changed = 0 For u = 1 To n For v = 1 To n For w = 1 To n {o nosso conhecido 'If' finalizado em 'End If'} If Shortest(v, u) + Shortest(u, w) Shortest(v, w) Then Shortest(v, w) = Shortest(v, u) + Shortest(u, w) para(v, w) = para(v, u) changed = 1 End If Next w Next v Next u Wend End Function {outra função} 'Funcao para imprimir a rota Function print_shortest( a As Integer, b As Integer) As String Dim rota As String Dim aux As String While a b rota = - + CStr(para(a, b)) aux = aux + rota a = para(a, b) Wend print_shortest = aux End Function __ Fale com seus amigos de graça com o novo Yahoo! Messenger http://br.messenger.yahoo.com/ [As partes desta mensagem que não continham texto foram removidas]
[delphi-br] [OT] Código em VB para Delphi, alguém consegue?
Olá amigos, estou tentando ainda criar o algorítimo de Floyd para o problema do menor caminho, e consegui um arquivo feito em VB, porém não sei nada de VB, alguém que saiba poderia traduzir para delphi? Desde já agradeço a todos Segue o Module: Attribute VB_Name = Module1 Public dist() As Single 'Array bidimensional para armazenar a matriz de distancia Public adj() As Integer 'Array bidimensional para armazenar a matriz de adjacencia Public adjprod() As Integer 'Array bidimensional para armazenar a matriz de caminhos Public num_vert As Integer'Numero de vertices do grafo Public i, j As Integer 'indices para as matrizes Public allcells As String Public Fnum, num_linhas As Integer Public TxtBoxGotFocus As Boolean 'flag para controlar o foco na apresentação de FormDados Public Shortest() As Single 'Array bidimensional para armazenar as distancias calculadas 'pelo algoritmo de Floyd Public Caminho As String 'String para armazenar o caminho Public para() As Single 'Array para armazenar o caminho temporario de um vertice i ate um 'vertice j Public lim_inferior As Integer Public lim_superior As Integer 'Funcao para determinar a existencia de caminho entre os vertices do grafo 'Não foi necessária neste contexto Function Determina_Caminho(n As Integer) As Integer Dim k As Integer 'Redimensionamento da matriz de adjacencia ReDim adjprod(n, n) 'Inicialização das matrizes For i = 1 To n For j = 1 To n adjprod(i, j) = adj(i, j) Next j Next i 'Multiplicação boolena For k = 1 To n For i = 1 To n For j = 1 To n adjprod(i, j) = adjprod(i, j) Or (adjprod(i, k) And adjprod(k, j)) Next j Next i Next k End Function 'Sub-rotina para inicialização da matriz de distancia Sub init_mtDistancia(n As Integer) 'Redimensionamento da matriz de distancia ReDim dist(n, n) For i = 1 To n For j = 1 To n dist(i, j) = 3.402823E+38 Next j Next i End Sub 'Sub-rotina para inicialização da matriz de adjacencia 'Sub init_mtAdjacencia(n As Integer) 'Redimensionamento da matriz de adjacencia ' ReDim adj(n, n) ' For i = 1 To n 'For j = 1 To n ' adj(i, j) = 0 ' Next j ' Next i 'End Sub 'Sub-rotina para desalocação de memória Sub destrutor() Erase dist Erase adj End Sub 'Sub-rotina para acrescimo de um arco. Sub Add_Arco(d As Single, nodo_1 As Integer, nodo_2 As Integer) 'Ao ser acrescentado um arco, sera atribuido o valor 1 na matriz de adjacencia 'para indicar que existe um caminho entre os dois arcos e o valor deste arco na 'matriz de distancias 'adj(nodo_1, nodo_2) = 1 'nao foi necessaria neste contexto dist(nodo_1, nodo_2) = d End Sub 'Sub-rotina para remocao de um arco Sub Rem_Arco(nodo_1 As Integer, nodo_2 As Integer) 'Ao ser removido... 'adj(nodo_1, nodo_2) = 0 dist(nodo_1, nodo_2) = 3.402823E+38 'flag para distancia infinita End Sub 'Funcao para determinar o menor caminho pelo algoritmo de Floyd Function Floyd(n As Integer) As Single Dim u, v, w As Integer Dim changed As Integer 'array bidimensional auxiliar changed = 1 Max = num_vert ReDim Shortest(n, n) ReDim para(n, n) For v = 1 To n For w = 1 To n Shortest(v, w) = dist(v, w) para(v, w) = w Next w Next v While changed 'Testa o valor de changed changed = 0 For u = 1 To n For v = 1 To n For w = 1 To n If Shortest(v, u) + Shortest(u, w) Shortest(v, w) Then Shortest(v, w) = Shortest(v, u) + Shortest(u, w) para(v, w) = para(v, u) changed = 1 End If Next w Next v Next u Wend End Function 'Funcao para imprimir a rota Function print_shortest(a As Integer, b As Integer) As String Dim rota As String Dim aux As String While a b rota = - + CStr(para(a, b)) aux = aux + rota a = para(a, b) Wend print_shortest = aux End Function -- _ Fellipe Henrique [EMAIL PROTECTED] Venham até a borda, ele disse. Eles disseram: Nós temos medo. Venham até a borda, ele insistiu. Eles foram, Ele os empurrou... E eles voaram. (Guillaume Apollinaire) [As partes desta mensagem que não continham texto foram removidas]