ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 30/05/2002 - C++

 

1.     Un hotel dispone di M piani e a ciascun piano vi sono N (N<=10) camere. Un tale hotel può essere rappresentato mediante una matrice H di dimensione  MxN a valori booleani, dove l’elemento H(i,j) vale T se la j-esima camera del i-esimo piano è occupata, F se è libera. Si definisca una classe hotel assumendo che le possibili operazioni siano le seguenti:

 


2.    Siano dati due file matricole1.txt e matricole2.txt ciascuno contenente un insieme di numeri di matricola. Si scriva una funzione ok=confronta() che confronta i due file e che restituisce T se essi contengono esattamente gli stessi numeri di matricola (non importa la loro posizione nel file), F altrimenti.

 

3.    Dato un file non vuoto elenco_numeri.dat che contiene un insieme di interi, si scriva una funzione num_in_lista(l) che riceve in ingresso il puntatore l ad una lista. Al termine della funzione l punterà ad una lista circolare ciascun elemento della quale contiene un numero letto dal file.

 

4.   Dati i numeri decimali A=89, B=-65 e C=132, si determini il minimo numero di bit necessari 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-B e si dica se il risultato è o no significativo

 

Punteggio:

Es.1

Es.2

Es.3

Es.4

10

10

10

3

 

 

1.

// hotel.h

const int N=8;

const int M=16;

class hotel {

          bool H[M][N];

public:

          hotel() ;

          bool prenota(int p) ;

          void libera (int id_camera);

          int piani_al_completo ();

}

 

// hotel.cc

#include “hotel.h”

 

hotel::hotel()

{         for (int i=0; i<M; i++)

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

            H[i][j]=F;}

 

bool hotel::prenota(int p) {

          if(p>=M)  {           cout<< “valore errato\n”;

                                   return F; }

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

             if(H[p][i]==F)

                        {    h[p][i]=T;

                            return T; }

          return F; }

 

void hotel::libera (int id_camera)

{         int piano;

          int num_camera;

          num_camera = id_camera%10;

          piano = id_camera/10;

          H[piano][num_camera]=F;

}

 

int hotel::piani_al_completo()

{         int cont=0;

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

            {

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

                        if(H[i][j]==F) V=F;

            if(V==T) cont++;

            V=T;     }

          return cont; }

 

2.

#include <fstream.h>

 

bool contronta( ) {

fstream f1, f2;

int m1, m2;

int cont2=0;

int cont1=0;

 

bool V2;

 

f1.open(“matricole1.txt”, ios::in);

f2.open(“matricole2.txt”, ios::in);

 

while(f2>> m2)

          cont2++;

f2.close();

 

while(f1>>m1)

{

          cont1++:

          f2.open(“matricole2.txt”, ios::in);

          V2=F;

          while (f2>>m2)

          {

            if (m1 == m2) { 

                                   V2=T;

                                   break;   }

          }

          f2.close();

          if(!V2) return F;

}

f1.close();

f2.close();

if(cont1==cont2) return T;

return F; }

 

 

3.

#include <fstream.h>

 

void num_in_lista(elem *& elem lista)

{

fstream leggi ;

int numero ;

elem * aux;

elem *ultimo;

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

leggi>>numero;

lista=new elem;

lista->info=numero;

lista->next=0;

ultimo=lista;

while(leggi>>numero)

{

          aux=new elem,

          aux->info=numero,

          aux->next=0;

          ultimo->next=aux;

          ultimo=aux;

}

ultimo->next=lista;

}