ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 15/07/2004 - C++
1. Un casello autostradale è rappresentabile mediante un array C a valori interi dove ciascun elemento dell’array rappresenta un’uscita aperta del casello e il valore relativo il numero di automobili in attesa su quell’uscita.
Si definisca una classe Casello assumendo che le possibili operazioni siano:
- Casello(n): costruttore che crea un casello con n (n=15 per default) uscite aperte tutte prive di automobili in coda;
- Auto_in_coda(nc): aggiunge un’automobile in attesa all’uscita nc
- ok=Auto_in_uscita(nc): se il numero di persone in attesa all’uscita nc non è nullo viene decrementato il valore relativo restituendo true, la funzione restituisce false altrimenti;
- ~Casello: distruttore.
2. Siano dati due file F1.dat
a F2.dat non vuoti contenenti ciascuno un elenco di numeri interi.
Si scriva una funzione booleana incluso() che restituisce true
se tutti gli elementi di F1.dat sono contenuti in F2.dat,
false altrimenti.
3. Sia
data una lista semplice circolare a valori interi positivi l
non vuota. Si scriva una funzione elimina_n(l) che legge il
campo informativo n della testa della lista e dealloca
l’elemento che si incontra dopo aver scorso l di un numero di elementi
pari a n.
4. Dati i numeri decimali A=103, B=-65 e C=81, 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 dica se il risultato ottenuto è o no significativo.
Punteggio:
Es.1
|
Es.2 |
Es.3 |
Es.4 |
10 |
10 |
10 |
3 |
//Casello.h
class
Casello {
int *C;
public:
Casello(int n);
Casello();
void Auto_in_coda (int nc);
boolean Auto_in_uscita (int nc);
~Casello(); }
//Casello.cc
#include
‘Casello.h’
Casello::Casello(int n) {
C=new
int[n];
for (int
h=0; h<n; h++)
C[h]=0; }
Casello::Casello()
{
C=new
int[15];
for (int
h=0; h<15; h++)
C[h]=0; }
void Casello::Auto_in_coda(int nc)
{
C[nc]++; }
boolean Casello::Auto_in_uscita (int nc)
{
if(C[nc]==0)
return false;
C[nc]--;
return
true; }
Caselo::~Casello()
{ delete [] C; }
2.
#include <fstream.h>
bool
incluso ()
{
fstream
f, g;
boolean
trovato=false;
int num1,
num2;
f.open
(“F1.dat”, ios::in);
while(f>>
num1)
{
trovato=false;
g.open(“F2.dat”, ios::in);
while(g<< num2)
{
if(num1==num2)
{
trovato=true;
break;
}
}
if(!trovato) return false;
g.close();
}
f.close();
return
true;
}
3.
void
elimina_n(elem *& l)
{
elem *aux1,
*aux2;
int n;
if(l->next==l) { delete
l;
l=0;
return;
}
n=l->info;
aux2=l->next ;
aux1=l ;
for(int
i=1 ; i<n ; i++)
{
aux1=aux2;
aux2=aux2->next ;
}
if(aux2 !=l)
{
aux1->next=aux2->next ;
delete
aux2,
}
else
{
aux1->next=aux2->next;
delete
aux2;
l=aux1->next ;
}
}