Fórum Incrementar String #143534
09/03/2003
0
Utilizo a linguagem ADVPL e nela tem uma função chamada soma1(String) que faz o seguinte:
string := ´01´ ;
string := soma1(string);
string passa a ser ´02´
Outro exemplo:
string := ´99´ ;
string := soma1(string);
string passa a ser ´A0´
Depois ´A1´ e ai vai.
Se alguém souber de uma função semelhante ou tem algum código que faça isso.
Atento que a função trata strings de qualquer tamanho.
Valew.
Doug_chagas
Curtir tópico
+ 1Posts
09/03/2003
Orlando Frade
// Função criada por Orlando Frade em 09/03/2003
var
n: Integer;
begin
// Faz um teste com a string para saber se ela é realmente um inteiro
Try
n := StrToInt(Num);
Except
On EConvertError Do
begin
MessageBox(Handle,´A string não é um inteiro.´,´Error´,MB_ICONERROR+MB_OK);
result := Num;
Exit;
end;
end;
// Fim do teste
n := n + 1;
result := IntToStr(n);
end;
é + ou - assim. Não entendi como funciona aquele ´A´ se você me der mais detalhes eu termino o código.
Um Abraço
Orlando Frade
Gostei + 0
09/03/2003
Doug_chagas
[quote:6fafe1f1d7=´Orlando Frade´]function soma1(Num: String): String;
// Função criada por Orlando Frade em 09/03/2003
var
n: Integer;
begin
// Faz um teste com a string para saber se ela é realmente um inteiro
Try
n := StrToInt(Num);
Except
On EConvertError Do
begin
MessageBox(Handle,´A string não é um inteiro.´,´Error´,MB_ICONERROR+MB_OK);
result := Num;
Exit;
end;
end;
// Fim do teste
n := n + 1;
result := IntToStr(n);
end;
é + ou - assim. Não entendi como funciona aquele ´A´ se você me der mais detalhes eu termino o código.
Um Abraço
Orlando Frade
Gostei + 0
09/03/2003
Adilsond
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function Soma1(Value: String): String;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function TForm1.Soma1(Value: String): String;
var
fValue1,
fValue2: Byte;
begin
fValue1 := Ord(Value[1]);
fValue2 := Succ(Ord(Value[2]));
if not (fValue2 in [Ord(´0´)..Ord(´9´)]) then
begin
if fValue1 = Ord(´9´) then
fValue1 := Ord(´A´)
else
begin
Inc(fValue1);
if fValue1 > Ord(´Z´) then
fValue1 := Ord(´0´);
end;
fValue2 := Ord(´0´);
end;
Result := Chr(fValue1) + Chr(fValue2);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit2.Text := Soma1(Edit1.Text);
end;
end.
Gostei + 0
09/03/2003
Dagalvani
Interessante! Incrementar string neste caso está se referindo a passar para próxima sentença lógica utilizada (0,1,2,...;a,b,c,d,...).
Então vamos ver essa operação como uma de somar, 1+1=2, ou melhor somar valores, neste caso, somar 1 ou ir para o próximo.
[size=18:c3e9a9e8e4]>> É a característica típica do números [b:c3e9a9e8e4]Hexadecimais[/b:c3e9a9e8e4]![/size:c3e9a9e8e4]
Fatos:
Os números Hexa tem 16 (Base 16) valores, de 0 à F, onde F = 15 em decimal.
Quando se chega ao 9 ao invés do 10 (como em decimal) vem o A.
Todas notação numérica têm casa [b:c3e9a9e8e4]Unidades, Dezenas, Centenas[/b:c3e9a9e8e4], ...
Quando contamos 10, adicionamos +1 na próxima casa da esquerda.
Como a sequência é de 0 à 9 e seguida de A à Z, temos uma Base de 26 letras(A..Z) + 10 números(0..9) = 36 algarismos - Base 37.
Decimal = Nossa sequência
0 = 0
1 = 1
2 = 2
.
.
.
9 = 9
10 = A
11 = B
.
.
15 = F Os Nº Hexa vem até aqui, depois
16 = 10 <- Valor em Hexa, no nosso caso continua...
16 = G
17 = H
.
.
36 = Z E finalmente virar
37 = 10 Porquê?
[size=9:c3e9a9e8e4]1[/size:c3e9a9e8e4]
9
+ 1
=10
9 mais 1 sobe 1 e escorrega = 10 a casa da direita voltou ao zero e a da esquerda ganhou 1 como não tinha nenhum nº na esq. é como se fosse 0 + 1 = 1.
Então vamos ao que interessa.
Existe uma função no Delphi em que você dá um valor e sua base ele retorna um valor, você poderá dar o valor [b:c3e9a9e8e4]atual +1[/b:c3e9a9e8e4], na base 37.
Desculpe mas não lembro qual, no programinha DelphiBoy está discriminado, procure na Net. Assim que puder volta para teclar o comando, se o encontrar.
Gostei + 0
09/03/2003
Doug_chagas
´ZZZ´, ´1000´.
Por favor me ajude.
Valew.
Gostei + 0
09/03/2003
Adilsond
passa o ´00´ p/ ´01´
passa o ´01´ p/ ´02´
...
passa o ´09´ p/ ´0A´
passa o ´0A´ p/ ´0B´
...
passa o ´0Z´ p/ ´10´
passa o ´10´ p/ ´11´
...
passa o ´19´ p/ ´1A´
passa o ´1A´ p/ ´1B´
...
passa o ´9Z´ p/ ´A0´
passa o ´A0´ p/ ´A1´
...
passa o ´ZZ´ p/ ´100´
passa o ´100´ p/ ´101´
...
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function GetSucc(Value: Char): Char;
function Soma1(Value: String): String;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
function TForm1.GetSucc(Value: Char): Char;
begin
if Value = ´9´ then
Result := ´A´
else
if Value = ´Z´ then
Result := ´0´
else
Result := Chr(Succ(Ord(Value)));
end;
function TForm1.Soma1(Value: String): String;
var
I: Word;
ValZerado: Boolean;
begin
Result := Value;
for I := Length(Value) downto 1 do
begin
Result[I] := GetSucc(Value[I]);
if Result[I] <> ´0´ then
Break;
end;
ValZerado := True;
for I := Length(Value) downto 1 do
begin
if Result[I] <> ´0´ then
begin
ValZerado := False;
Break;
end;
end;
if ValZerado then
Result := ´1´ + Result;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := Soma1(Edit1.Text);
end;
end.
Gostei + 0
20/01/2004
By Alemão
esta que esta descrita soma apenas para 2 digitos.
Como que faço para utilizar a SOMA1 para 4 digitos ou mais????
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)