C.d.L. in SCIENZE AMBIENTALI
Teoria e Applicazioni delle Macchine Calcolatrici
Prova scritta del 18/6/2002

1) Scrivere un programma in linguaggio C/C++ che legge da un file di nome "dati.txt" una sequenza di interi non negativi, li memorizza in un array DATI, e ne calcola la media aritmetica, escludendo però il valore minimo ed il massimo. Il programma termina stampando la media calcolata sullo standard output. Si richiede (obbligatoriamente!) di definire ed utilizzare due funzioni MIN e MAX, rispettivamente, per il calcolo del minimo e del massimo di un vettore di interi. Si assuma inoltre che: (i) l'array DATI possa contenere al massimo 10000 interi; (ii) eventuali numeri negativi presenti sul file vengano semplicemente ignorati (e cioè non memorizzati in DATI). 
Descrivere il programma anche mediante diagramma di flusso.

2) Si consideri una struttura dati di nome SEXPR costituita da tre campi, X, Y e op, con X e Y di tipo intero e op di tipo carattere, rappresentante un'espressione semplice del tipo X op Y. In particolare op può assumere i seguenti valori (con gli ovvi significati): '+', '-', '/', '*', '^' (elevamento a potenza), '!' (fattoriale; in questo caso si considera soltanto il campo X). Scrivere in linguaggio C/C++ una funzione di nome CALCOLA che, presi come suoi parametri un array A di strutture di tipo SEXPR e la dimensione n di A, valuta una alla volta le espressioni descritte dagli elementi di A. La funzione termina restituendo come suo risultato la somma totale dei risultati di tutte le espressioni semplici contenute in A. N.B. Per il calcolo della potenza x^y si utilizzi la funzione pow(x,y), definita nella libreria math.h; per il calcolo del fattoriale x! si definisca un'apposita funzione di nome fatt.