[OFF] - DESAFIO

USUARIO.EXCLUIDOS 09/08/2007 13:58:59
#230228
ééééé!!

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

USUARIO.EXCLUIDOS 09/08/2007 14:01:11
#230230


Ae...q show...mais economica q a minha...mas tb funciona..sensacional...

USUARIO.EXCLUIDOS 09/08/2007 14:06:33
#230233
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:

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

MORDOR 09/08/2007 14:37:34
#230245
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í:

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
USUARIO.EXCLUIDOS 09/08/2007 14:42:39
#230247
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
           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
USUARIO.EXCLUIDOS 09/08/2007 14:46:17
#230248

No meu tb tem isso...senao dava xabu....bem lembrado
ALMARTI 09/08/2007 15:32:00
#230255
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

MORDOR 09/08/2007 15:32:05
#230256
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);
USUARIO.EXCLUIDOS 09/08/2007 15:34:30
#230257
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

USUARIO.EXCLUIDOS 09/08/2007 15:35:05
#230258
é... 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.
Página 2 de 4 [39 registro(s)]
Tópico encerrado , respostas não são mais permitidas