Pascal/Turbo Pascal - Loco

 
Vista:

Loco

Publicado por Carlos (5 intervenciones) el 22/09/2008 02:47:18
Miren tnego ya algo avanzado para un programa de loteria que va asi

program loteria;
uses crt;
var
a,b,c,d,f:integer;
Plantillas: Array[1..12] of integer;
Tarjetas: Array[1..30,1..12] of integer;


Begin
clrscr;
Randomize;
For d:=1 to 30 do
begin
For a:=1 to 12 do
Begin
Tarjetas[d][a]:=Random(54); // Gennera los valores para cada tarjeta que son 30 tarjetas
For b:=12 to 1 do de loteria con 12 figuritas por tarjeta
Chekeo de que no se repitna el numero
if (Tarjetas[d][b] = Tarjetas[d][a]) then Tarjetas[d][a]:=Random(54);
For c:=1 downto 12 do
if (Tarjetas[d][c] = Tarjetas[d][b]) then Tarjetas[d][a]:=Random(54);
end;
end;
For f:=1 to 5 do
for d:=1 to 12 do
Writeln(f,'','',d,' Valor ', Tarjetas[f][d]);
Writeln;
readln;
end.

Ahora el problema es que como son 30 tarjetas por 360 solo peudop repetir los numeros 7 veces pero de ahy me bloqueo y no se que pedo para que no me salgan las tarjetas repitidas alguein me podria dar una ayudadita ??
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Loco

Publicado por Miguel (159 intervenciones) el 22/09/2008 03:37:03
No se si te entendí bien, pero no quieres que se repita un numero?. Si es así te paso a comentar que hace poco tuve que hacer un programa para sortear equipos sea la cantidad dada. Obviamente cada equipo podía tener una única posición.
Utilice un esquema de recorrido es decir, dentro de un ciclo yo sorteaba un numero y luego recorría la secuencia de adelante para atrás viendo si ya había salido ese numero, si no se había sorteado ese numero, incrementaba el indice del arreglo, pero sino, no lo hacia, por ende se volvería a sortear el numero.
En definitiva es un recorrido de búsqueda.
Si este es tu problema espero que te sirva, en caso contrario replantealo así puedo ayudarte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Replanteado

Publicado por Carlos (5 intervenciones) el 22/09/2008 20:25:32
con el codigo que les digo me sale checar la tarjeta de 12 numeros en un areglo bidimencional o sea de 2 numeros me sale bien el nuemro de tarjeta que es de 1-30 con random numeros

ahroa mi probleam es que solo tnego 54 cartas para jugarlo o sea 54 numeros segun mis calculos solo puedo repetir estos numeros solo 7 veces en cada grupo de tarjeta mi idea original era asiganr n rango de valores a randomo pero por los visto no peudo hacerlo si no que solo puedo meteru numero entero al valor y que sea integer

Mi duda es como puedo hacer que ese codigo me detecte cuantas veces sale cada numero que tengo idea que serai como idces miguel haciendo uan busqueda pero no entendi muy bien lo del arreglo o sea le quitabas un valor al arreglo o que onda ??

o sea por default en 30 tarjetas con 54 numero tnego dado que cada 4.5 veces se me repite el mismo valor ya he hehco todo pero es matematicamente imposible que no se repita cada 4.5 veces tons lo que se me ocurrio es como decia quitar un avlor ejemplo

si se repitio 7 veces el numeor 1 ya no sep eude tomar ese valor tons el random seria de 2-54 eso seria en teoria pero la verdad toy dispuesto a cualqueir idea pro que ando bloqueado :p y no se me ocurre nada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Replanteado

Publicado por Miguel (159 intervenciones) el 22/09/2008 21:01:46
A ver si con el código me hago entender mejor:

PROCEDURE Sortear (cE : INTEGER); { cE es la cantidad de equipos a sortear }
VAR
recor : INTEGER;
bandera,flag : BOOLEAN;
aux : INTEGER; { aux sera utilizado como indice }

BEGIN
Randomize;
aux:=cE; { esta asignación la hago por que cargo el arreglo de atras para adelante, es decir si son 30 equipos el indice va a decrecer de 30 hasta 1 }
WHILE aux>=1 DO
BEGIN
equipos[aux].posicion:=Random(cE+1); { se le asigna un numero al azar}
recor:=cE; { recor es el indice que utilizare para comparar, ya que no puedo mover el de aux que mantiene el valor del numero que queremos comparar }
bandera:=FALSE;
flag:=FALSE;
WHILE (bandera=FALSE) AND (flag=FALSE) DO
BEGIN
IF recor=0
THEN
flag:=TRUE
ELSE BEGIN
IF equipos[aux].posicion=0
THEN
bandera:=TRUE
ELSE
IF (equipos[aux].posicion=equipos[recor].posicion) AND (recor<>aux) { aca lo que dice es, si mi numero sorteado es igual a otro, PERO deben ser diferentes los indices, por que siempre va a encontrar uno igual con el mismo indice, ya que es el mismo elemento , por eso los indices deben ser iguales }
THEN
bandera:=TRUE;
END;
recor:=recor-1; { decremento el indice }
END;
IF (bandera=FALSE)AND(flag=TRUE) { ahora si las banderas son falsas quiere decir que no se encontró ningún numero repetido, por lo tanto decrementamos el indice principal para sortear en esa posicion , en caso de que alguna bandera sea verdadera (es decir que se repite un numero) , aux como indice no cambia quedando en la misma posicion, y a travez del ciclo se vuelve a sortear }
THEN
aux:=aux-1; { decremento el indice }
END;
END;

Bueno espero que sirva, no soy muy bueno explicando pero otra forma no se me ocurre. Saludos y suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Replanteado

Publicado por carlos (5 intervenciones) el 22/09/2008 22:45:16
k gracias lo probare _:p
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar