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;
}