| La procedura è scritta
in Pascal. L’analisi delle istruzioni del programma sorgente evidenzia le varie fasi della procedura:
| predispone
il campo di acquisizione con (“tipo”=1), o senza
(“tipo”=0), cornice
[1] |
| organizza
il ciclo d'acquisizione dei caratteri della stringa
[2]
| controlla la presenza del cursore
[3] |
| legge di tasti, con “eco a video” e
memorizza nel vettore i soli caratteri ammessi
[4] |
| eventuale servizio del tasto <BackSpace>
[5] |
| segnala errore se si cancella indietro
troppo [6] |
| segnala errore alla pressione di ogni altro
tasto [7] |
| uscita dal ciclo d’acquisizione esclusivamente con la pressione di <Enter>
[8] |
|
| opera
la conversione tra la stringa decimale
e il suo valore decimale long-integer
[9] |
| se
“giust”=1
“giustifica a destra” i caratteri nella stringa
d’acquisizione [10] |
Codice Sorgente |
|
|
|
|
PROCEDURE
INnumer (VAR
lunghezza:integer;
VAR stringa:Array of
char;
VAR
numero:longint;
max,rig,col,txt,sfo,tipo,giust:integer);
VAR
l,i,j,r,err:integer;
tasto:char;
ex,tot:longint;
BEGIN
RipCur;
{------[1]---------------------------------------------}
textcolor(txt);
textbackground(sfo);
IF tipo<>0 THEN
{Cornice1(rig , col ,
lar ,alt,txt,sfo,tipo,modo)}
Cornice1(rig-1,col-3,max+6,
3 ,txt,sfo,
2 , 1) ;
ELSE
FOR i:=1 TO max+2 DO
begin
gotoxy(col-2+i,rig);
write (' ');
end;
{-----[2]----------------------------------------------}
i:=0;
gotoxy(col,rig);
REPEAT
IF i<max THEN RipCur ELSE ViaCur; {---[3]----------}
REPEAT UNTIL keypressed;
tasto:=readkey;
IF (tasto>='0') AND (tasto<='9') AND (i<max)
THEN
begin
{---[4]----------}
i:=i+1;
{* Gestione dei *}
stringa[i]:=tasto;
{* Caratteri *}
write(tasto);
{* Validi
*}
end
ELSE IF tasto=char(8) THEN
{---[5]----------}
IF i>=1 THEN
{* Gestione per *}
begin
{* il tasto *}
i:=i-1;
{* BackSpace *}
write(tasto,' ',tasto);RipCur;
{*
*}
end
ELSE
{---[6]----------}
begin
{* In ogni altro*}
sound(100);delay2(300);
{* caso segnala *}
nosound;
{* errore
*}
end;
ELSE IF tasto<>char(13) THEN
{---[7]----------}
begin
{* In ogni altro*}
sound(100);delay2(300);
{* caso segnala *}
nosound;
{* errore *}
end;
UNTIL
tasto=char(13);
{---[8]----------}
{-----[9]----------------------------------------------}
tot:=0;
FOR n:=1 to i do
begin
ex:=1;
FOR j:=1 TO i-n DO
{*Calcola il Moltipli-*}
ex:=ex*10;
{* catore in Base 10*}
CASE stringa[n] OF
{*Trasforma ciascun*}
'0'..'9':val(stringa[n],r,err);{*
carattere *}
end;
{* in Numero *}
tot:=tot+(r*ex); {*Aggiorna il Totale Progressivo *}
end;
numero:=tot;
{*Lascia le 2 infor-*}
lunghezza:=i;
{* mazioni in uscita *}
{-----[10]---------------------------------------------}
IF (giust=1) AND (i<>max) THEN
begin
{* Se è il caso *}
gotoxy(col,rig);
{* giustifica a *}
FOR i:=1 TO max-lunghezzaDO
{* destra nel *}
write (' ');
{*campo di acqui- *}
FOR i:=1 TO lunghezzaDO
{*sizione i carat-*}
write (stringa[i]);
{* teri digitati *}
end;
{* in precedenza *}
END;
|
|