152 lines
5.8 KiB
C++
152 lines
5.8 KiB
C++
//---------------------------------------------------------------------------
|
|
|
|
#include <vcl.h>
|
|
#pragma hdrstop
|
|
|
|
#include <stdio.h>
|
|
#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;
|
|
}
|
|
//---------------------------------------------------------------------------
|