Função para inverter uma string

Delphi

11/12/2004

Olá pessoal, estou precisando de uma funcao que funcione da seguinte forma:

Passo uma string de 04 caracteres, por exemplo:

3078

e o retorno seria todas as formas de apresentação desse numero, por exemplo:

3078, 3708, 3807, 3087, 7308, 7380, 7083, 8037, e assim por diante

isso retornaria 24 strings diferentes.

Eu preciso de uma função pra fazer isso e ainda que orderne do menor para o maior, só q eu não sei implementar isso no delphi.

Alguem pode me ajudar?


Pabhen

Pabhen

Curtidas 0

Respostas

Max.jgs

Max.jgs

11/12/2004

procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c,d:string;
Valor:string;
ValorFinal:string;
x,y:integer;
Contador:integer;
NovoValor:string;
a1,a2,a3,a4:integer;

begin
Valor:= edit1.text;
//3078, 3708, 3807, 3087, 7308, 7380, 7083, 8037

Valor:= a+b+c+d;
Contador:= 0;
ValorFinal:= edit1.text;
NovoValor:= edit1.text;
repeat
Contador:= Contador + 1;
a:= copy(NovoValor,1,1);
b:= copy(NovoValor,2,1);
c:= copy(NovoValor,3,1);
d:= copy(NovoValor,4,1);
X:= 1;
Y:= 2;
Valor:= copy(Valor,x,y);
Valor:= Valor+d+c;

ValorFinal:= ValorFinal +Valor;


until Contador = 23;

//listbox1.Items.Add();
// edit2.text;
// edit2.text:=
//VariavelTeste:= Copy(valorAdquirido,x,y);
end;


GOSTEI 0
Pabhen

Pabhen

11/12/2004

Essa função não resolveu, mas já me deu uma ideia.

De qualquer forma valeu


GOSTEI 0
Sonec2004

Sonec2004

11/12/2004

Vê aê se ajuda. Cole um botão com o seguinte código:
procedure TForm1.Button1Click(Sender: TObject);
Var
  MinhaString: Array [1..24] of String;
  Caracter: Array [1..4] of String;
  StringOriginal, Transfere: String;
  i, x, k, j, l : Integer;
begin
  StringOriginal:= ´1234´;
  for l:=1 to 4 do
    Caracter[l]:=copy(StringOriginal,l,1);
  x:=1;
  for i:=0 to 3 do
  begin
    for j:=0 to 2 do
    begin
      for k:=0 to 1 do
      begin
        MinhaString[x]:=Caracter[1]+Caracter[2]+Caracter[3]+Caracter[4];
        Transfere:=Caracter[2];
        Caracter[2]:=Caracter[3];
        caracter[3]:=Transfere;
        ListBox1.Items.Add(MinhaString[x]);//Pra ver o resultado
        x:=x+1;
      end;
      Transfere:=Caracter[1];
      Caracter[1]:=Caracter[j+2];
      caracter[j+2]:=Transfere;
    end;
    Transfere:=Caracter[1];
    Caracter[1]:=Caracter[i+1];
    caracter[i+1]:=Transfere;
  end;
end;


T+


GOSTEI 0
Sonec2004

Sonec2004

11/12/2004

Esqueci de colocar em ordem crescente. Repetindo o código com algumas linhas a mais:
procedure TForm1.Button1Click(Sender: TObject);
Var
  MinhaString: Array [1..24] of String;
  Caracter: Array [1..4] of String;
  StringOriginal, Transfere: String;
  i, x, k, j, l : Integer;
begin
  StringOriginal:= ´1234´;
  for l:=1 to 4 do
    Caracter[l]:=copy(StringOriginal,l,1);
  x:=1;
  for i:=0 to 3 do
  begin
    for j:=0 to 2 do
    begin
      for k:=0 to 1 do
      begin
        MinhaString[x]:=Caracter[1]+Caracter[2]+Caracter[3]+Caracter[4];
        Transfere:=Caracter[2];
        Caracter[2]:=Caracter[3];
        caracter[3]:=Transfere;
        ListBox1.Items.Add(MinhaString[x]);//Pra ver o resultado
        x:=x+1;
      end;
      Transfere:=Caracter[1];
      Caracter[1]:=Caracter[j+2];
      caracter[j+2]:=Transfere;
    end;
    Transfere:=Caracter[1];
    Caracter[1]:=Caracter[i+1];
    caracter[i+1]:=Transfere;
  end;
  ListBox1.Items.Add(´---------´);//pra separar os dois vetores
  for i:=1 to 24 do //Ordena em ordem crescente
  begin
    for j:=i+1 to 24 do
    begin
      if MinhaString[i] > MinhaString[j] then
      begin
        Transfere:=MinhaString[i];
        MinhaString[i]:=MinhaString[j];
        MinhaString[j]:=Transfere;
      end;
    end;
    ListBox1.Items.Add(MinhaString[i]);
  end;
end; 


Espero ter ajudado.


GOSTEI 0
POSTAR