ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI 13/02/2003 - C++
1. La stagione di prosa di un teatro è composta da M spettacoli. Per ogni spettacolo è possibile acquistate biglietti negli N ordini di posto di cui il teatro dispone. Ciascun ordine di posto ha la capienza di Z posti. La biglietteria di un tale teatro può essere rappresentata mediante un matrice B di dimensione NxM a valori interi, il cui generico elemento B[i][j] rappresenta la quantità di biglietti dellordine di posto i ancora disponibili per la vendita per lo spettacolo j.
Si definisca una classe Botteghino che rappresenta una biglietteria sulla quale sono possibili le seguenti operazioni:
· Botteghino(): costruttore che inizializza la matrice in modo tale che nessun biglietto sia stato ancora venduto
· Vendita(i, j): effettua la vendita di un biglietto di ordine di posto i per lo spettacolo j
· ok=abbonamento(i): vende un abbonamento per tutti gli spettacoli per un ordine di posto i (effettua cioè una vendita di un biglietto di ordine di posto i per ciascuno spettacolo della stagione). Se è possibile vendere labbonamento la funzione restituisce T, restituisce F altrimenti.
·
n=spettacoli_esauriti():
restituisce il numero degli spettacoli che hanno tutti gli ordini di posto
esauriti.
·
2. Sia dato un file numeri.txt composto da almeno N righe ciascuna delle quali contiene N valori interi. Si scriva una funzione costruisci(A) che riceve in ingresso un array di interi A e lo modifica in modo tale che il valore del generico elemento A[i] sia uguale all(i+1)-esimo elemento della (i+1)-esima riga di numeri.txt.
3.
Sia data una lista doppia a valori interi l. Sia scriva una funzione dealloca(l)
che dealloca tutti gli elementi di l in ordine decrescente,
partendo cioè da quello con campo informativo maggiore fino a quello con campo
informativo minore.
4. Dati i numeri decimali A=111, B=43 e C=-76, 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 loperazione 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.
//botteghino.h
const int N=5;
const int M=12;
class botteghino {
int B[N][M];
public:
botteghino();
void vendita(int i, int j);
bool abbonamento(int i);
int spettacoli_esauriti();
}
//botteghino.cc
#include botteghino.h
#include <iostream.h>
botteghino::botteghino()
{ for(int i=0; i<N;
i++)
for(int
j=0; j<M; j++)
B[i][j]=Z;
}
void botteghino::vendita(int
i, int j)
{ if(B[i][j]==0) cout<<biglietto non disponibilie\n;
else B[i][j]--;
}
bool
botteghino::abbonamento(int i)
{ for(int k=0; k<M;
k++)
if(B[i][k]==0) { cout<<no abbonamento\n;
return
F; }
for(intk=0; k<M;
k++)
B[i][k]--;
}
int
botteghino::spettacoli_esauriti() {
int cont=0;
bool esaurito=T;
for(int j=0; j<M; j++)
{ for(int i=0; i<N;
i++)
{ if (B[i][j]!=0) esaurito=F;}
if (esaurito) cont++;
else esaurito=T;
} }
2.
#include <fstream.h>
const int N=20;
void costruisci(int A[N])
{
fstream f;
f.open(numeri.txt, ios::in);
int a_vuoto;
for(int i=0; i<N, i++)
for(int j=0; j<N;
j++)
{
if(i==j) f>>A[j];
else
f>>a_vuoto;
}
f.close();
}
3.
void dealloca(elem *&l)
{
if (l==0) return;
int pg;
elem *aux, *aux1;
while(l!=0)
{ aux=l;
pg=l->info;
// ricerca del massimo
while(aux!=0)
{ if(aux->info
> pg)
{ pg=aux->info;
aux1=aux;
aux=aux->next;
} }
//deallocazione dellelemento trovato
if(aux1==l) {
l=aux1->next;
l->prec=0;
delete aux1; }
else if(aux1->next ==0)
{ aux1->prec->next =0;
delete aux1;
}
else {
aux1->next->prec=aux1->prec;
aux1->prec->next=aux1->next;
delete aux1;
}
}}