Newsgroup: it.comp.lang.pascal
Titolo: orologio

Skusatemi, ma sono ancora io. il seguente prog crea un orologio "digitale",
e fin qui tutto ok, ma vorrei inserire una funzione ke permetta, dopo avr
premuto il tasto 'n', di uscire dall'esecuzione del progz. qualche
consiglio?? grazie
(*****************************)
program ora;
uses crt, dos;
var h, m, s, hund : Word;
    press:char;
function LeadingZero(w : Word) : String;
var s : String;
begin
   Str(w:0,s);
   if Length(s) = 1 then
      s := '0' + s;
   LeadingZero := s;
end;
begin
     while press<>'n' do begin
     Clrscr;
   GetTime(h,m,s,hund);
   Writeln(LeadingZero(h),':',LeadingZero(m),':',LeadingZero(s));
   delay(1000);
   end;
end.
(***********************************)

consiglio?? grazie
Direi che andrebbe bene il classico
repeat
[tutto quello che concerne l'orologio]
until readkey='n'
fammi sapere se funzia.

 ha scritto nel messaggio
news:3ca5c4a5...@powernews.libero.it...


 ha scritto nel messaggio
news:C2mp8.37287$pT1.1...@news1.tin.it...

sostituisci tutto il programma principale con questo...
begin
   repeat
     repeat
       Clrscr;
       GetTime(h,m,s,hund);
       Writeln(LeadingZero(h),':',LeadingZero(m),':',LeadingZero(s));
       delay(1000);
     until keypressed;
   until readkey='n';
end.
puoi eliminare anke la variabile press:char;
la regola č molto semplice: ripeti il ciclo dell'orologio finkč non viene
premuto un tasto: se il tasto viene premuto allora esci dal ciclo (quello
interno...). Dato che c'č un ciclo piů esterno (quello del readkey), essendo
uscito dal primo ciclo, evidentemente č stato premuto un tasto e quindi la
readkey contiene quel tasto... se č uguale ad 'n' allora esce
definitivamente altrimenti rientra nel ciclo + interno?
Capito?
Fammi sapere se ti piace...
Ciao
--
--------------------------------------------------
Carlo Camarda
chiamac...@tiscalinet.it
]@#[ Anna I Love You ]#@[

 consiglio?? grazie
[CUT]

    until readkey='n';
E' ridondante...  puoi scrivere brevemente:
repeat
 (* codice *)
until keypressed;
oppure....
while not keypressed do
  begin
   (* codice *)
  end;
Cordialmente Cooper.

 ha scritto nel messaggio
news:a856er$3t0$1...@newsreader.mailgate.org...

Marcè se fai come dici tu si aspetta che tu gli prema un tasto ma se non lo
premi il codice deve andare avanti, altrimenti fermarsi... il problema è che
deve essere il tasto 'n' e non uno qualsiasi quindi devi necessariamente
usarli tutti e 2...


until keypressed;
 Sě, ma l'uscita (cosě chiedeva) deve avvenire solo se
č premuto il tasto "n" , non un tasto qualsiasi. :)
Saluti.
--
    _
 Fa/_)io         A1200 PowerTower, WB 3.9, 060@60, 64MB, FireBall 13GB,
  /__)enedetti   Voodoo3, Digicom-10/100, Philips PCRW1208 - TFT-140/S.
/...entrarono Pompeo e Lepido, in assetto da guerra/

 Saluti.
Uhm ok....
considerando che il pascal mette a disposizione SOLO (poi non so) READ(LN),
KEYPRESSED e READKEY... i quali si aspettano sempre un dato in ingresso ad
eccezione di KEYPRESSED che restituisce TRUE o FALSE a secondo se viene
premuto o meno un tasto...
Credo che non sia fattibile una cosa del genere a meno di non ricorrere a un
TSR (Programma residente in memoria) che generi periodicamente (<1 sec) una
chiamata al programma avvertendo o meno la procedura che č stato premuto il
tasto N.
Altra via possibile potrebbe essere quella di un codice in assembler.... ma
non so....
Dovendomi affidare alla logica, la cosa andrebbe gestita due due processi
indipendenti cosa impossibile col pascal in uno stesso processo
E poi ci sarebbe il fatto che se c'č se si aspetta un input, il programma
deve arrestarsi fino a quando non lo riceve (anche senza premere INVIO)
proprio come avviene con readkey che non hai bisogno di premere invio ma
restituisce solo lo stato: tasto prumuto / tasto non premuto.
Non sono un esperto di pascal....  ma credo che l'unico modo sarebbe
interrogare ogni secondo la procedure e se non riceve alcuna risposta entro
un secondo dalla chiamata ignorare e continuare l'esecuzione.e questo č
fattibile solo facendo ricorso a un programma esterno residente in memoria.
Dove appunto c'č un meccanismo di interrogazione dei vari dispositivi I/O
periodico....  (mi fermo qui che sennň vado OT) :P
Cordialmente, Cooper.

 readkey contiene quel tasto... se è uguale ad 'n' allora esce


Ciao, se non ho capito male tu volevi questo:
Program Ora;
uses crt,dos;
var   h,m,s,cs  : word;
      tasto     : char;
      regs      : registers;
Procedure Nascondi_Cursore;
                                {QUESTA PROCEDURA SERVE SOLO A NASCONDERE}
 begin                          {IL CURSORE LAMPEGGIANTE}
  Regs.AH := $01;
  Regs.CH := 16;
  Regs.CL := 0;
  Regs.CH := Regs.CH and not $20;
  Regs.AL := LastMode;
  Intr($10,Regs);
 end;
begin
   clrscr;
   Nascondi_Cursore;
   repeat
      gettime(h,m,s,cs);
      gotoxy(36,11);
      write(h,':',m,':',s);
      if keypressed then
         begin
            tasto:=readkey;
         end;
   until (tasto='n') or (tasto='N');
end.

var
 c: char
repeat
 {...}
 if keypressed then c := readkey;
until c = 'n';
--
Dreadnaut
(Life would be easier if I had the source code)