C.d.L. in SCIENZE AMBIENTALI
Teoria e Applicazioni delle Macchine Calcolatrici
Prova scritta del 29/7/'98

1)	Data la seguente istruzione Pascal  
if A then if B then S1 else S2 else S1; 
dove A e B sono espressioni booleane ed S1 ed S2 sono statement qualsiasi, riscriverla utilizzando un unico statement if_then_else. 
2)	Supponendo di rappresentare un grafo orientato tramite matrice delle adiacenze, scrivere un sottoprograma Pascal di nome CAPPI che, preso un grafo orientato G e la sua dimensione n come suoi parametri di input, restituisce true se G contiene almeno un cappio, false altrimenti (si ricordi che un cappio è un ciclo di lunghezza 1). Mostrare anche la definizione del tipo utilizzato per la rappresentazione concreta del grafo (n.b., si assuma che il grafo abbia al max. 100 nodi).
3)	Scrivere una funzione Pascal di nome CIFRE che, dato un numero intero X, determini il numero di cifre che compongono X. Scrivere quindi il programma principale che legge un numero da standard input, lo passa alla funzione CIFRE, e quindi stampa il risultato ottenuto su standard output.
4)	Supponendo di realizzare una coda di interi C con un vettore circolare V: array [1..4] of integer dire qual'è nell'ordine (partendo dall'elemento di indice 1) il contenuto di V dopo l'esecuzione delle seguenti operazioni (si assuma la coda inizialmente vuota): 
	in_queue(C,1); 
	out_queue(C); 
	in_queue(C,2); 
	in_queue(C,3); 
	out_queue(C).
5)	Quanti numeri distinti si possono rappresentare con 32 bit (a) in modulo e segno (b) in complemento a 2 (c) in virgola mobile (1 bit per il segno, 8 bit per l'esponente in complemento a 2, 23 bit per la parte frazionaria della mantissa). Quali sono il minimo e il massimo numero rappresentabile nelle tre rappresentazioni?
6)	 Siano u, v e w tre numeri rappresentati in virgola mobile. Può accadere che si abbia overflow nel calcolo u*(v*w) e che invece non si abbia overflow calcolando (u*v)*w? Giustificare la risposta.
7)	In un S.O. con file-system strutturato ad albero (tipo Unix) quale delle seguenti operazioni comporta di norma la modifica del contenuto di una directory?
	a.	creazione di un file (nuovo)	     b.	apertura di un file (già esistente)
	c.	chiusura di un file		     d.	ricerca di un file in base al  suo path-name.
Giustificare la risposta.
8)  Supponendo di avere un file di testo di nome 'alfa' contenente il solo carattere a, dire qual'è il contenuto di 'alfa' al termine dell'esecuzione delle seguenti tre istruzioni THINK-Pascal: 
		open(f,'alfa'); read(f,X); write(f,X);
dove f: text e X: char. Giustificare la risposta.
9) Lo sviluppo di un programma e la sua successiva esecuzione richiedono (in modo più o meno esplicito) l'utilizzo di un insiemi di strumenti di programmazione: compilatore, editor, loader, assemblatore, linker. Indicare in modo schematico qual'è la tipica sequenza di utilizzo di tali strumenti e, possibilmente, che tipo di file (codice sorgente, oggetto, ecc.) si hanno in input ed in output per ognuno di essi.
__________________
6bis) [in alternativa a 6, per studenti degli a.a. precedenti] Trovare la base per la quale sono vere le seguenti uguaglianze 
	17 + 41 + 22 = 102 	1010 = 100	    142 = 193.