ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 31/01/2002 - C++

 

1.     Una banca dispone di N sportelli ed ha un indicatore che segnala se uno sportello è libero, occupato oppure chiuso.    Tale indicatore può essere rappresentato mediante un array di caratteri dove l’elemento i-esimo vale C se l’i-esimo sportello è chiuso, L se è aperto e libero, B se è aperto e occupato. Si definisca una classe indicatore assumendo che le possibili operazioni siano le seguenti:

 


2.    Sia dato un file numeri.txt contenente almeno N numeri interi. Si scriva una funzione ok=controlla(v) che riceve in ingresso un array v di N interi e che restituisce T se nessun elemento di v è contenuto in numeri.txt, F altrimenti.

 

3.    Siano date due liste semplici a valori interi l1 e l2 non vuote ordinate in senso crescente e che non contengono al loro interno elementi ripetuti. Si scriva una funzione l3=unisci(l1, l2) che riceve in ingresso le due liste. La funzione costruisce una nuova lista l3 anch’essa ordinata in senso crescente composta dagli elementi di l1 e l2 e la restituisce in uscita. Si consideri che gli elementi di l1 e l2 sono diversi fra loro.

 

4.   Dati i numeri decimali A=87, B=-63 e C=121, si determini il minimo numero di bit necessario per rappresentare contemporaneamente i suddetti numeri in complemento a due e se ne dia la rappresentazione. Utilizzando poi lo stesso numero di bit, si esegua l’operazione D=A+c e si dica se il risultato è o no significativo

 

Punteggio:

Es.1

Es.2

Es.3

Es.4

11

8

11

3

 

 

 

 

// indicatore.h

enum ind {C, B, L};

const int N=20;

class indicatore {

 

          ind *D;

public:

          indicatore() ;

          bool liberato(int i) ;

          bool occupato ();

          int conteggio ()

          ~indicatore() {dolete [ ] D;};

}

 

// indicatore.cc

#include “indicatore.h”

 

indicatore::indicatore()

{ D = new int[N];

          for (int i=0; i<N; i++)

            D[I]=’C’;

}

 

bool indicatore::liberato(int i) {

          if (D[i]==’B’)||(D[I]==’C’))

                        {           D[I]==’L’;

                                   return T;  }

          return F;

}

 

bool indicatore::occupato()

{

          for(int i=0; i<N; i++)

          if (D[i]==’L’)

          { D[i] = ‘B’;

            return T; }

          return F;

}

 

int indicatore::conteggio()

{

          int n=0;

          for (int i=0; i<N;i++)

          if (D[I]!=’C’)

            n++;

          return n;

}

 

 

 


2.

#include <fstream.h>

 

const int N=100;

 

bool controlla(int v[N]) {

 

fstream f;

 

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

 

int n;

 

while(f>>n) {

 

for(int i=0; i<N ; i++)

           if (v[i] == n) {     return F;

                                   f.close();

                                   }

}

f.close();

return T;

}

 

3.

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

{

elem *l3;

elem *aux;

elem * aux1, *aux2; *aux3;

aux1=l1 ;

aux2=l2 ;

                                               // creazione del primo elemento di l3

aux3=new elem ;

aux3 ->next =0;

if (aux1->info < aux2->info)

{        aux3->info = aux1->info ;

          l3 = aux3 ;

          aux1=aux1->next ;

}

else

{        aux3->info = aux2->info ;

          l3 = aux3 ;

          aux2=aux2->next ;

}

                                                           //creazione del resto di l3

while(aux1 !=0 && aux2 !=0)

{

aux3=new elem ;

aux3 ->next =0;

                                               //inserimento in coda di l3

aux=l3 ;

while(aux->next = 0)

          aux=aux->next ;

aux->next=aux3 ;

 

if (aux1->info < aux2->info)

{        aux3->info = aux1->info ;

          aux1=aux1->next ;

}

else

{        aux3->info = aux2->info ;

          aux2=aux2->next ;

}

}

                                              

if(aux1 !=0)      {

          aux3=new elem ;

          aux3 ->next =0;

          aux3->info = aux1->info;                                  //inserimento in coda di l3

          aux=l3 ;

          while(aux->next = 0)

            aux=aux->next ;

          aux->next=aux3 ;

          }

if(aux2 !=0)      {

          aux3=new elem ;

          aux3 ->next =0;

          aux3->info = aux2->info;                                  //inserimento in coda di l3

          aux=l3 ;

          while(aux->next = 0)

            aux=aux->next ;

          aux->next=aux3 ;

          }

return l3 ;

}