Res: [delphi-br] [OT] Código em VB para Delphi , alguém consegue?

2006-11-29 Por tôpico Jonatã Castelo Branco
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?

2006-11-28 Por tôpico Fellipe Henrique
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]