ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 13/01/2005 - C++

 

 

1.        Un parcheggio per automobili è rappresentabile mediante un array P a valori binari dove ciascun elemento dell’array rappresenta un posto auto nel parcheggio e il corrispondente valore indica se il posto auto è libero oppure no.       
Si definisca una classe Parcheggio assumendo che le possibli operazioni siano:

-            Parcheggio(n): costruttore che crea un parcheggio con n (n=100 per default) posti auto inizialmente liberi.

-            assegna(i): se il posto auto corrispondente all’indice i è libero, lo rende occupato restituendo true, altrimenti restituisce false.

-            libera(i): rende libero il posto auto corrispondente all’indice i

-            numero_liberi(): restituisce il numero dei posti auto liberi nel parcheggio;

-            ~Parcheggio(): distruttore.           

2.      Dato un file esterno numeri.dat non vuoto, si scriva una funzione crea_SM() che calcola la media aritmetica m dei valori contenuti in numeri.dat e crea un nuovo file numeri_SM.dat composto dai valori di numeri.dat superiori a m.     

3.      Data una lista semplice circolare a valori interi l, si scriva una funzione inserisci(l) che riceve in ingresso la lista l e esegue le seguenti azioni:
- conta il numero (n) di elementi contenuti in l;       
- se non esiste alcun elemento in l con campo informativo uguale a n, ne crea uno e lo inserisce in testa.       

4.      Dati i numeri decimali A=78, B=99 e C=-30, 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

9

11

3

 


1.

//Parcheggio.h

 

class Parcheggio {

            int *P;

            int dim ;

public:

            Parcheggio(int n);

            Parcheggio();

            boolean assegna(int i);

            void libera(int i);

            int numero_liberi();

            ~Parcheggio();

}

 

//Parcheggio.cpp

 

#include “Parcheggio.h”

 

Parcheggio::Parcheggio(int n)

{           dim=n;

P=new int[n];

            for(int h=0; h<n; h++)

            P[h]=0; }

 

Parcheggio::Parcheggio()

{           dim=100;         

P=new int[100];

            for(int h=0; h<100; h++)

            P[h]=0;}

 

boolean Parcheggio::assegna(int i) {

            if(P[i] ==0)        {           P[i]=1;

                                               return true; }

            }

            return false;

}

 

void Parcheggio::libera(int i)

{ P[i]=0; }

 

int Parcheggio::numero_vuoti() {

int cont=0;

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

            if(P[j]==0) cont++;

return cont;

}

 

Parcheggio:: ~Parcheggio()

{ delete [] P;}

 

 

2.

 

#include <fstream.h>

void crea_SM() {

fstream f, g;

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

int num, m;

int cont=0;

n=0;

while(f>>n)

{           cont+=n;

            num++;

}

m=cont/num;

f.close(),

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

g.open(„numeri_SM.dat“, ios::out);

 

while(f>>num)

{           if(num>m)         g<<num<<”\n”;

}

f.close();

g.close();

}

 

 

3.

 

void inserisci (elem *&l) {

elem *aux, *aux1;

if (l==0) {

            aux=new elem;

            aux->info=0;

            aux->next=aux;

            l=aux;

return ; }

 

int cont=1;

for(aux=l; aux->next==l; aux=aux->next)

            cont++;

aux1=l;

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

{

            if(aux1->info==cont) return;

            aux1=aux1->next;

}

 

aux1=new elem;

aux1->info=cont;

aux1->next=l;

aux->next=aux1;

l=aux1;

}