PEGAR MAIOR VALOR

NICKOLASCARLOS 18/09/2014 14:29:06
#441327
Tenho um richtextbox com as seguintes linhas:

41
98
21
56
82
43


Quero pegar o numero da linha que tem o maior valor, no caso a linha nº 2;
Vlws
NILSONTRES 18/09/2014 16:06:23
#441339
Primeiro vc tem que separar as strings utilizando split, ter um parâmetro para fazer isso, pode ser vbCrLf.
Depois converter as strings para inteiro e fazer a comparação.
NICKOLASCARLOS 18/09/2014 17:21:03
#441341
Poisé! Mas é fazer a comparação que eu não consigo!
SINCLAIR 18/09/2014 18:07:38
#441345
Colega,

Depois de ter os dados em um array, você pode usar desde técnicas [Ô]gambiarristas[Ô] como inserir os dados em um listbox com propriedade sorted=true (sendo que o listbox fica com a propriedade visible=false) ou....

Algo mais profissional

Bem profissional: use o método bTree

Não Gambiarra, mas não tão profissional: use o método bolha (conhecido como BubleSort)

Segue a função

Dim blnTrocou As Boolean
Dim strArray(9) As String
Dim iNumber1 As Integer
Dim iNumber2 As Integer
Dim strTemp As String

[ô]Criar um array simples
strArray(0) = [Ô]ANTONIO[Ô]
strArray(1) = [Ô]JOSE[Ô]
strArray(2) = [Ô]CANDIDO[Ô]
strArray(3) = [Ô]AGUINALDO[Ô]
strArray(4) = [Ô]RONALDO[Ô]
strArray(5) = [Ô]MARIA[Ô]
strArray(6) = [Ô]JOAO[Ô]
strArray(7) = [Ô]PAULO[Ô]
strArray(8) = [Ô]BEATRIZ[Ô]
strArray(9) = [Ô]AUGUSTO[Ô]

[ô]Inicialmente considera todos como ordenados
blnTrocou = False

[ô]Faz um loop em todos os elementos para ordená-los
Do

For iNumber1 = 0 To UBound(strArray)
For iNumber2 = 0 To UBound(strArray) - 1

[ô]Verificar se ainda existe desordenação
If strArray(iNumber2) > strArray(iNumber2 + 1) Then

[ô]Trocar os elementos do array e marcar que houve uma troca
strTemp = strArray(iNumber2)
strArray(iNumber2) = strArray(iNumber2 + 1)
strArray(iNumber2 + 1) = strTemp
blnTrocou = True

Else

[ô]Marcar que não houve uma troca entre os elementos
blnTrocou = False

End If

Next iNumber2

Next iNumber1

[ô]Se não houve trocas, pode sair do loop
If blnTrocou = False Then Exit Do

Loop

MsgBox ([Ô]Terminou[Ô])
NICKOLASCARLOS 18/09/2014 19:03:09
#441347
Colega,

Eu queria compara Integers e Não strings
mas mesmo assim obrigado pela colaboração!
SINCLAIR 18/09/2014 22:47:36
#441351
Colega,

A função é exatamente a mesma.

Nada muda na função (lógica)

Apenas use um array de números e não de strings. Segue a função abaixo:

Dim blnTrocou As Boolean
Dim intArray(9) As Integer
Dim iNumber1 As Integer
Dim iNumber2 As Integer
Dim intTemp As String

[ô]Criar um array simples
intArray(0) = 10
intArray(1) = 25
intArray(2) = 1
intArray(3) = 48
intArray(4) = 17
intArray(5) = 48
intArray(6) = 33
intArray(7) = 90
intArray(8) = 2
intArray(9) = 5

[ô]Inicialmente considera todos como ordenados
blnTrocou = False

[ô]Faz um loop em todos os elementos para ordená-los
Do

For iNumber1 = 0 To UBound(intArray)
For iNumber2 = 0 To UBound(intArray) - 1

[ô]Verificar se ainda existe desordenação
If intArray(iNumber2) > intArray(iNumber2 + 1) Then

[ô]Trocar os elementos do array e marcar que houve uma troca
intTemp = intArray(iNumber2)
intArray(iNumber2) = intArray(iNumber2 + 1)
intArray(iNumber2 + 1) = intTemp
blnTrocou = True

Else

[ô]Marcar que não houve uma troca entre os elementos
blnTrocou = False

End If

Next iNumber2

Next iNumber1

[ô]Se não houve trocas, pode sair do loop
If blnTrocou = False Then Exit Do

Loop

MsgBox ([Ô]Terminou[Ô])
SINCLAIR 18/09/2014 22:50:31
#441352
Em resumo do que te passei acima:

1) Troquei o array de string para integer
2) A variável auxiliar strTemp passei para intTemp (mudei de string para integer)
3) No array associei conteúdo numérico e não alfabético.

Só. Nada mais.

Tudo de bom.
NICKOLASCARLOS 19/09/2014 12:15:09
#441358
Mas eu quero que retorne a linha do richtextbox em que ele está e não qual o maior numero
SINCLAIR 19/09/2014 12:41:49
#441360
Colega,

Você pode usar array duplo, como por exemplo intArrayNumero e intArrayLinha. No intArrayNumero você coloca os número e em intArrayLinha coloca a linha em que ele se encontra. Sempre que trocar o intArrayNumero, troque o intArrayLinha.

Além de ter o array ordenado em intArrayNumero, você terá as linhas em intArrayLinha. No exemplo que postei acima você teria em intArrayNumero(0)=90 e em intArrayLinha(0)=7 (é na sétima linha que o 90 se encontra).

é fácil. Só criar um segundo array.
NICKOLASCARLOS 19/09/2014 13:35:07
#441362
Poisé eu não sei como eu faço isso, sou iniciante em vb.net!
JABA 19/09/2014 13:48:19
#441363
Resposta escolhida
[ô]Funcao que traz o indice do maior valor dentro do RichtBox.
Public Function GetIndiceComMaiorValor(r As RichTextBox) As Integer
Dim indice As Integer = 0
Dim maiorValor As Integer = 0
For i As Integer = 0 To r.Lines.Length - 1
If (Convert.ToInt32(r.Lines(i)) > maiorValor) Then
maiorValor = Convert.ToInt32(r.Lines(i))
indice = i
End If
Next
Return indice
End Function

[ô]Coloque esse codigo num botão. No seu caso mostrará o indice 1.
MsgBox(GetIndiceComMaiorValor(RichTextBox1))

Página 1 de 2 [14 registro(s)]
Tópico encerrado , respostas não são mais permitidas