bigboy123 Posted October 11, 2009 at 05:26 PM Report Share #291218 Posted October 11, 2009 at 05:26 PM Boas a todos. Preciso de saber como faço para ordenar 21 textboxs onde em cada uma está um nome completo de uma pessoa e ao clicar num botão as ordene por ordem crescente, por exemplo (A, B, C, etc..). Se parecer confusa a minha dúvida apresento aqui como fiz para ordenar 21 texboxs onde continham numeros em cada uma de maneira a que ficasse por ordem crescente(usei o método, selection sort): Dim nome(20) As Integer Dim i, max, t, max_pos As Integer nome(0) = txtprocesso1.Text nome(1) = txtprocesso2.Text nome(2) = txtprocesso3.Text nome(3) = txtprocesso4.Text nome(4) = txtprocesso5.Text nome(5) = txtprocesso6.Text nome(6) = txtprocesso7.Text nome(7) = txtprocesso8.Text nome(8) = txtprocesso9.Text nome(9) = txtprocesso10.Text nome(10) = txtprocesso11.Text nome(11) = txtprocesso12.Text nome(12) = txtprocesso13.Text nome(13) = txtprocesso14.Text nome(14) = txtprocesso15.Text nome(15) = txtprocesso16.Text nome(16) = txtprocesso17.Text nome(17) = txtprocesso18.Text nome(18) = txtprocesso19.Text nome(19) = txtprocesso20.Text nome(20) = txtprocesso21.Text For j As Integer = 0 To 19 max = nome(0) max_pos = 0 For i = 0 To 20 - j If max < nome(i) Then max = nome(i) max_pos = i End If Next t = nome(max_pos) nome(max_pos) = nome(i - 1) nome(i - 1) = t Next txtprocesso1.Text = nome(0) txtprocesso2.Text = nome(1) txtprocesso3.Text = nome(2) txtprocesso4.Text = nome(3) txtprocesso5.Text = nome(4) txtprocesso6.Text = nome(5) txtprocesso7.Text = nome(6) txtprocesso8.Text = nome(7) txtprocesso9.Text = nome(8) txtprocesso10.Text = nome(9) txtprocesso11.Text = nome(10) txtprocesso12.Text = nome(11) txtprocesso13.Text = nome(12) txtprocesso14.Text = nome(13) txtprocesso15.Text = nome(14) txtprocesso16.Text = nome(15) txtprocesso17.Text = nome(16) txtprocesso18.Text = nome(17) txtprocesso19.Text = nome(18) txtprocesso20.Text = nome(19) txtprocesso21.Text = nome(20) EDIT: Retirada tag do titulo e pedido de ajuda urgente no texto Edit2: Alterado titulo para se enquadrar melhor com a questão. - Weasel Link to comment Share on other sites More sharing options...
ribeiro55 Posted October 11, 2009 at 06:14 PM Report Share #291233 Posted October 11, 2009 at 06:14 PM Em primeiro lugar deixa que te diga que as tags [urgente] e frisares que "esperas respostas rápidas" são imediatamente ignoradas por o meu parser biológico. Não acrescentam absolutamente nada à tua dúvida. Depois, em vez de usares uma array, porque não usas uma, sei lá, List(Of String) por exemplo. Colecções como List(Of String) já têm built-in o método "Sort" que faz exactamente o que pretendes. Depois basta consumir item a item, com a índice, semelhante ao que fazes com a array. Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
bruno1234 Posted October 11, 2009 at 06:17 PM Report Share #291235 Posted October 11, 2009 at 06:17 PM Para arrays tb existe o método estático Array.Sort que aceita qq tipo de array, tem o mm comportamento q o sort q o ribeiro referiu. Espero respostas rápidas visto que amanhã tenho de ter isto pronto. :x Isto não faz sentido. A ideia do fórum é ajudar quem quer aprender, e a aprendizagem não tem prazo. Se queres entregar uma coisa só por entregrar, é problema teu, e bem pode ir sem funcionar. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
bigboy123 Posted October 11, 2009 at 06:45 PM Author Report Share #291243 Posted October 11, 2009 at 06:45 PM Em relação ao "urgente" e "resposta rápidas" é devido a eu tar a fazer um mini projecto que tem de estar pronto para amanhã.. entendam como quiserem. Agradeço a ajuda do ribeiro e bruno, mas eu preciso de fazer o código apenas através de arrays não posso "fugir" para outro método. No que toca a ordenar texto através de arrays tou a 0 ! Podiam dar-me algumas luzes com um código exemplificado para que eu possa resolver a minha dúvida ? =P Link to comment Share on other sites More sharing options...
bruno1234 Posted October 11, 2009 at 06:50 PM Report Share #291246 Posted October 11, 2009 at 06:50 PM O Array.Sort é apenas através de arrays, n utilizas mais nada. Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
ribeiro55 Posted October 11, 2009 at 06:52 PM Report Share #291247 Posted October 11, 2009 at 06:52 PM Deste-te ao trabalho de experimentar no mínimo o .Sort em cima da array antes de vires dizer que estás a zeros? 😛 Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
bigboy123 Posted October 11, 2009 at 06:54 PM Author Report Share #291248 Posted October 11, 2009 at 06:54 PM O Array.Sort é apenas através de arrays, n utilizas mais nada. Ok... Podes darme umas luzes de como aplicar o Array.Sort ao código apresentado no 1º Post ? 😛 Link to comment Share on other sites More sharing options...
bruno1234 Posted October 11, 2009 at 06:55 PM Report Share #291249 Posted October 11, 2009 at 06:55 PM Array.Sort(nome); Matraquilhos para Android. Gratuito na Play Store. https://play.google.com/store/apps/details?id=pt.bca.matraquilhos Link to comment Share on other sites More sharing options...
bigboy123 Posted October 11, 2009 at 07:07 PM Author Report Share #291251 Posted October 11, 2009 at 07:07 PM OMG De certeza que não é esse o método usado para ordenar 21 textboxs, ou então eu é que não estou a perceber nada. Nem um cículo vou precisar de realizar para que sejam ordenadas as textboxs de A a Z (ascendentemente) ? Link to comment Share on other sites More sharing options...
ribeiro55 Posted October 11, 2009 at 07:08 PM Report Share #291252 Posted October 11, 2009 at 07:08 PM Até 10000 textboxes se fosse necessário. O que é ordenada é a array e como estás a alimentar as textbox de uma maneira sequencial, bate certo. Os ciclos devem existir por trás do método Sort, mas isso não nos toca 😛 Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
bigboy123 Posted October 11, 2009 at 07:27 PM Author Report Share #291255 Posted October 11, 2009 at 07:27 PM Entao como faço para as 21 textboxs ? Eu não tou mesmo a perceber como implemento as textboxs nesse método 😛 Link to comment Share on other sites More sharing options...
anolsi Posted October 11, 2009 at 07:28 PM Report Share #291256 Posted October 11, 2009 at 07:28 PM Bolas, fazes algo tão simples como isto: Dim nome(20) As Integer Dim i, max, t, max_pos As Integer nome(0) = txtprocesso1.Text nome(1) = txtprocesso2.Text nome(2) = txtprocesso3.Text nome(3) = txtprocesso4.Text nome(4) = txtprocesso5.Text nome(5) = txtprocesso6.Text nome(6) = txtprocesso7.Text nome(7) = txtprocesso8.Text nome(8) = txtprocesso9.Text nome(9) = txtprocesso10.Text nome(10) = txtprocesso11.Text nome(11) = txtprocesso12.Text nome(12) = txtprocesso13.Text nome(13) = txtprocesso14.Text nome(14) = txtprocesso15.Text nome(15) = txtprocesso16.Text nome(16) = txtprocesso17.Text nome(17) = txtprocesso18.Text nome(18) = txtprocesso19.Text nome(19) = txtprocesso20.Text nome(20) = txtprocesso21.Text For j As Integer = 0 To 19 max = nome(0) max_pos = 0 For i = 0 To 20 - j If max < nome(i) Then max = nome(i) max_pos = i End If Next t = nome(max_pos) nome(max_pos) = nome(i - 1) nome(i - 1) = t Next Array.Sort(nome) txtprocesso1.Text = nome(0) txtprocesso2.Text = nome(1) txtprocesso3.Text = nome(2) txtprocesso4.Text = nome(3) txtprocesso5.Text = nome(4) txtprocesso6.Text = nome(5) txtprocesso7.Text = nome(6) txtprocesso8.Text = nome(7) txtprocesso9.Text = nome(8) txtprocesso10.Text = nome(9) txtprocesso11.Text = nome(10) txtprocesso12.Text = nome(11) txtprocesso13.Text = nome(12) txtprocesso14.Text = nome(13) txtprocesso15.Text = nome(14) txtprocesso16.Text = nome(15) txtprocesso17.Text = nome(16) txtprocesso18.Text = nome(17) txtprocesso19.Text = nome(18) txtprocesso20.Text = nome(19) txtprocesso21.Text = nome(20) "Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."Não respondo a questões por PM que possam ser colocadas no fórum! Link to comment Share on other sites More sharing options...
bigboy123 Posted October 11, 2009 at 07:30 PM Author Report Share #291257 Posted October 11, 2009 at 07:30 PM ALELUIA 🙂 Assim ja percebi o lugar onde tem que ficar o array.sort ! xD Obrigado 😛😄🙂 Link to comment Share on other sites More sharing options...
anolsi Posted October 11, 2009 at 07:38 PM Report Share #291259 Posted October 11, 2009 at 07:38 PM Ou algo com menos código: Dim nome(20) As Integer Dim i, max, t, max_pos As Integer For I = 0 to 20 nome(I) = Me.Controls("txtprocesso" & (I + 1)).Text Next For j As Integer = 0 To 19 max = nome(0) max_pos = 0 For i = 0 To 20 - j If max < nome(i) Then max = nome(i) max_pos = i End If Next t = nome(max_pos) nome(max_pos) = nome(i - 1) nome(i - 1) = t Next Array.Sort(nome) For I = 0 to 20 Me.Controls("txtprocesso" & (I + 1)).Text = nome(I) Next Estive agora a olhar com atenção para o teu código, e para que servem as linhas que eu seleccionei? Era onde estavas a tentar ordenar? Se sim isso tudo pode ser apagado. "Nós somos o que fazemos repetidamente, a excelência não é um feito, e sim, um hábito."Não respondo a questões por PM que possam ser colocadas no fórum! Link to comment Share on other sites More sharing options...
bigboy123 Posted October 11, 2009 at 08:32 PM Author Report Share #291263 Posted October 11, 2009 at 08:32 PM Calma... Dessa maneira só é válido para números ! Eu quero ordenar NOMES ! (letras) e náo números... Dessa meneira ele apresenta obviamente o erro na linha: nome(I) = Me.Controls("txtprocesso" & (I + 1)).Text (Conversion from string "" to type 'Integer' is not valid.) Link to comment Share on other sites More sharing options...
Weasel Posted October 12, 2009 at 07:27 AM Report Share #291308 Posted October 12, 2009 at 07:27 AM Também me parece que estão a "ordenar" duas vezes, apaga o código que o anolsi colocou em destaque e vê se não ordena na mesma... E volto a frisar, estar a pedir "Preciso disto e é para já" não é de bom tom, humildade acima de tudo! Knowledge to the masses Link to comment Share on other sites More sharing options...
bigboy123 Posted October 12, 2009 at 09:32 AM Author Report Share #291318 Posted October 12, 2009 at 09:32 AM Já consegui ordenar os nomes e com tanta complicação apenas duas declarações é que tinham de ser mudadas... Dim nome(20) As string Dim max, t, max_pos As string Dim i as integer Solved 👍 Link to comment Share on other sites More sharing options...
fLaSh_PT Posted October 12, 2009 at 10:57 AM Report Share #291327 Posted October 12, 2009 at 10:57 AM Creio que está a fazer confusão com algo que podes simplificar.. Utiliza uma ArrayList, adicionas os valores, ordenas, e voltas colocar os valores ordenados.. Ve se percebes: Dim arrText As New ArrayList arrText.Add(txtprocesso1.Text) arrText.Add(txtprocesso2.Text) 'o resto.... arrText.Sort() txtprocesso1.Text = arrText.Item(0) txtprocesso2.Text = arrText.Item(1) 'o resto.... Making the impossible possible and pwing the world on db at a time. Link to comment Share on other sites More sharing options...
ribeiro55 Posted October 12, 2009 at 11:04 AM Report Share #291329 Posted October 12, 2009 at 11:04 AM Eu sugeri-lhe uma solução semelhante mas recusou. Parece que tem de ser uma array. Talvez porque seja um exercício e como tal tem de seguir certas linhas. A meu ver só precisava disto: 'Metes os valores das textboxes para array, uma ordem qualquer nome(0) = txtprocesso1.Text nome(1) = txtprocesso2.Text nome(2) = txtprocesso3.Text '(...) 'Ordenas a array e tens desta forma o sorteio ordenado do indice 0 ao maximo Array.Sort(nome) 'como a array está ordenada, basta atribuír o indice 0 à textbox1, 1 à textbox2, e por aí fora. 'ficas com as tuas textboxes com as strings previamente ordenadas na array txtprocesso1.Text = nome(0) txtprocesso2.Text = nome(1) txtprocesso2.Text = nome(2) '(...) Mas parece que já está resolvido, e ainda bem 👍 Sérgio Ribeiro "Great coders aren't born. They're compiled and released""Expert coders do not need a keyboard. They just throw magnets at the RAM chips" Link to comment Share on other sites More sharing options...
bigboy123 Posted October 12, 2009 at 11:46 AM Author Report Share #291331 Posted October 12, 2009 at 11:46 AM Mas era a declaração que tava mal ! Em vez de Integer tive de colocar String (devido a eu usar um ciclo for.. next..) e não precisar do Array.Sort apesar de ser mais simples. Eu tinha obrigatóriamente de usar Arrays e Ciclos ? Mas enfim.. Assim ainda aprendi a organizar as text sem usar ciclos 😄 Obrigado pelas ajudas 👍😛👍 :thumbsup: Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now