| prof. Nunzio Brugaletta |
C++:
programmazione e oggetti |
Come applicazione della costruzione di un algoritmo con l'aiuto degli schemi esaminati precedentemente si consideri il seguente problema:
Si richiede di calcolare il totale di una fattura conoscendo i dati delle righe che ne fanno parte. Ogni riga è composta dalla quantità degli oggetti dello stesso tipo venduti e dal prezzo unitario dell'oggetto.
Considerando che, in linea di massima, un algoritmo si può sempre pensare suddiviso in tre parti: acquisizione dati in input, elaborazione dei dati, output dei risultati ottenuti, un approccio alla stesura dell'algoritmo risolutivo del problema proposto potrebbe comprendere i seguenti passaggi:
Stabilire chiaramente quali sono i dati di input e i dati di output. Il problema proposto richiede il calcolo del totale di una fattura (l'output) conoscendo i dati delle righe (input). Ogni riga è composta da quantità oggetti venduti e prezzo unitario che sono i dati che identificano la riga stessa. Le variabili potrebbero essere: QVEN (quantità venduta), PZUN (prezzo unitario) per gli input e TOTFAT (totale fattura) per l'output.
Riconoscere il tipo di algoritmo. Dall'esame del problema proposto si deduce che si richiede una elaborazione ciclica: ci sono infatti un'insieme di elementi (le righe della fattura) su ognuno dei quali va applicata la stessa elaborazione (cosa fare per ogni riga?): il prodotto della quantità venduta e del prezzo unitario (il totale della riga, della vendita del singolo oggetto) e l'accumulo del totale così ottenuto assieme ai totali delle altre righe. Il testo del problema non fornisce informazioni sulla quantità di righe da elaborare.
Ora si è in condizione di affermare, in base alle caratteristiche che deve avere, che l'algoritmo risolutivo è del tipo:
Considera primo elemento Mentre elementi non finiti Elabora elemento Considera prossimo elemento Fine mentre
Non è infatti un ciclo per perché non si conosce di quante righe è composta la fattura.
Adesso è necessario adattare lo schema generale al caso in esame, rispondendo alle domande:
Chi sono gli elementi da elaborare? Le righe della fattura. Ogni elemento da elaborare è una riga composta da QVEN e PZUN.
Cosa vuol dire Considera elemento? Ovvero: come si conoscono i dati di ogni riga? Acquisendoli dall'input.
Come si capisce che le righe della fattura sono finite? Non c'è nella definizione del problema alcuna indicazione sull'elemento tappo, ma in questo caso si può considerare una riga con quantità di oggetti venduti con valore nullo o negativo.
Che elaborazione effettuare sulla riga? Come evidenziato in precedenza si tratta di calcolare il totale della riga. Totale che potrebbe essere conservato nella variabile TOTR (variabile temporanea che conserva un risultato intermedio della elaborazione).
Il totale della fattura deriva dall'accumulo dei totali di tutte le righe della fattura. Si tratta quindi di un totalizzatore:
Inizializzazione totalizzatore Inizio ciclo aggiornamento totalizzatore ... Aggiornamento totalizzatore Fine ciclo Uso del totalizzatore
Anche in questo caso è necessario rispondere ad alcune domande:
Cosa vuol dire Inizializza totalizzatore? Il totale della fattura accumula i totali delle righe e quindi il suo valore iniziale sarà nullo.
Cosa vuol dire Aggiornamento totale fattura? Aggiungere il totale della riga.
Cosa vuol dire Uso del totale della fattura? Il problema richiede di conoscere in output tale totale.
A questo punto sono stati acquisiti tutti gli elementi che permettono, personalizzando gli schemi generali, di scrivere l'algoritmo risolutivo:
INIZIO
Inizializza TOTF con il valore 0
Ricevi QVEN e PZUN
Mentre QVEN > 0
Calcola TOTR come prodotto tra QVEN e PZUN
Aggiorna TOTF sommando TOTR
Ricevi QVEN e PZUN
fine mentre
Comunica TOTF
FINE
| http://ennebi.solira.org |
ennebi@solira.org |