Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

 
 
Herramientas Buscar en Tema Desplegado
  #22  
Antiguo 15-02-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Cita:
Empezado por eduarcol Ver Mensaje
a ver si entendi lo que explicas, necesitas recursividad, algo como esto:
Bueno, y porque no usar los conceptos de las conversiones Binarias, decimales, octales, hexadecimales, pues nos hacemos de una nueva Base36.

Código Delphi [-]
unit UBase36;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, Math;

type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Label2: TLabel;
    Edit1: TEdit;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  // Generamos nuestro vector de valores de '0' a 'Z'
  Base36 : Array[0..35] of char = ('0','1','2','3','4','5','6','7','8',
                                   '9','A','B','C','D','E','F','G','H',
                                   'I','J','K','L','M','N','O','P','Q',
                                   'R','S','T','U','V','W','X','Y','Z');

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  Suma,Numero: Extended;
  PosCaracter,Indice: Integer;

  function ConvABase36(N:Extended):String;
  var
    Cadena: string;
    Dividendo,Resultado,Residuo: Extended;

  begin
    Cadena := '';
    Dividendo := N;
    REPEAT
      // 1. Se divide el numero entre 36
      Resultado := Dividendo / 36; 
     // 2. Se resta el resultado y parte entera del resultado y se multiplica por 36
      Residuo := (Resultado - Trunc(Resultado)) * 36; 
      // Se agrega el caracter correspondiente al residuo obtenido
      Cadena := Base36[Trunc(Residuo)]+ Cadena;
      Dividendo := Resultado;
    UNTIL Resultado < 36;
    //Se agrega el caracter del último valor (dividendo) a la cadena
    Result := Base36[Trunc(Dividendo)]+Cadena;
  end;

  function ConvADecimal(B36:string):Extended;

    function GetIndex(Value: Char): Integer;
    begin
      Result := Byte(Value) - 48;
      if Result > 9 then Dec(Result, 7);
    end;

  begin
    Indice := 0;
    PosCaracter := length(B36);
    REPEAT
       Suma := Suma + GetIndex(B36[PosCaracter]) * Power(36,Indice);
       Indice := Indice + 1;
       Dec(PosCaracter);
    UNTIL Indice = (length(B36)-1);
    Result := Suma;
  end;

begin
  //Usar solo cadenas de hasta 12 digitos , (por ahora )
  //Estoy usando un signo ~ antes de la cadena por cuestiones de indices 
  Numero := ConvADecimal('~'+Edit1.Text)+1; //Directamente sumo uno al valor decimal
  Label2.Caption := ConvABase36(Numero); //Se convierte el numero a Base36
end;

end.

Ahora, podemos sumar a cualquier cadena que nos coloquen, por ejemplo LX345J8ON99.

Nota: No se porque, pero solo suma correctamente hasta 12 digitos, pues bien, habría que mejorar este código.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ordenar una table numericamente por un campo alfanumerico jose.mendez Tablas planas 2 31-12-2007 17:56:16
longitud de un campo alfanumerico dtomeysoto SQL 2 10-03-2007 20:08:55
Generacion de scripts AMO Oracle 2 10-10-2005 17:55:15
Generación de archivos dcu jplj Varios 2 26-04-2005 21:44:29


La franja horaria es GMT +2. Ahora son las 15:20:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi