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
|
void MUL ( AnsiString S, AnsiString D[] )
{
// recherche d'1 'antériorité'
int i = -1;
do
{
i++;
} while (( D[i] !="" ) && ( D[i] != S));
if ( D[i] == S ) return;// si non il y a de la redondance
D[i] = S; // on ajoute ce string à ceux traités
AnsiString A = ""; // uniquement pour reporter la multiplication consernée
long U = 1; // résultat de la multiplication
for ( short j=0; j < S.Length(); j++)
{
U *= (int ( S[j+1])-48); // valeur de la X
A = A + S[j+1] + " * "; // commentaire sur la X en cours
}
A.Delete(A.Length()-2,3); // suppression du dernier ' * '
Form1->ListBox1->Items->Add(A + " = " + IntToStr(U)); // ajout du résultat dans 1 list box
for ( i=0; i < S.Length(); i++)
{
// ici commence la récurence à partir du string courrant.
AnsiString An="";
for ( short j=0; j < S.Length(); j++) if (j != i ) An = An + S[j+1];
MUL(An,D);
}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int n = Edit1->Text.Length(); // entrer ici 1 12 123 1234 12345 ..
int m=1;
for (short j=1; j <= n; j++) m *= 2; // 2^n
AnsiString *A = new AnsiString[m]; // en fait 2^n - 1 suffirait car on elimine l'ensemble vide
for ( int j =0; j < m; j++ ) A[j] =""; // afin d'initialiser les AnsiString
ListBox1->Clear();
MUL(Edit1->Text,A);
delete [] A;
} |