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 dell’ordine 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 l’abbonamento 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 l’operazione 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 dell’elemento 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;

                        }

}}