ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 24/06/2004 - C++
1. Un supermarket ha n casse che sono rappresentabili mediante un
vettore C di dimensione n a valori interi. Il valore dell’elemento i-esimo di C indica quanti clienti sono in coda alla cassa corrispondente. Si
definisca una classe Supermarket ogni oggetto della quale rappresenta le casse
di un supermarket. Sugli oggetti di tale classe č possibile effettuare le
seguenti operazioni:
-
Supermarket(): costruttore che
inizializza il supermarket con tutte le casse senza coda (cioč senza alcun
cliente in coda);
-
in_coda(i): il numero di clienti in
coda alla cassa corrispondente all’indice i viene incrementato di 1;
-
out_coda(i): il numero di clienti in
coda alla cassa corrispondente all’indice i viene decrementato di 1;
-
x=migliore(): restituisce l’indice
corrispondente alla cassa che ha il minor numero di clienti in coda (se le
casse con il minor numero di clienti in coda sono piů di una, si restituisce
quella corrispondente all’indice maggiore).
2. Un file chiamato dati.txt contiene per ciascuna riga
un valore booleano, una stringa di lunghezza massima 24 caratteri e un valore
intero. Scrivere una funzione ok =
stampa_stringhe(n)
che stampa sul monitor le stringhe del file che hanno sulla stessa riga il
valore booleano uguale a F e il valore intero minore di
n. Se almeno una stringa
viene trovata, la funzione restituisce T,
altrimenti restituisce F.
3.
Sia
data una lista semplice l a valori interi. Si scriva
una funzione n_consecutivi(l) che stampa sul monitor il numero di elementi di l il cui campo info č maggiore del campo info dell’elemento precedente e
minore del campo info dell’elemento successivo.
4. Dati i numeri decimali A=82, B=-39 e C=131, 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-A e si dica se il risultato ottenuto č o no
significativo.
Punteggio:
Es.1 |
Es.2 |
Es.3 |
Es.4 |
10 |
10 |
10 |
3 |
//Supermarket.h
const int
n=15;
class
Supermarket {
int C[n];
public:
Supermarket ();
in_coda(i) { C[i]++;};
out_coda(i)
{ if(C[i]>0) C[i]--;
else cout<<”Cassa senza coda\n”;};
int migliore ();
} ;
//Supermarket.cc
#include ‘Supermarket.h’
Supermarket ::Supermarket()
{ for (int
i=0; i<n; i++)
C[i]=0;
}
int
migliore () {
int nc=C[0];
for (int
i=1; i<n; i++)
{ if(C[i]<=nc)
{
nc= C[i];
i_m=i;
}
}
return i_m;
}
2.
#include <fstream.h>
bool stampa_stringhe(int n)
{
fstream f;
int num;
bool vb;
char stringa[25];
bool controllo=F;
f.open (“elenco.dat”,
ios::in);
while(f>>vb>>stringa>>num)
{
if (!vb && (num<n))
{
cout<<
stringa <<”\n”;
controllo
= T;}
}
f.close();
return
controllo;
}
3.
#include
<iostream.h>
void n_consecutivi(elem *l)
{
elem *aux1,
*aux2, *aux3 ;
int cont=0 ;
if(l==0)
return;
aux1=l ;
if(aux1->next==0)
return;
aux2=aux1->next ;
aux3=aux2->next ;
while(aux3 !=0)
{
if(aux1->info<aux2->info<aux3->info)
cont++ ;
aux1=aux2 ;
aux2=aux3 ;
aux3=aux3->next ;
}
cout<<
cont ;
}