Esercizio 1: Sia Materiale il nome di un tipo di dato definito in

Transcript

Esercizio 1: Sia Materiale il nome di un tipo di dato definito in
Esercizio 1:
Sia Materiale il nome di un tipo di dato definito in apposito file “Materiale.h”. Una
variabile di tipo materiale contiene di dati che descrivono un materiale da costruzione.
La funzione f prende in input una variabile di tipo Materiale e restituisce un numero
razionale.
Considerare le seguenti coppie di ipotesi alternative:
A0) la funzione f deve aggiornare il contenuto del Materiale dato
A1) la funzione f non dovrà mai cambiare il contenuto del Materiale dato
B0) la struttura Materiale contiene solo 2 valori interi compresi fra 0 e 100.
B1) la struttura Materiale contiene 224 valori in virgola mobile a precisione doppia.
Scrivere il prototipo di f per ogni combinazione delle due ipotesi (A0&B0, A0&B1,
A1&B0, A1&B1).
Esercizio 2:
Definire ed implementare una funzione chiamata “giaVisto” che dato un numero intero
compreso fra 0 e X e restituisce se quel numero é già stato passato in precedenza alla
funzione oppure no (nel corso dell’esecuzione del programma).
X é una variabile globale intera che si suppone non cambi mai dopo la prima invocazione
della funzione.
Al suo interno la funzione deve usare un vettore allocato dinamicamente di valori
booleani (ciascuno dei quali rappresenta se il numero corrispondente è gia comparso). La
prima volta che viene invocata la funz, sarà necessario allocare questo vettore e
inizializzarlo appropriatamente.
Non devono essere usate variabili globali oltre a X.
Esercizio 3:
Si ipotizzi una memoria RAM con solo 256 locazioni. Ogni locazione contine un numero
da 0 a 255, che può essere interpretato a sua volta come indirizzo o come numero intero.
In un dato momento lo stato di una parte della memoria é quello riportato qui sotto:
indirizzo:
21
22
23
24
25
26
27
28
29
30
valore:
26
25
29
21
28
0
30
27
10
5
Siano x, y e z tre variabili globali di tipo int, int* e int** rispettivamente,
allocate dal compilatore nelle tre locazioni 23, 24 e 25. Determinare la correttezza di
ciascuno dei seguenti assegnamenti. Per quelli corretti: riportare solo quale valore
viene scritto in quale locazione. Per quelli che non sono corretti, cioè che non
compilerebbero: riportare l’errore che ti aspetti di ricevere dal compilatore. Gli
assegnamenti non sono da considerarsi come eseguiti in successione.
x = 12;
*y = 12;
y = &x;
&x = y ;
x=y[0];
x=y[3];
y=x[0];
y[0]=15 ;
z=&y;
z=*y;
z=y;
x=*z ;
x=**z ;
x=z[0][0] ;
Esercizio 4:
Scrivere due funzioni in C:
- f0: dato un numero in virgola mobile, restituisce il suo quadrato.
- f1: data una variabile in virgola mobile, la eleva al quadrato
Usare ciascuna delle due funzioni per elevare al quadrato:
- una variabile in virgola mobile a
- il quarto elemento di un vettore di otto numeri in virgola mobile b
(opz. mostrare due sintassi alternative per il caso f1)
- il campo “altezza” di una variabile c di un tipo strutturato Persona
- il campo “altezza” di una variabile puntata da d
(con d di tipo “puntatore a Persona”)