USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Problema com vetores ('arrays')
Joseph
SÃO PAULO
SP - BRASIL
Postada em 22/11/2005 14:33 hs            
Olá, amigos!
 
Há algum tempo venho tentando desenvolver um algoritmo para solucionar
um problema com vetores ('arrays'): ENCONTRAR ELEMENTOS REPETIDOS NUM
MESMO VETOR. A tarefa não é tão simples assim... e envolve as questões
de velocidade de processamento e de pesquisa.
 
Embora trabalhe com diversas linguagens, não encontrei nelas nenhuma rotina
que resolvesse isso. Talvez não seja mesmo necessário ter uma rotina para
esse fim, mas o fato é que o problema existe...
 
É verdade que fiz um algoritmo um tanto quanto funcional, porém lento
para vetores grandes, mas se alguém tiver interesse pelo problema, aguardo
a solução, enquanto deixo o algoritmo (em pseudocódigo), que pode ser
mapeado para qualquer linguagem de programação, para se ter uma idéia do
problema.
 
-----------------------------------------------------
função enc_elem_rep_vetor(v)
declare e,i,j,k,s
 
e = FALSO
k = 1
 
para i = 1 até comprimento(v) faça
          s = v[i] {Salva elemento atual}
          se (k = comprimento(v)) então
               saia
          fim se
          k = k + 1
          para j = k até comprimento(v) faça
                      se (v[j] = s) então
                           e = VERDADEIRO
                           saia 
                      fim se
           próximo j
           se (e) então
                saia 
           fim se
próximo i
 
retorne (e)
-----------------------------------------------------
 
Para testá-lo, basta:
 
-----------------------------------------------------
início
declare i,v[100]
 
para i = 1 até 100 faça
           v[i] = inteiro(aleatório() * 100 + 1)
próximo i
 
se (enc_elem_rep_vetor(v)) então
     escreva "Há elementos repetidos." 
senão
     escreva "Não há elementos repetidos." 
fim se
 
fim
-----------------------------------------------------
 
Joseph
Técnico em Informática/Programador
São Paulo/SP
TÓPICO EDITADO
   
Ama
Pontos: 2843
UBERLÂNDIA
MG - BRASIL
Postada em 27/11/2005 19:07 hs         
Teste esta rotina e post resultados.
 
Option Explicit
Dim i, v(100001)
Private Sub Command3_Click()

 Me.Caption = "criando matriz"
'para i = 1 até 100000 aleatorio
For i = 1 To 100000
    v(i) = i 'Int((10000 - 1 + 1) * Rnd + 1)
Next i
 Me.Caption = "matriz criada"
End Sub

Private Sub Text1_Change()
Me.Caption = "procurando"
If Text1 = Empty Then Exit Sub
If enc_elem_rep_vetor(CLng(Text1)) Then
     Me.Caption = "Há elementos repetidos."
Else
     Me.Caption = "Não há elementos repetidos."
End If
End Sub

'-----------------------------------------------------
Function enc_elem_rep_vetor(val)
Dim e, i, j, k, s, t
 
e = False
k = 0
t = UBound(v)
'para i = 1 até comprimento(v) faça
'se (k = comprimento(v)) então
'saia  fim se
For i = 1 To t
    Do While k < t
        s = val    ' {Salva elemento atual}
        k = k + 1
        If (v(k) = s) Then
            enc_elem_rep_vetor = Not (e)
            Exit Function
        End If
    Loop
Next i
 
enc_elem_rep_vetor = e
End Function

Problema solucionado = click no cadeado para post encerrado!!!!!!!!!
     
Joseph
SÃO PAULO
SP - BRASIL
Postada em 28/11/2005 06:45 hs            
Olá, Ama!
 
Desde já agradeço pela sua preocupação com meu problema, mas devo admitir que
sua solução não o resolve. Pois bem, vc apenas traduziu meu algoritmo para o VB e
ainda deixou de torná-lo genérico (este devia receber um vetor como parâmetro. Caso desconheça como fazer isso em VB, aí vai: na declaração da função, use 'v()', ou seja, não especifique dimensões e declare o vetor como 'Variant').
 
Já havia feito isso também, mas não fazendo uso de 'Do While...Loop', que é um pouco mais lento que o 'For...Next'. O fato de informar um valor a ser encontrado para o teste da rotina proposta não garante que haja elementos repetidos no vetor, o que o ele mostraria era a existência ou não do valor pesquisado; o que a rotina deve fazer é verificar os elementos do vetor internamente e não a partir de elementos externos. Como disse, a tarefa não é tão simples assim... O que vc criou foi uma função para a pesquisa em vetores. 
 

Joseph
Técnico em Informática/Programador
São Paulo/SP
TÓPICO EDITADO
   
VACA
LIMEIRA
SP - BRASIL
Postada em 28/11/2005 08:32 hs            
bom naum sei se isso vai te ajudar mais procure por metodos de organização de vetores como ripsort, bublesort..... talvez vendo esses metodos vc possa entender como resolver o seu problema mais facilmente, pois vc tera varias maneiras de procurar elementos e organiza-los dentro de um vetor...
A net estah cheia de paginas q mostram um comparativo de velocidade de cada metodo de organizaçao.
Sei q o seu problema naum eh a organizacao do vetor, mais sim procurar elementos repetidos, entretando para vc conseguir organizar primeiro vc terah q buscar os elementos, e ao inves de organizar vc fará sua rotina pra mostrar/tirar os elementos repetidos.
Espero poder ter t ajudado

"Quando estou fraco, aí então é que sou Poderoso"
     
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2026   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página