 | 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
esadecimale e il suo valore long-integer [9] |
 | se
“giust”=1
“giustifica a destra” i caratteri nella stringa
d’acquisizione [10] |
Codice Sorgente |
|
 |
 |
 |
PROCEDURE
INexad (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') OR
(UpCase(tasto)>='A') AND (UpCase(tasto)<='F'))
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*16;
{* catore in Base 16*}
CASE stringa[n] OF
{*******************}
'0'..'9':val(stringa[n],r,err);{*
*}
'A' :r:=10;
{*
*}
'B' :r:=11;
{*Trasforma ciascun*}
'C' :r:=12;
{*
carattere *}
'D' :r:=13; {* in Numero *}
'E' :r:=14; {*
*}
'F' :r:=15; {*
*}
end; {*******************}
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;
|
|