ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 09/06/2005 - C++
1. Scrivere una funzione booleana verifica
che verifica che il file (non vuoto) “numeri.txt”
contenente valori interi sia ordinato in senso crescente restituendo true
se tale ordinamento esiste, false altrimenti. Se il file “numeri.txt”
contiene almeno un valore che ne altera l’ordinamento, la funzione crea un
nuovo file “numeri_ord.txt” dove
vengono copiati i valori di “numeri.txt”
tranne quei valori che ne alterano l’ordinamento.
2. Sia data una lista semplice l
a valori interi non vuota. Si scriva la funzione elimina_ripetuti(l) che
riceve in ingresso la lista l e la modifica eliminando tutti gli
elementi ripetuti (al termine della funzione l conterrà elementi tutti
diversi fra loro).
3. Siano
date due matrici M1 e M2 a valori interi di
dimensione NxN. Si scriva una funzione booleana numero_nulli
che restituisce true se il numero di valori nulli in M1
è uguale a quello di M2, false altrimenti.
4. Dati i numeri decimali A=211, B=-100 e C=-122, si determini il minimo numero di bit necessari per rappresentare contemporaneamente i suddetti numeri in complemento a 2 e se ne dia la rappresentazione. Utilizzando poi lo stesso numero di bit, si esegua l’operazione D=B-C e si discuta se il risultato ottenuto è o no significativo.
Punteggio
Es.1 |
Es.2 |
Es.3 |
Es.4 |
10 |
11 |
9 |
3 |
1.
#include
<fstream.h>
boolean
verifica()
{
fstream f,g;
int x,y;
boolean n_c=false ;
f.open(“numeri.txt”, ios::in);
f>>x;
while(f>>y && !n_c)
if(x>=y)
n_c =true;
else
x=y;
f.close();
if(!n_c) return true;
f.open(“numeri.txt”, ios::in);
g.open(“numeri_ord.txt, ios::out);
f>>x;
g<<x<<”\n”;
while(f>>y)
if(x<y) { g<<y<<”\n”;
x=y ;
}
f.close() ;
g.close() ;
}
2.
void elimina_ripetuti(elem *l) {
elem
aux, aux1, aux2;
aux=aux1=l ;
while(aux!=0)
{
aux2=aux1->next ;
while (aux2 !=0)
{
if(aux2->info ==
aux->info)
{
aux1->next=aux2->next ;
delete
aux2 ;
aux2=aux1->next ;
}
else
{
aux1=aux1->next ;
aux2=aux2->next ;
}
}
aux=aux->next ;
aux1=aux ;
}
}
3.
const
int N=15 ;
boolean numero_nulli (int
M1[N][N], int M2[N][N])
{
int
cont1=0;
int
cont2=0;
for(int
i=0; i<N; i++)
for(int j=0; j<N; j++)
{
if(M1[i][j]!==0)
cont1++;
if(M2[i][j]!==0)
cont2++;
}
if(cont1==cont2)
return true;
return
false;
}