Laboratorio di Programmazione. AA
2004/05.
Esercitazione n. 5
Scopo di questa esercitazione è di familiarizzarsi con i
costrutti iterativi, con le principali caratteristiche dell'
aritmetica dei computer e con l' utilizzo di alcune
function C.
Al solito, si suggerisce di creare una directory apposita per i
files relativi a questa esercitazione.
- Scrivere un programma che riscriva su stdout tutti i caratteri che
riceve in input, trasformando le lettere maiuscole in minuscole,
finché non viene dato un punto (.) come input, nel
qual caso termina l' esecuzione del programma. (Per
cambiare le maiuscole in minuscole, si può adattare il
meccanismo usato nell' esercizio n.5 dell'esercitazione n.4).
- Trasformare il seguente ciclo for
in cicli equivalenti che utilizzino i costrutti while e do-while. (i e
sum sono di tipo dati int).
for(i=0;i<10;i++)
{ sum += i*i;
printf("i= %d, sum= %d \n",i,sum);
}
- Realizzare un programma che calcoli le due radici della generica
equazione di secondo grado. Tener conto anche
dei casi degeneri ( coefficiente zero per il termine quadratico e/o
quello lineare dell' equazione).
- Per dati di tipo intero, sono definiti gli operatori bit a bit: ~ (complemento bit
a bit: trasforma ogni bit 1 in 0 e viceversa); & (AND bit a bit:
viene fatto un and tra
ciascun bit del primo operando ed il corrispondente del secondo
operando), | (OR bit a bit: viene fatto un or tra ciascun bit del primo
operando ed il corrispondente del secondo operando), ^ (XOR bit a bit:
viene fatto un or esclusivo tra ciascun bit del primo
operando ed il corrispondente del secondo operando), >> e
<< (shift a destra e a sinistra: i bit vengono fatti scorrere
nella locazione di memoria di tanti posti verso destra o sinistra
quanto indica il secondo operando). Un AND bit a bit tra una
variabile intera x e 1 ( x & 1) dà come risultato 0 se
l'ultimo bit di x è 0 e 1 se vale 1.
Utilizzare gli operatori di shift e di AND bit a bit per verificare il
valore dei 32 bit di un int scrivendoli
in output. Verificare la
rappresentazione degli interi 3, 9, -1, 231-1,
-231.
Modificare il programma per lavorare con i float. Cosa succede ?
Perché ?
- Trovare, per tentativi, qual è il
più piccolo float x
ed il più piccolo double
y tali che 1+x=1
e 1+y=1.
- (Facoltativo).
Trovare, mediante un programma C, tre float, a,b,c,
tali che non valga la proprieta' associativa ( (a+b)+c != a+
(b+c) ) e tre (d,e,f) per cui non valga la propriata'
distributiva ( d*(e+f) != d*e + d*f ).
- La costante e (numero
di Nepero) è definibile come limite
per n che tende ad infinito della successione (1 + 1/n)n.
Scrivere un programma che determini quale valore di n è
necessario per ottenere e,rappresentata
come float, con
la stessa precisione con cui viene calcolata dalla funzione exp(1.0) della libreria matematica.
(In pratica si chiede di determinare il valore di n per cui l'
espressione float (1 + 1/n)n risulti uguale a exp(1.0)).