ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 13/01/2004 - C++

 

 

1.    Sia dato un file città.dat contenente, in ogni riga, una stringa di lunghezza massima 36 caratteri che contiene il nome di una città e un valore intero che ne rappresenta il numero di abitanti. Si scriva una funzione estrai() che crea un nuovo file chiamato città2.dat che contiene il nome della città più popolosa e il nome di quella meno popolosa fra quelle contenute nel file città.dat.  

2.    Si scriva una funzione rendi_pari(l) che riceve in ingresso il puntatore ad una lista semplice a valori di tipo carattere l. La funzione conta il numero n di elementi di cui è composta l e, se n è dispari, allora viene eliminato l’ultimo elemento di l, altrimenti l rimane invariata.   

3.    Si scriva una funzione ok = stringhe(s1, s2, s3) che riceve in ingresso tre stringhe s1, s2 e s3 di lunghezza qualsiasi e restituisce true se ogni carattere di s3 é presente in s1 o in s2, false altrimenti.     

4.    Dati i numeri decimali A=107, B=49 e C=-66, 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>

#include <string.h>

 

void ordina() {

int n, n_g, n_p;

 

fstream leggi, scrivi;

char città[37], città_g[37], città_p[37];

 

leggi.open(“città.dat”, ios::in);

scrivi.open(“città2.dat”, ios::out);

if (leggi>>città>>n)

{           n_g=n;

n_p=n;

strcpy(città_g, città);

strcpy(città_p, città);

}

else return;

 

while(leggi>>città>>n)

{

if(n>n_g)  {

n_g=n;

strcpy(città_g, città);

}

if(n<n_p) {

n_p=n;

strcpy(città_p, città);

}

}

scrivi<<città_g<<”\n”<<città_p;

leggi.close( );

scrivi.close();

}

 

2.

void rendi_pari(elem *&l)

{

elem *aux, *aux1;

if(l==0) return;

if(l->next==0)

{

            delete l;

            l=0;

return;

}

int n=0;

aux=l;

while(aux != 0)

{

            n++ ;

            aux=aux->next ;

}

 

if(n%2 !=0)

{

for(aux = l; aux->next != 0; aux->aux->next)

            aux1=aux ;

 

 

aux1->next=0 ;

delete aux ;

}

}

 

3.

boolean controlla_3_stringhe (char *s1, char *s2, char *s3)

{

            for(int i=0; s3[i]!=’\0’; i++)

            {

                        for(int j=0; s1[j]!=’\0’; j++)

                        {

                                   if(s1[j]==s3[i])

                                               break;

                        }

                        if (s1[j]==’\0’)

                        {

                                   for(int k=0; s2[k]!=’\0’; k++)

                                   {

                                               if(s2[k]==s3[i])

                                               break;

                                   }                                 

                                   if(s2[k]==’\0’)

                                   return false;

                        }

            }

            return true;

}