24.01.2014 Views

Parte ii - IIS Marconi Latina - Area didattica

Parte ii - IIS Marconi Latina - Area didattica

Parte ii - IIS Marconi Latina - Area didattica

SHOW MORE
SHOW LESS

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.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!