Pascal/Turbo Pascal - dudas básicas sobre random en arrays

 
Vista:

dudas básicas sobre random en arrays

Publicado por cobo (4 intervenciones) el 07/01/2003 12:55:52
Hola. Este es mi primer post, asi que a ver qué tal sale ;-).

El caso es que debo escribir un programa para rellenar con valores aleatorios lo que sería una quiniela.

Esto es el principio del programa:

program quiniela;
type
posibilidades = ('1', 'x', '2');
tabla= array [1..MAX_fila,1..MAX_columna] of posibilidades;

const
MAX_fila=15;
MAX_columna=3;

var
respuesta:char;
resultado:posibilidades;

begin
Writeln('Quiere rellenar la quiniela?(S/N)')
Readln(respuesta)
case respuesta of s
.................................................

Y ahí seguiría. Mi rpimer problema es que no sé por qué me da error de "identifier expected" en el type posibilidades. El segundo es que tampoco me entero muy bien de la diferencia entre random y randomize, la tercera y más importante, que no sé cómo hacer para meter esos valores aleatorios en mi tabla. Porque meter valores aleatorios en cada casilla de una línea sí sé, pero no consigo hacer que rellene tan sólo una casilla de caca fila del array y que pase a la siguiente.

Cómo véis soy muy novato y estoy hecho un lío... Agradecería cualquier ayuda que me pudieran dar.

Gracias

Salu2!


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:dudas básicas sobre random en arrays

Publicado por César Augusto Navarro Gómez (182 intervenciones) el 07/01/2003 23:44:47
Cobo porque no intentas el siguiente código, talvez no está tan elaborado pero puede ser que si te corra, no tengo a la mano un compilador pero indicame si tienes algún error:

program quiniela;
uses
crt;
var
partidos:array [1..15,1..3] of byte;
i,j,resultado:byte;
begin
clrscr;
write('Pulsa ENTER para iniciar el llenado');
readln;
randomize
for i:=1 to 15 do
begin
for j:=1 to 3 do
partidos[i,j]:=0;
resultado:=random(3)+1;
partidos[i,resultado]:=1;
end;
end.

De esta manera tendrías en partidos una serie de valores en donde un 0 te indica que no está activa la casilla y un uno que ese fue el ganador del partido p.ej. 010 sería un empate, 100 el primero ganó, etc.
Ojalá te sirva
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:dudas básicas sobre random en arrays

Publicado por Cobo (4 intervenciones) el 07/01/2003 23:52:50
Hola!

Muchísimas gracias por el interés y la ayuda. Al final, he conseguido ahcerlo así, pero tengo alguna duda. El código que he puesto es este:

program quiniela;
uses crt;
const
MAX=15;

type
posibilidades= array [1..MAX] of integer;

var
respuesta:char;
resultado:posibilidades;

(*Declaraci¢n de procedimientos y funciones *)
procedure rellenar (var j:posibilidades);
var i:integer;
begin
for i:=1 to MAX do
randomize;
j[i]:=random(3);
writeln(j[i]);
end;


begin
clrscr;
Writeln('Quiere rellenar la quiniela?(S/N)');
repeat
respuesta:=upcase(readkey);
if respuesta='S'then
rellenar(resultado);
if respuesta='N' then
¿?¿?¿?¿?¿?
until respuesta='S' or respuesta='N';
else repeat.

Yo diría que el procediimento está bien. Luego tan sólo sería hacer un cambio para que en donde sale 0, escriba x, y listo. Eso es fácil. Pero... ¿cómo hago para que si escribe N se salga del programa? Porque si pon "end." a secas, no me compila bien. ¿Cómo defino para que si no escribe ninguna de esas opciones vuelva a formular la pregunta? Muchas gracias por todo. Que esto de ser novato... es muy duro ;-)

Nos vemos!
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:dudas básicas sobre random en arrays

Publicado por Diego Romero (786 intervenciones) el 08/01/2003 00:07:41
repeat
Write('Respuesta (S/N)';
Respuesta:=UpCase(ReadKey);
until A in ['S','N'];
if Respuesta = 'S' then Hacer_lo_que_haya_que_Hacer;
end.
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:dudas básicas sobre random en arrays

Publicado por Diego Romero (786 intervenciones) el 08/01/2003 00:12:09
No puedes usar un identificador que todavía no se ha declarado. En tu ejemplo la sección Const debería estar antes de la Type.
Randomize inicia el algoritmo que genera números aleatorios, puedes usarlo o no pero si no lo usas siempre se generarán los mismos números, en cambio si lo usas llamalo solo una vez al inicio del programa.
Random es una función que devuelve un número entero (de tipo Word), que puede estar en el rango desde cero hasta el número que le pases en el unico parámetro de la función menos 1.
Ejemplo
Randomize;
A:=Random(100);

La variable A contendrá un número entre cero y 99 inclusive elejido al azar.
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:dudas básicas sobre random en arrays

Publicado por César Augsuto Navarro Gómez (182 intervenciones) el 08/01/2003 00:53:19
Para detener el programa sin modificar la estructura del código puedes emplear también un llamado a la función Halt, que automáticamente devuelve el control al Sistema Operativo, si tepide un parámetro dale un cero "Halt(0);" pero intentalo sin el cero creo que tambien funciona, si no es así el cero le indica que el programa terminó correctamente, otro valor equivale a un código de error.
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:dudas básicas sobre random en arrays

Publicado por Cobo (4 intervenciones) el 08/01/2003 21:00:28
Hola de nuevo!

Veamos. He conseguido hacer lo importante del programa que es sacar los resultados para cada partido. Me falta la parte de la pregunta, que no sé cómo hacer para que se repita hasta que la respuesta sea \'S\' ó \'N\'. Lo de repeat until A in [\'S\',\'N\'] no sé lo que es, no me han dado esa función \"in\" (es uqe estamos con lo más básico..:S). y aún así, no me funciona, me da un error, porque no tengo esa A y no sé exactamente a qué se refiere. Aquí les dejo como queda le programita al final, con el problemma de hacer que se repita la pregutna hasta que sea S ó N.
-------------------------------------------------------------
program quinielas;
uses crt;
const
MAXarray=15;
type
opciones = array [1..MAXarray] of integer;

var
respuesta:char;
resultado:opciones;

(* Declaración de procedimientos*)
procedure rellenar (var a:opciones);
var i:integer;
begin
Randomize;
for i:=1 to MAXarray do
begin
a[i]:=random(3);
case a[i] of
0: writeln(\'Partido \', i, \' --> X\');
1: writeln(\'Partido \', i, \' --> 1\');
2: writeln(\'Partido \', i, \' --> 2\');
end;
end;
end;

begin
clrscr;
repeat
Writeln(\'¨Quiere rellenar la quiniela?(S/N)\');
respuesta:=UpCase(readkey);
until respuesta=\'S\';
if respuesta = \'S\' then
rellenar(resultado);
repeat until keypressed;
end.
--------------------------------

Muchísimas gracias por toda la ayuda y apoyo que me están dando. Espero aprender para algún día devolver el favor a este foro ;-).

Salu2!
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:dudas básicas sobre random en arrays

Publicado por Diego Romero (786 intervenciones) el 09/01/2003 17:20:21
Amigo, la variable A debe ser del mismo tipo que devuelve Readkey, o sea un Char, pensé que eso era muy evidente!.
La palabra reservada "in" es un operador de conjuntos y evalua si el elemento que le precede está incluido en el conjunto que le sigue, de modo tal que if A in ['S','N'] then... significa si el contenido de la variable A está incluido en el conjunto ['S','N'] entonces hacer.-
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:dudas básicas sobre random en arrays

Publicado por Cobo (4 intervenciones) el 15/01/2003 20:43:11
Hola, y perdón por tanto tiempo sin escribir.

Muchísimas gracias por toda su ayuda Al final el programita cutre... me quedó así :-P!.

program quinielas;
uses crt;
const
MAXarray=15;
type
opciones = array [1..MAXarray] of integer;

var
respuesta:char;
resultado:opciones;

(* Declaraci¢n de procedimientos*)
procedure rellenar (var a:opciones);
var i:integer;
begin
Randomize;
for i:=1 to MAXarray do
begin
a[i]:=random(3);
case a[i] of
0: writeln('Partido ', i, ' --> X');
1: writeln('Partido ', i, ' --> 1');
2: writeln('Partido ', i, ' --> 2');
end;
end;
end;

begin
clrscr;
repeat
Writeln('¨Quiere rellenar la quiniela?(S/N)');
respuesta:=UpCase(readkey);
until respuesta in ['S','N'];
if respuesta = 'S' then
rellenar(resultado);
repeat until keypressed;
end.

Gracias a todos.

Salu2!
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