• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

saramgsilva

[VB6] Erro - Estou a tentar usar arrays dinâmicos e passagem pro referência

3 mensagens neste tópico

olá, estou a desenvolver um programa que vai a um ficheiro ler pares de pontos, e depois de efectuar algumas operações escreve o resultado em outro ficheiro.

Quando lê do ficheiro guarda em 2 vectores, que estou a tentar usar vectores dinâmicos, e pretendo depois efectuar passagem por referência....

Mas está me a dar um erro e não sei o que é  :)

O código é este:

Private Sub Command1_Click()
Dim x(), y() As Single
Dim d As Single
Dim linhas As Integer

d = Val(Text1.Text)

linhas = NLinhas
ReDim x(1 To linhas)
ReDim y(1 To linhas)

LerFicheiro x(), y()
EscreveFicheiro x(), y(), d, linhas

MsgBox "Foram processados " & linhas & " pontos." & vbCrLf & " Os resultados estão no ficheiro 'resultados.dat'."
  
End Sub

Public Sub EscreveFicheiro(ByRef x() As Single, ByRef y() As Single, ByVal d As Single, ByVal n As Integer)
Dim conta As Integer, dist As Single, i As Integer, j As Integer

Open App.Path & "\resultados.dat" For Output As #2

conta = 0

Print #2, "Os pontos seguintes distam menos do que " & d

For i = 1 To n
  For j = i + 1 To n
  
    dist = Sqr((x(i) - x(j)) ^ 2 + (y(i) - y(j)) ^ 2)
    If dist < d Then
  
      conta = conta + 1
     
      Print #2, "(" & x(i) & " , " & y(i) & ")" & vbTab & "(" & x(j) & " , " & y(j) & ")"
     End If
  Next
Next

Print #2, "São " & conta & " pares de ponto."


Close #2
End Sub

Public Sub LerFicheiro(ByRef x() As Single, ByRef y() As Single)
Dim n As Long

Open App.Path & "\pontos.dat" For Input As #1
n = 0
Do While Not EOF(1)

    n = n + 1
  
     Input #1, x(n), y(n)

Loop
Close #1

End Sub

Public Function NLinhas() As Integer
Dim contaLinhas As Integer

Open App.Path & "\pontos.dat" For Input As #1

conta = 0

Do While Not EOF
    conta = conta + 1
Loop

Close #1

NLinhas = conta

End Function

Em anexo está o tudo....  :hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ora bem... encontrei alguns erros.

Alguns deles estão na função NLinhas()

    
Do While Not EOF
        conta = conta + 1
Loop

primeiro tens de colocar no EOF qual é o ficheiro, neste caso será o 1porque foi o que tu abris-te aqui -> Open App.Path & "\pontos.dat" For Input As #1

Portanto, ficará assim -> Do While Not EOF(1)

depois isso vai entrar num ciclo infinito porque não passas de linha dentro do ficheiro, estas sempre  na primeira linha. Para ires passando de linha basta criares uma variável de depois:

Line Input #1, variavel

Resultado:

Public Function NLinhas() As Integer
Dim contaLinhas As Integer
Dim tmp As String

Open App.Path & "\pontos.dat" For Input As #1
    conta = 0
    Do While Not EOF(1)
        conta = conta + 1
        Line Input #1, tmp
    Loop
Close #1

NLinhas = conta

End Function

O outro erro está na declaração dos arrays:

Dim x() As Single, y() As Single

Não me perguntes o porquê, talvez porque não se podem declarar assim os arrays, ao certo não sei.... Para resolver isso basta:

Dim x() As Single

Dim y() As Single

E é só :P

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora