PRIMEIROS COLOCADOS

DIONISIO 14/08/2014 09:26:57
#440432
BOM DIA A TODOS, ALGUEM PODE ME AJUDAR EM UMA CLASSIFICAÇÃO DE ALUNOS COM PONTUAÇÃO DE NOTAS?
EXEMPLO
PONTO COLOCAÇÃO
7900 1º
7400 2º
7400 2º
7400 2º
7300 5º
7100 6º
7100 6º
7090 8º
E ASSIM CONTINUA, QUERIA FAZER EM CODIGO NO VB 6.0, ALGUEM PODE ME AJUDAR NISSO?
DESCULPE TINHA COLOCADO ERRADO
JCM0867 14/08/2014 10:32:48
#440436
primeiro faz um select distinct dos pontos com order by Decrescente
o primeiro registro será o 1º lugar
depois faz um loop nessa tabela e alimentar a tabela original com as respectivas posições

se for SQL server
Select distinct ROW_NUMBER() as Posição, Pontos From Tabela Order by Pontos desc

Se for Access tem que fazer um loop,
TUNUSAT 14/08/2014 10:54:22
#440437
DIONISIO,

Anexei um exemplo que montei baseado em outro que eu já tinha.
Não sei se é isto que você quer, mas...

Basicamente dentro de um form tem:
* Duas labels -
- lblCompetidoresDesordenadas;
- lblCompetidoresOrdenadas;
* Duas listboxs -
- lstCompetidoresDesordenados;
- lstCompetidoresOrdenados;
* Um botão:
- cmdOrdenar

Abaixo o código fonte:
Option Explicit
Dim arrCompetidores() As Competidores
Dim x As Integer

Private Type Competidores
Ponto As Double
Colocacao As Byte
End Type

Private Sub cmdOrdenar_Click()

lstCompetidoresOrdenados.Clear

For x = 0 To UBound(arrCompetidores)
[ô]arrCompetidores(x).Colocacao
lstCompetidoresOrdenados.AddItem arrCompetidores(x).Colocacao & [Ô] - [Ô] & arrCompetidores(x).Ponto
Next

End Sub

Private Sub Form_Load()
Dim strCompetidores As String
Dim y As Integer
Dim bytConta As Byte

[ô] Ponto COLOCAÇÃO
[ô] 7900 1º
[ô] 7400 2º
[ô] 7400 2º
[ô] 7400 2º
[ô] 7300 3º
[ô] 7100 4º
[ô] 7100 4º

ReDim arrCompetidores(15)

arrCompetidores(0).Ponto = [Ô]7100[Ô]
arrCompetidores(1).Ponto = [Ô]7356[Ô]
arrCompetidores(2).Ponto = [Ô]7400[Ô]
arrCompetidores(3).Ponto = [Ô]7400[Ô]
arrCompetidores(4).Ponto = [Ô]7900[Ô]
arrCompetidores(5).Ponto = [Ô]7100[Ô]
arrCompetidores(6).Ponto = [Ô]7151[Ô]
arrCompetidores(7).Ponto = [Ô]7225[Ô]
arrCompetidores(8).Ponto = [Ô]7400[Ô]
arrCompetidores(9).Ponto = [Ô]7300[Ô]
arrCompetidores(10).Ponto = [Ô]7899[Ô]
arrCompetidores(11).Ponto = [Ô]7717[Ô]
arrCompetidores(12).Ponto = [Ô]7771[Ô]
arrCompetidores(13).Ponto = [Ô]7195[Ô]
arrCompetidores(14).Ponto = [Ô]7356[Ô]
arrCompetidores(15).Ponto = [Ô]7812[Ô]

[ô]Para experimentar, retire o comentário das duas linhas abaixo:
[ô]ReDim Preserve arrCompetidores(16)
[ô]arrCompetidores(16).Ponto = [Ô]7099[Ô]

[ô] -----------------------------------
lstCompetidoresDesordenados.Clear

For x = 0 To UBound(arrCompetidores)
lstCompetidoresDesordenados.AddItem arrCompetidores(x).Ponto
Next

[ô] -----------------------------------

For x = 0 To lstCompetidoresDesordenados.ListCount - 1

For y = 0 To lstCompetidoresDesordenados.ListCount - 1

If arrCompetidores(x).Ponto < arrCompetidores(y).Ponto Then
strCompetidores = arrCompetidores(y).Ponto
arrCompetidores(y).Ponto = arrCompetidores(x).Ponto
arrCompetidores(x).Ponto = strCompetidores
End If

Next

Next

For x = 0 To lstCompetidoresDesordenados.ListCount - 1

For y = 0 To lstCompetidoresDesordenados.ListCount - 1

If arrCompetidores(x).Ponto > arrCompetidores(y).Ponto Then
strCompetidores = arrCompetidores(y).Ponto
arrCompetidores(y).Ponto = arrCompetidores(x).Ponto
arrCompetidores(x).Ponto = strCompetidores
End If

Next

Next

[ô] -----------------------------------
[ô]Posicionar no Ranking...
bytConta = 1

For x = 0 To lstCompetidoresDesordenados.ListCount - 1

If x < UBound(arrCompetidores) Then

arrCompetidores(x).Colocacao = bytConta

If arrCompetidores(x).Ponto > arrCompetidores(x + 1).Ponto Then _
bytConta = bytConta + 1
ElseIf x = UBound(arrCompetidores) Then
arrCompetidores(x).Colocacao = bytConta
End If

Next


[ô] -----------------------------------
[ô] For x = 0 To lstCompetidoresDesordenados.ListCount - 1
[ô] Debug.Print arrCompetidores(x).Colocacao & [Ô] - [Ô] & arrCompetidores(x).Ponto
[ô] Next

End Sub


[][ô]s,
Tunusat.
Faça seu login para responder