//--------------------------------------------------------------------------- #include #pragma hdrstop #include #include "GNum.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { ComboBox1->ItemIndex = 0; ComboBox2->ItemIndex = 1; ComboBox3->ItemIndex = 2; ComboBox4->ItemIndex = 3; ComboBox5->ItemIndex = 4; ComboBox6->ItemIndex = 5; mismaDecena->ItemIndex = 1; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { // Comprueba que no se repiten /* if ( (ComboBox1->ItemIndex != ComboBox2->ItemIndex && ComboBox1->ItemIndex != ComboBox3->ItemIndex && ComboBox1->ItemIndex != ComboBox4->ItemIndex && ComboBox1->ItemIndex != ComboBox5->ItemIndex && ComboBox1->ItemIndex != ComboBox6->ItemIndex ) && (ComboBox2->ItemIndex != ComboBox3->ItemIndex && ComboBox2->ItemIndex != ComboBox4->ItemIndex && ComboBox2->ItemIndex != ComboBox5->ItemIndex && ComboBox2->ItemIndex != ComboBox6->ItemIndex ) && (ComboBox3->ItemIndex != ComboBox4->ItemIndex && ComboBox3->ItemIndex != ComboBox5->ItemIndex && ComboBox3->ItemIndex != ComboBox6->ItemIndex ) && (ComboBox4->ItemIndex != ComboBox5->ItemIndex && ComboBox4->ItemIndex != ComboBox6->ItemIndex ) && (ComboBox5->ItemIndex != ComboBox6->ItemIndex ) ) */ if ( (ComboBox1->ItemIndex < ComboBox2->ItemIndex && ComboBox2->ItemIndex < ComboBox3->ItemIndex && ComboBox1->ItemIndex < ComboBox4->ItemIndex && ComboBox1->ItemIndex < ComboBox5->ItemIndex && ComboBox1->ItemIndex < ComboBox6->ItemIndex ) ) { // Comenzamos a generar ShowMessage( "Ahora empezare a generar números, aunque parezca que estoy COLGADO, no es asi, sigo trabajando en tu petición" ); FILE *stream; char buf1[20], buf2[20], buf3[20], buf4[20]; char buffer[80]; if ((stream = fopen("gnum.txt", "w+"))== NULL) { ShowMessage( "No puedo abrir el fichero. PUEDE que ya este en USO" ); } else { int V1 = ComboBox1->ItemIndex + 1; int V2 = ComboBox2->ItemIndex + 1; int V3 = ComboBox3->ItemIndex + 1; int V4 = ComboBox4->ItemIndex + 1; int V5 = ComboBox5->ItemIndex + 1; int V6 = ComboBox6->ItemIndex + 1; int ColumnaActual = 0; long int Cuantos = 0, CuantosGenero = 0; while(1) { Cuantos++; // Incrementamos (si nos lo permiten) la 1ª cifra V6 ++; if ( V6 > 49 ) { if ( !CheckBox5->Checked ) break; V5++; V6 = V5+1; if ( V5 > 48 ) { if ( !CheckBox4->Checked ) break; V4++; V5 = V4+1; V6 = V5+1; if ( V4 > 47 ) { if ( !CheckBox3->Checked ) break; V3++; V4 = V3+1; V5 = V4+1; V6 = V5+1; if ( V3 > 46 ) { if ( !CheckBox2->Checked ) break; V2++; V3 = V2+1; V4=V3+1; V5 = V4+1; V6 = V5+1; if ( V2 > 45 ) { if ( !CheckBox1->Checked ) break; V1++; V2=V1+1; V3=V2+1; V4=V3+1; V5 = V4+1; V6 = V5+1; if ( V1 > 44 ) { break; } } } } } } if ( cumpleRestoCondiciones(V1, V2, V3, V4, V5, V6) ) { CuantosGenero++; switch ( ColumnaActual ) { case 3: sprintf( buf4, "%02d-%02d-%02d-%02d-%02d-%02d", V1, V2, V3, V4, V5, V6); sprintf( buffer, "%s %s %s %s\r", buf1, buf2, buf3, buf4 ); /* write some data to the file */ fwrite(buffer, 79, 1, stream); ColumnaActual = 0; break; case 2: sprintf( buf3, "%02d-%02d-%02d-%02d-%02d-%02d", V1, V2, V3, V4, V5, V6); ColumnaActual++; break; case 1: sprintf( buf2, "%02d-%02d-%02d-%02d-%02d-%02d", V1, V2, V3, V4, V5, V6); ColumnaActual++; break; case 0: sprintf( buf1, "%02d-%02d-%02d-%02d-%02d-%02d", V1, V2, V3, V4, V5, V6); ColumnaActual++; break; } } }; fclose(stream); sprintf( buffer, "Ya he acabado. He generado %ld combinaciones y me he quedado con %ld.", Cuantos, CuantosGenero ); ShowMessage( buffer ); } } else { ShowMessage( "El número de comienzo no puede repetirse, y debe estar ordenado de MENOR a MAYOR" ); } } //--------------------------------------------------------------------------- bool __fastcall TForm1::cumpleRestoCondiciones(int V1, int V2, int V3, int V4, int V5, int V6) { bool dev=true; int numDistintaDecena = mismaDecena->ItemIndex + 3; // Verificamos que no haya mas de X números de la misma decena int nDecenas[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; nDecenas[V1/10]++; nDecenas[V2/10]++; nDecenas[V3/10]++; nDecenas[V4/10]++; nDecenas[V5/10]++; nDecenas[V6/10]++; for ( int i=0;i<10;i++ ) { if ( nDecenas[i]>=numDistintaDecena ) { dev = false; break; } } return dev; } //---------------------------------------------------------------------------