ESAME DI FONDAMENTI DI INFORMATICA - SIMONCINI – 15/2/2001 - C++
1.
I
posti di un aereo sono disposti su N file
ciascuna fila è composta da 4 posti, due al finestrino e due sul corridoio.
Inoltre le prime M (M<N) file sono riservate ai
passeggeri non fumatori mentre le restanti sono riservate ai passeggeri
fumatori. Un tale aereo è
rappresentabile mediante una matrice A di
dimensione Nx4 a valori booleani.
L’elemento A[i][j] vale T se il j-esimo posto della i-esima fila è
prenotato, vale F se è libero. Si definisca
una classe aereo, ogni oggetto della quale
rappresenta un aereo. Sugli oggetti di tale classe è possibile effettuare le
seguenti operazioni:
·
Aereo():
costruttore che inizializza un aereo con tutti i posti liberi;
·
ok=prenota(F,
posizione):
effettua una prenotazione di un posto
di categoria F (fumatori o non fumatori) e
di posizione posizione (finestrino/corridoio);
·
disdici(i,j): libera il posto j-esimo
della fila i-esima;
·
Situazione(): stampa il numero di posti
per non fumatori e per fumatori ancora
disponibili.
2.
Sia dato un
file “valori.dat” non vuoto contenente numeri interi
non consecutivi ordinati in senso crescente. Scrivere un funzione riempi() che trasforma il file “valori.dat” in modo tale che contenga l’intera
sequenza di numeri consecutivi a partire dal valore più piccolo fino al
l’ultimo valore del file stesso compreso. |
Esempio:
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
i.
115
ii.
143 7 9
13 15 16 21 |
3.
Sia data una lista
semplice a valori interi, scrivere una funzione ok=elimina_coda(l, n) che
riceve in ingresso il puntatore l alla lista e un
valore intero n. La funzione cerca nella lista l’elemento con il campo
informativo uguale a n ed elimina tutti gli elementi che seguono tale elemento. Se
un tale elemento esiste la funzione restituisce T altrimenti F.
4.
Dati i numeri
decimali A=67, B=-65 e C=125, 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.
10 |
10 |
10 |
3 |
1.
//aereo.h
const int N=50;
const int M=40;
enum bool {F, T};
enum fumatori {S, N};
enum posizione {W, C};
class aereo {
int A[N][4];
public:
bool prenota (fumatori s, posizione p);
void disdici (int I, int j);
void situazione();
aereo();
}
//aereo.cc
# include “aereo.h”
#include <iostream.h>
aereo::aereo()
{
int i,j;
for (i=0; i<N; i++)
for(j=0; j<4; j++)
A[i][j]=0;
}
bool aereo:: prenota
(fumatori s, posizione p) {
int i, finer;
if(s==S) {i=0; finer=M;}
else {i=M; finer=N;}
for (;i<finer; i++)
for(int j=0; j<4;
j++)
{
if
((A[i][j]==F)&&(p==W)&&(j%3==0) ||
(A[i][j]==F)&&(p==C)&&(j%3!=0))
{
A[i][j]=T;
return
T;
}
}
return F;
}
void aereo::disdici(int i,
int j)
{
if ((i<0) || (i>N-1) || (j<0) || (j>3))
{
cout
<< “indici posto sbagliati\n”;
return;
}
A[i][j]==F;
}
void aereo::situazione() {
int i,j;
int conta=0;
for (i=0; i<M, i++)
for(j=0; j<4; j++)
if (A[i][j]==0) conta++;
cout<<”numero posti
non-fumatori liberi: “<<conta “\n”;
conta=0;
for (i=M; i<N, i++)
for(j=0; j<4; j++)
if (A[i][j]==0) conta++;
cout<<”numero posti
fumatori liberi: “<<conta “\n”;
}
2.
#include <fstream.h>
void riempi() {
fstream f;
f.open(“valori.dat”,
ios::in);
int primo, ultimo, j;
f>>primo;
ultimo=primo;
while(f>>ultimo);
f.close();
f.open(“valori.dat “, ios::out);
for (j=primo; j<=ultimo;
j++)
f<<j;
f.close();
}
3.
struct elem {
int info;
elem *next;
}
enum bool {F, T};
bool elimina_coda (elem *l, int n) {
elem
*aux, aux2;
if (l==0) return F;
while((l!=0)&&(l->info!=n)
l=l->next;
if (l==0) return F;
aux=l->next;
while(aux !=0)
{
aux2=aux->next ;
delete aux ;
aux=aux2 ;
}
return
T ;
}
4.
bit
necessari= 8
A
=> 01000011
B
=> 10111111
C
=> 01111101
D rappresentabile su 9 bit