Pascal/Turbo Pascal - Numeros aleatorios

 
Vista:

Numeros aleatorios

Publicado por eltiolopez (3 intervenciones) el 17/12/2005 19:34:30
Wenas a tod@s.
Quisiera saber como hacer en Pascal una funcion que genere un numero aleatorio entre 1 y otro numero maximo que se le pase, y que sea distinto siempre que se le llame.
Y ya puestos, mi segunda duda es saber si hay alguna funcion o alguna manera de sacar el tiempo interno del ordenador para poder calcular el tiempo que pasa, por ejemplo, desde que se pulsa una tecla hasta que se vuelve a pulsar.
Gracias anticipadas.
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:Numeros aleatorios

Publicado por micropais (209 intervenciones) el 17/12/2005 21:42:55
uses crt;
var a:integer;
{*************************************************************************}
function num_aleatorio(maximo:word):longint;
begin
{ randomize: obtiene una semilla aleatoria NUEVA del reloj del sistema
si no usasemos randomize ,cada vez que usemos random x veces
terminaria por repetirse la secuencia aleatoria ,
no siendo tan aleatoria
}
randomize;
{ Random: genera un numero aleatorio entre 0 y maximo , puede ser 0 pero
nunca llega a ser maximo , tener en cuenta, }

num_aleatorio:=random(maximo);

end;
{*************************************************************************}
begin
clrscr;
{ Nota : - Random - genera un numero aleatorio entre 0 y maximo , puede
ser 0 pero nunca llega a ser maximo .
Aqu¡ simulamos la secuencia de tirar un DADO x veces , observa como
anulamos que salga un cero y forzamos a que salga un 6 , simplemente
sumando un 1 al n£mero generado }

Writeln('Deja Pulsado ESC para salir');

repeat
for a:=1 to 10 do begin
gotoxy(1,5);
write('Tirada ',a:4,' Valor:',num_aleatorio(6)+1:1,' ');
delay(3500);
end;
until port[$60]= 1;

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:Tiempo

Publicado por micropais (209 intervenciones) el 17/12/2005 23:59:26
las rutinas cursor_on y off estan por estetica , para que no parpadee el cursor
de la pantalla.
aquí te muestro dos formas diferentes de controlar el tiempo mediante gettime de pascal , y mediante BIOS .

Saludos y a estudiar un poquito mas.

______________________________________________________________

uses crt,windos; { gettime necesita la unidad Windos}
var hora,minuto,segundo,sec100:word;
tiempo_transcurrido:longint;
tiempo_inicial:longint;
tiempo_actual:longint;
dato:real;
{***************************************************************************}
procedure cursor_off;assembler;
{ * apaga el cursor del BIOS (no mouse) }
asm
mov ah,01
mov ch,20h
mov cl,12
int 10h
end;
procedure cursor_on;assembler;
{ * restablece el cursor por defecto BIOS }
asm
mov AH,01
mov CH,11
mov CL,12
int 10h
end;
{***************************************************************************}

begin
clrscr;
cursor_off;
gettime(hora,minuto,segundo,sec100);

{
en las siguientes posiciones de memoria que guarda el contador de hora
del dia BIOS se almacena el tiempo trancurrido que lleva encendido el
ordenador y el tiempo se mide en 18 avos de segundo, mas exactamente
18.2 avos de segundo

mem[$40:$006c]
mem[$40:$006d]
mem[$40:$006e]

mirar tambien la funcion 1ah del DOS
}

tiempo_inicial:=(mem[$40:$006c]+(mem[$40:$006d]*256)+(mem[$40:$006e]*65536));
repeat
gettime(hora,minuto,segundo,sec100);
gotoxy(1,2) ;
write('Hora:',hora,' Min:',minuto:2,' Seg:',segundo:2,' Dec: ',sec100:2,' ');

tiempo_transcurrido:=(mem[$40:$006c]+(mem[$40:$006d]*256)+(mem[$40:$006e]*65536));
tiempo_actual:=tiempo_transcurrido-tiempo_inicial;
gotoxy(1,4) ;
{dato:=(tiempo_actual /(18.2) );{}

dato:= tiempo_actual / 18.2;
writeln(' Transcurren ',dato:4:0 ,' segundos ');
writeln;
writeln(' Tiempo sin Redondear ',dato:4:5);

until port[$60]=1;

cursor_on;

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:Numeros aleatorios

Publicado por Allan Andrade (48 intervenciones) el 18/12/2005 15:23:57
Algo un poco mas sencillo.

program timer;
uses crt,dos;

const
wx1 = 35;
wy1 = 12;
wx2 = 45;
wy2 = 14;

var
h,m,s,sent,hb,mb,sb,sentb : word;
i : byte;

function salir : boolean; {esta funcion espera hasta que presions la tcla ESCAPE}
var
c : char;
begin
salir:=false;
if keypressed then
begin
c:=readkey;
if (ord(c)=27) then salir:=true;
end;
end; {fin de salir}

begin {Prog Principal}
clrscr;
write('presione enter para iniciar');
readln;
write('presione escape para salir');
window(wx1,wy1,wx2,wy2);
gettime(hb,mb,sb,sentb);
repeat
GetTime(h,m,s,sent); {con esto solicitas la hora interna de la pc}
gotoxy(2,2);Write(h:2,':',m:2,':',s:2);
until (salir);
window(1,1,80,25);
clrscr;
h:=h-hb;
m:=m-mb;
s:=s-sb;
write('Resultado >> ',h:2,':',m:2,':',s:2,' presione enter para salir');
readln;
end. {Fin Principal}

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:Numeros aleatorios

Publicado por patricia escalante (1 intervención) el 12/09/2011 21:07:20
no entendi ni
q malo
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