[ Foro de Pascal ]
program reloj;
uses
crt,dos;
var
hrs,min,seg,h,m,hs,mm :integer;
opcion :char;
procedure cambio_de_hora;
begin
writeln('Cambiar hora');
readln(h);
hrs:=h;
writeln('Cambiar minutos');
readln(m);
min:=m;
seg:=seg;
end;
procedure programar_alarma;
begin
write('¨A que hora desea progrmar la alarma?');
writeln;
read(hs);
write(':');
read(m);
end;
procedure sonido;
begin
if (hs=h) and (m=mm)
then
begin
repeat
sound(1000);
until keypressed;
end;
end;
procedure relojs;
begin
seg:=seg;
repeat
gotoxy(18,19);
writeln('°°°°°°°°°°°°°');
gotoxy(18,20);
writeln('°');
gotoxy(18,21);
writeln('°°°°°°°°°°°°°');
gotoxy(30,20);
writeln('°');
gotoxy(20,20);
writeln(hrs,' : ',min,' : ',seg);
seg:=seg+1;
delay(1000);
if seg=60 then
begin
seg:=0;
min:=min+1;
end;
if min=60 then
begin
min:=0;
hrs:=hrs+1
end;
if hrs=24 then
hrs:=0;
until keypressed;
end;
begin
repeat
clrscr;
writeln('1.-Ajustar reloj');
writeln('2.-Programar alarma');
writeln('3.-Salir del programa');
opcion :=readkey;
case opcion of
'1':
begin
cambio_de_hora;
end;
'2':
begin
programar_alarma;
sonido;
end;
end;
relojs;
until opcion='3';
end.
Al menos di qué pretende que tu programa haga, también si ya lo compilaste qué errores arrojó.
Saludos.
tiene que ser un reloj y se tiene que programar una alarma.
Corre bien pero el problema es que no suena la alarma
¿Para qué sirve el procedimiento cambio_de_hora y programar_alama? , ¿será que si cambio la hora a 10:00:00 y pongo la alarma a las 10:01:00, deberá producirse un sonido en 60 segs.? He tratado en poner la hora, pero luego no me permite colocar la alarma.
en cambio_de_hora es para cambiar la hora del reloj original
y programar_ alarma es para poner la hora a la que se quiere que empiece producir el sonido.
Ese es el problema, el sonido no se reproduce en cuanto llega la hora
Para que se produzca el sonido hs debe ser igual a h y mm a m; pero eso nunca ocurrirá porque tu código no permite que se introduzca la hora y se programe la alarma al mismo tiempo.
Otra cosa que te quiero decir es que después del repeat-until del procedimiento sonido, tendrás que colocar la instrucción:
nosound;
porque cuando logres que el sonido se produzca, nunca lo podrás detener. Para pararlo tendrás que cerrar el IDE de Turbo Pascal.
y como puedo solucionar esto???
Ok, olvídate de lo que escribí sobre que no se podía colocar la hora actual y la alarma al mismo tiempo. Ya entendí todo, solo que el usuario tenderá a confundirse porque el reloj se muestra cada vez que configuras la hora y colocas la alarma y el cursor se queda abajo.
Creo que a tu programa le falta organizar mejor las ideas, lo óptimo sería que la alarma suene cuando las horas, los minutos y segundos del reloj y la alarma sean iguales, pero esto no es así, suena tan solo cuando la hora y los minutos sean iguales.
Ya logré que sonara la alarma, deberás hacer unos pequeños cambios en el procedimiento relojs y en el de sonido, porque utilizaste las variables equivocadas en la condición del if del procedimiento sonido. La llamada a sonido se hace desde relojs.
Te dejo el código corregido para que lo revises en los puntos que te comenté en el párrafo anterior. Yo por mi parte me iré a dormir:
program reloj;
uses
crt,dos;
var
hrs,min,seg,h,m,hs,mm :integer;
opcion :char;
procedure cambio_de_hora;
begin
writeln('Cambiar hora');
readln(h);
hrs:=h;
writeln('Cambiar minutos');
readln(m);
min:=m;
seg:=seg;
end;
procedure programar_alarma;
begin
write('¨A que hora desea progrmar la alarma?');
writeln;
read(hs);
write(':');
read(m);
end;
procedure sonido;
begin
if (hrs=hs) and (m=min)
then
begin
repeat
sound(1000);
until keypressed;
nosound;
end;
end;
procedure relojs;
begin
seg:=seg;
repeat
gotoxy(18,19);
writeln('°°°°°°°°°°°°°');
gotoxy(18,20);
writeln('°');
gotoxy(18,21);
writeln('°°°°°°°°°°°°°');
gotoxy(30,20);
writeln('°');
gotoxy(20,20);
writeln(hrs,' : ',min,' : ',seg);
seg:=seg+1;
delay(1000);
if seg=60 then
begin
seg:=0;
min:=min+1;
end;
if min=60 then
begin
min:=0;
hrs:=hrs+1
end;
if hrs=24 then
hrs:=0;
sonido;
until keypressed;
end;
begin
repeat
clrscr;
writeln('1.-Ajustar reloj');
writeln('2.-Programar alarma');
writeln('3.-Salir del programa');
opcion :=readkey;
case opcion of
'1':
begin
cambio_de_hora;
end;
'2':
begin
programar_alarma;
sonido;
end;
end;
relojs;
until opcion='3';
end.
Espero te sea de utilidad.
Saludos.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)