[ Foro de Pascal ]

me pueden ayudar con este codigo??? - reloj

29-Apr-2015 04:39
luis cisneros
7 Respuestas



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.


 


29-Apr-2015 04:58
Luis Torres (+18)

Al menos di qué pretende que tu programa haga, también si ya lo compilaste qué errores arrojó.

Saludos.


29-Apr-2015 05:04
luis cisneros

tiene que ser un reloj y se tiene que programar una alarma.
Corre bien pero el problema es que no suena la alarma


29-Apr-2015 05:36
Luis Torres (+18)

¿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.


29-Apr-2015 05:55
luis cisneros

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


29-Apr-2015 06:04
Luis Torres (+18)

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.


29-Apr-2015 06:14
luis cisneros

y como puedo solucionar esto???


29-Apr-2015 06:30
Luis Torres (+18)

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.)