Parte ii - IIS Marconi Latina - Area didattica
Parte ii - IIS Marconi Latina - Area didattica
Parte ii - IIS Marconi Latina - Area didattica
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
976 volume V Programmazione<br />
|005700 IF RICERCA = SPACES<br />
|005800 THEN<br />
|005900 MOVE 1 TO EOJ;<br />
|006000 ELSE<br />
|006100 SET IND-UTENTE TO 1,<br />
|006200 SEARCH UTENTE<br />
|006300 AT END<br />
|006400 DISPLAY "IL COGNOME CERCATO ",<br />
|006500 "NON SI TROVA NELLA TABELLA: ",<br />
|006600 QUOTE RICERCA QUOTE;<br />
|006700 WHEN COGNOME (IND-UTENTE) = RICERCA<br />
|006800 DISPLAY "IL COGNOME ", RICERCA,<br />
|006900 "SI TROVA NELLA POSIZIONE ",<br />
|007000 IND-UTENTE.<br />
|007100*<br />
Nell’esempio sono evidenziate le righe in cui si dichiara la tabella e quelle che eseguono la<br />
scansione. Si deve osservare che prima dell’istruzione ‘SEARCH’, l’indice deve essere collocato<br />
manualmente nella posizione iniziale.<br />
82.12.18.2 Ricerca in una tabella ordinata<br />
«<br />
La ricerca che si esegue con l’istruzione ‘SEARCH ALL’ richiede che si rispettino alcune<br />
condizioni:<br />
• i dati contenuti nella tabella devono risultare ordinati come previsto dalle chiavi già<br />
dichiarate;<br />
• i dati contenuti nella tabella devono risultare tutti validi;<br />
• le chiavi a cui si fa riferimento nella condizione di ricerca devono essere sufficienti a<br />
raggiungere l’informazione in modo univoco.<br />
È importante considerare correttamente il problema dei dati validi: quando una tabella deve<br />
ricevere una quantità imprecisata di dati in elementi separati, questa deve essere stata dichiarata<br />
in modo abbastanza grande da poter contenere tutto, ma così facendo si ha la certezza di avere<br />
una serie di celle vuote alla fine della tabella stessa. Per evitare che la scansione di ricerca tenga<br />
conto anche delle celle vuote, si dichiara la tabella con una quantità «variabile» di celle (con<br />
l’opzione ‘OCCURS m TO n TIMES, DEPENDING ON identifier’). In realtà, più che trattarsi<br />
di una tabella che ha veramente una quantità variabile di celle, si fa in modo di stabilire qual è<br />
la dimensione massima, attraverso il controllo di una variabile apposita.<br />
Dato il tipo di ricerca, non fa alcuna differenza il valore iniziale dell’indice della tabella.<br />
L’esempio seguente mostra una variante del programma già descritto a proposito della ricerca<br />
sequenziale, modificato in modo da sfruttare una ricerca binaria. Si osservi che non è più<br />
necessario impostare il valore iniziale dell’indice, prima della scansione.<br />
|000100 IDENTIFICATION DIVISION.<br />
|000200 PROGRAM-ID. TEST-SEARCH-KEY.<br />
|000300 AUTHOR. DANIELE GIACOMINI.