1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
//---------------------------------------------------------------------------
AnsiString __fastcall ConversionIntToBase(__int64 Value, const AnsiString &Base)
{
AnsiString Result = "";
int BaseLen = Base.Length();
if (BaseLen >= 0)
{
if (Value >= BaseLen)
{
Result.SetLength(Floor(LogN(BaseLen, Value)) + 1); // LogN est-il plus rapide que des réallocations de chaine dans une boucle ?
char* pResult = Result.AnsiLastChar();
while (Value > 0)
{
*pResult = Base[Value % BaseLen + 1];
Value = Value / BaseLen; // Division entière en C++ grace au type !
pResult--;
}
}
else
Result = Base[Value + 1];
}
return Result;
}
//---------------------------------------------------------------------------
AnsiString __fastcall GetArrangementAvecRepetition(const AnsiString &Objets, int LongueurArrangement, __int64 Index)
{
AnsiString Result;
Result.SetLength(LongueurArrangement);
int TabSize = Objets.Length();
for (int J = LongueurArrangement; J > 0 ; J--)
{
Result[J] = Objets[Index % TabSize + 1];
Index = Index / TabSize; // Division entière en C++ grace au type !
}
return Result;
}
//---------------------------------------------------------------------------
void __fastcall TMathForm::BtnConvertionBaseClick(TObject *Sender)
{
MemoTrace->Lines->Add("---");
AnsiString Objets = "01234567";
for (int i = 0; i <= 257; i++)
MemoTrace->Lines->Add(IntToStr(i) + " : " + ConversionIntToBase(i, Objets));
MemoTrace->Lines->Add("---");
Objets = "0123456789ABCDEF";
for (int i = 0; i <= 257; i++)
MemoTrace->Lines->Add(IntToStr(i) + " : " + ConversionIntToBase(i, Objets));
MemoTrace->Lines->Add("---");
Objets = "azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN0123456789_$&#@";
for (int i = 0; i <= 67; i++)
{
MemoTrace->Lines->BeginUpdate();
for (int ii = 0; ii < 67; ii++)
{
MemoTrace->Lines->Add(IntToStr(i * 67 + ii) + "\t : " + ConversionIntToBase(i * 67 + ii, Objets) + " - \t" + GetArrangementAvecRepetition(Objets, 1, i * 67 + ii) + " - \t" + GetArrangementAvecRepetition(Objets, 2, i * 67 + ii) + " - \t" + GetArrangementAvecRepetition(Objets, 3, i * 67 + ii));
}
MemoTrace->Lines->EndUpdate();
}
MemoTrace->Lines->Add(IntToStr(123456789) + "\t : " + ConversionIntToBase(123456789, Objets) + " - \t" + GetArrangementAvecRepetition(Objets, 5, 123456789));
MemoTrace->Lines->Add(IntToStr(123456789123456789i64) + "\t : " + ConversionIntToBase(123456789123456789i64, Objets) + " - \t" + GetArrangementAvecRepetition(Objets, 10, 123456789123456789i64));
}
//--------------------------------------------------------------------------- |
Partager