ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 18/09/2003 - C++

 

1.  

Sia dato il file numeri.txt che contiene un insieme di numeri naturali ordinati in senso crescente (non necessariamente consecutivi). Si scriva una funzione trasforma() che modifica il file in modo che alla fine esso contenga la serie completa di tutti i numeri consecutivi compresi fra il valore più basso e il valore più alto contenuti nel file originale ordinati in senso crescente

 


2.  Siano date due liste semplici non vuote a valori interi l1 e l2, sia l1 che l2 non contengono elementi ripetuti. Si scriva una funzione unisci(l1, l2) che modifica la lista l1 in modo tale che alla fine contenga anche gli elementi di l2. La lista l1 non dovrà alla fine contenere elementi ripetuti.

3.  Siano date due stringhe s1 e s2 di lunghezza qualsiasi e senza caratteri ripetuti al loro interno. Si scriva una funzione ok=diverse(s1, s2) che restituisce true se s1 e s2 hanno un numero di caratteri in comune non superiore a 5, false altrimenti.

4.  Dati i numeri decimali A=98, B=-70 e C=118, 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=A-B 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>

 

void trasforma()

{

int min;

int max=0;

fstream f;

f.open(“numeri.txt, ios::in);

 

if(f>>min);

else return;

 

while(f>>max)

;

f.close();

f.open(“numeri.txt”, ios::out);

 

if(max!=0)

{

for (int i=min; i<=max; i++)

f<<i<<” “;

}

else

            f<<min;

f.close();

}

 

 

2.

void unisci(elem*& l1, elem *l2)

{

elem *aux1, *aux2, *aux3;

 

aux1=l1;

aux2=l2;

boolean doppione = false

 

for(;aux2!=0; aux2=aux2->next)

{

aux1=l1;

while(aux1!=0 && doppione==false)

{

if(aux1->info ==aux2->info) doppione=true;

aux1=aux1->next;

}

if(!doppione)      //inserisci aux2 in l1

{

aux3 = new elem;

aux3->info = aux2->info;

aux3->next= aux1 ;

l1=aux3 ;

}

else

doppione=false;

}

}

 

 

3.

boolean diverse(char *s1, char *s2)

{

int cont=0;

 

for(int i=0; s1[i]!=0; i++)

{

            for(int j=0; s2[j]; j++)

            {

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

                        {

            cont++;

if(cont >5)

return false;

                                   break;

                        }

            }

}

return true;

}