[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico] [volume] [parte]
Questo capitolo raccoglie degli esempi elementari di programmi COBOL. Questi esempi risalgono a un lavoro didattico del 1985, realizzato con un minicomputer Burroughs B91 del 1981.
Salvo dove indicato in maniera differente, gli esempi mostrati funzionano regolarmente se compilati con OpenCOBOL 0.31.
A è il moltiplicando;
B è il moltiplicatore;
C è il risultato.
Il calcolo viene eseguito attraverso l'istruzione COMPUTE.
Il programma si svolge unicamente all'interno di questo paragrafo. Il programma riceve dall'esterno i valori per le variabili A e B, esegue il prodotto tramite l'istruzione COMPUTE mettendo il risultato nella variabile C.
Viene visualizzato il contenuto della variabile C con l'istruzione DISPLAY.
Il programma si arresta perché incontra l'istruzione STOP RUN.
|
A è il moltiplicando;
B è il moltiplicatore;
C è il risultato; questa variabile viene inizializzata a zero in fase di dichiarazione.
Il calcolo viene eseguito sommando alla variabile C la variabile A per B volte.
Il programma riceve dall'esterno i valori per le variabili A e B. Attraverso l'istruzione PERFORM viene eseguito il paragrafo SOMMA per B volte; al termine di questo ciclo il risultato della moltiplicazione si trova nella variabile C, che viene visualizzato con l'istruzione DISPLAY.
Il programma si arresta perché incontra l'istruzione STOP RUN.
Il paragrafo somma al contenuto della variabile C il contenuto della variabile A. Dal momento che questo paragrafo viene eseguito B volte, la variabile C finisce con il contenere il risultato del prodotto di «A×B».
|
A è il moltiplicando;
B è il moltiplicatore;
C è il risultato.
Il calcolo viene eseguito sommando alla variabile C la variabile A per B volte. Per ogni esecuzione di tale somma, la variabile B viene diminuita di una unità, cosicché il ciclo delle somme viene arrestato quando B è ormai a zero.
Vengono ricevuti dall'esterno i valori per le variabili A e B. Viene eseguito tramite l'istruzione PERFORM il paragrafo SOMMA fino a quando la variabile B raggiunge lo zero. A quel punto la variabile C contiene il risultato del prodotto, che viene visualizzato con l'istruzione DISPLAY.
Il programma si arresta perché incontra l'istruzione STOP RUN.
Inizialmente viene decrementato di una unità il contenuto della variabile B, quindi viene sommato al contenuto di C il valore di A.
|
A è il moltiplicando;
B è il moltiplicatore;
C è il risultato;
EOJ quando assume il valore 1 il programma si arresta;
RISPOSTA è la variabile che riceve la risposta, un SI o un NO, per la continuazione o meno con un altro calcolo.
Il calcolo viene eseguito sommando alla variabile C la variabile A per B volte. Per ogni esecuzione di tale somma, la variabile B viene diminuita di una unità, cosicché il ciclo delle somme viene arrestato quando B è ormai a zero.
Il programma si arresta solo se gli viene dato un comando apposito, altrimenti continua a richiedere altri dati per l'esecuzione di un altro prodotto.
Vengono ricevuti dall'esterno i valori per le variabili A e B tramite il paragrafo INSERIMENTO-DATI.
Viene eseguito il paragrafo LAVORO ripetutamente, terminando il ciclo quando la variabile EOJ contiene il valore uno.
Il programma si arresta perché incontra l'istruzione STOP RUN.
Viene eseguito tramite l'istruzione PERFORM il paragrafo SOMMA ripetutamente, terminando il ciclo quando la variabile B contiene il valore zero. A quel punto, la variabile C contiene il risultato del prodotto, che viene visualizzato con l'istruzione DISPLAY.
Il programma riceve dall'esterno una parola: un SI o un NO; se viene fornita la stringa SI (scritta con lettere maiuscole) il programma azzera il contenuto della variabile C ed esegue il paragrafo INSERIMENTO-DATI, altrimenti, viene messo il valore uno nella variabile EOJ.
Il paragrafo riceve dall'esterno i valori per le variabili A e B.
Inizialmente viene decrementato di una unità il contenuto della variabile B, quindi viene sommato al contenuto di C il valore di A.
|
A è il moltiplicando;
B è il moltiplicatore;
C è il risultato;
EOJ quando assume il valore 1 il programma si arresta;
RISPOSTA è la variabile che riceve la risposta, un SI o un NO, per la continuazione o meno con un altro calcolo.
Il calcolo viene eseguito sommando alla variabile C la variabile A per B volte. Il controllo di questa somma viene effettuato da un ciclo PERFORM VARYING che decrementa di una unità la variabile B, partendo dal suo valore iniziale, fino a quando si riduce a zero, nel qual caso il ciclo si arresta.
Vengono ricevuti dall'esterno i valori per le variabili A e B tramite il paragrafo INSERIMENTO-DATI.
Viene eseguito il paragrafo LAVORO ripetutamente, terminando il ciclo quando la variabile EOJ contiene il valore uno.
Il programma si arresta perché incontra l'istruzione STOP RUN.
Viene eseguito tramite l'istruzione PERFORM il paragrafo SOMMA ripetutamente, decrementando il valore della variabile B, fino a zero, quando il ciclo termina. A quel punto, la variabile C contiene il risultato del prodotto, che viene visualizzato con l'istruzione DISPLAY.
Il programma riceve dall'esterno una parola: un SI o un NO; se viene fornita la stringa SI (scritta con lettere maiuscole) il programma azzera il contenuto della variabile C ed esegue il paragrafo INSERIMENTO-DATI, altrimenti, viene messo il valore uno nella variabile EOJ.
Il paragrafo riceve dall'esterno i valori per le variabili A e B.
Viene sommato al contenuto di C il valore di A.
|
RECORD-ELEMENTI è una variabile che si scompone in un array;
ELEMENTO è l'array che costituisce RECORD-ELEMENTI;
INDICE è l'indice usato per scandire gli elementi;
EOJ quando assume il valore 1 il programma si arresta;
RISPOSTA è la variabile che riceve la risposta, un SI o un NO, per la continuazione o meno con un altro calcolo.
Il programma esegue semplicemente un inserimento di dati all'interno degli elementi dell'array, con un accesso libero (bisogna ricordare che l'indice del primo elemento è uno), specificando prima l'indice e poi il valore (il carattere) da attribuire all'elemento.
Viene eseguito una volta il paragrafo INSERIMENTO-INDICE, che serve a ricevere il valore dell'indice di inserimento dall'utente.
Viene eseguito il paragrafo LAVORO ripetutamente, terminando il ciclo quando la variabile EOJ contiene il valore uno.
Viene visualizzato il valore di tutta la variabile RECORD-ELEMENTI, attraverso l'istruzione DISPLAY.
Il programma si arresta perché incontra l'istruzione STOP RUN.
Il programma riceve dall'esterno il valore per ELEMENTO(INDICE).
Il programma riceve dall'esterno l'assenso o il dissenso riguardo alla continuazione dell'esecuzione; se l'intenzione è di proseguire, viene eseguito il paragrafo INSERIMENTO-INDICE, altrimenti viene messo il valore uno nella variabile EOJ.
Il programma riceve dall'esterno il valore per la variabile INDICE.
|
RECORD-ELEMENTI è una variabile che si scompone in un array;
ELEMENTO è l'array che costituisce RECORD-ELEMENTI;
INDICE è l'indice usato per scandire gli elementi;
EOJ quando assume il valore 1 il programma si arresta;
RISPOSTA è la variabile che riceve la risposta, un SI o un NO, per la continuazione o meno con un altro calcolo.
Il programma esegue semplicemente un inserimento di dati all'interno degli elementi dell'array, con un accesso libero (bisogna ricordare che l'indice del primo elemento è uno), specificando prima l'indice e poi il valore (il carattere) da attribuire all'elemento.
Se l'indice che si inserisce è zero, viene richiesto nuovamente di fornire un dato valido.
Viene eseguito paragrafo INSERIMENTO-INDICE, che serve a ricevere il valore dell'indice di inserimento dall'utente, ripetendo l'operazione se il valore fornito è minore o uguale a zero.
Viene eseguito il paragrafo LAVORO ripetutamente, terminando il ciclo quando la variabile EOJ contiene il valore uno.
Viene visualizzato il valore di tutta la variabile RECORD-ELEMENTI, attraverso l'istruzione DISPLAY.
Il programma si arresta perché incontra l'istruzione STOP RUN.
Il programma riceve dall'esterno il valore per ELEMENTO(INDICE).
Il programma riceve dall'esterno l'assenso o il dissenso riguardo alla continuazione dell'esecuzione; se l'intenzione è di proseguire, dopo l'azzeramento della variabile INDICE viene eseguito il paragrafo INSERIMENTO-INDICE, ripetutamente, ponendo come condizione di conclusione il fatto che la variabile INDICE abbia un valore maggiore di zero. Se invece l'utente rinuncia a proseguire, viene messo il valore uno nella variabile EOJ.
Il programma riceve dall'esterno il valore per la variabile INDICE.
|
RECORD-ELEMENTI è una variabile che si scompone in un array;
ELEMENTO è l'array che costituisce RECORD-ELEMENTI;
INDICE è l'indice usato per scandire gli elementi;
EOJ quando assume il valore 1 il programma si arresta;
RISPOSTA è la variabile che riceve la risposta, un SI o un NO, per la continuazione o meno con un altro calcolo.
Il programma esegue semplicemente un inserimento di dati all'interno degli elementi dell'array, con un accesso libero (bisogna ricordare che l'indice del primo elemento è uno), specificando prima l'indice e poi il valore (il carattere) da attribuire all'elemento.
Se l'indice che si inserisce è zero, viene richiesto nuovamente di fornire un dato valido.
Viene eseguito paragrafo INSERIMENTO-INDICE, che serve a ricevere il valore dell'indice di inserimento dall'utente.
Viene eseguito il paragrafo LAVORO ripetutamente, terminando il ciclo quando la variabile EOJ contiene il valore uno.
Viene visualizzato il valore di tutta la variabile RECORD-ELEMENTI, attraverso l'istruzione DISPLAY.
Il programma si arresta perché incontra l'istruzione STOP RUN.
Il programma riceve dall'esterno il valore per ELEMENTO(INDICE).
Il programma riceve dall'esterno l'assenso o il dissenso riguardo alla continuazione dell'esecuzione; se l'intenzione è di proseguire viene eseguito il paragrafo INSERIMENTO-INDICE, in caso contrario, viene messo il valore uno nella variabile EOJ.
Il programma riceve dall'esterno il valore per la variabile INDICE, quindi controlla che questo sia diverso da zero; in caso contrario, si ha una chiamata dello stesso paragrafo, in modo ricorsivo.
A causa della caratteristica ricorsiva del paragrafo INSERIMENTO-INDICE, nel programma originale era riportato in un commento: «attenzione! può essere nocivo».
|
RECORD-ELEMENTI è una variabile usata per accogliere una stringa;
ELEMENTO è un array che scompone RECORD-ELEMENTI in caratteri singoli;
POSIZIONE è l'indice usato per scandire gli elementi della stringa;
EOJ quando assume il valore 1 il programma si arresta;
RISPOSTA è la variabile che riceve la risposta, un SI o un NO, per la continuazione o meno con un altro calcolo;
LETTERA è la variabile che contiene la lettera da cercare nella stringa.
Il programma riceve dall'esterno il contenuto di una stringa e di una lettera che dovrebbe essere contenuta nella stringa stessa; successivamente il programma scandisce la stringa come vettore di caratteri e individua la prima posizione in cui appare la lettera cercata.
Viene eseguito paragrafo INSERIMENTO-DATI.
Viene eseguito il paragrafo LAVORO ripetutamente, terminando il ciclo quando la variabile EOJ contiene il valore uno.
Il programma si arresta perché incontra l'istruzione STOP RUN.
Il programma esegue il paragrafo RICERCA.
A questo punto la variabile POSIZIONE contiene la posizione della lettera contenuta nella variabile LETTERA e viene visualizzata.
Il programma riceve dall'esterno l'assenso o il dissenso riguardo alla continuazione dell'esecuzione; se l'intenzione è di proseguire, viene eseguito il paragrafo INSERIMENTO-DATI, in caso contrario, viene messo il valore uno nella variabile EOJ.
Il programma riceve dall'esterno una stringa da inserire nella variabile RECORD-ELEMENTI e la lettera da ricercare nella stringa.
Viene eseguito un paragrafo che non esegue alcunché (l'istruzione EXIT) scandendo l'indice POSIZIONE a partire da uno, con passo unitario, terminando quando il contenuto di ELEMENTO(POSIZIONE) coincide con il valore di LETTERA, ovvero quando la posizione della lettera nella stringa è stata trovata.
In pratica, il paragrafo EXIT-PARAGRAPH è una scusa per utilizzare la scansione dell'istruzione PERFORM VARYING.
Il paragrafo non fa alcunché.
|
RECORD-ELEMENTI è una variabile usata per accogliere una stringa;
ELEMENTO è un array che scompone RECORD-ELEMENTI in caratteri singoli;
POSIZIONE è l'indice usato per scandire gli elementi della stringa;
EOJ quando assume il valore 1 il programma si arresta;
RISPOSTA è la variabile che riceve la risposta, un SI o un NO, per la continuazione o meno con un altro calcolo;
LETTERA è la variabile che contiene la lettera da cercare nella stringa.
Il programma riceve dall'esterno il contenuto di una stringa e di una lettera che dovrebbe essere contenuta nella stringa stessa; successivamente il programma scandisce la stringa come vettore di caratteri e individua la prima posizione in cui appare la lettera cercata.
Rispetto a ELM0900 la scansione della stringa si arresta anche se non viene trovata alcuna corrispondenza.
Viene eseguito paragrafo INSERIMENTO-DATI.
Viene eseguito il paragrafo LAVORO ripetutamente, terminando il ciclo quando la variabile EOJ contiene il valore uno.
Il programma si arresta perché incontra l'istruzione STOP RUN.
Il programma esegue il paragrafo RICERCA.
A questo punto la variabile POSIZIONE contiene la posizione della lettera contenuta nella variabile LETTERA e viene visualizzata.
Il programma riceve dall'esterno l'assenso o il dissenso riguardo alla continuazione dell'esecuzione; se l'intenzione è di proseguire, viene eseguito il paragrafo INSERIMENTO-DATI, in caso contrario, viene messo il valore uno nella variabile EOJ.
Il programma riceve dall'esterno una stringa da inserire nella variabile RECORD-ELEMENTI e la lettera da ricercare nella stringa.
Viene eseguito un paragrafo che non esegue alcunché (l'istruzione EXIT) scandendo l'indice POSIZIONE a partire da uno, con passo unitario, terminando quando si supera la dimensione della stringa oppure quando il contenuto di ELEMENTO(POSIZIONE) coincide con il valore di LETTERA, ovvero quando la posizione della lettera nella stringa è stata trovata.
In pratica, il paragrafo EXIT-PARAGRAPH è una scusa per utilizzare la scansione dell'istruzione PERFORM VARYING.
Il paragrafo non fa alcunché.
|
RECORD-ELEMENTI è una variabile usata per accogliere una stringa;
ELEMENTO è un array che scompone RECORD-ELEMENTI in caratteri singoli;
POSIZIONE è l'indice usato per scandire gli elementi della stringa;
EOJ quando assume il valore 1 il programma si arresta;
RISPOSTA è la variabile che riceve la risposta, un SI o un NO, per la continuazione o meno con un altro calcolo;
LETTERA è la variabile che contiene la lettera da cercare nella stringa.
Il programma riceve dall'esterno il contenuto di una stringa e di una lettera che dovrebbe essere contenuta nella stringa stessa; successivamente il programma scandisce la stringa come vettore di caratteri e individua la prima posizione in cui appare la lettera cercata.
Rispetto a ELM1000 si ottiene un avvertimento quando si indica una lettera che non è contenuta nella frase.
Viene eseguito paragrafo INSERIMENTO-DATI.
Viene eseguito il paragrafo LAVORO ripetutamente, terminando il ciclo quando la variabile EOJ contiene il valore uno.
Il programma si arresta perché incontra l'istruzione STOP RUN.
Il programma esegue il paragrafo RICERCA.
A questo punto la variabile POSIZIONE contiene la posizione della lettera contenuta nella variabile LETTERA: se il valore della posizione supera la dimensione massima dell'array, si ottiene un avvertimento dell'impossibilità di trovare la corrispondenza, altrimenti viene visualizzata la posizione trovata.
Il programma riceve dall'esterno l'assenso o il dissenso riguardo alla continuazione dell'esecuzione; se l'intenzione è di proseguire, viene eseguito il paragrafo INSERIMENTO-DATI, in caso contrario, viene messo il valore uno nella variabile EOJ.
Il programma riceve dall'esterno una stringa da inserire nella variabile RECORD-ELEMENTI e la lettera da ricercare nella stringa.
Viene eseguito un paragrafo che non esegue alcunché (l'istruzione EXIT) scandendo l'indice POSIZIONE a partire da uno, con passo unitario, terminando quando si supera la dimensione della stringa oppure quando il contenuto di ELEMENTO(POSIZIONE) coincide con il valore di LETTERA, ovvero quando la posizione della lettera nella stringa è stata trovata.
In pratica, il paragrafo EXIT-PARAGRAPH è una scusa per utilizzare la scansione dell'istruzione PERFORM VARYING.
Il paragrafo non fa alcunché.
|
FILE-DA-SCRIVERE rappresenta il file che viene creato dal programma (il nome del file è output.seq
). Il file è di tipo sequenziale, dove la riga ha una dimensione fissa; non si prevede l'inserimento di un codice di interruzione di riga alla fine delle righe.
RECORD-DA-SCRIVERE è la riga del file da creare;
EOJ quando assume il valore 1 il programma si arresta.
Il programma riceve dall'esterno il contenuto di ogni riga e di volta in volta lo registra nel file. Il programma termina il lavoro quando la stringa inserita contiene solo asterischi (almeno 30, pari alla larghezza massima prevista di ogni riga).
Viene aperto in scrittura il file da creare.
Viene eseguito il paragrafo INSERIMENTO-DATI.
Viene eseguito il paragrafo LAVORO ripetutamente, concludendo il ciclo quando la variabile EOJ contiene il valore uno.
Viene chiuso il file da creare.
Il programma si arresta perché incontra l'istruzione STOP RUN.
Si controlla se la stringa inserita contiene soltanto asterischi; se è così viene messo il valore uno nella variabile EOJ, altrimenti viene scritta la riga inserita nel file da scrivere e subito dopo viene eseguito nuovamente il paragrafo INSERIMENTO-DATI.
Il paragrafo riceve dall'esterno il contenuto di una riga da registrare nel file, tenendo conto che vengono prese in considerazione al massimo i primi 30 caratteri, pari alla dimensione della variabile che deve accogliere i dati.
|
Per fare in modo che le righe del file siano concluse come avviene di solito nei file di testo, con un codice di interruzione di riga, occorre specificare nell'istruzione SELECT un accesso di tipo LINE SEQUENTIAL.
FILE-DA-SCRIVERE rappresenta il file che viene esteso dal programma (il nome del file è output.seq
). Il file è di tipo sequenziale, dove la riga ha una dimensione fissa; non si prevede l'inserimento di un codice di interruzione di riga alla fine delle righe.
RECORD-DA-SCRIVERE è la riga del file da creare;
EOJ quando assume il valore 1 il programma si arresta.
Il programma riceve dall'esterno il contenuto di ogni riga e di volta in volta lo registra nel file. Il programma termina il lavoro quando la stringa inserita contiene solo asterischi (almeno 30, pari alla larghezza massima prevista di ogni riga).
Viene aperto in scrittura in aggiunta il file da creare.
Viene eseguito il paragrafo INSERIMENTO-DATI.
Viene eseguito il paragrafo LAVORO ripetutamente, concludendo il ciclo quando la variabile EOJ contiene il valore uno.
Viene chiuso il file da creare.
Il programma si arresta perché incontra l'istruzione STOP RUN.
Si controlla se la stringa inserita contiene soltanto asterischi; se è così viene messo il valore uno nella variabile EOJ, altrimenti viene scritta la riga inserita nel file da scrivere e subito dopo viene eseguito nuovamente il paragrafo INSERIMENTO-DATI.
Il paragrafo riceve dall'esterno il contenuto di una riga da registrare nel file, tenendo conto che vengono prese in considerazione al massimo i primi 30 caratteri, pari alla dimensione della variabile che deve accogliere i dati.
|
Per fare in modo che le righe del file siano concluse come avviene di solito nei file di testo, con un codice di interruzione di riga, occorre specificare nell'istruzione SELECT un accesso di tipo LINE SEQUENTIAL.
FILE-DA-LEGGERE rappresenta il file che viene letto dal programma (il nome del file è input.seq
). Il file è di tipo sequenziale, dove ogni riga ha una dimensione fissa e non si fa affidamento sulla presenza di un codice di interruzione di riga.
RECORD-DA-LEGGERE è la riga del file da leggere;
EOF quando assume il valore 1 indica che la lettura ha superato la fine del file.
Il programma visualizza il contenuto di un file.
La lettura avviene a blocchi di 30 caratteri, indipendentemente dal fatto che siano presenti dei codici di interruzione di riga. Diversamente, per fare in modo che la lettura sia al massimo di 30 caratteri, ma rispettando anche i codici di interruzione di riga, occorre specificare nell'istruzione SELECT un accesso di tipo LINE SEQUENTIAL.
Viene aperto in lettura il file da leggere.
Viene eseguita la lettura di un primo blocco, pari alla dimensione della variabile RECORD-DA-LEGGERE; se si verifica la condizione AT END, ovvero se il file è vuoto, viene messo il valore uno nella variabile EOF.
Viene eseguito il paragrafo LETTURA, ripetutamente, utilizzando come condizione di arresto il fatto che la variabile EOF contenga il valore uno.
Viene chiuso il file da leggere.
Il programma si arresta perché incontra l'istruzione STOP RUN.
Viene visualizzata la porzione di file appena letta.
Viene eseguita la lettura del file da leggere; se si verifica la condizione AT END, ovvero se la lettura non ha acquisito alcunché, viene messo il valore uno nella variabile EOF.
|
|
Appunti di informatica libera 2006.07.01 --- Copyright © 2000-2006 Daniele Giacomini -- <daniele (ad) swlibero·org>
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome cobol_esempi_elementari.htm
[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [translators] [docinfo] [indice analitico]