PEGAR MAIOR VALOR
Tenho um richtextbox com as seguintes linhas:
Quero pegar o numero da linha que tem o maior valor, no caso a linha nº 2;
Vlws
41
98
21
56
82
43
Quero pegar o numero da linha que tem o maior valor, no caso a linha nº 2;
Vlws
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.
Depois converter as strings para inteiro e fazer a comparação.
Poisé! Mas é fazer a comparação que eu não consigo!
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[Ô])
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[Ô])
Colega,
Eu queria compara Integers e Não strings
mas mesmo assim obrigado pela colaboração!
Eu queria compara Integers e Não strings
mas mesmo assim obrigado pela colaboração!
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[Ô])
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[Ô])
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.
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.
Mas eu quero que retorne a linha do richtextbox em que ele está e não qual o maior numero
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.
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.
Poisé eu não sei como eu faço isso, sou iniciante em vb.net!
[ô]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))
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))
Tópico encerrado , respostas não são mais permitidas