ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 16/09/2005 - C++
1.
Sia
dato il file città.dat
che contiene in
ciascuna riga un nome di una città (stringa di al più 24 caratteri) e il
relativo numero di abitanti. Si scriva una funzione estrai() che calcola la media
aritmetica M_A degli abitanti delle città
contenute nel file e crea un nuovo file città_piccole.dat che contiene le sole città presenti in città.dat il cui numero di abitanti è
minore di M_A.
2.
Sia
data una lista semplice l a valori interi non vuota.
Si scriva una funzione modifica_lista(l) che riceve in ingresso la
lista l e la rende circolare se il campo informativo della testa è uguale al
campo informativo dell’ultimo elemento. Altrimenti, l’intera lista viene
deallocata
3.
Dati
due array A1 e A2 a valori interi di dimensione N1 e N2 rispettivamente, si scriva una funzione booleana confronta(A1, A2) che riceve in ingresso gli array A1 e A2 e restituisce true se tutti gli elementi di A1 sono
più piccoli di quelli di A2, false altrimenti.
4. Dati i numeri decimali A=-99, B=127 e C=-128, 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 |
10 |
10 |
3 |
1.
#include
<fstream.h>
const
int N=25 ;
void
estrai ()
{ int n, m;
int cont=0;
int totale =0 ;
char C[N];
fstream f, g ;
f.open(‘citta.dat’, ios::in);
while(f>>C>>n)
{ totale+=n;
cont++;
}
if(cont==0) return;
m=totale/cont;
f.close() ;
f.open(‘citta.dat’, ios::in);
g.open(‘città_piccole.dat’,
ios ::out) ;
while(f>>C>>n)
if(n>=m);
else
g<<C<<n<<”\n”;
f.close();
g.close();
}
2.
void modifica_lista (elem
*&l)
{
elem *aux, aux1;
aux=l ;
aux1=aux ;
while(aux1->next !=0)
aux1=aux1->next;
if(aux->info == aux1->info)
aux1->next = l ;
else { while(aux !=0)
{
aux1=aux->next;
delete aux ;
aux=aux1 ;
}
}
3.
const
int N1=10 ;
const
int N2=13 ;
boolean
confronta(int A1[N1], int A2[N2]) {
int max;
max=A1[0] ;
for(int i=1 ; i<N1 ; i++)
{ if(A1[i]>max)
max=A1[i];
}
for(i=0; i<N2; i++)
if(A2[i]<=max) return false;
return true;
}