[OFF] - DESAFIO
ééééé!!
Esta funciona! hahaha
Como eu tinha prometido, aàestá a minha!
Esta funciona! hahaha
Como eu tinha prometido, aàestá a minha!
Dim Lista As New Collection
Dim Caracter As String
Dim Add As Boolean
For i = 1 To Len(Text1.Text)
Caracter = Mid(Text1.Text, i, 1)
If Lista.Count = 0 Then
Lista.Add Caracter
GoTo Proximo
End If
Add = False
For j = 1 To Lista.Count
If Caracter <= Lista.Item(j) Then
Lista.Add Caracter, , j
Add = True
Exit For
End If
Next
If Not Add Then
Lista.Add Caracter
End If
Proximo:
Next
Text2.Text = ""
For i = 1 To Lista.Count
Text2.Text = Text2.Text & Lista.Item(i)
Next
Ae...q show...mais economica q a minha...mas tb funciona..sensacional...
Tinha um erro de datilografia, segue a rotina com o acerto:
Entrada: Textbox de nome txtEntrada.Text
Saida: Textbox de nome txtSaida.Text
Comando: Executa Troca de Letras (ordem alfabética) cmdTroca
Usuário digita: ROBERTO em txtEntrada
Clica no botão de comando para executar a troca de letras
Rotina do botão de comando:
Entrada: Textbox de nome txtEntrada.Text
Saida: Textbox de nome txtSaida.Text
Comando: Executa Troca de Letras (ordem alfabética) cmdTroca
Usuário digita: ROBERTO em txtEntrada
Clica no botão de comando para executar a troca de letras
Rotina do botão de comando:
Private Sub cmdTroca_Click()
If txtEntrada="" Then
Exit Sub
End If
txtSaida = txtEntrada // Faz Saida Igual a Entrada
If Len(txtSaida.Text) = 1 Then
Exit Sub
End If
Dim i as Integer // Contador de Posicao
Dim Letra_A as String // Letra Anterior
Dim Letra_C as String // Letra Corrente
i = 2
Do While Len(txtSaida.Text) >= i
Letra_A = Mid(txtSaida.Text, i-1, 1)
Letra_C = Mid(txtSaida.Text, i, 1)
If Letra_C < Letra_A Then
txtSaida.Text = Left(txtSaida.Text, i-2) & _
mid(txtSaida.Text, i, 1) & _
mid(txtSaida.Text, i-1, 1) & _
Right(txtSaida.Text, i+1) // Faltou aqui
If i > 2 Then
i = i - 1
End If
Else
i = i + 1
End If
Wend
End Sub
MARCELOHF, na tabela de caracteres as letras maiúsculas vem antes das minúsculas, então tem uma pequena falha no código. Teste aÃÂÂ:
O código acima retorna False, indicando que "T" é menor que "a". é necessário igualar o "Case" (não sei como diria isso em pt-BR) do caracter com LCase ou UCase
Esse é meu exemplo:
Dim caracter1 As String, caracter2 As String
caracter1 = "a"
caracter2 = "T"
MsgBox (caracter2 > caracter1)
O código acima retorna False, indicando que "T" é menor que "a". é necessário igualar o "Case" (não sei como diria isso em pt-BR) do caracter com LCase ou UCase
Esse é meu exemplo:
Dim palavra As String, letras() As String, novaPalavra As String, controle As String
Dim total As Integer, i As Integer
palavra = Text1.Text
total = Len(palavra)
'Cria um Array com as letras
ReDim letras(total - 1)
For i = 0 To total - 1
letras(i) = Mid(palavra, i + 1, 1)
Next
'Ordena as letras
For i = 0 To total - 1
For j = i To total - 1
If LCase(letras(i)) > LCase(letras(j)) Then
controle = letras(i)
letras(i) = letras(j)
letras(j) = controle
End If
Next j
Next i
'Monta a palavra nova com as letras ordenadas
For i = 0 To UBound(letras)
novaPalavra = novaPalavra & letras(i)
Next
Text2.Text = novaPalavra
ehhh... vc tem razão amigo.
é necessário "igualar o Case". Fiz isto no meu código também, é só trocar esta linha do meu
Por esta
=D
Acho que este já foi... o pessoal resolveu.
Alguém tem aàmais algum desafio de lógica pra galera se divertir um pouco?? haha
é necessário "igualar o Case". Fiz isto no meu código também, é só trocar esta linha do meu
If Caracter <= Lista.Item(j) Then
Por esta
If UCase(Caracter) <= UCase(Lista.Item(j)) Then
=D
Acho que este já foi... o pessoal resolveu.
Alguém tem aàmais algum desafio de lógica pra galera se divertir um pouco?? haha
No meu tb tem isso...senao dava xabu....bem lembrado
Private Sub Command1_Click()
Dim i As Long
Dim j As Long
Dim letras(255) As Long
Dim NovaString As String
For j = 1 To Len(UCase(Text1.Text))
For i = 1 To 255
If Asc(UCase(Mid(Text1.Text, j, 1))) = i Then
letras(i) = letras(i) + 1
End If
Next
Next
i = 0
j = 0
For i = 1 To 255
For j = 1 To Val(letras(i))
NovaString = NovaString & Chr(i)
Next
Text2.Text = NovaString
Next
End Sub
Dim i As Long
Dim j As Long
Dim letras(255) As Long
Dim NovaString As String
For j = 1 To Len(UCase(Text1.Text))
For i = 1 To 255
If Asc(UCase(Mid(Text1.Text, j, 1))) = i Then
letras(i) = letras(i) + 1
End If
Next
Next
i = 0
j = 0
For i = 1 To 255
For j = 1 To Val(letras(i))
NovaString = NovaString & Chr(i)
Next
Text2.Text = NovaString
Next
End Sub
Fazer ordenação no .NET é bem mais simples. Imagine que você queira ordenar uma lista de objetos Retangulo pela sua área. Basta implementar a Interface IComparable na classe, depois adicionar cada instância num ArrayList e chamar o método Sort.
class Retangulo : IComparable
{
public Retangulo(int x, int y)
{
Base = x;
Altura = y;
}
int Base;
int Altura;
public int Area
{
get { return Base * Altura; }
}
public int CompareTo(object obj)
{
int area = ((Retangulo) obj).Area;
if (this.Area < area)
return -1;
else if (this.Area == area)
return 0;
else
return +1;
}
}
ArrayList list = new ArrayList();
list.Add(new Retangulo(5, 10));
list.Add(new Retangulo(20, 2));
list.Add(new Retangulo(9, 5));
list.Add(new Retangulo(2, 22));
list.Add(new Retangulo(15, 2));
list.Add(new Retangulo(25, 2));
Console.WriteLine("Antes da ordenação");
foreach (Retangulo retangulo in list)
Console.WriteLine("ÃÂÂrea: {0}", retangulo.Area);
list.Sort();
Console.WriteLine("Após a ordenação");
foreach (Retangulo retangulo in list)
Console.WriteLine("ÃÂÂrea: {0}", retangulo.Area);
mais uma funcionando
Private Sub Command1_Click()
Dim palavra As String
Dim letras() As String
palavra = Text1.Text
Dim i As Integer
Dim j As Integer
Dim letraaux As String
ReDim letras(Len(palavra))
For i = 0 To UBound(letras) - 1
letras(i) = Mid(palavra, i + 1, 1)
Next
For i = 1 To UBound(letras) - 1
For j = 0 To UBound(letras) - 1
If letras(j) > letras(i) Then
letraaux = letras(j)
letras(j) = letras(i)
letras(i) = letraaux
End If
Next
Next
For i = 0 To UBound(letras) - 1
Text2.Text = Text2.Text & letras(i)
Next
End Sub
é... realmente no .NET tudo é mais simples né...
O Próprio Array tem o método Sort, aàfacilita, já no VB6 não tem essas facilidades.
O Próprio Array tem o método Sort, aàfacilita, já no VB6 não tem essas facilidades.
Tópico encerrado , respostas não são mais permitidas