 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Sab 18 Nov, 2006 5:37 am Asunto: numeros aleatorios no repetidos |
|
|
¿ Existe alguna función que me dé un cierto numero de valores enteros aleatorios no repetidos dentro de un rango de numeros ?
EJEMPLO:
De entre los valores 1 y 50, dame 5 Números aleatorios y no repetidos.
POSIBLES RESULTADOS:
{1,8,9,15,18,32}
{12,15,19,25,28}
{25,28,32,33,49}
{...}...
Es para hacerme un programita que me dé los numeros del EUROMILLON. _________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable. |
|
| Volver arriba |
|
 |
Josh Cdt


Registrado: 02 Jul 2006Mensajes: 6Ubicación: Armenia,Colombia
|
Publicado: Sab 18 Nov, 2006 3:53 pm Asunto: |
|
|
yo no se si exista una función para ello, pero yo lo haría así:
| Código: |
#include <iostream>
using namespace std;
void Aleatorios(int Rango_Min,int Rango_Max,int Cantidad,int Valores[])
{
int Rango = abs( Rango_Max-Rango_Min ) ;
int *Numeros = new int [Rango] ;
// Inicializa el arrreglo creado
for( int i=0; i<Rango ; ++i )
Numeros[i] = Rango_Min + i ;
// Se revuelven el arreglo Numeros
for( int i=0 ; i<Rango ; ++i ){
int indice = random( Rango );
int aux = Numeros[i] ;
Numeros[i] = Numeros[indice] ;
Numeros[indice] = aux ;
}
// Se copia la Cantidad deseada
for( int i=0 ; i<Cantidad && i<Rango ; ++i )
Valores[i] = Numeros[i] ;
delete [] Numeros ;
} |
en la función main o en algún evento (por ejemplo OnCreate), se debe inicializar la semilla para la función random
y para utilizar la función
| Código: |
int Numeros[5];
Aleatorios(0,50,5,Numeros);
|
yo la probe varias veces y me arrojo:
Numeros={19,38,6,21,46}
Numeros={32,9,28,35,17}
lo cual muestra que funciona bien.
Saludos _________________ Jaime Alberto López R.
www.geocities.com/jaimealopezr |
|
| Volver arriba |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Mie 22 Nov, 2006 10:59 pm Asunto: |
|
|
Con la función que me das, se repiten numeros.
De esta forma funciona perfectamente:
Codigo Archivo.h:
| Código: |
//---------------------------------------------------------------------------
#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ExtCtrls.hpp>
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
TPanel *Panel1;
TEdit *Edit1;
TEdit *Edit2;
TEdit *Edit3;
TEdit *Edit4;
TEdit *Edit5;
TLabel *Label1;
TLabel *Label2;
TEdit *Edit6;
TEdit *Edit7;
TEdit *Edit8;
TEdit *Edit9;
TEdit *Edit10;
TLabel *Label3;
TLabel *Label4;
TEdit *Edit11;
TEdit *Edit12;
TEdit *Edit13;
TEdit *Edit14;
TEdit *Edit15;
TLabel *Label5;
TLabel *Label6;
TEdit *Edit16;
TEdit *Edit17;
TEdit *Edit18;
TEdit *Edit19;
TEdit *Edit20;
TLabel *Label7;
TLabel *Label8;
TEdit *Edit21;
TEdit *Edit22;
TEdit *Edit23;
TEdit *Edit24;
TEdit *Edit25;
TLabel *Label9;
TLabel *Label10;
TLabel *Label11;
TLabel *Label12;
TLabel *Label25;
TEdit *Edit26;
TEdit *Edit27;
TEdit *Edit28;
TEdit *Edit29;
TEdit *Edit30;
TButton *Button1;
TEdit *Edit31;
TEdit *Edit32;
TEdit *Edit33;
TEdit *Edit34;
TEdit *Edit35;
TEdit *Edit36;
TEdit *Edit37;
TEdit *Edit38;
TEdit *Edit39;
TEdit *Edit40;
TEdit *Edit41;
TEdit *Edit42;
void __fastcall Button1Click(TObject *Sender);
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
void __fastcall EuroMillon(int Numeros[]);
void Intercambio(int &x, int &y);
//---------------------------------------------------------------------------
#endif |
Código Archivo.cpp:
| Código: |
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <Math.hpp>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Randomize();
int Apuestas[7]={0,0,0,0,0,0,0};
int Componente = Edit1->ComponentIndex;
int Casilla = 0;
int Estrella = Edit31->ComponentIndex;
for(int Suma = 0;Suma < 6; Suma++)
{
EuroMillon(Apuestas);
if(Suma > 0)
{
Componente = Componente + 5;
Estrella = Estrella +2;
}
for(Casilla = 0; Casilla < 5;Casilla++)
{
((TEdit*)Components[Componente+Casilla])->Text = String(Apuestas[Casilla]);
}
for(Casilla = 0; Casilla < 2;Casilla++)
{
((TEdit*)Components[Estrella +Casilla])->Text = String(Apuestas[Casilla+5]);
}
}
}
//---------------------------------------------------------------------------
void __fastcall EuroMillon(int Numeros[])
{
int Numero = 0; //Numero elegido
int cont_Apuesta = 0;//Apuesta que juega de 0 a 4
int Orden[7] = {0,0,0,0,0,0,0};// Para ordenar Numeros que juegan
// Primeros 5 Enteros de la Apuesta
for(cont_Apuesta; cont_Apuesta < 5;cont_Apuesta++)
{
Numero = RandomRange(1,51);
if(Numero == Numeros[0])
cont_Apuesta--;
else
Numeros[0] = Numero;
Numero = RandomRange(1,51);
if(Numero == Numeros[0] || Numero == Numeros[1])
cont_Apuesta--;
else
Numeros[1] = Numero;
Numero = RandomRange(1,51);
if(Numero == Numeros[0] || Numero == Numeros[1] || Numero == Numeros[2])
cont_Apuesta--;
else
Numeros[2] = Numero;
Numero = RandomRange(1,51);
if(Numero == Numeros[0] || Numero == Numeros[1] || Numero == Numeros[2] || Numero == Numeros[3])
cont_Apuesta--;
else
Numeros[3] = Numero;
Numero = RandomRange(1,51);
if(Numero == Numeros[0] || Numero == Numeros[1] || Numero == Numeros[2] || Numero == Numeros[3] || Numero == Numeros[4])
cont_Apuesta--;
else
Numeros[4] = Numero;
}
// Ultimos dos Enteros de la Apuesta
for(cont_Apuesta = 0; cont_Apuesta < 2;cont_Apuesta++)
{
Numero = RandomRange(1,10);
if(Numero == Numeros[5])
cont_Apuesta--;
else
Numeros[5] = Numero;
Numero = RandomRange(1,10);
if(Numero == Numeros[5] || Numero == Numeros[6])
cont_Apuesta--;
else
Numeros[6] = Numero;
}
// Ordenar Array de los primeros 5 Enteros
int i, j;
for(i = 0; i < 4; i++)
for(j = i+1; j<5; j++)
if(Numeros[i] > Numeros[j])
Intercambio(Numeros[i], Numeros[j]);
// Ordenar Array de los Ultimos 2 Enteros
for(i = 5; i < 6; i++)
for(j = i+1; j<7; j++)
if(Numeros[i] > Numeros[j])
Intercambio(Numeros[i], Numeros[j]);
}
// Intercambia el contenido de 'X' en 'Y' y de 'Y' en 'X'
void Intercambio(int &x, int &y)
{
int aux = x;
x = y;
y = aux;
} |
Gracias por tu aportación. _________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable. |
|
| Volver arriba |
|
 |
Josh Cdt


Registrado: 02 Jul 2006Mensajes: 6Ubicación: Armenia,Colombia
|
Publicado: Jue 23 Nov, 2006 2:54 am Asunto: |
|
|
Cuando dices que se repiten números te refieres a que se repite alguno de los cinco números del arreglo generado o que se repiten en cojunto algunas de las combinaciones?
Yo probé el siguiente código:
| Código: |
#include <conio>
#include <iostream>
using namespace std;
void Aleatorios(int Rango_Min,int Rango_Max,int Cantidad,int Valores[])
{
int Rango = abs( Rango_Max-Rango_Min ) ;
int *Numeros = new int [Rango] ;
// Inicializa el arrreglo creado
for( int i=0; i<Rango ; ++i )
Numeros[i] = Rango_Min + i ;
// Se revuelven el arreglo Numeros
for( int i=0 ; i<Rango ; ++i ){
int indice = random( Rango );
int aux = Numeros[i] ;
Numeros[i] = Numeros[indice] ;
Numeros[indice] = aux ;
}
// Se copia la Cantidad deseada
for( int i=0 ; i<Cantidad && i<Rango ; ++i )
Valores[i] = Numeros[i] ;
delete [] Numeros ;
}
void main()
{
// Semilla para los valores aleatorios
randomize();
int Numeros[7];
for( int k=0 ; k<50 ; k++ ){
Aleatorios(0,50,7,Numeros);
for( int i=0 ; i<7 ; i++ )
cout << Numeros[i] << " " ;
cout << '\n' ;
}
getch();
}
|
y genera 50 combinaciones de números.
Míralo y me cuentas. Lo único que faltaría es ordenarlos.
Saludos. _________________ Jaime Alberto López R.
www.geocities.com/jaimealopezr |
|
| Volver arriba |
|
 |
JesúsGandia Master


Registrado: 17 Jul 2004Mensajes: 403Ubicación: Gandia, Valencia
|
Publicado: Jue 23 Nov, 2006 9:21 pm Asunto: |
|
|
correcto, funciona. _________________ Muchos hombres no se equivocan jamás porque no se proponen nada razonable. |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|