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;

}