Orologio analogico in Turbo Pascal

Oggi vi presenteremo un programma in grado di simulare un orologio digitale. Per una piccola anteprima cliccate sull’immagine.

Immagine orologio offerta dal Reyboz Blog

Il file è disponibile gratuitamente da qui:

Analizziamo il programma

All’inizio vedremo una videata nera con una serie di numeri da zero a venti, e ci verrà chiesto di inserire il numero che per noi è al centro dello schermo. Il tutto verrà ripetuto finche non si inserisce uno di quei numeri da 0 a 20:

...
CLRSCR; (* Pulisci schermo *)
CC:=-1;
REPEAT (* Punto di ripetizione *)
FOR A:=0 TO 20 DO (* Ripeti 20 volte per scrivere 20 numeri *)
BEGIN
CC:=CC+1;
WRITE(CC:2,' ');
END; (* Fine ripetizione *)
WRITELN;
WRITELN;
WRITE('Scrivi il numero al centro del monitor: ');
READ(CC); (* L'utente inserisce CC *)
CLRSCR;
UNTIL (CC <= 20)AND(CC >= 0);
(* Da qui torna a 'repeat' se CC non è tra 0 e 20 *)
...

A questo punto il programma avrà come input questa fantomatica variabile CC. Servirà per sapere dove posizionare in futuro l’orologio, in modo che sembri al centro. Ma passiamo al punto in cui ci chiederà di inserire ore e minuti attuali, rappresentati da variabili intere HH e MM. Anche qui se l’ora inserita non sarà tra 0 e 24, e i minuti tra 0 e 60, il programma non andrà avanti e tornerà da capo:

...
REPEAT (* Punto di ritorno Until *)
IF(HH > 23)OR(MM > 59)OR(HH < 0)OR(MM < 0) THEN
WRITE('Errore formato. ');
WRITE('Scrivi l''ora attuale (HH MM): ');
READ(HH,MM); (* L'utente inserisce ora e minuti *)
CLRSCR; (* Ripulisci schermo *)
UNTIL (HH <= 23)AND(MM <= 59)AND(HH >= 0)AND(MM >=0);
...

Inseriti ore e minuti, siamo pronti a produrre l’orologio. Per fare ciò creeremo un’ulteriore variabile SS che conterrà i secondi, calcolati tramite uno script che rallenta di (17)*(17) mila volte il programma, avvicinandosi di molto ad un secondo reale:

...
T:=1700; (* T vale 1700 *)
WHILE(0 = 0)DO (* Inizia un ciclo infinito *)
BEGIN
SS:=SS+1; (* Aggiungi un secondo *)
FOR C:=0 TO T DO (* Inizio rallentamento *)
BEGIN FOR D:=0 TO T DO
BEGIN
END;
END; (* Fine rallentamento *)
CLRSCR;
IF(SS = 60)THEN (* Se ci sono 60 secondi crea un minuto *)
BEGIN
SS:=0;
MM:=MM+1;
END;
IF(MM = 60)THEN (* Se ci sono 60 min. crea un ora *)
BEGIN
SS:=0;
MM:=0;
HH:=HH+1;
END;
WRITE('Per interrompere: ctrl+pausa');
(* A questo punto a seconda di CC... *)
FOR A:=0 TO CC DO WRITELN; (* Crea CC spazi vuoti in verticale... *)
FOR B:=0 TO CC DO WRITE('   '); (* ...e in orizzontale *)
(* Ora scrivi ora, minuti, secondi *)
WRITE(' ',S1,HH:2,': ',MM:2,': ',SS:2,S2);
END;
...

Buona navigazione dallo staff.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *