Função para inverter uma string
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?
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
Curtidas 0
Respostas
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;
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
11/12/2004
Essa função não resolveu, mas já me deu uma ideia.
De qualquer forma valeu
De qualquer forma valeu
GOSTEI 0
Sonec2004
11/12/2004
Vê aê se ajuda. Cole um botão com o seguinte código:
T+
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
11/12/2004
Esqueci de colocar em ordem crescente. Repetindo o código com algumas linhas a mais:
Espero ter ajudado.
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